Wie funktioniert der Bootvorgang mit diesen Skripten?

Linux benutzt eine spezielle Booteinrichtung mit dem Namen SysVinit. Es basiert auf dem Konzept der Runlevel. Dieses kann von System zu System sehr stark variieren. Man kann nicht einfach annehmen, weil Dinge in <hier Distributionsnamen einsetzen> funktionieren, tun sie das auch in LFS. LFS hat seinen eigenen Weg wie diese Dinge funktionieren, aber grundsätzlich respektieren wir die allgemein üblichen Standards.

SysVinit (wir nennen es nun einfach nur init) funktioniert nach dem Runlevel Schema. Es gibt 7 Runlevel (von 0 bis 6), genaugenommen gibt es sogar mehr, aber diese sind für spezialfälle reserviert und werden üblicherweise nicht benutzt. Die Man-page von init beschreibt diese Details genauer. Jeder Runlevel korrespondiert mit Dingen die der Computer beim hochfahren ausführen soll. Der Standard Runlevel ist 3. Hier ist eine Beschreibung wie die verschiedenen 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. X's xdm oder KDE's kdm)
6: Startet den Computer neu

Das Kommando zum wechseln des Runlevel ist init <Runlevel>, wobei <Runlevel> der Runlevel ist 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 finden sich eine Menge Verzeichnisse mit dem Namen rc?.d, wobei das ? die Nummer eines Runlevels ist. Dort liegt auch rcsysinit.d, welches einige symbolische Links enthält. Einige beginnen mit einem K, andere beginnen 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, von 00 bis 99, 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.

Die echten Skripte befinden sich in /etc/rc.d/init.d. Sie erledigen die ganze Arbeit, und die ganzen symbolischen Links zeigen auf sie. Stopp- und Startskripte zeigen auf dieselbe Datei in /etc/rc.d/init.d. Das funktioniert, weil die Skripte mit unterschiedlichen Parametern ausgeführt werden können, wie 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 Verzeichnissen rc0.d und rc6.d starten keine Dienste. Sie werden stattdessen mit dem stop Parameter aufgerufen um etwas zu beenden. Die Logik dahinter ist, das sie wohl kaum einen Dienst starten wollen, wenn sie rebooten oder das System anhalten wollen.

Hier einige Beschreibungen, welche Parameter zu einem Skript was bewirken:

Sie können den Bootprozess ruhig nach ihren Wünschen anpassen (schlussendlich ist es ja auch ihr eigenes LFS System). Die Dateien hier sind nur Beispiele wie man es gut erledigen kann (nun, wir halten es für gut -- sie mögen es aber vielleicht hassen).