Ez a dokumentum a System V Init szerkesztő, más néven (ezután így hivatkozok rá) a ksysv leírását tartalmazza. Ebben a részben néhány, a programmal kapcsolatos alapfogalmat próbálok megmagyarázni.
A következő szöveget a tksysv-ből "kölcsönöztem" (mely programnak úgy is sokat köszönhet a ksysv):
A System V init egy gyorsan terjedő eljárás a linuxos világban az operációs rendszer indításkori beállításának elvégzésére. Ez a népszerűség annak köszönhető, hogy egyszerűbb, hatékonyabb és rugalmasabb, mint a hagyományos BSD init folyamat.
Nem akarok belemerülni a történelmi részletekbe (már csak azért sem, mert nem ismerem :-).
A rendszerindító program az /sbin könyvtárban, és nem az /etc-ben található. Ez azért fontos, mert egy linuxos rendszert át lehet alakítani System V indításúvá újratelepítés és lemezformázás nélkül is. A Linux kernel először az /etc könyvtárban keresi az init programot, ezért onnan le kell törölni a régi verziót, ha létezik.
A SysV init abban is eltér a BSD init-től, hogy a konfigurációs fájlok az /etc könyvtár alkönyvtáraiban találhatók, nem pedig közvetlenül az /etc-ben. Ennek a könyvtárnak rc.d a neve. Ebben található egy rc.sysinit nevű fájl és a következő könyvtárak:
init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ |
Az init.d könyvtárban különböző szkriptek találhatók. Általában külön szkript tartozik minden, a rendszerindításkor vagy egy futásszintre történő belépéskor indítható szolgáltatáshoz. A szolgáltatások közé tartozik a hálózatkezelés, az NFS, a sendmail, a httpd stb. Nem számítanak szolgáltatásnak az olyan programok, mint pl. a setserial, melyek egyszer lefutnak és utána rögtön ki is lép. Az ilyen jellegű programok az rc.local könyvtárba kerülhetnek.
Az rc.local könyvtár az /etc/rc.d könyvtárba kerül, ha létrejön egyáltalán. A legtöbb rendszer tartalmazza ezt, de kevés funkcióra használják. Létezhet még egy rc.serial könyvtár is az /etc/rc.d-ben, ha a rendszerindításkor be kell állítani a soros port paramétereit.
Induláskor a következő események játszódnak le:
a kernel több könyvtárban keresi az init programot, majd elindítja az első megtalált példányt
az init program elindítja az /etc/rc.d/rc.sysinit programot
az rc.sysinit különféle műveletek elvégzése után futtatja az rc.serial programot (ha az létezik)
az init végrehajtja az rc.local szkriptet
az init végrehajtja az alapértelmezett futásszint összes szkriptjét
Az alapértelmezett futásszint értéke az /etc/inittab fájlban található. A fájl eleje táján egy hasonló sornak kell szerepelnie:
id:3:initdefault: |
Az alapértelmezett futásszint a második oszlopban áll, jelen esetben ez 3, a legtöbb rendszerben ez az alapérték. Megváltoztatásához egy szövegszerkesztővel át kell írni a 3-at az /etc/inittab fájlban. Körültekintően módosítsa az inittab fájl tartalmát. Hibás adatok megadása esetén rendszerindításkor be lehet írni:
LILO boot: linux single |
Ebben az esetben a Linux egyfelhasználós módban indul és ki lehet javítani a hibás fájlt.
Honnan tudja a rendszer, hogy mely szkripteket kell futtatni? Az 'ls -l' parancsot kiadva az rc3.d könyvtárban, a következőt lehet például látni:
lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local |
Ahogy bizonyára Ön is észrevette, nincsenek "normális" fájlok a könyvtárban. Valamennyi bejegyzés szimbólikus link, melyek az init.d könyvtárban levő szkriptekre mutatnak. A linkek az S betűvel kezdődnek, mely után egy szám áll. Az S betű az elindításra, a K betű a leállításra utal. A számra csak a linkek sorbarendezése miatt van szükség. Az init a számsorrend alapján indítja el a szolgáltatásokat. Egy szám előfordulhat többször is, de csak zavarja az átláthatóságot. Elég tudni az S vagy K betű után a kétszámjegyű számot a kívánt szolgáltatás elindításához vagy leállításához.
Hogyan indulnak vagy állnak le a szolgáltatások? Nagyon egyszerűen. valamennyi szkript kezeli az első argumentumot, mely "start" vagy "stop" lehet. A szkripteket akár kézzel is el lehet indítani a megfelelő parancs kiadásával:
/etc/rc.d/init.d/httpd.init stop |
leállítja a httpd szolgáltatást. Ha a név a K betűvel kezdődik, akkor az init a "stop" argumentummal hívja meg a szkriptet, ha S betűvel, akkor a "start"-tal.
Gyakran van szükség arra, hogy az operációs rendszert többféle üzemmódban lehessen használni. Lehet definiálni például egy "kiszolgáló" futásszintet a httpd, a sendmail, a hálózat használatához és egy "felhasználó" futásszintet, ha pl. az xdm és a hálózat futtatására van szükség.