id:runlevels:action:process
A mez˝oket lejjebb írjuk le. Ezen kívül a/etc/inittabtartalmazhat üres sorokat és#jellel kezd˝od˝oket, melyeket figyelmen kívül hagy.
id
Ez azonosítja a fájlon belüli sort. A getty soroknál ez adja meg a terminált, amelyen fut, pontosabban a
/dev/ttyutáni karaktereket az eszközfájl nevében. Más soroknál lényegtelen a tartalma (de nem lehet túl hosszú), és egyedinek kell lennie.
runlevels
A futási szintek, melyekre a sor vonatkozik. A szinteket egyetlen számként kell megadni, elválasztójel nélkül. (A futási szinteket a következ˝o alfejezet tárgyalja.)
action
Mit kell tenni a megadott sorral. Pl. ciklikusan végrehajtani (respawn), vagy csak egyszer futtatni (once).
process
A futtatandó parancs.
Egy getty-t indítani az els˝o virtuális terminálon (azaz a/dev/tty1-en) minden normális többfelhasználós futási szinten (2-5) a következ˝o módon lehet:
1:2345:respawn:/sbin/getty 9600 tty1
Az els˝o mez˝o azt jelzi, hogy ez a sor a/dev/tty1-re vonatkozik. A második mez˝o szerint ez a 2, 3, 4 és 5 futási szinteken érvényes. A harmadik mez˝o azt jelenti, hogy a parancsot újra futtatni kell, ha kilép (így újra be lehet jelentkezni az adott terminálon kilépés után). Az utolsó mez˝o az a parancs, amely futtatja a getty programot az els˝o virtuális terminálon.3
Ha terminálokat vagy betárcsázó modemvonalakat akarunk hozzáadni a rendszerhez, mindegyikhez egy-egy sort kell beleírni a/etc/inittabfájlba. A részleteket az init,inittabés getty kézikönyv oldalakon találhatjuk meg. Ha egy parancs induláskor máris hibával áll le, és az init úgy van beállítva, hogyújraindítsaezt, az sok
er˝oforrást köthet le: a program elindul, leáll, újraindul, újra leáll stb, a végtelenségig. Ez elleni védekezésként az init figyeli, hogy milyen gyakran indít újra egy parancsot, és ha ez átlép egy bizonyos gyakoriságot, öt percig késlelteti ennek újraindítását.
9.3. Futási szintek (run levels)
A futási szint (run level) az init és ezen keresztül az egész rendszer állapotjelz˝oje, ami meghatározza, mely szolgáltatások m˝uködnek. A futási szinteket számokkal azonosítjuk (9-1 Táblázat). Nincs egyetemes szabály a
felhasználói futási szintek (2-5) m˝uködésére. Néhány rendszeradminisztrátor a futási szinteket annak beállítására használja, hogy mely alrendszerek m˝uködjenek, pl. hogy fut-e az X, m˝uködik-e a hálózat stb. Mások mindig minden alrendszert elindítanak, és egyedileg állítják le vagy kapcsolják vissza ˝oket, a futási szint változtatása nélkül, mivel a futási szintek túl durvák rendszerük vezérlésére. Magadnak kell dönteni, melyiket választod, de egyszer˝ubb lehet azt az utat választani, amit a Linux terjesztésed felkínál.
Táblázat 9-1. Futási szintek
0 Rendszerleállítás (halt).
1 Egyfelhasználós mód (single-user mode) (speciális
rendszeradminisztrációhoz).
2-5 Normál m˝uködés (felhasználó által definiált).
6 Újraindítás (reboot).
A futási szinteket az/etc/inittabfájlban állíthatjuk be, például a következ˝o módon:
l2:2:wait:/etc/init.d/rc 2
Az els˝o mez˝o egy tetsz˝oleges címke; a második azt jelenti, hogy ez a sor csak a 2. futási szintre vonatkozik. A harmadik mez˝o azt jelenti, hogy az init-nek csak egyszer, a futási szintbe való belépéskor kell futtatni a negyedik mez˝oben megadott parancsot, és meg kell várni, hogy az befejez˝odjön. A megadott/etc/init.d/rcparancs bármilyen más parancsokat futtathat, melyek ahhoz szükségesek, hogy belépjünk a 2. futási szintre.
A negyedik mez˝o parancsa végez minden komoly munkát a futási szint beállításával kapcsolatban. Elindítja azokat a szolgáltatásokat, melyek még nem futnak, és leállítja azokat, melyeknek nem kell futniuk az új futási szinten. Az adott Linux terjesztést?l függ, hogy ezek pontosan milyen parancsokat takarnak, és hogyan állították be a futási szinteket.
Amikor az init elindul, keres az/etc/inittabfájlban egy olyan sort, mely az alapértelmezett futási szintet állítja be:
id:2:initdefault:
Az init beállítható úgy is, hogy induláskor ne az alapértelmezett futási szinten induljon el, ha a rendszermagnak
singlevagyemergencyparamétert adunk. A rendszermagnak parancssori argumentumok pl. a LILO-n keresztül adhatók át. Ezáltal egyfelhasználós üzemmódba kerülünk (1-es futási szint).
A rendszer futása közben a telinit paranccsal változtathatjuk meg a futási szintet. A futási szint megváltoztatásakor az init a megfelel˝o parancsokat lefuttatja az/etc/inittabalapján.
9.4. Speciális beállítások az
/etc/inittab
fájlban
Az/etc/inittabfájlnak van néhány különleges beállítási lehet˝osége, melyek segítségével az init különleges körülményekre is reagálni tud. Ezeket a harmadik mez˝oben speciális kulcsszavakkal jelöljük. Íme néhány példa:
powerwait
Lehet˝ové teszi, hogy az init áramkimaradás esetén is leállítsa a rendszert. Ez feltételezi egy UPS meglétét, valamint olyan szoftvert, amely figyeli az UPS-t és tájékoztatja az initet az áramszünetr˝ol.
Fejezet 9. init
ctrlaltdel
Lehet˝ové teszi, hogy az init újraindítsa a rendszert, amennyiben a felhasználó megnyomja a ctrl-alt-del billenty˝ukombinációt a konzolon. Megjegyezzük, hogy a rendszeradminisztrátor úgy is beállíthatja a
ctrl-alt-del-re való reagálást, hogy más történjen (vagy éppen ne történjék semmi, pl. egy bárki számára elérhet˝o konzol esetén); esetleg elindulhat ennek hatására a nethack.
sysinit
A rendszerindításkor futtatandó parancs. Ez általában a/tmpkitakarításával és hasonlókkal foglalkozik.
Ez a felsorolás nem teljes. Ainittabkézikönyv oldala leír minden lehet˝oséget, és részleteket a fentiek használatáról.
9.5. Rendszerindítás egyfelhasználós üzemmódban
Nagyon fontos futási szint az 1-es, melynek neve egyfelhasználós üzemmód (single user mode), amely esetén csak a rendszeradminisztrátor használja a gépet, és csak a lehet˝o legkevesebb szolgáltatás fut. Az egyfelhasználós üzemmód szükséges néhány adminisztratív feladathoz4, mint pl. az fsck futtatása az
/usrpartíción. Ez ugyanis a partíció lecsatolását igényli, ami csak a legtöbb rendszerszolgáltatás kikapcsolásával lehetséges.
Egy futó rendszer a telinit paranccsal állítható egyfelhasználós üzemmódba, azaz 1-es futási szintre.
Rendszerindításkor pedig a rendszermag parancssorába írhatjuk be asinglevagyemergencyszavakat, hogy ugyanezt elérjük. A rendszermag ezt ugyanis továbbadja az init-nek, ami ebb˝ol tudja, hogy nem az alapértelmezett futási szinten kell indulnia. (A rendszermag parancssorának bevitele a rendszerindítás módjától függ, pl. a LILO vagy a GRUB segítségével oldható meg egyszer˝uen.)
Egyfelhasználós módban való rendszerindítás néha szükséges lehet, pl. az fsck kézzel való futtatásához, miel˝ott bármi felcsatolódna. Ugyanis ha pl. az/usrpartíció komolyan megsérül, akkor minden további hozzáférés az ezen lév? fájlokhoz tovább szaporítja a hibák számát, így az ellen˝orzést az els˝o lehetséges alkalommal el kell végezni. Az init által lefuttatott rendszerindító szkriptek automatikusan egyfelhasználós üzemmódba lépnek be, ha az automatikus fsck súlyos hibát észlel. Ez védi a rendszert egy olyan fájlrendszer használatától, mely nem javítható automatikusan. Ez az eset viszonylag ritka, és általában fizikailag sérült merevlemeznél, vagy kísérleti
rendszermagnál fordul el˝o, de jó, ha felkészülünk rá.
Biztonsági okokból egy jól felépített rendszer megkérdezi a root jelszót a shell indítása el˝ott egyfelhasználós üzemmódban. Különben egyszer˝u lenne egy megfelel˝o sor beírásával a LILO-t arra utasítani, hogy root jogokkal indítsa el bárki a rendszert. Természetesen ez nem m˝uködik, ha a/etc/passwdfájlrendszer-hiba miatt megsérült; ekkor csak egy rendszerindító hajlékonylemez segíthet.
Megjegyzések
2. Pl. úgy, hogy a root felhasználó egy kill -HUP 1 parancsot ad ki.
3. A getty különféle verziói eltér˝o módon futnak, ennek érdemes utánanézni a megfelel˝o kézikönyv oldalon. 4. Nem alkalmas a nethack programmal való játszadozásra.