Nächste: Diensttypen und Dienste, Nach oben: Dienste definieren [Inhalt][Index]
Wir definieren hier einen Dienst (englisch „Service“) als, grob
gesagt, etwas, das die Funktionalität des Betriebssystems erweitert. Oft ist
ein Dienst ein Prozess – ein sogenannter Daemon –, der beim
Hochfahren des Systems gestartet wird: ein Secure-Shell-Server, ein
Web-Server, der Guix-Erstellungsdaemon usw. Manchmal ist ein Dienst ein
Daemon, dessen Ausführung von einem anderen Daemon ausgelöst wird – zum
Beispiel wird ein FTP-Server von inetd
gestartet oder ein
D-Bus-Dienst durch dbus-daemon
aktiviert. Manchmal entspricht ein
Dienst aber auch keinem Daemon. Zum Beispiel nimmt sich der
Benutzerkonten-Dienst („account service“) die Benutzerkonten und sorgt
dafür, dass sie existieren, wenn das System läuft. Der „udev“-Dienst sammelt
die Regeln zur Geräteverwaltung an und macht diese für den eudev-Daemon
verfügbar. Der /etc-Dienst fügt Dateien in das Verzeichnis
/etc des Systems ein.
Dienste des Guix-Systems werden durch Erweiterungen („Extensions“)
miteinander verbunden. Zum Beispiel erweitert der Secure-Shell-Dienst
den Shepherd – Shepherd ist das Initialisierungssystem (auch
„init“-System genannt), was als PID 1 läuft –, indem es ihm die
Befehlszeilen zum Starten und Stoppen des Secure-Shell-Daemons übergibt
(siehe openssh-service-type
). Der
UPower-Dienst erweitert den D-Bus-Dienst, indem es ihm seine
.service-Spezifikation übergibt, und erweitert den udev-Dienst, indem
es ihm Geräteverwaltungsregeln übergibt (siehe upower-service
). Der Guix-Daemon-Dienst erweitert den Shepherd,
indem er ihm die Befehlszeilen zum Starten und Stoppen des Daemons übergibt,
und er erweitert den Benutzerkontendienst („account service“), indem er ihm
eine Liste der benötigten Erstellungsbenutzerkonten übergibt (siehe
Basisdienste).
Alles in allem bilden Dienste und ihre „Erweitert“-Relationen einen gerichteten azyklischen Graphen (englisch „Directed Acyclic Graph“, kurz DAG). Wenn wir Dienste als Kästen und Erweiterungen als Pfeile darstellen, könnte ein typisches System so etwas hier anbieten:
Ganz unten sehen wir den Systemdienst, der das Verzeichnis erzeugt, in
dem alles zum Ausführen und Hochfahren enthalten ist, so wie es der Befehl
guix system build
liefert. Siehe Service-Referenz, um mehr
über die anderen hier gezeigten Diensttypen zu erfahren. Beim
Befehl guix system extension-graph
finden Sie Informationen darüber, wie Sie diese Darstellung für eine
Betriebssystemdefinition Ihrer Wahl generieren lassen.
Technisch funktioniert es so, dass Entwickler Diensttypen definieren
können, um diese Beziehungen auszudrücken. Im System kann es beliebig viele
Dienste zu jedem Typ geben – zum Beispiel können auf einem System zwei
Instanzen des GNU-Secure-Shell-Servers (lsh) laufen, mit zwei Instanzen des
Diensttyps lsh-service-type
mit je unterschiedlichen Parametern.
Der folgende Abschnitt beschreibt die Programmierschnittstelle für Diensttypen und Dienste.
Nächste: Diensttypen und Dienste, Nach oben: Dienste definieren [Inhalt][Index]