Nächste: , Nach oben: Dienste definieren   [Inhalt][Index]


10.17.1 Dienstkompositionen

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:

Typischer Diensterweiterungsgraph

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: , Nach oben: Dienste definieren   [Inhalt][Index]