Handbook:Alpha/Working/Initscripts/hu
Ennek az oldalnak a tartalma nem vonatkozik azokra a felhasználókra, akik a Megfelelő profil kiválasztása részben a systemd profilt választották.
Futási szintek
Operációs rendszer bootolása
Amikor az operációs rendszer elindul, sok szöveg jelenik meg gyors egymásutánban. Ha Ön figyelmesen megfigyeli, akkor észreveheti, hogy ez a szöveg (általában) minden rendszerindításkor ugyanaz. Az összes ezen művelet sorozata az úgynevezett boot folyamat, amely (nagyjából) statikusan van meghatározva.
Először a boot loader (rendszerbetöltő) betölti a boot loader beállításban meghatározott kernel képfájlt a memóriába. Ezután a boot loader utasítja a processzort, hogy hajtsa végre a kernelt. Amikor a kernel betöltődik a memóriába és elindul, akkor inicializálja az összes kernel-specifikus struktúrát és feladatot, majd elindítja az init folyamatot.
Az init folyamat biztosítja, hogy az összes fájlrendszer (amely a /etc/fstab fájlban van meghatározva) fel legyen csatolva és készen álljon a használatra. Ezután végrehajt néhány, a /etc/init.d/ könyvtárban található szkriptet, amelyek elindítják azokat a szolgáltatásokat, amelyek szükségesek a rendszer sikeres bootolásához.
Végül, miután az összes szkript lefutott, az init aktiválja a virtuális konzolokat, amelyek elérhetők például a Ctrl+Alt+F1, Ctrl+Alt+F2 stb. billentyűkombinációval, és mindegyikhez hozzárendel egy speciális folyamatot, amelyet agetty-nek hívnak. Ez a folyamat biztosítja, hogy a felhasználók be tudjanak jelentkezni a login segítségével.
Init szkriptek
A /etc/init.d/ könyvtárban található szkriptek nem futnak le véletlenszerűen. Az init nem hajtja végre az összes szkriptet a /etc/init.d/ könyvtárban, csak azokat, amelyek futtatására a /etc/runlevels/ könyvtárban található beállítások alapján utasítást kap.
Először az init azokat a szkripteket futtatja a /etc/init.d/ könyvtárból, amelyek szimbolikus hivatkozásokat tartalmaznak a /etc/runlevels/boot/ könyvtárban. Általában betűrendben indítja el a szkripteket, de néhány szkriptben függőségi információk találhatók, amelyek megmondják a rendszernek, hogy egy másik szkriptet előbb kell futtatni, mielőtt elindíthatók lennének.
Miután az összes, a /etc/runlevels/boot/ könyvtárban hivatkozott szkript lefutott, az init a /etc/runlevels/default/ könyvtárba hivatkozott szkripteket fogja végrehajtani. Ismételten az ábécé sorrendjét használja annak meghatározásához, hogy melyik szkriptet futtassa először, kivéve, ha egy szkript függőségi információkat tartalmaz, ebben az esetben a sorrendet módosítják a helyes indítási sorrend érdekében. Ezért használnak a Gentoo Linux telepítése során végrehajtott parancsok a default
futási szintet (például rc-update add sshd default
).
Hogyan működik az init
Természetesen az init önmagában nem dönt el mindent. Szüksége van egy beállításfájlra, amely meghatározza, milyen műveleteket kell végrehajtania. Az /etc/inittab fájlt az init használja annak meghatározására, hogy milyen lépéseket kell megtennie.
Amint azt fentebb leírtuk, az init első művelete az összes fájlrendszer felcsatolása. Ezt a következő sor határozza meg az /etc/inittab fájlban:
/etc/inittab
Inicializálási parancssi::sysinit:/sbin/openrc sysinit
Ez a sor azt mondja az init számára, hogy futtatnia kell a /sbin/openrc sysinit parancsot a rendszer inicializálásához. A /sbin/openrc script gondoskodik az inicializálásról, tehát mondhatjuk, hogy az init nem sokat csinál - az inicializálás feladatát egy másik folyamatra bízza.
Másodszor, az init végrehajtotta az összes szkriptet, amely szimbolikus hivatkozásokat tartalmazott a /etc/runlevels/boot/ könyvtárban. Ez a következő sorban van meghatározva:
/etc/inittab
Boot parancs meghívásarc::bootwait:/sbin/openrc boot
Ismételten az OpenRC script végzi el a szükséges feladatokat. Vegye észre, hogy az OpenRC-nek adott opció (boot) ugyanaz, mint a használt /etc/runlevels/ alkönyvtár.
Most az init ellenőrzi a beállítófájlját, hogy meghatározza, melyik futási szintet (runlevel-t) kell futtatnia. Ennek eldöntéséhez a következő sort olvassa be a /etc/inittab fájlból:
/etc/inittab
Alapértelmezett futási szint kiválasztásaid:3:initdefault:
Ebben az esetben (amit a Gentoo felhasználók többsége használni fog), a futási szint azonosítója 3. Ezen információ alapján az init ellenőrzi, hogy mit kell futtatnia a 3-as futási szint elindításához:
/etc/inittab
Futási szint definíciókl0:0:wait:/sbin/openrc shutdown
l1:S1:wait:/sbin/openrc single
l2:2:wait:/sbin/openrc nonetwork
l3:3:wait:/sbin/openrc default
l4:4:wait:/sbin/openrc default
l5:5:wait:/sbin/openrc default
l6:6:wait:/sbin/openrc reboot
A 3-as szintet meghatározó sor ismét az openrc szkriptet használja a szolgáltatások elindítására (most a default
argumentummal). Érdemes megjegyezni, hogy az openrc argumentuma megegyezik a /etc/runlevels/ alkönyvtár nevével.
Amikor az OpenRC befejeződött, az init eldönti, mely virtuális konzolokat kell aktiválnia, és milyen parancsokat kell futtatnia minden egyes konzolon:
/etc/inittab
Termináldefiníciókc1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
Elérhető futási szintek
Egy korábbi részben láttuk, hogy az init egy számozási séma alapján dönti el, melyik futási szintet kell aktiválnia. A futási szint egy olyan állapot, amelyben a rendszer működik, és tartalmaz egy sor szkriptet (futási szint szkript vagy initszkript), amelyeket végre kell hajtani a futási szintbe való belépéskor vagy annak elhagyásakor.
A Gentoo rendszerben hét futási szint van definiálva: három belső futási szint és négy felhasználó által meghatározott futási szint. A belső futási szintek a sysinit, shutdown és reboot nevet viselik, és pontosan azt teszik, amit a nevük sugall: inicializálják a rendszert, lekapcsolják a rendszert, illetve újraindítják a rendszert.
A felhasználó által meghatározott futási szintek azok, amelyekhez tartozik egy /etc/runlevels/ alkönyvtár: boot, default, nonetwork és single. A boot futási szint elindítja az összes olyan rendszerhez szükséges szolgáltatást, amelyet a többi futási szint is használ. A fennmaradó három futási szint abban különbözik, hogy milyen szolgáltatásokat indítanak el: a default a mindennapi műveletekhez használatos, a nonetwork akkor alkalmazandó, ha nincs szükség hálózati kapcsolatra, míg a single akkor használatos, amikor a rendszert javítani kell.
Dolgozás az init szkriptekkel
Az openrc folyamat által indított szkripteket init szkriptnek nevezzük. Az /etc/init.d/ könyvtárban található minden szkript a következő argumentumokkal hajtható végre: start
, stop
, restart
, zap
, status
, ineed
, iuse
, iwant
, needsme
, usesme
vagy wantsme
.
Egy szolgáltatás (és az összes függő szolgáltatás) elindításához, leállításához vagy újraindításához a start
, stop
és restart
argumentumokat kell használni:
root #
rc-service postfix start
Csak azok a szolgáltatások kerülnek leállításra vagy újraindításra, amelyek az adott szolgáltatást igénylik. A többi függő szolgáltatás (amelyek használják a szolgáltatást, de nem igénylik azt) érintetlen marad.
Egy szolgáltatás leállításához, de nem a hozzá kapcsolódó szolgáltatásokhoz, használja a --nodeps
opciót a stop
argumentummal együtt:
root #
rc-service --nodeps postfix stop
Egy szolgáltatás állapotának lekérdezéséhez (elindítva, leállítva, stb.) használja a status
argumentumot.
root #
rc-service postfix status
Ha az állapotinformációk azt mutatják, hogy a szolgáltatás fut, de valójában nem, akkor az állapotinformációkat a zap
argumentummal "leállított" állapotra állíthatja vissza:
root #
rc-service postfix zap
A szolgáltatás függőségeinek lekérdezéséhez használhatja az iwant
, iuse
vagy ineed
argumentumokat. Az ineed
segítségével megjeleníthetők azok a szolgáltatások, amelyek valóban szükségesek a szolgáltatás helyes működéséhez. Az iwant
vagy az iuse
viszont azokat a szolgáltatásokat mutatja meg, amelyek használhatók a szolgáltatással, de nem elengedhetetlenek annak helyes működéséhez.
root #
rc-service postfix ineed
Hasonlóképpen lehetséges megkérdezni, hogy mely szolgáltatások igénylik a szolgáltatást (needsme
), vagy használhatják azt (usesme
vagy wantsme
):
root #
rc-service postfix needsme
Futási szintek frissítése
rc-update
A Gentoo init rendszere egy függőségi fát használ annak eldöntéséhez, hogy melyik szolgáltatást kell először elindítani. Mivel ez fárasztó feladat, amelyet nem szeretnénk, hogy a felhasználók kézzel végezzenek, olyan eszközöket hoztunk létre, amelyek megkönnyítik a futási szintek és az init szkriptek kezelését.
Az rc-update segítségével lehetőség van init szkripteket hozzáadni és eltávolítani egy futási szintről. Az rc-update eszköz automatikusan kéri majd a depscan.sh szkriptet a függőségi fa újraépítésére.
Szolgáltatások hozzáadása és eltávolítása
Az előző utasításokban az init szkriptek már hozzá lettek adva a default futási szinthez. A default jelentését korábban ebben a dokumentumban már magyaráztuk. A futási szint mellett az rc-update szkript egy második argumentumot is igényel, amely meghatározza a műveletet: add
, del
vagy show
.
A futási szint mellett az rc-update szkript egy második argumentumot is igényel, amely meghatározza a megfelelő műveletet: add
, del
vagy show
. Például:
root #
rc-update del postfix default
A rc-update -v show parancs megjeleníti az összes elérhető init szkriptet és azokat a futási szinteket, amelyekben végrehajtásra kerülnek:
root #
rc-update -v show
Lehetőség van a rc-update show parancs futtatására (a -v
nélkül) is, hogy csak az engedélyezett init szkripteket és azok futási szintjeit tekintsük meg.
Szolgáltatások beállítása
Miért van szükség a további beállításra?
Az init szkriptek meglehetősen összetettek lehetnek, ezért nem célszerű, hogy a felhasználók közvetlenül szerkesszék ezeket, mivel ez növelheti a hibázás lehetőségét. Ugyanakkor fontos, hogy a szolgáltatások beállíthatóak legyenek. Például előfordulhat, hogy a felhasználók további opciókkal szeretnék futtatni a szolgáltatást.
Egy másik ok arra, hogy a beállítás az init szkripten kívül legyen, az az, hogy az init szkriptek frissítése ne vezessen a felhasználó beállításainak a visszavonásához.
A conf.d könyvtár
Gentoo egy egyszerű módot biztosít az ilyen szolgáltatások beállítására: minden beállítható init szkripthez tartozik egy fájl az /etc/conf.d/ könyvtárban. Például az apache2 init szkript (neve /etc/init.d/apache2) egy beállító fájllal rendelkezik, amelynek neve /etc/conf.d/apache2, amely tartalmazhatja az Apache 2 szerver indításakor megadott opciókat:
/etc/conf.d/apache2
Példa opciók az apache2 init szkripthez.APACHE2_OPTS="-D PHP5"
Az ilyen beállítófájl csak változókat tartalmaz (ahogyan az /etc/portage/make.conf is), így nagyon könnyűvé teszi a szolgáltatások beállítását. Ez lehetővé teszi, hogy több információt adjunk meg a változókról (megjegyzésekként).
Az init szkriptek írása
Egy másik hasznos forrás az OpenRC service script guide.
Szükséges-e ez?
Nem, egy init szkript írása általában nem szükséges, mivel a Gentoo minden biztosított szolgáltatáshoz használatra kész init szkripteket biztosít. Azonban néhány felhasználó telepíthetett egy szolgáltatást Portage használata nélkül, ebben az esetben valószínűleg létre kell hozniuk egy init szkriptet.
Ne használja a szolgáltatás által biztosított init szkriptet, hacsak az nincs kifejezetten Gentoo számára írva: A Gentoo init szkriptjei nem kompatibilisek más disztribúciók init szkriptjeivel, kivéve, ha az adott disztribúció az OpenRC init rendszert használja.
Elrendezés
Az init szkript alapvető felépítése az alábbiak szerint néz ki.
#!/sbin/openrc-run
depend() {
# (Dependency information)
}
start() {
# (Commands necessary to start the service)
}
stop() {
# (Commands necessary to stop the service)
}
#!/sbin/openrc-run
command=/usr/bin/foo
command_args="${foo_args} --bar"
pidfile=/var/run/foo.pid
name="FooBar Daemon"
description="FooBar is a daemon that drinks"
extra_started_commands="drink"
description_drink="Opens mouth and reflexively swallows"
depend() {
# (Dependency information)
}
start_pre() {
# (Commands necessary to prepare to start the service)
# Ensure that our dirs are correct
checkpath --directory --owner foo:foo --mode 0775 \
/var/run/foo /var/cache/foo
}
stop_post() {
# (Commands necessary to clean up after the service)
# Clean any spills
rm -rf /var/cache/foo/*
}
drink() {
ebegin "Starting to drink"
${command} --drink beer
eend $? "Failed to drink any beer :("
}
Minden init szkriptnek tartalmaznia kell a start()
függvényt vagy a command
változót. Minden más rész opcionális.
Függőségek
Három függőségekkel kapcsolatos beállítás van, amelyek befolyásolhatják az init szkriptek indítását vagy sorrendjét: want
, use
és need
. Ezek mellett két sorrendet befolyásoló módszer is létezik: before
és after
. Ez utóbbi kettő nem tekinthető függőségnek per se - nem okozzák az init szkript meghibásodását, ha a megadott függőség nincs ütemezve indításra (vagy nem indul el).
- A
use
beállítás tájékoztatja az init rendszert arról, hogy a szkript használja a kiválasztott szkript által nyújtott funkciókat, de nem függ közvetlenül tőle. Példák erre ause logger
és ause dns
: ha ezek a szolgáltatások elérhetők, akkor használatba kerülnek, de ha a rendszer nem rendelkezik naplózóval vagy DNS-kiszolgálóval, akkor a szolgáltatások továbbra is működni fognak. Ha a szolgáltatások léteznek, akkor azok elindulnak a szkript előtt, amely használja őket. - A
want
beállítás hasonló ause
-hoz, egy kivétellel. Ause
csak azokat a szolgáltatásokat veszi figyelembe, amelyek egy futási szinthez hozzá lettek adva; awant
megpróbálja elindítani bármely elérhető szolgáltatást, még akkor is, ha az nincs hozzáadva egyetlen futási szinthez sem. Awant
megpróbálja elindítani a rendelkezésre álló szolgáltatást, még akkor is, ha az nincs hozzárendelve egy init szinthez sem. - A
need
beállítás egy erős függőséget jelöl: egy olyan szkript, amelyneed
-ként hivatkozik egy másikra, nem indul el, amíg az utóbbi szkript sikeresen el nem indul. Emellett, ha azneed
-ként megjelölt szkript újraindul, akkor az azt igénylő szkriptet is újraindítják. - A
before
beállítás biztosítja, hogy a szkript egy megadott szkript előtt induljon el, ha az utóbbi része az adott futási szintnek. Tehát egy xdm init szkript, amely meghatározza, hogybefore alsasound
, az alsasound szkript előtt indul el, de csak akkor, ha az alsasound ugyanabban a futási szintben van ütemezve indításra. Ha az alsasound nincs ütemezve az adott futási szintre, akkor abefore
beállításnak nincs hatása, és a xdm akkor indul el, amikor az init rendszer azt legmegfelelőbbnek tartja. - Hasonlóképpen, az
after
beállítás tájékoztatja az init rendszert arról, hogy az adott szkriptet egy megadott szkript után kell elindítani, ha az utóbbi része ugyanannak a futási szintnek. Ha nem, akkor a beállításnak nincs hatása, és a szkriptet az init rendszer akkor indítja el, amikor azt legmegfelelőbbnek tartja.
Egyértelmű, hogy a need
az egyetlen "valódi" függőségi beállítás, mivel ez határozza meg, hogy a szkript elindul-e vagy sem. Az összes többi csupán azt közli az init rendszerrel, hogy a szkripteket milyen sorrendben lehet (vagy kell) elindítani.
Virtuális függőségek
Gentoo számos init szkriptje olyan dolgoktól függ, amelyek önmagukban nem init szkriptek: virtuális függőségek.
A virtuális függőség olyan függőség, amelyet egy szolgáltatás biztosít, de amelyet nem kizárólag az a szolgáltatás biztosít. Egy init szkript függhet egy rendszer naplózótól, de sokféle rendszer naplózó érhető el (metalogd, syslog-ng, sysklogd, ...). Mivel a szkript nem függhet mindegyiktől (egy értelmes rendszerben nincsenek mindezek a rendszernaplózók telepítve és futva), biztosítottuk, hogy ezek a szolgáltatások virtuális függőséget biztosítsanak.
Például, vegyük figyelembe a postfix szkript függőségi információit:
/etc/init.d/postfix
A postfix szolgáltatás függőségi információidepend() {
need net
use logger dns
provide mta
}
Ahogy látható, a postfix szolgáltatás:
- Megköveteli a (virtuális)
net
függőséget (amit például a /etc/init.d/net.eth0 biztosít). - Használja a (virtuális)
logger
függőséget (amit például a /etc/init.d/syslog-ng biztosít). - Használja a (virtuális)
dns
függőséget (amit például a /etc/init.d/named biztosít). - Biztosítja a (virtuális)
mta
függőséget (ami minden levelező kiszolgálóra közös).
Sorrend vezérlése
Amint az előző szakaszban leírtuk, lehetséges megadni az init rendszernek, hogy milyen sorrendet használjon a szkriptek indításához (vagy leállításához). Ez a sorrend a use
és need
függőségi beállításokon keresztül, valamint a before
és after
sorrendbeállításokon keresztül valósul meg. Mivel ezeket korábban már ismertettük, nézzük meg példaként a portmap szolgáltatást, mint ilyen init szkriptet.
/etc/init.d/portmap
A portmap szolgáltatás függőségi információidepend() {
need net
before inetd
before xinetd
}
Lehetséges a *
globális karakter használata az ugyanazon futási szinten lévő összes szolgáltatás hivatkozására, bár ez nem ajánlott.
depend() {
before *
}
Ha a szolgáltatásnak helyi adathordozóra kell írnia, akkor a need localmount
beállítást kell használnia. Ha bármit elhelyez a /var/run/ könyvtárban, például egy PID fájlt, akkor after bootmisc
után kell elindulnia.
depend() {
need localmount
after bootmisc
}
Standard funkciók
A depend()
funkció mellett szükséges meghatározni a start()
függvényt is. Ez a függvény tartalmazza az összes olyan parancsot, amely szükséges a szolgáltatás inicializálásához. Javasolt az ebegin
és eend
függvények használata annak érdekében, hogy tájékoztassuk a felhasználót a folyamat eseményeiről.
start()
függvénystart() {
if [ "${RC_CMD}" = "restart" ];
then
# Do something in case a restart requires more than stop, start
fi
ebegin "Starting my_service"
start-stop-daemon --start --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
Mind a --exec
, mind a --pidfile
opciót használni kell a start()
és stop()
függvényekben. Ha a szolgáltatás nem hoz létre PID fájlt, akkor lehetőség szerint használja a --make-pidfile
opciót, bár ajánlott ezt tesztelni, hogy megbizonyosodjon róla. Ellenkező esetben ne használjon PID fájlokat. Lehetőség van a --quiet
hozzáadására is a start-stop-daemon opciókhoz, de ezt csak akkor ajánlott megtenni, ha a szolgáltatás rendkívül bőbeszédű. A --quiet
használata akadályozhatja a hibakeresést, ha a szolgáltatás nem indul el.
Ne feledje, hogy a fenti példa ellenőrzi a RC_CMD változó tartalmát. Az OpenRC nem támogatja a szkript-specifikus újraindítási funkciót, ehelyett a szkriptnek ellenőriznie kell a RC_CMD változó tartalmát, hogy megállapítsa, egy függvényt (pl. start()
vagy stop()
) egy újraindítás részeként hívtak-e meg, vagy sem.
Győződjön meg arról, hogy a
--exec
valóban szolgáltatást hív meg, és nem csak egy shell szkriptet, amely elindítja a szolgáltatásokat, majd kilép - ez az init szkript feladata.További példák a start()
függvényre: kérem, olvassa el az elérhető init szkriptek forráskódját a /etc/init.d/ könyvtárban.
Egy másik függvény, amelyet meg lehet (de nem kell) definiálni, a stop()
. Az init rendszer elég intelligens ahhoz, hogy kitöltse ezt a függvényt önállóan, ha a start-stop-daemon van használatban.
stop() {
ebegin "Stopping my_service"
start-stop-daemon --stop --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
Ha a szolgáltatás egy másik szkriptet futtat (például Bash, Python vagy Perl), és ez a szkript később nevet változtat (például foo.py
-ról foo
-ra), akkor szükséges a --name
opció hozzáadása a start-stop-daemon parancshoz. Ennek az opciónak meg kell adnia azt a nevet, amire a szkript át fog változni. Ebben a példában egy szolgáltatás elindítja a foo.py fájlt, amely nevet változtat foo
-ra.
start() {
ebegin "Starting my_script"
start-stop-daemon --start --exec /path/to/my_script \
--pidfile /path/to/my_pidfile --name foo
eend $?
}
A start-stop-daemon kiváló kézikönyvoldallal rendelkezik, ha további információra van szükség:
user $
man start-stop-daemon
A Gentoo init szkript szintaxisa a POSIX shellre ('sh') épül, ezért a felhasználók szabadon használhatnak sh-kompatibilis konstrukciókat a szkriptekben. Más, például kifejezetten Bash-re jellemző konstrukciókat azonban kerülni kell az init szkriptekben, hogy a szkriptek működőképesek maradjanak, függetlenül attól, hogy a Gentoo milyen változtatásokat hajt végre az init rendszerében.
Egyedi opciók hozzáadása
Ha az initszkriptnek olyan opciót kell támogatnia, amelyet még nem találkoztunk, akkor az opciót hozzá kell adni az alábbi változók egyikéhez, és létre kell hozni egy olyan függvényt, amelynek ugyanaz a neve, mint az opciónak. Például, ha egy restartdelay
nevű opciót kell támogatni:
extra_commands - A parancs a szolgáltatás bármely állapotában elérhető. extra_started_commands - A parancs akkor elérhető, amikor a szolgáltatás elindult. extra_stopped_commands - A parancs akkor elérhető, amikor a szolgáltatás leállt.
extra_started_commands="restartdelay"
restartdelay() {
stop
sleep 3 # Wait 3 seconds before starting again
start
}
A
restart()
funkció nem írható felül az OpenRC-ben!Szolgáltatás konfigurációs változók
Ahhoz, hogy a /etc/conf.d/ könyvtárban lévő beállító fájlokat támogassuk, nem szükséges semmilyen különleges intézkedést tenni: amikor az init szkript végrehajtódnak, az alábbi fájlok automatikusan be vannak olvasva (azaz a változók használhatók):
- /etc/conf.d/YOUR_INIT_SCRIPT
- /etc/conf.d/basic
- /etc/rc.conf
Ha az init szkript virtuális függőséget biztosít (például net
), akkor a függőséghez társított fájl (például /etc/conf.d/net) is be lesz olvasva.
Futtatási szint viselkedésének megváltoztatása
Kik részesülhetnek előnyben
Sok laptop felhasználó ismeri a helyzetet: otthon szükséges elindítani a net.eth0-t, de útközben nem szeretnék elindítani a net.eth0-t (mivel nincs elérhető hálózat). A Gentoo segítségével a futási szint viselkedését tetszés szerint lehet megváltoztatni.
Például létrehozható egy második "default" futási szint, amelyhez más init szkriptek rendelhetők. Indításkor a felhasználó kiválaszthatja, hogy melyik "default" futási szintet szeretné használni.
A softlevel használata
Először is hozza létre a második "alapértelmezett" futtatási szint könyvtárát. Példaként hozzuk létre az "offline" futtatási szintet:
root #
mkdir /etc/runlevels/offline
Adja hozzá a szükséges init szkripteket az újonnan létrehozott futtatási szinthez. Például, ha pontos másolatot szeretne az aktuális alapértelmezett futtatási szintről, de net.eth0 nélkül:
root #
cd /etc/runlevels/default
root #
for service in *; do rc-update add $service offline; done
root #
rc-update del net.eth0 offline
root #
rc-update show offline
(Partial sample Output) acpid | offline domainname | offline local | offline net.eth0 |
Bár a net.eth0 el lett távolítva az offline futási szintről, az udev megpróbálhat elindítani bármilyen általa észlelt eszközt és elindítani a megfelelő szolgáltatásokat. Ezt a funkcionalitást hotpluggingnek nevezzük. Alapértelmezés szerint a Gentoo nem engedélyezi a hotplugging-et.
Ahhoz, hogy a hotplugging engedélyezve legyen, de csak egy kiválasztott szkriptkészlethez, használja az rc_hotplug változót a /etc/rc.conf fájlban:
/etc/rc.conf
Engedélyezze a WLAN interfész hotplugging-jétrc_hotplug="net.wlan !net.*"
További információkért az eszköz által indított szolgáltatásokról, kérjük, nézze meg a megjegyzéseket a /etc/rc.conf fájlban.
Szerkessze a bootloader beállítását, és adjon hozzá egy új bejegyzést az offline futtatási szinthez. Ebben a bejegyzésben adja meg a softlevel=offline
mint boot paramétert.
A bootlevel használata
A bootlevel használata teljesen analóg a softlevel-hez. Az egyetlen különbség az, hogy egy második "boot" futtatási szint van definiálva a második "alapértelmezett" futtatási szint helyett.