14.2 Az init folyamat

Az init program az 1-es folyamatszámú folyamat. Ez felelos a rendszer megfelelo inicializálásáért. Az init folyamatot közvetlenül a kernel indítja el és nem is hat rá a 9-es szignál, amely normál esetben leállítja a folyamatokat. Minden más folyamat az init vagy valamelyik leszármazott folyamatának leszármazottja.

Az init beállításai központilag vannak megadva az /etc/inittab fájlban. Itt vannak beállítva a futási szintek is (lásd Szakasz 14.2.1, Futási szintek). Szintén ez a fájl határozza meg, hogy az egyes futási szinteken mely szolgáltatások és démonok álljanak rendelkezésre. Az /etc/inittab bejegyzéseitol függoen az init számos parancsfájlt lefuttat. Alapértelmezés szerint a rendszerindítás után elsoként elinduló parancsfájl az /etc/init.d/boot. A rendszerinicializálási szakasz befejeztével a rendszer az /etc/init.d/rc parancsfájllal megváltoztatja a futási szintet az alapértelmezettre. Az áttekinthetoség érdekében e parancsfájlok (ún. init parancsfájlok ) mindegyike az /etc/init.d könyvtárban található (lásd: Szakasz 14.2.2, Init parancsfájlok).

A rendszerindítás és -leállítás teljes folyamatát az init tartja karban. E nézopontból a kernel egy háttérfolyamatnak tekintheto, amelynek feladata az összes folyamat vezérlése és karbantartása, valamint a CPU-ido és a hardverhozzáférés beállítása a többi programtól érkezo kéréseknek megfeleloen.

14.2.1 Futási szintek

A Linux-rendszerekben a futási szintek határozzák meg a rendszer elindításának módját és a futó rendszerben rendelkezésre álló szolgáltatásokat. Rendszerindítás után a rendszer az /etc/inittab fájl initdefault sorában megadott módon kerül indításra. Ez általában 3 vagy 5. Lásd:Táblázat 14-1. A futási szint a rendszerindítás közben is megadható (például a rendszerindítási promptnál). Azokat a paramétereket, amelyeket nem közvetlenül a kernel értékel ki, az init kapja meg. Ha például 3-as szinten akarja indítani a rendszert, akkor a rendszerindítási promptnál adja meg a 3 paramétert (egyetlen hármast).

Táblázat 14-1 A használható futási szintek

Futási szint

Leírás

0

Rendszerleállás

S vagy 1

Egyfelhasználós mód

2

Több helyi felhasználós mód távoli hálózat (például NFS) nélkül

3

Teljes többfelhasználós mód hálózattal

4

Felhasználó által meghatározható: ez le van tiltva addig, amíg a rendszergazda be nem állítja ezt a futási szintet.

5

Teljes többfelhasználós mód hálózattal és X képernyokezelovel – KDM (alapértelmezett), GDM vagy XDM

6

A rendszer újraindítása

FONTOS: Kerülje a 2-es futási szint használatát NFS-en keresztül felcsatolt partícióval.

A 2-es futási szintet nem kell használni, ha a rendszer NFS-en keresztül csatolja fel az /usr partíciót. Mivel az NFS szolgáltatás a 2-es futási szinten (több helyi felhasználós mód távoli hálózat nélkül) nem elérheto, a rendszer muködése problémássá válhat, ha fontos program- vagy függvénytárfájlok hiányoznak.

A rendszer futása közben a futási szint a telinit paranccsal módosítható, a kívánt szint számát paraméterként megadva. Erre csak a rendszergazda jogosult. Az alábbi listában összefoglaljuk a futási szintekkel kapcsolatos legfontosabb parancsokat.

telinit 1 vagy shutdown now

A rendszer egyfelhasználós módba vált. Ez a mód rendszerkarbantartásra és -adminisztrációra használható.

telinit 3

Elindul az összes lényeges program (a hálózat is), a normál felhasználók bejelentkezhetnek és X grafikus környezet nélkül használhatják a rendszert.

telinit 5

A grafikus környezet is bekapcsolódik. Általában elindul egy képernyokezelo, mint az XDM, GDM vagy KDM. Az automatikus bejelentkezés engedélyezése esetén a helyi felhasználó automatikusan bejelentkezik az elore kiválasztott ablakkezelobe (GNOME, KDE, vagy bármely másik ablakkezelo).

telinit 0 vagy shutdown -h now

A rendszer leáll.

telinit 6 vagy shutdown -r now

A rendszer leáll, majd újraindul.

Az összes szokásos módon telepített openSUSE rendszerben az 5-ös futási szint az alapértelmezett beállítás. A felhasználók közvetlenül a grafikus felületen jelentkeznek be, vagy az alapértelmezett felhasználót automatikusan bejelentkezteti a rendszer. Ha az alapértelmezett futási szint a 3, akkor az 5-ös szintre váltás elott az X Window rendszert megfeleloen be kell állítani (lásd: Szakasz 10.0, Az X Window rendszer). Ha ez megtörtént, akkor a telinit 5 parancs kiadásával ellenorizze, hogy a rendszer megfeleloen muködik-e. Ha minden a várakozásnak megfeleloen muködik, akkor a YaST segítségével az alapértelmezett futási szint 5-re állítható.

FIGYELMEZTETÉS: Az /etc/inittab fájl hibái sikertelen rendszerindítást eredményezhetnek.

Ha az /etc/inittab fájl megsérül, akkor elképzelheto, hogy a rendszer nem indul el megfeleloen. Éppen ezért legyen nagyon körültekinto az /etc/inittab fájl módosításakor. Mindig olvastassa újra az init-tel az /etc/inittab fájlt: adja ki a telinit q parancsot a gép újraindítása elott.

A futási szintek módosításakor általában két dolog történik. Eloször elindulnak az aktuális futási szinthez tartozó leállító parancsfájlok, amelyek bezárják az aktuális futási szint muködéséhez szükséges fontos programokat. Majd ezután elindulnak az új futási szint indító parancsfájljai. Itt a legtöbb esetben jónéhány program elindításra kerül. A 3-asról 5-ös szintre módosításkor például az alábbiak történnek:

  1. Az adminisztrátor (root) a telinit 5 parancs kiadásával utasítja az init-et a másik futási szintre váltásra.

  2. Az init megvizsgálja az aktuális futási szintet (runlevel) és megállapítja, hogy az /etc/init.d/rc fájlt az új futási szint paraméterként megadásával kell elindítania.

  3. Az rc ezután meghívja az aktuális futási szint leállító parancsfájljai közül azokat, amelyekhez az új futási szinten nem tartozik indító parancsfájl. A jelen példában ezek az /etc/init.d/rc3.d könyvtárban található parancsfájlok (az elozo futási szint a 3-as volt) közül azok, amelyek neve K betuvel kezdodik. A K betu utáni szám határozza meg a parancsfájlok stop paraméterrel futtatásának a sorrendjét, ugyanis bizonyos függoségeket figyelembe kell venni.

  4. Legutoljára pedig elindulnak az új futási szint indító parancsfájljai. A jelen példában ezek az /etc/init.d/rc5.d könyvtárban található, S betuvel kezdodo nevu fájlok. A parancsfájlok indításának sorrendjét megint az S utáni szám határozza meg.

Ha ugyanarra a futási szintre vált át, mint az éppen aktuális, akkor az init ellenorzi az/etc/inittab és csupán a módosításoknak megfelelo lépéseket teszi meg (például elindítja a getty programot egy másik csatolón). Ugyanez az eredménye a telinit q parancs kiadásának is.

14.2.2 Init parancsfájlok

Az /etc/init.d könyvtárban kétféle parancsfájl található:

Az init által közvetlenül végrehajtott parancsfájlok

Ez csak a rendszerindítási folyamat közben, vagy egy azonnali rendszerleállítás kezdeményezésekor áll fenn (áramellátási hiba esetén, vagy ha a felhasználó megnyomja a Ctrl+Alt+Del billentyukombinációt). E parancsfájlok végrehajtását az /etc/inittab szabályozza.

Az init által közvetetten végrehajtott parancsfájlok

Ezek a futási szint módosításakor futnak le, és mindig az /etc/init.d/rc fo parancsfájlt hívják meg, amely garantálja az érintett parancsfájlok megfelelo sorrendjét.

Az összes parancsfájl az /etc/init.d könyvtárban található. A rendszerindításkor lefutó parancsfájlok szimbolikus láncokon keresztül kerülnek meghívásra az /etc/init.d/boot.d alkönyvtárból. A futási szint módosítására szolgáló parancsfájlok szintén szimbolikus láncokon keresztül kerülnek meghívásra az egyik alkönyvtárból (/etc/init.d/rc0.d-tol /etc/init.d/rc6.d-ig). Ez csak a jobb átláthatóság érdekében van így, valamint hogy ne duplázódjanak a parancsfájlok, ha több futási szinten is használja oket a rendszer. Mivel minden parancsfájl végrehajtható indítási és leállítási parancsfájlként is, ezeknek a parancsfájloknak meg kell érteniük a start és stop paramétereket. A parancsfájlok a restart, reload, force-reload és status paraméterekre is reagálnak. Az egyes paraméterek leírása: Táblázat 14-2. Az init által közvetlenül futtatott parancsfájlok nem rendelkeznek ilyen hivatkozásokkal. Ezek szükség esetén a futási szinttol függetlenül futnak le.

Táblázat 14-2 A használható init parancsfájl-paraméterek

Paraméter

Leírás

start

A szolgáltatás elindítása.

stop

A szolgáltatás leállítása.

restart

Ha a szolgáltatás fut, leállítja, majd újraindítja. Ha nem fut, akkor elindítja.

reload

Újratölti a konfigurációt a szolgáltatás leállítása és újraindítása nélkül.

force-reload

Újratölti a konfigurációt, ha a szolgáltatás támogatja ezt. Ellenkezo esetben ugyanúgy viselkedik, mintha a restart paraméter lett volna megadva.

status

Megjeleníti a szolgáltatás aktuális állapotát.

A futásiszint-specifikus alkönyvtárban található láncok segítségével a parancsfájlok több futási szinthez is rendelhetok. Csomagok telepítésekor vagy eltávolításakor ezek a hivatkozások az insserv program segítségével adhatók hozzá vagy távolíthatók el (vagy az /usr/lib/lsb/install_initd parancsfájl segítségével, amely szintén ezt a programot hívja meg). Részletes információt errol az insserv(8) kézikönyvoldala tartalmaz.

E beállítások mindegyikét lehet módosítani a YaST modul segítségével is. Ha ellenorizni kell parancssorban az állapotot, akkor használja a chkconfig eszközt. Ennek leírását a chkconfig(8) kézikönyvoldal tartalmazza.

Most pedig az elsoként vagy utolsóként elindított rendszerindító ill. -leállító parancsfájlok rövid leírása, valamint a karbantartási parancsfájl rövid bemutatása következik.

boot

A rendszernek az init programmal történo közvetlen elindítása során kerül végrehajtásra. Független a kiválasztott futási szinttol és csak egyszer kerül végrehajtásra. Itt kerül felcsatolásra a /proc és /dev/pts fájlrendszer, illetve aktiválásra a blogd (rendszerindítás-naplózó démon). A rendszer frissítés vagy telepítés utáni elso indításakor a kezdeti rendszerkonfiguráció kerül elindításra.

A boot és rc minden más szolgáltatás elott indítja el a blogd démont. A blogd a fenti parancsfájlok által elindított tevékenységek végrehajtása (bizonyos parancsfájlok futtatása, például a blokk-speciális fájlok elérhetové tétele) után kerül leállításra. A blogd a képernyokimenetet a /var/log/boot.msg naplófájlba írja, de csak akkor, ha a /var írható-olvasható módban van felcsatolva. Ellenkezo esetben a blogd puffereli az adatokat, amíg a /var rendelkezésre nem áll. A blogd-vel kapcsolatos további információ a blogd(8) kézikönyvoldalon található.

A boot parancsfájl felelos az /etc/init.d/boot.d könyvtárban található, S betuvel kezdodo nevu parancsfájlok elindításáért. Itt történik meg a fájlrendszerek ellenorzése és szükség esetén a hurokeszközök beállítása. A rendszerido beállítása is megtörténik. Ha hiba történik a fájlrendszer automatikus ellenorzése és kijavítása közben, akkor a rendszeradminisztrátor a root jelszó megadása után közbeavatkozhat. A legutoljára végrehajtott parancsfájl a boot.local.

boot.local

Ebben a fájlban további, a rendszerindításkor, még az adott futási szintre váltás elott végrehajtandó parancsok adhatók meg. Sok tekintetben hasonlít a DOS-rendszerek AUTOEXEC.BAT fájljára.

halt (leállás)

Ez a parancsfájl csak 0-ás vagy 6-os futási szintre váltáskor hajtódik végre. Vagy halt (leállítás), vagy reboot (újraindítás) formájában van végrehajtva. A halt meghívási módjától függ, hogy a rendszer leállítása vagy újraindítása történik. Ha a leállítás során speciális parancsokat is végre kell hajtani, akkor ezeket a halt.local parancsfájlba kell beírni.

rc

Ez a parancsfájl meghívja az aktuális futási szint megfelelo leállító parancsfájljait és elindítja az újonnan kiválasztott futási szint indító parancsfájljait. Az /etc/init.d/boot parancsfájlhoz hasonlóan, ezt a parancsfájlt is az /etc/inittab hívja meg, a kívánt futási szintet megadva paraméterként.

Saját parancsfájlok is létrehozhatók és egyszeruen beilleszthetok a fent leírt sémába. Az egyedi parancsfájlok formázásával, elnevezésével és rendszerezésével kapcsolatos információt az LSB-specifikáció, valamint az init, init.d, chkconfig és insserv kézikönyvoldalak tartalmaznak. Érdemes megtekinteni a startproc és killproc kézikönyvoldalat is.

FIGYELMEZTETÉS: A hibás init parancsfájlok lefagyaszthatják a rendszert.

A hibás init parancsfájlok lefagyaszthatják a gépet. Az ilyen parancsfájlokat nagy körültekintéssel szabad csak módosítani, ha lehetséges, szigorú tesztelésnek kitéve a többfelhasználós környezetben. Az init parancsfájlokkal kapcsolatos további hasznos információ: Szakasz 14.2.1, Futási szintek.

Ha egy adott programhoz vagy szolgáltatáshoz készít egyéni init parancsfájlt, használja az/etc/init.d/skeleton fájlt sablonként. Mentse el a fájl egy példányát új néven, majd módosítsa a megfelelo program- és fájlneveket, elérési utakat és egyéb részleteket. A parancsfájl természetesen tovább finomítható, hogy az init eljárás a megfelelo muveleteket indítsa el.

A skeleton fájl másolatának elején látható INIT INFO blokk a parancsfájl kötelezo része, és feltétlenül módosítani kell. Lásd:Példa 14-1

Példa 14-1 Egy minimális INIT INFO blokk

### BEGIN INIT INFO
# Provides:          FOO
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Start FOO to allow XY and provide YZ
### END INIT INFO

Az INFO blokk elso sorában a Provides: rész után adja meg az init parancsfájl által vezérelt program vagy szolgáltatás nevét. A Required-Start: és Required-Stop: sorokban adja meg az összes szolgáltatást, amelyet az adott szolgáltatás elindítása vagy leállítása elott el kell indítani vagy le kell állítani. Ez az információ késobb kerül felhasználásra a futásiszint-könyvtárakban található parancsfájlnevek számozásának eloállításakor. A Default-Start: és Default-Stop: szakaszban adja meg azokat a futási szinteket, amelyekben a szolgáltatást automatikusan el kell indítani, illetve le kell állítani. Végül a Description: részben adja meg a kérdéses szolgáltatás rövid leírását.

A futásiszint-könyvtárak (/etc/init.d/rc?.d/) és az /etc/init.d/ könyvtárban található parancsfájlok közötti lánc létrehozásához adja ki az insserv új_parancsfájl_neve parancsot. Az insserv program kiértékeli az INIT INFO fejlécet és létrehozza a futásszint-könyvtárakban (/etc/init.d/rc?.d/) található parancsfájlok elindításához és leállításához szükséges láncokat. A program a megfelelo indítási és leállítási sorrendre is figyel: az egyes futási szinteken megfeleloen számozza a láncok neveit. Ha inkább egy grafikus eszközzel kívánja létrehozni az ilyen láncokat, akkor használja a YaST által biztosított szerkesztot (Szakasz 14.2.3, Rendszerszolgáltatások (futási szintek) beállítása a YaST segítségével).

Ha az /etc/init.d/ könyvtárban már meglévo parancsfájlt kell integrálni egy meglévo futtásiszint-sémába, akkor a futásiszint-könyvtárakban rögtön létrehozhatók a láncok, akár az insserv segítségével, akár a YaST futásszint-szerkesztojében a megfelelo szolgáltatás engedélyezésével. A módosítások a következo újraindításkor kerülnek alkalmazásra – az új szolgáltatás automatikusan el fog indulni.

A láncokat ne állítsa be kézzel. Ha az INFO blokkban valami nem jól van megadva, akkor problémák fognak felmerülni az insserv parancs késobbi, más szolgáltatásra vonatkozó futtatásakor. A kézzel felvett szolgáltatás törlodni fog a parancsfájlra vonatkozó insserv következo futtatásakor.

14.2.3 Rendszerszolgáltatások (futási szintek) beállítása a YaST segítségével

A YaST-modul elindítása után (YaST > Rendszer > Rendszerszolgáltatások (futási szintek) megjelenik a rendelkezésre álló szolgáltatások áttekinto listája és a szolgáltatások aktuális állapota (engedélyezett/letiltott). Döntse el, hogy a modult Egyszeru módban vagy Szakértoi módban kívánja használni. Az alapértelmezett Egyszeru mód a legtöbb célnak megfelelo. A bal oldali oszlop a szolgáltatás nevét, a középso az aktuális állapotát, a jobb oldali pedig egy rövid leírást jelenít meg. A kiválasztott szolgáltatáshoz az ablak alsó részében egy részletesebb leírás jelenik meg. A szolgáltatás engedélyezéshez a táblázatban válassza azt ki, majd kattintson az Engedélyezés menüpontra. A szolgáltatás ugyanezekkel a lépésekkel tiltható le.

Ha finomabban kívánja szabályozni a futási szinteket, amelyben a szolgáltatás elindításra vagy leállításra kerül, illetve ha az alapértelmezett futási szintet kívánja módosítani, akkor eloször válassza ki a Szakértoi mód menüpontot. Ebben a módban a párbeszédablak az alapértelmezett futási szintet (initdefault, az a futási szint, amelyen a rendszer alapértelmezés szerint elindul) jeleníti meg legfelül. Normális esetben az openSUSE rendszer alapértelmezett futási szintje az 5 (teljes többfelhasználós mód hálózattal és X rendszerrel). Értelmes alternatíva lehet a 3-as futási szint (teljes többfelhasználós mód hálózattal).

A YaST párbeszédablak segítségével kiválasztható egy másik futási szint, mint új alapértelmezett érték (Táblázat 14-1). Az ablakban lévo táblázat segítségével letilthatók és engedélyezhetok az egyes szolgáltatások és démonok. A táblázat felsorolja a rendelkezésre álló szolgáltatásokat és démonokat, megjeleníti, hogy pillanatnyilag engedélyezve vannak-e a rendszeren, és ha igen, akkor mely futási szintekhez. Ha az egér segítségével kiválasztotta az egyik sort, akkor jelölje meg azon futási szintek melletti négyzetet (B, 0, 1, 2, 3, 5, 6 és S), amelyeken a kiválasztott szolgáltatást vagy démont futtani kívánja. A 4-es futási szint nincs megadva, így létre lehet hozni egy egyedi futási szintet. A táblázatos áttekintés alatt az éppen kiválasztott szolgáltatás vagy démon rövid leírása látható.

FIGYELMEZTETÉS: A hibás futásiszint-beállítások tönkretehetik a rendszert.

A hibás futásiszint-beállítások a rendszert használhatatlanná tehetik. Csak akkor alkalmazzon egy módosítást, ha tisztában van a következményekkel.

Ábra 14-1 Rendszerszolgáltatások (futási szint)

Az Indítás, Leállítás vagy Frissítés menüpontok segítségével állapítsa meg, hogy a szolgáltatást kell-e aktiválni. Az Állapot frissítése gomb megnyomására a rendszer ellenorzi az aktuális állapotot. A Beállítás vagy Visszaállítás gombokkal megadható, hogy a módosítások alkalmazásra kerüljenek-e a rendszeren, vagy a beállítások visszaállításra kerüljenek-e a futásiszint-szerkeszto elindítása elott érvényes értékekre. A Befejezés gomb megnyomására a program lemezre menti a módosított beállításokat.