Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
Ubuntu 8.04 „Hardy Heron“
Unter Ubuntu unterscheidet sich der Systemstart und damit auch die Verwaltung einiger Dienste grundlegend von anderen Linux-Distributionen. Weitere Informationen finden sich im Artikel Upstart. Allerdings sind viele der in diesem Artikel genannten Informationen und Beispiele weiterhin gültig, da längst noch nicht alle Dienste umgestellt sind.
Ein Dienst ist ein Programm, das beim Starten des Rechners automatisch ausgeführt wird und im Hintergrund darauf wartet, seine Arbeit zu tun. Ein Dienst besitzt meist keine grafische Oberfläche und arbeitet ohne Interaktion des Benutzers. Die bekanntesten Dienste sind sicherlich Web-, Mail- oder Datenbank-Server. Aber auch die Hardwareerkennung oder das automatische Einbinden (Mounten) von z.B. USB-Sticks sind Dienste. Im Computer-Jargon werden Dienste auch als "Daemon" (im Sinne eines guten Geistes) bezeichnet.
Das heißt also, dass z.B. ein Apache- oder Samba-Server bei jedem Bootvorgang gestartet wird. Manche Dienste sind allerdings uninteressant oder werden eventuell gar nicht benötigt. In diesem Artikel soll gezeigt werden, was die verschiedenen Dienste machen und wie man diese den eigenen Bedürfnissen anpasst. Nun aber erst einmal zur grauen Theorie.
Linux-Systeme benutzen normalerweise das klassische SysV-Init-System und kennen verschiedene Zustände (Runlevel). In diesen Runleveln ist definiert, ob und wann ein Dienst automatisch gestartet bzw. gestoppt werden muss. Der Standard-Runlevel unter Debian und Ubuntu ist 2. Dieser ist als "lokaler Mehrbenutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen" definiert. Unter Ubuntu wird hier im Gegensatz aber auch der Netzwerkbetrieb konfiguriert.
Mit Upstart versucht Ubuntu inzwischen, eine Alternative zum herkömmlichen SysV-Init-System zu etablieren. Denn mit dem parallelen Start von Diensten lässt sich der Startvorgang entscheidend beschleunigen, was insbesondere auf Desktop-Rechnern und Notebooks praktische Vorteile hat.
Umsteiger von anderen Betriebssystemen meinen oft, Dienste deaktivieren zu müssen, um das System zu "optimieren". Ubuntu installiert ein relativ schlankes System, auf dem keine wirklich unnützen Dienste laufen. Stellt man unüberlegt wichtige Dienste ab, so kann dies dazu führen, dass das System unbenutzbar wird. Daher sollte man sich vor dem Deaktivieren genau informieren, welche Auswirkungen das haben könnte und ob dies wirklich notwendig ist.
Jeder Dienst besitzt ein Start-/Stop-Skript im Verzeichnis /etc/init.d/. Die Skripte enthalten Befehle, um einen Dienst zu starten bzw. zu beenden. Sie können von Hand oder automatisch beim Booten oder Herunterfahren des Systems aufgerufen werden. Dazu kann das Start-/Stop-Skript inklusive einer Option ausgeführt werden. Beispiel:
sudo /etc/init.d/DIENSTNAME [start|stop|restart|...]
Alternativ kann auch folgende Syntax verwendet werden:
sudo service DIENSTNAME [start|stop|restart|...]
Als konkretes Beispiel hier der Befehl, um den Webserver Apache2 zu starten:
sudo /etc/init.d/apache2 start
Wenn jetzt ein Start-/Stop-Skript automatisch beim Booten ausgeführt werden soll, so wird es einfach nur in den entsprechenden Runleveln verlinkt. Jedem dieser Runlevel ist ein Verzeichnis unterhalb von /etc/ zugeordnet. Dies sind:
/etc/rc0.d - Während das System herunterfährt
/etc/rcS.d - Während des Bootens ausführen
/etc/rc1.d - Arbeiten als einzelner Benutzer
/etc/rc2.d - Mehrbenutzerbetrieb inkl. Netzwerk
/etc/rc3.d bis /etc/rc5.d - bei Ubuntu nicht genutzt
/etc/rc6.d - Während das System neu startet
Jedes Start-/Stop-Skript besitzt zwei Arten von Verknüpfungen ("Links"): die einen beginnen mit "S" (Start) und die anderen mit "K" (Kill). Beim Betreten eines Runlevels werden zunächst die "K"-Links zum Beenden, danach die "S"-Links zum Starten von Diensten ausgeführt. Soll nun etwa ein Dienst nur im Runlevel 2 laufen, so liegt typischerweise in /etc/rc2.d ein "S"-Link, in allen anderen Runlevel-Verzeichnissen dagegen ein "K"-Link.
Die gewünschte Reihenfolge innerhalb der Start- oder Stop-Sequenz wird durch eine Nummerierung nach dem "S" bzw. "K" im Linknamen festgelegt. So wird z.B. "S10irgendwas" vor "S20wasanderes" ausgeführt.
Man kann natürlich eigene Start/Stop-Skripte erstellen. Dazu sollte man sich die bereits in /etc/init.d/ liegenden Skripte als Vorbild nehmen oder die offizielle Vorlage /etc/init.d/skeleton als Ausgangsbasis nutzen.
Wem die Start-/Stop-Skripte und die offizielle Vorlage zu komplex sind, der kann sich ein relativ einfaches Start-/Stop-Skript für fast jeden Zweck selbst schreiben. Man benötigt lediglich eine Datei, die auf folgendem Beispiel basiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #! /bin/sh ### BEGIN INIT INFO # Provides: Was macht das Skript? # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Kurze Beschreibung # Description: Längere Bechreibung ### END INIT INFO # Author: Name <email@domain.tld> # Aktionen case "$1" in start) /opt/beispiel start ;; stop) /opt/beispiel stop ;; restart) /opt/beispiel restart ;; esac exit 0 |
Der Kommentar-Text im Kopfteil der Datei ist sehr wichtig und wird vom Befehl update-rc.d ausgewertet. Dieser Kommentar sollte angepasst, aber nicht gelöscht werden! Mehr zu korrekten LSB-InitSkripten findet man im Debian Wiki . Die Datei speichert man z. B. in /etc/init.d/beispiel und macht die Datei per
sudo chmod 755 /etc/init.d/beispiel
ausführbar. Anschließend fügt man das Skript mit dem Befehl update-rc.d in die entsprechenden Runlevel ein.
Debian und Ubuntu besitzt mit dem Befehl update-rc.d ein mächtiges Werkzeug, um Dienste in den einzelnen Runleveln zu aktivieren bzw. zu deaktivieren. Am Beispiel von pcmciautils
wird nun erklärt, wie man einen Dienst aus dem aktuellen Runlevel entfernen und wieder hinzufügen kann.
Das Entfernen ist nicht sonderlich schwer. Man öffnet ein Terminalfenster [1] und gibt den Befehl:
sudo update-rc.d -f pcmciautils remove
ein. Das Kommando liefert hierbei beispielsweise folgende Ausgabe:
Removing any system startup links for /etc/init.d/pcmciautils ... /etc/rc0.d/K88pcmciautils /etc/rc6.d/K88pcmciautils /etc/rcS.d/S13pcmciautils
Hier erkennt man die oben beschriebenen Hintergründe. Die Links zum Start-/Stop-Skript von pcmciautils - /etc/init.d/pcmciautils - werden aus den Runlevels gelöscht. Möchte man den Dienste wieder in die dafür vorgesehenen Runlevel einfügen, so macht man das mit dem Befehl
sudo update-rc.d pcmciautils defaults
Dabei werden die Links wieder angelegt. Nachdem man einen Dienst aus den Runleveln entfernt hat, sollte man ihn abschließend von Hand stoppen
sudo invoke-rc.d pcmciautils stop
Sonst würde er beim nächsten Herunterfahren des Systems nicht sauber beendet werden und evtl. drohen Datenverluste.
Dieser Schritt allein entfernt den Dienst leider nicht für immer. Bei einer Aktualisierung (Update) des entsprechenden Pakets (hier also pcmciautils bzw. pcmcia-cs) merkt die Paketverwaltung, dass diese Links nicht mehr existieren, und legt sie wieder an, da das System nun davon ausgeht, dass das Paket zum ersten Mal installiert werden würde. Der Weg, um einen Dienst ein für alle Mal zu deaktivieren, besteht daher darin, die Verknüpfungen nur zu entschärfen.
Das vorangegangene Löschen des Dienstes liefert die entscheidenden Informationen, wo die Start- und Stop-Skripte verlinkt werden müssen (siehe remove
-Befehl oben). Daraufhin legt man selbständig passende Links mit den soeben erworbenen Informationen an.
sudo update-rc.d pcmciautils stop LINK-NUMMER RUNLEVEL . # allgemein; Teil von "stop" bis "." ggf. für verschiedene LINK-NUMMERn wiederholen sudo update-rc.d pcmciautils stop 13 S . stop 88 0 6 . # Beispiel (vergleiche remove-Befehl oben)
Um pcmciautils
wieder als Dienst einzufügen, entsprechend wieder
sudo update-rc.d -f pcmciautils remove sudo update-rc.d pcmciautils start 13 S . stop 88 0 6 .
eingeben.
Es gibt verschiedene grafische Oberflächen (GUIs) zum (De-)Aktivieren von Diensten.
Die Entwicklung von rcconf und sysv-rc-conf wurde offensichtlich eingestellt. Siehe dazu die Versionsnummern und Changelogs (Änderungsprotokolle) der Pakete bzw. packages.debian.org .
Für die Kommandozeile gibt es das Programm rcconf. Der Vorteil ist natürlich, dass man keinen XServer bzw. keine grafische Oberfläche braucht, um schnell Dienste bearbeiten zu können. Daher eignet es sich wunderbar für Server. rcconf ist in den offiziellen Paketquellen enthalten. Es muss lediglich folgendes Paket über die Paketverwaltung installiert [2] werden:
rcconf (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install rcconf
sudo aptitude install rcconf
Eine Erweiterung von "rcconf" ist "sysv-rc-conf", mit dem man nicht nur die Dienste des aktuellen Runlevels bearbeiten kann, sondern alle Dienste - also Vorsicht! Das Programm wird durch das Paket
sysv-rc-conf (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install sysv-rc-conf
sudo aptitude install sysv-rc-conf
bereitgestellt.
Mit Ubuntu 9.10 wurden sämtliche ehemaligen Einstellungsmöglichkeiten unter "System -> Systemverwaltung" entfernt. Wer Dienste weiterhin wie gewohnt grafisch konfigurieren möchte, muss auf den Boot-Up-Manager ausweichen.
Die Entwicklung von BUM wurde offensichtlich eingestellt. Ubuntu 10.04 bis 12.10 verwenden die Version 2.5.2-1 des bum-Pakets vom August 2009 (Changelog ). Auf der Entwickler-Website gibt es auch keine neuere Version.
Um BUM
nutzen zu können, installiert [1] man das Paket
bum (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install bum
sudo aptitude install bum
Nach der Installation, kann man BUM unter
"System -> Systemverwaltung -> BootUp-Manager"
finden.
Natürlich lassen sich die Dienste auch unter KDE bearbeiten. Das Programm dazu findet sich unter
"K-Menü -> Systemeinstellungen -> Starten und Beenden -> Diensteverwaltung"
Dienste können einfach per Mausklick ausgewählt werden. Im Fenster rechts findet sich dazu (von oben nach unten) eine kurze Beschreibung des Dienstes, eine Option zum Feststellen, ob der Dienst beim Booten gestartet werden soll, der aktuelle Status sowie Optionen zum "Starten" und "Beenden".
In der Desktopumgebung Xubuntu konnte man früher die Dienste unter
"Applications -> System -> Dienste"
regeln. Neuere Xubuntu-Versionen enthalten diese Möglichkeit nicht mehr. Die einzelnen Dienste ließen sich leicht (de-)aktivieren. Die Einstellungen betrafen auch das Startverhalten. Sofern ein Dienst deaktiviert wurde, stand er beim nächsten Systemstart nicht zur Verfügung.
Im Artikel Dienste/Erläuterung sind einige Dienste und ihre Bedeutung aufgeführt.
Upstart - Systemstart und Verwaltung von Diensten unter Ubuntu
Hochfahren - Boot-Vorgang unter der Lupe - Artikel EasyLinux, 01/2004