Következő Előző Tartalom

6. Init

Csak a "System V" stílusú "init"-ről beszélek, amit a Linux rendszerek a leginkább használnak. Vannak más megoldások is. Valójában bármilyen programot berakhatsz az /sbin/init-be, amit a kernel le fog futtatni, amint betöltődött.

Az "init" feladata, hogy minden úgy működjön ahogy kell. Leellenőrzi a fájlrendszereket és felcsatolja őket. Lefuttatja a "démonokat", hogy naplózzák a rendszerüzeneteket, hálózatkezelést csináljanak, kiszolgáljanak web oldalakat, figyeljenek az egeredre stb. Szintén ez indítja a getty folyamatokat, amik kirakják a bejelentkező (login) promptot a virtuális terminálodra.

Van egy nagyon komplikált történet a "futási szintek" (run-levels) közötti kapcsolásról, de a legnagyobb részét kihagyom, és csak a rendszer indulásáról beszélek.

Az" init" beolvassa az /etc/inittab fájlt, ez írja le mit csináljon. Általában először lefuttat egy inicializáló szkriptet. A program, ami végrehajtja (soronként) ezt a szkriptet, a bash, ugyanaz a program ami kiírja a parancssorodat. Debian rendszereken az inicializáló szkript az /etc/init.d/rcS, Red Hat-en a /etc/rc.d/rc.sysinit. Ez az, ami a fájlrendszereket leellenőrzi és felcsatolja, beállítja az órát és a csere (swap) területet, beállítja a gép hálózati nevét (hostname) stb.

Ezután egy másik szkript indul el, ami elvisz az alapértelmezett futási szintre. Ez csak annyit jelent, hogy elindul néhány alrendszer. Van egy pár könyvtár, az /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d Red Hat alatt, vagy az /etc/rc0.d , /etc/rc1.d, ..., /etc/rc6.d Debian alatt, ami a futási szintekhez tartozik. Ha a 3-as futási szinten vagyunk Debianban, akkor a szkript lefuttatja az összes "S"-el (start rövidítése) kezdődő szkriptet az /etc/rc3.d-ben. Ezek a szkriptek valójában csak linkek más szkriptekhez egy másik könyvtárban, amit általában "init.d"-nek hívnak.

Tehát az "init" meghívja a futási szint (run-level) szkriptünket, és más "S"-el kezdődő szkripteket keres egy könyvtárban. Megtalálhatja elsőként az S10syslog-ot. A számok megmondják a (run-level) szkriptnek, milyen sorrendben futtassa le őket. Ebben az esetben az S10syslog hajtódik végre először, mivel nincs S00 ... S09 kezdetű szkript. De az S10syslog valójában csak egy link az /etc/init.d/syslog-hoz, ami egy rendszernaplózást (system logger) elindító és leállító szkript. Mivel a link "S"-el kezdődik, a (run-level) szkript tudja, hogy végre kell hajtania a syslog-ot egy "start" paraméterrel. Vannak ennek megfelelő, "K"-val (kill - megölni) kezdődő linkek, amik meghatározzák, mi és milyen sorendben legyen leállítva, amikor elhagyjuk a futási szintet.

Ha meg akarod változtatni az alrendszerek alapértelmezett indítását, létre kell hoznod ezeket a linkeket az rcN.d könyvtárban, ahol N az alapértelmezett futási szint az inittab fájlodban.

Az utolsó fontos dolog, amit az "init" csinál, hogy elindít pár getty-t. Ezek "respawned" állapotúak, ami azt jelenti, hogy ha leállnak, akkor az "init" egyszerűen újraindítja őket. A legtöbb disztribució hat virtuális terminált indít. Lehet, hogy kevesebbet akarsz a memóspórolás érdekében, vagy többet, amivel egy csomó dolgot hagyhatsz futni és gyorsan váltogathatsz köztük ha szükséged van rájuk. Lehet, hogy akarsz majd futtatni egy getty-t szöveges terminálnak vagy modemes betárcsázáshoz. Ebben az estben át kell szerkesztened az inittab fájlodat.

6.1 Beállítás

A /etc/inittab az "init" legfelső szintű konfigurációs fájlja.

Az rcN.d könyvtárak, ahol N = 0, 1, ..., 6, határozzák meg, milyen alrendszerek indulnak el.

Valahol az "init" által elindított szkriptekben, a mount -a parancs kerül végrehajtásra. Ez annyit jelent, hogy felcsatolódik az összes fájlrendszer, aminek fel kell csatolódnia. Ez az /etc/fstab fájlban van leírva. Ha meg akarod változtatni, hogy hova és mi csatolódjon, amikor a rendszered elindul, ezt a fájlt kell átszerkesztened. Az fstab fájlnak van egy kézikönyv (man) oldala is.

6.2 Gyakorlatok

Keresd meg alapértelmezett futási szintedhez tartozó rcN.d könyvtáradat és adj ki egy ls -l parancsot, hogy lásd milyen fájlokhoz kapcsolódnak a linkek.

Változtasd meg a rendszereden futó getty-k számát.

Törölj minden alrendszert, amire nincs szükséged, az alapértelmezett futási szinten.

Nézd meg, milyen közel jutottál a kezdéshez.

Telepíts egy floppy-ra lilo-t, kernelt és egy statikusan linkelt "hello world" programot, amit nevezz el /sbin/init-nek, és figyeld ahogy bebootol és kiírja: hello.

Nézd figyelmesen a rendszered indulását és jegyzetelj, milyen üzeneteket ír ki arról ami történik. Esetleg nyomtass ki egy részt a rendszernaplóból (/var/log/messages). Ezután az inittab-bal kezdve, fusd át az összes szkriptet és figyeld meg, melyik kódrészlet mit csinál. Berakhatsz extra start üzeneteket is, mint például:

        echo "Hello, en vagyok a rc.sysinit"

Ez jó gyakorlat arra is, hogy megtanuld a Bash shell alatti szkriptírást. A szkriptek közül néhány eléggé komplikált. Legyen kéznél egy jó Bash referenciakönyv.

6.3 További információ


Következő Előző Tartalom