» SelfLinux » Grafische Oberflächen » K Desktop Environment » KDE-Admin » Das Handbuch zu KSysV » Abschnitt 2 SelfLinux-0.12.1
zurück   Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter

SelfLinux-Logo
Dokument Das Handbuch zu KSysV  Autoren
 Formatierung
 GFDL
 

2 Eine kurze Beschreibung von System V init

Die folgende Erläuterung ist geliehen von tksysv (einer Inspirationsquelle für KSysV)

Die System V init entwickelt sich rasch zum Standard für die Kontrolle von Programmstarts beim Hochfahren des Systems in der Linux Welt. Und zwar deshalb, weil sie leichter zu benutzen, mächtiger und zugleich flexibler ist als die traditionelle BSD-init.

Ich werde hier nicht weiter auf geschichtliche Aspekte eingehen (v.a. weil ich darüber selbst nichts weiß :-).

Die init-Binärdatei liegt unter /sbin und nicht unter /etc. Dies ist deshalb wichtig, weil vielleicht jemand versuchen könnte, eine Maschine auf System V init umzustellen, ohne eine Neuinstallation und Neuformatierung vorzunehmen. Der Linux Kernel sieht zuerst unter /etc nach einer init-Datei. Deshalb müssen Sie sichergehen, dass die alte init von dort entfernt wurde, falls es dort eine gab.

Die SysV init unterscheidet sich auch dadurch von der BSD init, dass sich die Konfigurationsdateien in einem Unterordner von /etc befinden statt direkt in /etc. Dieser Ordner heißt rc.d. Dort finden Sie rc.sysinit und folgende weitere Ordner:

  • init.d/
  • rc0.d/
  • rc1.d/
  • rc2.d/
  • rc3.d/
  • rc4.d/
  • rc5.d/
  • rc6.d/

init.d enthält eine ganze Menge Skripte. Grundsätzlich benötigen Sie ein Skript für jeden Systemdienst, den Sie beim Hochfahren des Systems bzw. beim Wechsel auf ein anderes Runlevel starten möchten. Systemdienste beinhalten solche Dinge wie Netzwerk, NFS, sendmail, httpd etc. Systemdienste beinhalten dagegen nicht solche Sachen wie setserial, das nur einmal gestartet wird. Solche Aufrufe gehören nach rc.local.

rc.local sollte seinerseits unter /etc/rc.d liegen, wenn Sie es benötigen. Die meisten Systeme besitzen diese Datei, auch wenn es eigentlich nicht viel Verwendung dafür gibt. Sie können ebenfalls ein rc.serial in /etc/rc.d anlegen, wenn Sie beim Hochfahren etwas ausführen lassen wollen, was mit dem seriellen Anschluss zu tun hat.

Der Ablauf ist folgender:

  1. der Kernel sucht an verschiedenen Stellen nach dem Programm init und startet die erste, die er findet;
  2. init startet /etc/rc.d/rc.sysinit.
  3. rc.sysinit tut eine Menge notwendiger Dinge und startet dann rc.serial (wenn es existiert);
  4. init startet rc.local
  5. init startet alle Skripte für das voreingestellte Runlevel.

Das standardmäßige Runlevel ist in /etc/inittab eingetragen. Sie sollten im Anfangsbereich eine Zeile wie die folgende sehen:

id:3:initdefault:

An diesem Punkt können Sie einen Blick in die zweite Spalte werfen und wahrscheinlich feststellen, dass das voreingestellte Runlevel 3 ist. Wenn Sie das ändern möchten, dann können Sie /etc/inittab von Hand bearbeiten und die 3 ändern. Seien Sie sehr vorsichtig, wenn Sie an der inittab Änderungen durchführen. Falls Sie doch etwas durcheinandergebracht haben, dann kommen Sie zur Reparatur wieder heran, indem Sie das System neu starten und folgendes ausführen:

LILO boot: linux single

Dies sollte Ihnen ermöglichen, in den Einzelnutzer-Modus zu kommen und die Reparatur vorzunehmen.

Aber wie startet es nun all die richtigen Skripte? Wenn Sie ls -l eingeben in rc3.d, dann sehen Sie wahrscheinlich etwas wie das Folgende:

lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local

Sie werden bemerken, das sich in diesem Ordner keine richtigen Dateien befinden. Stattdessen ist jeder Eintrag hier eine Verknüpfung zu einem der Skripte im Verzeichnis init.d.

Die Verknüpfungen haben auch ein S und eine Nummer am Anfang. Das S besagt, dass dieses bestimmte Skript gestartet werden soll, so wie umgekehrt ein K den Stopp bedeuten würde. Die Nummer dient einfach der Anordnung.Tatsächlich startet init alle Systemdienste in der Reihenfolge, in der sie erscheinen. Sie können die Nummern also doppelt vergeben, aber es wird Sie nur selbst durcheinander bringen. Sie benötigen bloß irgendeine zweistellige Zahl, zusammen mit einem großgeschriebenen S oder K um einen Systemdienst zu starten oder anzuhalten.

Wie startet und stoppt init eigentlich Systemdienste? Ganz einfach: Jedes der Skripte ist so geschrieben, dass es ein Argument wie start und stop akzeptiert. Sie können diese Skripte tatsächlich von Hand auf der Kommandozeile folgendermaßen starten:

root@linux /root# /etc/rc.d/init.d/httpd.init stop

Dies würde den httpd-Server anhalten. Init liest einfach den Namen, und wenn der ein K beinhaltet, dann wird das Skript mit dem Argument stop aufgerufen. Wenn er ein S beinhaltet, dann wird das Skript mit dem Argument start aufgerufen.


2.1 Warum all diese Runlevel?

Manche Leute wünschen sich eine einfache Art, Maschinen für viele Zwecke einzurichten. Ich könnte z.B. ein "Server"-Runlevel haben, das nur httpd, sendmail, networking etc. laufen lässt. Darüber hinaus könnte ich auch noch ein "Benutzer"-Runlevel haben, das z. B. xdm startet.



zurück   Seitenanfang Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter