7.2 Konfigurations- und Administrationsaufgaben
Nachdem Sie sich mithilfe der in diesem Kapitel bereits erläuterten Anleitungen ein wenig im Linux-System umgeschaut haben, sollten Sie noch einige fortgeschrittene administrative Aufgaben kennenlernen. In diesem Abschnitt erfahren Sie, wie Sie mit Log-Dateien umgehen, Programme automatisch starten, Software installieren und einen Kernel kompilieren.
7.2.1 Syslog und Log-Dateien
Das Betriebssystem selbst und viele Programme, vor allem Daemons, schreiben Statusinformationen und Fehlermeldungen in Log-Dateien, auch Protokolldateien genannt. Dafür ist der Syslog-Daemon (syslogd) zuständig. Er erhält Protokollinformationen vom System und von diversen Programmen und entscheidet darüber, ob er sie ignoriert, in bestimmte Log-Dateien schreibt oder per Mail versendet.
Syslog-Meldungen bestehen aus drei Komponenten:
- Facility (Fehlerquelle)
- Priority (Dringlichkeitsstufe)
- Message (Warnmeldung)
Die Facility gibt an, von welcher Art Programm oder welcher Systemfunktion der Eintrag stammt. Hier die Standardquellen im Überblick:
- auth – Authentifizierung
- authpriv – privilegierte Authentifizierung (root)
- cron – cron-Daemon
- daemon – sonstige Daemons
- ftp – FTP-Server
- kern – Kernel
- local0 bis local7 – frei verfügbar für beliebige Programme
- lpr – Drucker-Subsystem
- mail – Mail-Subsystem
- news – News-Subsystem
- syslog – interne Syslog-Meldungen
- uucp – UUCP-Subsystem[Anm.: Unix-to-Unix-Copy ist ein altmodisches Verfahren für Mail und Datenübertragung im Netzwerk, das noch vor der Internet-E-Mail erfunden wurde.]
- user – Anwendungsprogramme
Die Priority bestimmt die Wichtigkeit der jeweiligen Meldung:
- emerg – Notfall, System unbrauchbar
- alert – Alarm, sofortiges Eingreifen erforderlich
- crit – kritischer Fehler
- error – normaler Fehler
- warn – Warnung
- notice – Hinweis
- info – normale Information
- debug – Debugging-Information
Die Message ist ein beliebiger Beschreibungstext.
In eigenen Shellskripten können Sie den Befehl logger benutzen, um Syslog-Meldungen zu erzeugen. Die allgemeine Syntax lautet:
logger [-p [facility:]priority] message
Geben Sie Folgendes ein, um es zu testen:
$ logger -p info Nur Test, kein Fehler
Da Sie keine Facility angegeben haben, steht die Meldung in /var/log/messages:
$ tail –1 /var/log/messages
Apr 23 18:51:32 linuxbox sascha: Nur Test, kein Fehler
7.2.2 Programme automatisch starten
Linux und andere moderne Unix-Systeme verfügen über die Möglichkeit, beliebige Programme beim Booten automatisch zu starten. Ein kleines Problem besteht nur darin, dass dieses Verfahren in den verschiedenen Systemvarianten unterschiedlich realisiert wurde. Historisch betrachtet lässt sich der Unterschied auf die beiden Unix-Grundströmungen System V und BSD zurückführen, inzwischen zieht er sich aber – und dann auch noch mit einigen Variationen bezüglich der Verzeichniswahl – quer durch die Systeme und Distributionen (zumal es immer schwieriger wird, zu unterscheiden, welche aktuellen Systeme von System V abstammen und welche von der BSD).
Hier wird zunächst jedes der beiden grundsätzlichen Verfahren kurz vorgestellt; anschließend wird es konkret am Beispiel des Webservers Apache demonstriert.
- System V Init. Diese Bootmethode wird von immer mehr Betriebssystemen der Unix-Familie verwendet,
unter anderem auch von Linux. Systeme, die System V Init einsetzen, arbeiten mit unterschiedlichen
Runlevels. Ein Runlevel ist ein Systemzustand, in dem jeweils nur bestimmte Prozesse laufen.
Beim Wechsel des Runlevels über den Befehl init LEVELNUMMER werden bestimmte Skripte aufgerufen, die manche Programme starten und andere beenden.
Einige Runlevel haben eine spezielle Bedeutung:
- 0: heruntergefahrener Zustand
- S (manchmal auch 1): Single-User-Modus (für Wartungsarbeiten)
- 1 (bei vielen Systemen): Multi-User-Modus ohne Netzwerk
- 2: Multi-User-Modus mit Netzwerk; nur Konsole
- 3: Multi-User-Modus mit Netzwerk und GUI (klassisch)
- 5: Multi-User-Modus mit Netzwerk und GUI (Linux)
- 6: Systemneustart (Reboot)
Betriebssysteme dieser Bauart besitzen für jedesRunlevel ein spezielles Init-Verzeichnis. Diese Verzeichnisse heißen /etc/rcLEVELNUMMER.d, also etwa /etc/rc1.d für Runlevel 1 oder /etc/rc5.d für Runlevel 5. Die Shell-Skripte in diesen Verzeichnissen werden bei Erreichen des entsprechenden Levels automatisch ausgeführt, und zwar in alphabetischer Reihenfolge. Deshalb verwendet die übliche Konvention Namen, die mit K beginnen, für Kill-Skripte (die einen Prozess beenden) und solche mit S für Start-Skripte. Darüber hinaus bauen viele Daemons aufeinander auf. Deshalb wird hinter dem Anfangsbuchstaben eine zweistellige Zahl verwendet, die für eine bestimmte Reihenfolge sorgt.
In aller Regel sind die Einträge in diesen Verzeichnissen lediglich Symlinks auf Skripte, die sich eigentlich in einem anderen Verzeichnis befinden; meist in /etc/init.d oder /sbin/init.d. Für den Start und das Beenden des jeweiligen Prozesses wird normalerweise dasselbe Skript verwendet: Ein S-Symlink ruft es automatisch mit der Kommandozeilenoption start auf, ein K-Symlink mit stop. Im Falle von Apache erfüllt das mitgelieferte Shell-Skript apachectl die Voraussetzungen für diese Aufgabe.
Aus diesem Grund brauchen Sie lediglich für Ihr Standard-Runlevel (3 oder 5) einen S-Symlink auf dieses Skript zu erzeugen. Für die Runlevel 0 und 6 (Herunterfahren beziehungsweise Neustart) können Sie entsprechend einen K-Link anlegen. Da von Apache in der Regel keine anderen Dienste abhängen, können Sie ihn recht spät starten (wählen Sie einen Symlink-Namen wie S95apache) und ziemlich früh beenden (K15apache dürfte in Ordnung gehen).
Begeben Sie sich also in das jeweilige Runlevel-Init-Verzeichnis, und erstellen Sie die nötigen symbolischen Links. Falls Sie Apache mit Standardoptionen installiert haben und ein Linux-System mit dem Standard-Runlevel 5 verwenden, müssen Sie den folgenden Befehl für den Startskript-Link eingeben:
# ln -s /usr/local/apache2/bin/apachectl \
/etc/rc5.d/S95apacheAls Nächstes werden die Stopp-Links für die Runlevel 0 und 6 erzeugt. Wenn Sie das Layout Apache verwenden, sehen die beiden Befehle so aus:
# ln -s /usr/local/apache2/bin/apachectl \
/etc/rc0.d/K15apache
# ln -s /usr/local/apache2/bin/apachectl \
/etc/rc6.d/K15apacheIn modernen Linux-Distributionen lässt sich dieser Vorgang weitgehend automatisieren, zumal die meisten wichtigen Programme bereits passende Startskripte mitbringen. Erzeugen Sie unter /etc/init.d einen Symlink zum passenden Startskript, und rufen Sie anschließend chkconfig -a mit dem Namen des Links auf, um das Skript in seinen Standard-Runlevels zu aktivieren. Das folgende Beispiel zeigt die Vorgehensweise für den Datenbankserver MySQL, wenn er unter /usr/local/mysql installiert ist (siehe Kapitel 12, »Datenbanken«):
# ln -s /usr/local/mysql/support-files/mysql.server \
> /etc/init.d/mysql
# chkconfig -a mysql - BSD-Startskript. BSD-basierte Unix-Systeme verwenden im Gegensatz zur System-V-Methode einige zentrale
Startskripte. Sie befinden sich in Verzeichnissen wie /etc oder /etc/rc.d und heißen rc.boot, rc.local und so weiter. Interessant ist in diesem Zusammenhang das Skript rc.local, das Sie nach Belieben um weitere Startbefehle erweitern können.
Unter einem solchen Betriebssystem brauchen Sie rc.local also nur mit einem Texteditor zu öffnen und können dann den Aufruf des entsprechenden Steuerskripts (in diesem Fall apachectl) mit dem Parameter start hinzufügen. In rc.local wird normalerweise mit einer Fallunterscheidung nach dem Schema if [-xPFAD] überprüft, ob das aufzurufende Programm oder Skript überhaupt existiert. An diese Konvention sollten Sie sich halten. Falls Sie eine Apache-Standardinstallation verwenden, können Sie folgende Zeilen an rc.local anfügen:
# Apache 2 starten
if [ -x /usr/local/apache2/bin/apachectl ]; then
echo "Starting Apache httpd..."
/usr/local/apache2/bin/apachectl start
fi
7.2.3 Software installieren
Wenn Sie Softwarepakete von den CDs Ihrer Distribution installieren möchten, funktioniert dies mithilfe des Paketmanagers. Der verbreitetste Linux-Paketmanager ist rpm (der Red Hat Packet Manager, der unter anderem auch von openSUSE übernommen wurde). Sie installieren ein solches Paket mithilfe der folgenden Anweisung:
# rpm -i Paketname.rpm
Debian und darauf basierende Distributionen wie Ubuntu verwenden einen anderen Paketmanager. Hier erfolgt die Installation eines Pakets wie folgt:
# apt-get install Paketname
Der wichtigste Vorteil gegenüber rpm besteht darin, dass benötigte Pakete und eventuelle Abhängigkeiten automatisch aus einer Onlinequelle heruntergeladen werden.
Open-Source-Software wird häufig auch als Quellcode-Archiv mit der Dateiendung .tar.gz verbreitet. Dabei handelt es sich um eine Archivdatei (tar für »tapearchive«), die mit GNU zip (gzip) komprimiert wurde. Ein solches Paket wird sinnvollerweise in einen leeren Ordner kopiert und anschließend folgendermaßen entpackt und installiert:
In manchen Fällen ist die Endung nicht .tar.gz, sondern .tar.bz2. Das bedeutet, dass die Datei mit bzip2 statt mit gzip komprimiert wurde; die entsprechende tar-Option zum Entpacken ist xjvf statt xzvf.
Das Programm make dient allgemein dazu, automatische Kompilier- und Installationsanweisungen auszuführen: Da die meisten größeren Programmierprojekte aus vielen einzelnen Quelldateien bestehen, muss ein Makefile angeben, wie sie jeweils kompiliert und zusammengestellt werden sollen.
Beachten Sie, dass einige moderne Linux-Distributionen bei einer Standardinstallation die Entwicklungswerkzeuge GCC (GNU C Compiler) und make weglassen. Das ist ärgerlich, weil diese benötigt werden, um Quellcodepakete installieren zu können.
Einen Kernel kompilieren
Mithilfe verschiedener make-Anweisungen können Sie übrigens auch Ihren eigenen Linux-Kernel kompilieren, falls der allgemeine Kernel, den der Distributor mitliefert, Ihre spezielle Hard- oder Software nicht unterstützt.
In den meisten Fällen ist es heutzutage nicht mehr nötig, den Kernel neu zu kompilieren. Verwenden Sie stattdessen das Kommando modprobe Modulname, um das Kernelmodul für die betreffende Hardware dynamisch zu laden. In den meisten Distributionen lässt sich dies auch über grafische Hilfsmittel erledigen und sogar automatisieren.
Wenn Sie dennoch einen Kernel kompilieren möchten oder müssen, prüfen Sie zuerst mithilfe Ihres Paketmanagers, ob die Kernelquellen installiert sind. Danach müssen Sie das Konfigurationsprogramm für die Kernelanpassung aufrufen:
# cd /usr/src/linux
# make xconfig
In einem komfortablen GUI-Programm können Sie sich nun eine Kernelkonfiguration zusammenstellen. Es gibt eine Reihe von Kategorien wie Optimierung für bestimmte Prozessortypen, Netzwerk oder SCSI-Unterstützung. Falls xconfig in Ihrer Distribution nicht enthalten ist, geben Sie make menuconfig ein – es öffnet sich ein ähnliches Programm auf der Konsole.
Im Konfigurationsprogramm können Sie sich bei den meisten Gerätetreibern entscheiden, ob Sie sie fest in den Kernel einkompilieren oder als Module hinzufügen möchten. Letzteres ist für Hardware nützlich, die nicht permanent benötigt wird.
Nachdem die Konfiguration fertiggestellt ist, geben Sie an der Konsole (noch immer im Verzeichnis /usr/src/linux) nacheinander die folgenden Befehle ein:
# make all
# make modules_install
Sollte Ihr Linux-System noch einen älteren Kernel bis Version 2.4.x verwenden, müssen Sie dagegen alle folgenden Kommandos eingeben:
# make dep
# make clean
# make modules
# make modules_install
# make bzImage
Nach der Fertigstellung befindet sich der Kernel in jedem Fall im Verzeichnis /usr/src/linux/arch/i386/boot und heißt bzImage. Er muss nun an die Stelle des bisherigen Kernels kopiert werden, normalerweise in die Datei /boot/vmlinux. Alternativ können Sie ihn auch unter einem neuen Namen ins Verzeichnis /boot kopieren, um beim Booten zwischen mehreren Kernels auswählen zu können. Danach müssen Sie den Bootmanager (GRUB oder LILO) neu konfigurieren. Näheres erfahren Sie in der Dokumentation Ihrer Distribution.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.