Das K Desktop Environment

Kapitel 1. Einführung

Willkommen bei meinem System V init Editor, eher bekannt (und im folgenden auch so benannt) als KSysV. Dieser Abschnitt führt ein paar Konzepte ein und beschreibt, was Sie mit KSysV tun können.

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

1.1. Eine kurze Beschreibung von System V init

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 Linuxkernel sieht zuerst unter /etc nach einer init-Datei. Deshalb müssen Sie sichergehen, daß die alte init von dort entfernt wurde, falls es dort eine gab.

Die SysV init unterscheidet sich auch dadurch von der BSD init, daß sich die Konfigurationsdateien in einem Unterverzeichnis von /etc befinden statt direkt in /etc. Dieses Verzeichnis heißt rc.d. Dort finden Sie rc.sysinit und folgende weitere Verzeichnisse:

  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 usw. Systemdienste beinhalten dagegen nicht solche Sachen wie "setserial", das nur einmal läuft und dann geschlossen wird. Solche Dinge gehören nach rc.local.

rc.local sollte seinerseits unter /etc/rc.d liegen, wenn Sie eins brauchen. Die meisten Systeme besitzen eines, 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 Anschluß zu tun hat.

Der Ablauf ist folgender:

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, daß 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 herumändern. 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

Wie Sie feststellen werden, gibt es keine wirklichen "Dateien" in diesem Verzeichnis. Alles hier sind Verknüpfungen zu Skripten im init.d-Verzeichnis. Die Verknüpfungen haben auch ein "S" und eine Nummer am Anfang. Das "S" besagt, daß dieses bestimmte Skript gestartet werden soll, so wie umgekehrt ein "K" den Stop 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, daß es ein Argument wie "Start" und "Stop" akzeptiert. Sie können diese Skripte tatsächlich von Hand auf der Kommandozeile folgendermaßen starten:

 /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" bei sich hat, dann ruft sie das Skript mit einem "Stop"-Argument auf. "Wenn er ein "S" mit sich führt, dann läßt init das Skript mit einem "Start"-Argument laufen.

1.1.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 u. dgl. laufen läßt. Darüber hinaus könnte ich auch noch ein "Benutzer"-Runlevel haben, das z.B. xdm startet.