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

Podobne dokumenty