Během bootování systému si pravděpodobně všimnete toho, jak po monitoru ubíhá
poměrně hodně textu. Budete-li pozorní, zjistíte, že při každém rebootu jde o
ty samé informace. Pořadí těchto akcí se nazývá
Nejprve bootloader načte do paměti obraz jádra (určený v konfiguračním
souboru) a předá jej CPU k provedení. Kernel si poté zinicializuje potřebné
datové struktury a pochody a spustí proces
Tento proces postupně namountuje všechny potřebné souborové systémy (určeno
v
Nakonec, když jsou všechny skripty provedeny, aktivuje
Nejprve spouští
Po zpracování
Samozřejmě se
Pamatujete-li si na bootovací sekvenci, jistě si vzpomenete i na to, že jako
první byly připojeny potřebné souborové systémy. Tuto akci obstará následující
řádek v
si::sysinit:/sbin/rc sysinit
Tento řádek říká
Jako druhý krok
rc::bootwait:/sbin/rc boot
O samotné provedení úkolu se opět stará skript
Nyní se
id:3:initdefault:
V tomto případě (který bude používat většina uživatelů Gentoo) je číslo
l0:0:wait:/sbin/rc shutdown l1:S1:wait:/sbin/rc single l2:2:wait:/sbin/rc nonetwork l3:3:wait:/sbin/rc default l4:4:wait:/sbin/rc default l5:5:wait:/sbin/rc default l6:6:wait:/sbin/rc reboot
Opět vidíme, že řádka definující runlevel 3 používá ke spuštění
služeb skript
Až
c1: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
Ukázali jsme, že se
V Gentoo je definováno sedm runlevelů: tři pro vnitřní potřebu a čtyři
uživatelsky definované. Runlevely pro vnitřní potřebu jsou
Uživatelsky definované runlevely jsou ty, které používají podadresář
Skripty, které spouští proces
Pro spuštění, zastavení a nebo restart služby (a zároveň všech služeb, které na
ní závisí), slouží parametry
# /etc/init.d/postfix start
Chcete-li zastavit službu, ale ne další služby, které na ní závisí, můžete
použít parametr
# /etc/init.d/postfix pause
Chcete-li vědět, v jakém stavu se daná služba právě nachází (zda běží, je
ukončená a nebo pozastavená), můžete použít argument
# /etc/init.d/postfix status
Říká-li informace o stavu, že služba běží, avšak Vy víte, že ne, můžete tuto
informaci změnit pomocí argumentu
# /etc/init.d/postfix zap
Pro zjištění závislostí služby můžete použít
# /etc/init.d/postfix ineed
Podobně se můžete dotázat na služby, které danou službu potřebují
(
# /etc/init.d/postfix needsme
Konečně, je možné požádat i o výpis závislostí, které služba vyžaduje, ale které chybí:
# /etc/init.d/postfix broken
Init systém Gentoo používá pro rozhodování o pořadí spouštění služeb strom závislostí. Protože jeho udržování je poměrně zdlouhavé a únavné, vytvořili jsme nástroje, které správu runlevelů a init skriptů usnadňují.
Nástrojem
Během instalace Gentoo jste již init skripty přidávali do runlevelu "default".
Tehdy jste možná ještě neměli páru, k čemu onen "default" slouží, ale teď
už byste to vědět měli. Skript
Pro přidání či odebrání init skriptu jednoduše spusťte
# rc-update del postfix default
Příkaz
# rc-update show
Init skripty mohou být poměrně komplexní, a proto není vhodné, aby je měnili uživatelé sami, kvůli riziku zanesení chyb. Služby je však potřeba konfigurovat, například někdy můžete potřebovat předat samotné službě další parametry.
Druhým důvodem k tomu, abychom udržovali informace o konfiguraci mimo init skript jsou aktualizace, resp. zamezení obavám o to, že o svoji konfiguraci během aktualizace přejdete.
Konfigurace služeb je v Gentoo snadná - každý konfigurovatelný init skript
má svůj soubor v adresáři
APACHE2_OPTS="-D PHP4"
V těchto konfiguračních souborech nenajdete nic než proměnné, ovlivňující
chování daného init skriptu, a samozřejmě komentáře. Formát je podobný jako
v
Ne, psaní init skriptů většinou není nutné, protože Gentoo poskytuje skripty připravené k použití. Avšak je možné, že jste si nainstalovali nějakou službu, která není v Portage, a v takovém případě si budete muset init skript pravděpodobně vytvořit.
Nepoužívejte init skript, který není napsaný přímo pro Gentoo -- formát jiných distribucí není s naším kompatibilní!
Základní uspořádání init skriptu je ukázáno níže:
#!/sbin/runscript depend() {(informace o závislostech) } start() {(příkazy potřebné pro start služby) } stop() {(příkazy nezbytné pro zastavení služby) } restart() {(příkazy potřebné pro restart služby) }
Každý init skript
Můžete definovat dva druhy závislostí:
Podívejme se na na informace o závislostech pro službu postfix:
depend() { need net use logger dns provide mta }
Jak můžete vidět, služba postfix:
V některých případech nebudete nějakou službu potřebovat, ale přejete si,
aby byla ta Vaše spuštěna před (
Jako příklad se podíváme na nastavení služby portmap:
depend() { need net before inetd before xinetd }
Také můžete použít metaznak "*", který znamená "všechny služby v runlevelu", avšak není to doporučeno.
depend() { before * }
Dále je potřeba definovat funkci
start() { ebegin "Starting my_service" start-stop-daemon --start --quiet --exec /path/to/my_service eend $? }
Potřebujete-li více příkladů funkce
# man start-stop-daemon
Další funkce, které můžete definovat, jsou
Syntax init skriptů používaných v Gentoo je kompatibilní s Bourne Again Shellem (bash), čili v nich můžete používat rozšíření bashe.
Chcete-li, aby Vaše init skripty podporovaly více voleb než ty, na které jsme
zatím narazili, měli byste je přidat do proměnné
opts="${opts} restartdelay" restartdelay() { stop() sleep 3# Před novým spuštěním počkej 3 sekundy start() }
Abyste mohli využívat konfiguraci v
Zároveň pokud Váš init skript poskytuje virtuální závislost (například
Mnoho uživatelů notebooků tuto situaci zná - doma chcete spouštět
Můžete si například přidat druhý "výchozí" runlevel, do kterého mlžete nabootovat, s přiřazenými patřičnými skripty. Při spuštění počítače si budete moci vybrat, který runlevel se má zavést.
Nejprve vytvořte adresář pro svůj "druhý" výchozí runlevel. Jako příklad
vytvoříme runlevel
# mkdir /etc/runlevels/offline
Přidejte nezbytné init skripty do nově vytvořeného adresáře. Například pokud
chcete mít přesnou kopii současného runlevelu
# ls /etc/runlevels/default acpid domainname local net.eth0 netmount postfix syslog-ng vixie-cron # rc-update add acpid offline # rc-update add domainname offline # rc-update add local offline # rc-update add syslog-ng offline # rc-update add vixie-cron offline
Nyní změňte konfiguraci svého bootloaderu a přidejte novou položku pro runlevel
title Gentoo Linux Offline Usage root (hd0,0) kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
Voila, to je všechno. Když nyní při bootování Vašeho systému vyberete nově
přidanou položku, runlevel
Použití