7.3. Wie funktionieren diese Bootskripte?

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.