Download: Sysadmin_sysvinit
Transkrypt
Download: Sysadmin_sysvinit
Porady administratora: Sys V Init SYSADMIN Porady administratora: proces Sys V Init Gotowi do startu Standardowo wyposażony system Linux uruchamia podczas startu wiele programów-narzędzi konfigurujących system i inicjujących usługi, które będą pracowały w tle. Init jest nadrzędnym procesem tych wszystkich programów. W każdej z dystrybucji Linuksa jego struktura Lada Fromanek, visipix.com wygląda bardzo podobnie. J eżeli zaraz po uruchomienia komputera w systemie Unix wpiszemy polecenie ps ax, zobaczymy ogromną ilość uruchomionych programów. Cudowny i zwariowany świat procesów jądra, demonów, których nazwy kończą się zwykle na literę d, procesów getty dla konsol wirtualnych oraz xdm, gdm czy kdm. Zastanawiające, kto uruchomił tą plagę procesów na naszym komputerze oraz kto je nadzoruje i umożliwia wspólne działanie? Powinniśmy zapytać raczej „co?”, niż „kto” – podczas startu systemu jądro uruchamia tylko jeden program, który w rezultacie uruchamia cały system. Program ten trafnie nazwano init. Zajmuje się on uruchamianiem pozostałych programów, poza jednym czy dwoma wyjątkami. Administrator systemu lub producent naszej dystrybucji Linuksa (jeżeli pozosta- wimy ustawienia domyślne) decyduje o tym, które programy powinien uruchomić proces init, gdyż to właśnie on oferuje bogactwo funkcji konfiguracyjnych. Jeden za wszystkich Tradycyjnie Linux korzysta z dwóch różnych odmian procesu init. Pierwszy z nich występuje pod nazwą simpleinit i, jak sama nazwa wskazuje (ang. simple – prosty), jest bardzo prosty w użyciu. Skrypt uruchamia wszystkie programy konieczne do prawidłowego działania systemu. W razie potrzeby może on przed uruchomieniem wymaganych demonów przetwarzać, a nawet tworzyć od podstaw pliki konfiguracyjne. Pomimo przekonującej prostoty i elegancji, w przypadku większości dystrybucji Linuksa skrypt simpleinit nakłada zbyt duże ograniczenia. Przechowuje on cały zestaw informacji o stanie systemu w pojedynczym pliku. Jest to nie lada utrudnienie dla obecnych „pakietowych” dystrybucji. Za każdym razem, kiedy użytkownik instaluje lub usuwa pakiet oprogramowania, menedżer pakietów musi edytować zapisy w centralnym pliku skryptu. Podczas tych zmian należy przestrzegać zmian dokonanych przez użytkownika – jest to więc czynność podatna na potencjalne popełnienie błędu. Z tego powodu większość dsystrybucji zdecydowała się na wykorzystanie modelu Sys V init. Proces ten modelowany jest na systemie Unix System V. Oferuje on elastyczną hierarchię konfiguracji plików skryptowych wraz z łączami symbolicznymi. Umożliwia to skryptowi init odwzorowywanie poszczególnych stanów systemu, z uwzględnieniem oprogramowania instalowanego przez użytkownika i trybów działania systemu. www.linux-magazine.pl Lipiec 2004 73 SYSADMIN Porady administratora: Sys V Init Mali pomocnicy rwania jego pracy. Polecenie wait wykorzykonfiguracyjnych. Takie rozwiązanie spostuje się zwykle do inicjalizacji systemu, tykane jest np. w plikach passwd czy baSkrypt Sys V Init rozróżnia dwa tryby praa zapisy respawn przeznaczone są dla usług, zach danych printcap. cy: tryb jednego użytkownika, wykorzystyktóre muszą być uruchomione bez przerwy. Pierwsza kolumna pliku inittab zawiera wany do czynności związanych z konserwaPlik inittab z Listingu 1 zawiera kilka skrót mnemoniczny programu, składający cją systemu oraz tryb niezależnej stacji roakcji specjalnych. W linii 2 ustawiony zosię z maksymalnie czterech znaków, choboczej z wyłączonym połączeniem sieciostał domyślny poziom działania (initdeciaż zwykle spotyka się oznaczenia jednowym (tryb standardowy z pełnym zakresem fault), na którym będzie znajdować się syslub dwuznakowe. Administratorzy mogą usług). Większość systemów rozróżnia taktem podczas uruchamiania. Pozycja sysinit w tej kolumnie wpisywać dowolne znaki, że tryb pracy z graficznym interfejsem w linii 6 uruchamia najpierw proces init, pod warunkiem, że każdy z nich będzie inużytkownika (GUI) i bez takiego interfejsu a następnie zapisy boot (równocześnie) ny. Druga linia decyduje o włączeniu usłu(non-GUI), co umożliwia prawidłowe dziai bootwait (kolejno). W szczególnych przygi w poszczególnych poziomach. W naszym łanie na częściowo skonfigurowanych systepadkach można uruchomić procesy, które przykładzie linie od 12 do 18 wykonują domach lub z nieprawidłową konfiguracją umożliwiają systemowi np. reagowanie na kładnie jeden skrypt rc z odpowiednimi paśrodowiska graficznego. informacje przesyłane ze źródła zasilania. rametrami dla poszczególnych poziomów – Opisane stany systemu znane są pod naod 0 do 6. Polecenie wyłączenia w lini 21 zwą poziomów działania. Każdy z poziojest dostępne z poziomów od 1 do 5. mów oznaczony jest cyfrą lub literą. TypoSkrypty Init Trzeci zapis określa sposób i czas uruchowa konwencja wykorzystuje poziom 0 do Wystarczy tylko rzut oka na Listing 1, aby mienia polecenia przez proces init. Zwykle oznaczania wyłączania komputera, a postwierdzić, że proces init nie jest zbyt zajęwystępuje tu polecenie wait lub respawn. ziom 6 jako ponowne uruchomienie komtym procesem. Przetwarza inittab, w linii Polecenie wait nakazuje pojedyncze uruputera. Poziom 1 (oznaczany także literą s 2 odkrywa domyślny poziom działania (2), chomienie programu z kolumny czwartej, lub S) udostępnia tryb jednego użytkowniuruchamia skrypt inicjujący rcS, a następnie a polecenie respawn nakazuje każdorazowe ka, z ograniczeniem bądź całkowitym wyłąkolejny skrypt o nazwie rc 2, za którym znajuruchomianie programu w przypadku przeczeniem dostępu do sieci. Dzięki temu duje się kilka procesów getty (linie od 24 do użytkownik główny uzysku29). Te procesy z kolei powoje wyłączny dostęp do systedują wyświetlanie zgłoszenia Listing 1: Plik sterujący procesem init mu i może dokonać jego logowania na konsolach wirkonserwacji. Poziomy od tualnych od tty1 do tty6. Na# Domyślny poziom działania 2 do 5 posiadają możliwość wiasem mówiąc, skrypty rc id:2:initdefault: konfiguracji, a więc różne i rcS określane są w HP-UX dystrybucje wykorzystują je jako skrypty sekwencyjne. # Skrypt uruchamiany podczas inicjalizacji na różne sposoby. Z doJest ku temu dobry powód, # i konfiguracji startu systemu świadczenia wynika, że im gdyż wywołują one skrypty si::sysinit:/etc/init.d/rcS wyższy poziom działania, uruchamiające w zadanej kotym więcej możliwości polejności. # Tryb jednoużytkowy winien on posiadać. Skrypty rc wykonują więk~~:S:wait:/sbin/sulogin Jako że skrypt Sys V Init szą cześć pracy. Mogą one jest bardzo rozpowszechniomieć różne nazwy, w zależno# Skrypty rc dla poziomów działania ny, opiszemy zachodzące ści od posiadanej dystrybucji. l0:0:wait:/etc/init.d/rc 0 procesy właśnie na jego przyTak jak już mówiliśmy, l1:1:wait:/etc/init.d/rc 1 kładzie. wszystkie te skrypty wykonul2:2:wait:/etc/init.d/rc 2 ją lwią cześć pracy: uruchal3:3:wait:/etc/init.d/rc 3 miają skrypty startowe w jaKonfiguracja l4:4:wait:/etc/init.d/rc 4 sno określonej kolejności. centralna l5:5:wait:/etc/init.d/rc 5 Szczegółowe informacje przePierwszy plik konfiguracyjl6:6:wait:/etc/init.d/rc 6 chowywane są w określonych ny dla skryptu init nosi nakatalogach. Jak można się łazwę /etc/inittab. Program # Reaguj na [Ctrl]+[Alt]+[Delete] two domyślić, rcS przeszukuprzetwarza plik natychmiast ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now je /etc/rc.S, a rc 2 przeszukupo uruchomieniu systemu, je /etc/rc2.d. Katalogi te zwya zawartość pliku określa ko# Procesy getty kle kierują do skryptów (na lejne etapy procedury. Za1:2345:respawn:/sbin/getty 38400 tty1 ogół przy pomocy łączy symwartość pliku inittab przed2:23:respawn:/sbin/getty 38400 tty2 bolicznych lub stałych) posiastawiono na Listingu 1. 3:23:respawn:/sbin/getty 38400 tty3 dających bardziej swojsko Każda linia pliku konfi4:23:respawn:/sbin/getty 38400 tty4 brzmiące nazwy. Na Rysunku guracyjnego zawiera cztery 5:23:respawn:/sbin/getty 38400 tty5 1 pokazano jeden z takich kaelementy oddzielone od sie6:23:respawn:/sbin/getty 38400 tty6 talogów w systemie Debian. bie dwukropkiem – jest to Pierwsza litera nazwy typowy schemat w plikach 74 Lipiec 2004 www.linux-magazine.pl Porady administratora: Sys V Init SYSADMIN Rysunek 1: Katalog /etc/rc2.d w systemie Debian zawiera łącza symboliczne uruchamiające skrypty dla poziomu 2. Nazwa łącza określa, który skrypt rc, kiedy i z jakimi parametrami powinien być wywoływany. skryptu lub łącza określa, czy daną usługę uruchomić (S), czy też skasować (K). W naszym przykładzie proces init kasuje anacron i uruchamia wszystkie inne usługi, wraz z nowym skryptem anacron. Za pierwszą literą znajdują się dwie cyfry, które określają priorytet. Skrypty z niższą liczbą priorytetu uruchamiane są przed skryptami o wyższej liczbie priorytetu. Liczby określają po prostu kolejność uruchamiania skryptów. Przechodząc do poziomu 2, komputer kasuje najpierw proces anacron (jeśli został A teraz coś całkiem innego W niniejszym artykule opisujemy podstawowe czynności konfiguracji poziomów działania dla systemów Unix. Tak więc, bez względu na to, czy korzystamy z Linuksa, odmiany BSD, Solaris, HP-UX czy innej pochodnej systemu Unix, skrypt Sys V Init będzie zawsze pracował w ten sam lub bardzo podobny sposób. Niestety, niektóre dystrybucje Linuksa nie przestrzegają tej zasady np. SUSE. Jeden z członków zespołu pracującego nad SUSE ostrzegł nas, że SUSE może przerwać procedurę konfiguracji, zmodyfikować pewne ustawienia lub uruchomić ponownie komputer. Jeżeli chcemy stworzyć skrypt init dla systemu SUSE, powinniśmy jak najściślej trzymać się wskazówek umieszczonych w /etc/init.d/skeleton. W jednym z następnych artykułów przyjrzymy się charakterystyce głównych dystrybucji Linuksa i omówimy występujące między nimi różnice. uruchomiony wcześniej), następnie wywołuje sysklogd, potem klogd i nis. Dobrze jest na samym początku uruchomić demona syslog. W ten sposób będziemy mogli przechwytywać komunikaty o ewentualnych błędach. Demon klog wymaga uruchomionego demona syslog i musi być uruchomiony po syslogu. Bardziej skomplikowane usługi typu Apache najlepiej zostawiać na sam koniec, kiedy system jest już uruchomiony i prawidłowo działa. Skrypty init od kuchni Skrypty init także podlegają pewnym konwencjom. Każdy skrypt musi umieć zinterpretować przynajmniej dwa parametry: start i stop. Jeżeli skrypt jest połączony z nazwą zaczynającą się od litery S (np. w naszym przykładzie S10sysklogd), skrypt rc dla danego poziomu działania uruchomi go parametrem start. Jeżeli nazwa będzie zaczynać się literą K (tak jak w K11anacron), zostanie użyty parametr stop. Prawie wszystkie skrypty są wykorzystywane wielokrotnie. Skrypt użyty do uruchamiania usługi przy starcie systemu może równie dobrze służyć do usuwania usługi przy zamykaniu systemu. W ten sposób administratorzy mogą utrzymać systemy w należytym porządku. Jeżeli demon zostanie przeniesiony w inne miejsce, administrator będzie musiał dokonać edycji poleceń start/stop. Jest to spowodowane tym, że skrypty init są zwykle grupowane we własnym katalogu, przeważnie w /etc/init.d. Katalogi poziomów działania zawierają zwykle odnośniki łączące je z oryginałami. Na Listingu 2 przedstawiliśmy najprost- szy skrypt init. Skrypt na początku sprawdza dostępność demona – w międzyczasie mógł być przecież usunięty z systemu. Następnie wywołuje demona lub kończy jego działanie, w zależności od użytego parametru. Aby zakończyć demona, skrypt wysyła sygnał TERM do identyfikatora procesów przechowywanego w /var/run. Dzięki Sys V Init, po zainstalowaniu nowej usługi menedżer pakietów nie musi już dokonywać zmian istniejących plików. Zamiast tego menedżer kopiuje tylko skrypt uruchamiający do katalogu przeznaczenia i tworzy odpowiednie łącza symboliczne. ■ Listing 2: Najprostszy skrypt dla procesu init #! /bin/sh test -x /usr/sbin/sshd || exit 0 set -e case "$1" in start) echo -n "Starting sshd" /usr/sbin/sshd echo "." ;; stop) echo -n "Stopping sshd" kill `cat /var/run/sshd.pid` echo "." ;; esac exit 0 www.linux-magazine.pl Lipiec 2004 75