V předchozím článku jsme se dostali až k fázi, kdy se spustí program init. Rovněž jsme si řekli, že chování tohoto programu určuje soubor /etc/inittab. Tento soubor je nesmírně důležitý a vřele doporučuji důkladně se seznámit s problematikou ještě než do něj začnete zasahovat. Rovněž zálohování není od věci. Na druhou stranu je třeba říci, že většina uživatelů nemusí tento soubor nijak upravovat, neboť často vystačí s tím, jak vypadá hned po instalaci.
Formát souboru je celkem jednoduchý. Každý povel se nachází na zvláštním řádku a má následující tvar:
id:runlevels:action:process
id je čtyřpísmený (nebo dvoupísmený, dle platformy) jednoznačný identifikátor povelu. Runlevels obsahuje výčet runlevelů (viz. minulý článek), pro něž se povel má vykonat. Action specifikuje akci, při níž se vykonává povel definovaný parametrem process. Nejčastěji používané hodnoty pro položku action jsou:
respawn – proces bude vždy znovu spuštěn, pakliže se ukončí. Typicky se používá například pro getty. Výhodou je, že init sleduje, zda se program neobnovuje příliš rychle a zabraňuje tak přetížení systému
wait – proces bude spuštěn jednou při vstupu do runlevelu a init počká na jeho dokončení
once – to samé jako wait, ale nečeká se na dokončení
boot – proces bude spuštěn jednou při bootu, runlevel je v tomto případě ignorován
bootwait – to samé jako boot, ale init čeká na dokončení
initdefault – definuje výchozí runlevel, který se použije při bootování. V případě, že neexistuje žádný povel tohoto typu, init bude požadovat zadání runlevelu na konzoli. Položka process je ignorována
sysinit – proces bude spuštěn jednou při bootu a to ještě před všemi povely typu boot (resp. bootwait)
ctrlaltdel – definuje povel, který bude vykonán při stisku kombinace kláves Ctrl+Alt+Delete (případně když init obdrží signál INT)
Existují i další hodnoty pro položku action, které však již nejsou tak časté. Kompletní seznam s popisem naleznete v manuálové stránce inittab(5).
Pakliže ještě zkonstatuji, že komentáře v souboru /etc/inittab začínají znakem #, měl by pro vás nyná být tento soubor srozumitelný. Běžný soubor pak může vypadat třeba takto:
id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ud::once:/sbin/update ca::ctrlaltdel:/sbin/shutdown -t3 -r now 1:12345:respawn:/sbin/mingetty --noclear tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 x:5:respawn:/usr/bin/X11/xdm -nodaemon
Vidíme, že výchozí runlevel bude 3, při bootu se spustí skript /etc/rc.d/rc.sysinit, nastartuje se démon update, při stisku kláves Ctrl+Alt+Del se provede povel /sbin/shutdown, nastartuje se šest textových konzolí (povel mingetty, v případě ukončení se opět nahodí). Poslední řádek slouží pro runlevel 5, který je běžně využíván pro přímý start Xek. Program xdm umožňuje přihlášení do systému už v grafickém rozhraní, akce je opět respawn, tudíž se po ukončení Xek znovu spustí xdm.
Poslední nevysvětlenou částí v uvedeném příkladě jsou povely s id l0 až l6. Ty slouží ke spuštění startovacích skriptů podle zvoleného runlevelu. O tom, jak vlastně vypadají startovací skripty v Linuxu (potažmo v jiných un*xech) si ale povíme až příště.