Linux benutzt eine spezielle Bootmethode mit dem Namen SysVinit. Sie basiert auf dem Konzept der Runlevel. Dieses Konzept kann in verschiedenen Distributionen sehr unterschiedlich umgesetzt sein. Nehmen Sie also nicht an, nur, weil etwas in Distribution XY funktioniert, geht es in LFS auf die gleiche Weise. LFS respektiert zwar allgemein übliche Standards, geht aber dennoch (wie alle anderen) seinen eigenen Weg.
SysVinit (wir nennen es nun einfach nur „init“) funktioniert nach dem Konzept der
Runlevel. Es gibt 7 Runlevel (von 0 bis 6), genaugenommen gibt es
sogar noch mehr, aber diese sind für Spezialfälle reserviert und
werden üblicherweise nicht benutzt. init(8)
beschreibt diese Details genauer. Jeder
Runlevel korrespondiert mit Skripten oder Diensten, die der Computer
beim Hochfahren ausführen bzw. starten oder stoppen soll. Der
Standard-Runlevel ist 3. Hier sehen Sie eine Übersicht, wie die
Runlevel üblicherweise eingesetzt werden:
0: Fährt den Computer herunter
1: Ein-Benutzer-Modus
2: Mehr-Benutzer-Modus ohne Netzwerk
3: Mehr-Benutzer-Modus mit Netzwerk
4: reserviert für eigene Anpassungen, funktioniert ansonsten wie 3
5: genauso wie 4, wird normalerweise für grafischen Login benutzt (wie z. B. Xs xdm oder KDEs kdm)
6: Startet den Computer neu
Das Kommando zum Wechseln des Runlevel ist init <Runlevel>
,
wobei <Runlevel>
den
Runlevel angibt, in den Sie wechseln möchten. Zum Neustarten des
Computers würde ein Benutzer zum Beispiel init 6 eingeben. Das reboot-Kommando ist nur ein Alias
darauf, genauso wie das Kommando halt ein Alias auf init 0 ist.
Unter /etc/rc.d
befinden sich eine
Menge Ordner mit dem Namen rc?.d
, wobei
das ? die Nummer eines Runlevels ist. Dort liegt auch der Ordner
rcsysinit.d
, er enthält einige
symbolische Links. Einige beginnen mit einem K, andere mit einem S, gefolgt von einer zweistelligen Zahl.
Das K bedeutet beenden (kill)
eines Dienstes, das S bedeutet starten (start) eines Dienstes. Die Zahlen
bestimmen die Reihenfolge, in der die Skripte ausgeführt werden und
können zwischen 00 und 99 liegen. Je kleiner die Zahl, desto früher
wird das Skript ausgeführt. Wenn init in einen anderen Runlevel
wechselt, werden die nötigen Skripte gestoppt und andere dafür
gestartet.
Bisher war nur von Links die Rede. Die echten Skripte befinden sich
in /etc/rc.d/init.d
. Sie erledigen die
eigentliche Arbeit, denn die ganzen symbolischen Links zeigen nur auf
sie. Stopp- und Startskripte zeigen jeweils auf dieselbe Datei in
/etc/rc.d/init.d
. Das funktioniert,
weil die Bootskripte mit unterschiedlichen Parametern aufgerufen
werden können: zum Beispiel start
, stop
, restart
, reload
, status
. Wenn ein K-Link ausgeführt
werden soll, wird das entsprechende Skript mit dem stop
-Parameter aufgerufen. Wenn ein
S-Link ausgeführt werden soll, wird das Skript mit dem start
-Parameter aufgerufen.
Es gibt eine Ausnahme: S-Links
in den Ordnern rc0.d
und rc6.d
starten keine Dienste. Sie werden stattdessen
mit dem Parameter stop
aufgerufen, um etwas zu beenden. Die Grund dafür ist, dass Sie wohl
kaum einen Dienst starten möchten, wenn Sie rebooten oder das System
herunterfahren.
Hier die Beschreibungen, welche Parameter zu einem Skript was bewirken:
start
Der Dienst wird gestartet.
stop
Der Dienst wird gestoppt.
restart
Der Dienst wird gestoppt und dann erneut gestartet.
reload
Die Konfiguration des Dienstes wird neu eingelesen. Das verwendet man, nachdem die Konfigurationsdatei eines Dienstes geändert wurde und man nicht den ganzen Dienst neu starten muss.
status
Gibt aus, ob der Dienst läuft, und wenn ja, mit welchen PIDs.
Sie können den Bootprozess natürlich nach Ihren Wünschen anpassen (schlussendlich ist es ja Ihr eigenes Linux). Die Dateien hier sind nur Beispiele dafür, wie man es gut erledigen kann.