A bekapcsolástól a bash promptig: Init

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ó

- Létezik kézikönyv-oldal az `inittab` és `fstab` fájlokhoz. Megnézheted a "`man inittab`" begépelésével.
- A Linux System Administrators Guide tartalmaz egy jó részt az init-ről.
- forráskód, lásd a Building a Minimal Linux System from Source Code doksit URL-ért.

Következő Előző Tartalom