30.2.4. Das Programm /sbin/init
Das Programm
/sbin/init
(auch init
genannt) koordiniert den verbleibenden Boot-Prozess und konfiguriert die Benutzerumgebung.
Wenn
init
gestartet wird, wird es automatisch zum übergeordneten Prozess auf erster Ebene (“parent process”) oder zum übergeordneten Prozess auf zweiter Ebene (“grandparent process”) allerzukünftigen, auf dem System automatisch gestarteten Prozesse. Zuerst führt es das /etc/rc.d/rc.sysinit
-Skript aus, das den Umgebungspfad einstellt, Swapping startet, die Dateisysteme überprüft und andere Schritte der Systeminitialisierung übernimmt. Die meisten Systeme verwenden beispielsweise eine Uhr, wobei rc.sysinit
die Konfigurationsdatei /etc/sysconfig/clock
liest, um die Hardware-Uhr zu initialisieren. Falls Sie beispielsweise auch über spezielle, serielle Port-Prozesse verfügen, die ebenfalls initialisiert werden müssen, führt rc.sysinit
die Datei /etc/rc.serial
aus.
The
init
command then runs the /etc/inittab
script, which describes how the system should be set up in each SysV init runlevel. Runlevels are a state, or mode, defined by the services listed in the SysV /etc/rc.d/rc<x>.d/
directory, where <x> is the number of the runlevel. For more information on SysV init runlevels, refer to Abschnitt 30.4, »SysV Init Runlevels«.
Danach legt
init
die Quellfunktionsbibliothek /etc/rc.d/init.d/functions
für das System fest. In der Datei wird festgelegt, wie Programme zu starten oder zu beenden sind und wie die PID eines Programms bestimmt werden kann.
Danach startet
init
alle Hintergrundprozesse, indem es im entsprechenden rc
-Verzeichnis nach den Runlevels sucht, die in /etc/inittab
als Standard festgelegt sind. Die rc
-Verzeichnisse sind gemäß den Runlevels nummeriert, denen sie entsprechen. So ist zum Beispiel /etc/rc.d/rc5.d/
das Verzeichnis für Runlevel 5.
Das Programm
init
sucht beim Starten in Runlevel 5 im Verzeichnis /etc/rc.d/rc5.d/
, um die Prozesse zu ermitteln, die gestartet und beendet werden müssen.
Nachfolgend ein Beispiel-Listing für das Verzeichnis
/etc/rc.d/rc5.d/
:
Wie Sie sehen, befindet sich keines der Skripte, die die Dienste starten und beenden, im Verzeichnis
/etc/rc.d/rc5.d/
. Vielmehr sind alle Dateien in /etc/rc.d/rc5.d/
symbolische Links, die auf Skripte im /etc/rc.d/init.d/
-Verzeichnis zeigen. Symbolische Links werden in allen rc
-Verzeichnissen verwendet, so dass die Runlevel durch Erstellen, Ändern und Löschen der symbolischen Links neu konfiguriert werden können, ohne dass die aktuellen Skripte davon betroffen werden, auf die sie verweisen.
Der Name jedes symbolischen Links beginnt entweder mit einem
K
oder einem S
. Die K
-Links sind Prozesse, die in diesem Runlevel gekillt werden, während die Links gestartet werden, die mit einem S
beginnen.
The
init
command first stops all of the K
symbolic links in the directory by issuing the /etc/rc.d/init.d/<command> stop
command, where <command> is the process to be killed. It then starts all of the S
symbolic links by issuing /etc/rc.d/init.d/<command> start
.
Anmerkung
Wenn das System den Bootvorgang abgeschlossen hat, können Sie sich als root anmelden und dieselben Skripte zum Starten und Beenden der Dienste ausführen. So beendet zum Beispiel der Befehl
/etc/rc.d/init.d/httpd stop
den Apache HTTP-Server.
Alle symbolischen Links sind nummeriert, um die Startreihenfolge festzulegen. Sie können die Reihenfolge ändern, in der die Dienste gestartet oder beendet werden, indem Sie diese Nummerierung ändern. Je kleiner die Nummer, desto früher wird gestartet. Die symbolischen Links mit derselben Nummer werden in alphabetischer Reihenfolge gestartet.
Anmerkung
One of the last things the
init
program executes is the /etc/rc.d/rc.local
file. This file is useful for system customization. Refer to Abschnitt 30.3, »Ausführen von zusätzlichen Programmen zum Zeitpunkt des Bootens« for more information about using the rc.local
file.
After the
init
command has progressed through the appropriate rc
directory for the runlevel, the /etc/inittab
script forks an /sbin/mingetty
process for each virtual console (login prompt) allocated to the runlevel. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty
process opens communication pathways to tty devices[14], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
In Runlevel 5 führt
/etc/inittab
das Skript /etc/X11/prefdm
aus. Das prefdm
-Skript führt den gewünschten X-Display-Manager[15] aus — gdm
, kdm
oder xdm
, je nach Inhalt der Datei /etc/sysconfig/desktop
.
Nach Beendigung diesen Vorganges ist das System im Runlevel 5 und zeigt den Anmeldebildschirm an.