Handbook:MIPS/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/inittabInicializá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/inittabBoot 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/inittabAlapé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/inittabFutá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/inittabTerminá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 startCsak 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 stopEgy szolgáltatás állapotának lekérdezéséhez (elindítva, leállítva, stb.) használja a status argumentumot.
root #rc-service postfix statusHa 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 zapA 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 ineedHasonló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 needsmeFutá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 defaultA 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 showLehető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/apache2Példaopciók az apache2 init szkript számára.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 szolgáltatás-szkript útmutató.
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() {
# (Szoftverfüggőségi információ.)
}
start() {
# (Szolgáltatás indításához szükséges parancsok.)
}
stop() {
# (Szolgáltatás leállításához szükséges parancsok.)
}
#!/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() {
# (Szoftverfüggőségi információ.)
}
start_pre() {
# (A szolgáltatás indítására való felkészüléshez szükséges parancsok.)
# Biztosítsa, hogy a könyvtáraink helyesek legyenek.
checkpath --directory --owner foo:foo --mode 0775 \
/var/run/foo /var/cache/foo
}
stop_post() {
# (A szolgáltatás utáni takarításhoz szükséges parancsok.)
# Tisztítsa meg az esetleges kiömléseket.
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
usebeá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
wantbeállítás hasonló ause-hoz, egy kivétellel. Ausecsak azokat a szolgáltatásokat veszi figyelembe, amelyek egy futási szinthez hozzá lettek adva; awantmegpró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. Awantmegpró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
needbeá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
beforebeá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 abeforebeállításnak nincs hatása, és a xdm akkor indul el, amikor az init rendszer azt legmegfelelőbbnek tartja. - Hasonlóképpen, az
afterbeá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/postfixA 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)
netfüggőséget (amit például a /etc/init.d/net.eth0 biztosít). - Használja a (virtuális)
loggerfüggőséget (amit például a /etc/init.d/syslog-ng biztosít). - Használja a (virtuális)
dnsfüggőséget (amit például a /etc/init.d/named biztosít). - Biztosítja a (virtuális)
mtafü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/portmapA 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
# Tegyen valamit arra az esetre, ha az újraindítás több műveletet igényel, mint a leállítás és az indítás.
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-daemonA 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 # Várakozás 3 másodpercet, mielőtt újból elkezdené.
start
}
A
restart() funkció nem írható felül az OpenRC-ben!Szolgáltatás beállításvá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/offlineAdja 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.confEngedé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.