This is guix.de.info, produced by makeinfo version 6.8 from
guix.de.texi.

Copyright © 2012–2025 Ludovic Courtès
Copyright © 2013, 2014, 2016, 2024 Andreas Enge
Copyright © 2013 Nikita Karetnikov
Copyright © 2014, 2015, 2016 Alex Kost
Copyright © 2015, 2016 Mathieu Lirzin
Copyright © 2014 Pierre-Antoine Rault
Copyright © 2015 Taylan Ulrich Bayırlı/Kammer
Copyright © 2015, 2016, 2017, 2019, 2020, 2021, 2023, 2025 Leo Famulari
Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Ricardo
Wurmus
Copyright © 2016 Ben Woodcroft
Copyright © 2016, 2017, 2018, 2021 Chris Marusich
Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2025 Efraim
Flashner
Copyright © 2016 John Darrington
Copyright © 2016, 2017 Nikita Gillmann
Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025
Janneke Nieuwenhuizen
Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Julien Lepiller
Copyright © 2016 Alex ter Weele
Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines
Copyright © 2017, 2018, 2019 Clément Lassieur
Copyright © 2017, 2018, 2020, 2021, 2022 Mathieu Othacehe
Copyright © 2017 Federico Beffa
Copyright © 2017, 2018, 2024, 2025 Carlo Zancanaro
Copyright © 2017 Thomas Danckaert
Copyright © 2017 humanitiesNerd
Copyright © 2017, 2021 Christine Lemmer-Webber
Copyright © 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke
Copyright © 2017, 2019, 2020, 2022 Hartmut Goebel
Copyright © 2017, 2019–2025 Maxim Cournoyer
Copyright © 2017–2022 Tobias Geerinckx-Rice
Copyright © 2017 George Clemmer
Copyright © 2017 Andy Wingo
Copyright © 2017, 2018, 2019, 2020, 2023, 2024, 2025 Arun Isaac
Copyright © 2017 nee
Copyright © 2018 Rutger Helling
Copyright © 2018, 2021, 2023, 2025 Oleg Pykhalov
Copyright © 2018 Mike Gerwitz
Copyright © 2018 Pierre-Antoine Rouby
Copyright © 2018, 2019 Gábor Boskovits
Copyright © 2018, 2019, 2020, 2022, 2023, 2024 Florian Pelz
Copyright © 2018 Laura Lazzati
Copyright © 2018 Alex Vong
Copyright © 2019 Josh Holland
Copyright © 2019, 2020 Diego Nicola Barbato
Copyright © 2019 Ivan Petkov
Copyright © 2019 Jakob L. Kreuze
Copyright © 2019 Kyle Andrews
Copyright © 2019 Alex Griffin
Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant
Copyright © 2020 Liliana Marie Prikler
Copyright © 2019, 2020, 2021, 2022, 2023 Simon Tournier
Copyright © 2020 Wiktor Żelazny
Copyright © 2020 Damien Cassou
Copyright © 2020 Jakub Kądziołka
Copyright © 2020 Jack Hill
Copyright © 2020 Naga Malleswari
Copyright © 2020, 2021 Brice Waegeneire
Copyright © 2020 R Veera Kumar
Copyright © 2020, 2021, 2022 Pierre Langlois
Copyright © 2020 pinoaffe
Copyright © 2020, 2023 André Batista
Copyright © 2020, 2021 Alexandru-Sergiu Marton
Copyright © 2020 raingloom
Copyright © 2020 Daniel Brooks
Copyright © 2020 John Soo
Copyright © 2020 Jonathan Brielmaier
Copyright © 2020 Edgar Vincent
Copyright © 2021, 2022 Maxime Devos
Copyright © 2021 B. Wilson
Copyright © 2021 Xinglu Chen
Copyright © 2021 Raghav Gururajan
Copyright © 2021 Domagoj Stolfa
Copyright © 2021 Hui Lu
Copyright © 2021 pukkamustard
Copyright © 2021 Alice Brenon
Copyright © 2021-2023 Josselin Poiret
Copyright © 2021, 2023 muradm
Copyright © 2021, 2022 Andrew Tropin
Copyright © 2021 Sarah Morgensen
Copyright © 2022 Remco van ’t Veer
Copyright © 2022 Aleksandr Vityazev
Copyright © 2022 Philip M^{c}Grath
Copyright © 2022 Karl Hallsby
Copyright © 2022 Justin Veilleux
Copyright © 2022 Reily Siegel
Copyright © 2022 Simon Streit
Copyright © 2022 (
Copyright © 2022 John Kehayias
Copyright © 2022⁠–⁠2023 Bruno Victal
Copyright © 2022 Ivan Vilata-i-Balaguer
Copyright © 2023-2025 Giacomo Leidi
Copyright © 2022 Antero Mejr
Copyright © 2023 Karl Hallsby
Copyright © 2023 Nathaniel Nicandro
Copyright © 2023 Tanguy Le Carrour
Copyright © 2023-2024 Zheng Junjie
Copyright © 2023 Brian Cully
Copyright © 2023 Felix Lechner
Copyright © 2023 Foundation Devices, Inc.
Copyright © 2023 Thomas Ieong
Copyright © 2023 Saku Laesvuori
Copyright © 2023 Graham James Addis
Copyright © 2023-2025 Tomas Volf
Copyright © 2024, 2025 Herman Rimm
Copyright © 2024 Matthew Trzcinski
Copyright © 2024 Richard Sent
Copyright © 2024 Dariqq
Copyright © 2024 Denis ’GNUtoo’ Carikli
Copyright © 2024 Fabio Natali
Copyright © 2024 Arnaud Daby-Seesaram
Copyright © 2024-2025 Nigko Yerden
Copyright © 2024 Troy Figiel
Copyright © 2024 Sharlatan Hellseher
Copyright © 2024 45mg
Copyright © 2024 Greg Hogan
Copyright © 2025 Sören Tempel
Copyright © 2025 Rostislav Svoboda
Copyright © 2025 Zacchaeus
Copyright © 2025 Sergio Pastor Pérez
Copyright © 2024 Evgeny Pisemsky
Copyright © 2025 jgart
Copyright © 2025 Artur Wroblewski
Copyright © 2025 Edouard Klein
Copyright © 2025 Rodion Goritskov
Copyright © 2025 dan
Copyright © 2025 Noé Lopez

   Es ist Ihnen gestattet, dieses Dokument zu vervielfältigen,
weiterzugeben und/oder zu verändern, unter den Bedingungen der GNU Free
Documentation License, entweder gemäß Version 1.3 der Lizenz oder (nach
Ihrer Option) einer späteren Version, die von der Free Software
Foundation veröffentlicht wurde, ohne unveränderliche Abschnitte, ohne
vorderen Umschlagtext und ohne hinteren Umschlagtext. Eine Kopie der
Lizenz finden Sie im Abschnitt mit dem Titel „GNU-Lizenz für freie
Dokumentation“.
INFO-DIR-SECTION Systemadministration
START-INFO-DIR-ENTRY
* Guix.de: (guix.de).        Installierte Software und Systemkonfigurationen
                               verwalten.
* guix package: (guix.de)guix package aufrufen.  Pakete installieren,
                                                   entfernen und
                                                   aktualisieren.
* guix gc: (guix.de)guix gc aufrufen.  Unbenutzten Plattenspeicher wieder
                                         freigeben.
* guix pull: (guix.de)guix pull aufrufen.  Die Liste verfügbarer Pakete
                                             aktualisieren.
* guix system: (guix.de)guix system aufrufen.  Die
                                                 Betriebssystemkonfiguration
                                                 verwalten.
* guix deploy: (guix.de)guix deploy aufrufen.  Betriebssystemkonfigurationen
                                                 entfernter Rechner verwalten.
END-INFO-DIR-ENTRY

INFO-DIR-SECTION Softwareentwicklung
START-INFO-DIR-ENTRY
* guix shell: (guix.de)guix shell aufrufen.  Software-Umgebungen erzeugen.
* guix environment: (guix.de)guix environment aufrufen.  Umgebungen für
                                                           Entwickler
                                                           erstellen
* guix build: (guix.de)guix build aufrufen.  Erstellen von Paketen.
* guix pack: (guix.de)guix pack aufrufen.  Bündel aus Binärdateien
                                             erstellen.
END-INFO-DIR-ENTRY


File: guix.de.info,  Node: Dateientauschdienste,  Next: Systemüberwachungsdienste,  Prev: Telefondienste,  Up: Dienste

11.10.16 Dateientauschdienste
-----------------------------

Im Modul ‘(gnu services file-sharing)’ werden Dienste bereitgestellt,
die beim Übertragen von Dateien zwischen Netzwerkteilnehmern
untereinander helfen („peer-to-peer“).

Transmission-Daemon-Dienst
..........................

Transmission (https://transmissionbt.com/) ist ein vielseitiger
BitTorrent-Client, der eine Vielzahl grafischer und
befehlszeilenbasierter Benutzeroberflächen bereitstellt. Ein Dienst vom
Typ ‘transmission-daemon-service-type’ macht die Variante für die
Nutzung ohne Oberfläche zugänglich, nämlich ‘transmission-daemon’, als
ein Systemdienst, mit dem Benutzer Dateien über BitTorrent teilen
können, selbst wenn sie gerade nicht angemeldet sind.

 -- Variable: transmission-daemon-service-type
     Der Diensttyp für den BitTorrent-Client „Transmission Daemon“. Sein
     Wert muss ein ‘transmission-daemon-configuration’-Verbundsobjekt
     wie in diesem Beispiel sein:

          (service transmission-daemon-service-type
                   (transmission-daemon-configuration
                    ;; Zugriff auf die Steuerungsschnittstelle über
                    ;; entfernte Prozeduraufrufe (Remote Procedure Calls)
                    (rpc-authentication-required? #t)
                    (rpc-username "transmission")
                    (rpc-password
                     (transmission-password-hash
                      "transmission" ; gewünschtes Passwort
                      "uKd1uMs9"))   ; beliebiges „Salt“

                    ;; Anfragen von diesem Rechner und Rechnern im
                    ;; lokalen Netzwerk erlauben
                    (rpc-whitelist-enabled? #t)
                    (rpc-whitelist '("::1" "127.0.0.1" "192.168.0.*"))

                    ;; Während der Arbeitszeit die Bandbreite begrenzen
                    (alt-speed-down (* 1024 2)) ;   2 MB/s
                    (alt-speed-up 512)          ; 512 kB/s

                    (alt-speed-time-enabled? #t)
                    (alt-speed-time-day 'weekdays)
                    (alt-speed-time-begin
                     (+ (* 60 8) 30))           ; 8:30 morgens
                    (alt-speed-time-end
                     (+ (* 60 (+ 12 5)) 30))))  ; 5:30 nachmittags / abends

   Sobald der Dienst gestartet wurde, können Benutzer mit dem Daemon
über seine Webschnittstelle interagieren (auf ‘http://localhost:9091/’)
oder indem sie das Werkzeug ‘transmission-remote’ auf der Befehlszeile
aufrufen. Es ist Teil des Pakets ‘transmission’. (Emacs-Nutzer möchten
vielleicht einen Blick auf das Paket ‘emacs-transmission’ werfen.) Beide
kommunizieren mit dem Daemon über seine Schnittstelle für entfernte
Prozeduraufrufe (Remote Procedure Calls, RPC), was nach Vorgabe jedem
Nutzer auf dem System zur Verfügung steht. Sie könnten das ändern
wollen, indem Sie die Einstellungen ‘rpc-authentication-required?’,
‘rpc-username’ und ‘rpc-password’ anpassen, wie oben gezeigt und im
Folgenden beschrieben.

   Als Wert für ‘rpc-password’ muss ein Passwort in der Art angegeben
werden, die Transmission-Clients erzeugen und nutzen. Sie können es aus
einer bestehenden Datei ‘settings.json’ exakt kopieren, wenn bereits ein
anderer Transmission-Client benutzt wurde. Andernfalls können Sie mit
den Prozeduren ‘transmission-password-hash’ und
‘transmission-random-salt’ aus diesem Modul einen geeigneten Hash-Wert
bestimmen.

 -- Prozedur: transmission-password-hash Passwort Salt
     Liefert eine Zeichenkette mit dem Hash von PASSWORT zusammen mit
     dem SALT in dem Format, das Clients für Transmission für deren
     ‘rpc-password’-Einstellung erkennen.

     Das SALT muss eine acht Zeichen lange Zeichenkette sein. Die
     Prozedur ‘transmission-random-salt’ kann benutzt werden, um einen
     geeigneten Salt-Wert zufällig zu erzeugen.

 -- Prozedur: transmission-random-salt
     Liefert eine Zeichenkette mit einem zufälligen, acht Zeichen langen
     Salt-Wert von der Art, wie sie Clients für Transmission erzeugen
     und benutzen. Sie ist dafür geeignet, an die Prozedur
     ‘transmission-password-hash’ übergeben zu werden.

   Diese Prozeduren sind aus einer über den Befehl ‘guix repl’
gestarteten Guile-REPL heraus zugänglich (siehe *note Aufruf von guix
repl::). Sie eignen sich dafür, einen zufälligen Salt-Wert zu bekommen,
der als der zweite Parameter an „transmission-password-hash“ übergeben
werden kann. Zum Beispiel:

     $ guix repl
     scheme@(guix-user)> ,use (gnu services file-sharing)
     scheme@(guix-user)> (transmission-random-salt)
     $1 = "uKd1uMs9"

   Alternativ kann ein vollständiger Passwort-Hash in einem einzigen
Schritt erzeugt werden:

     scheme@(guix-user)> (transmission-password-hash "transmission"
     (transmission-random-salt))
     $2 = "{c8bbc6d1740cd8dc819a6e25563b67812c1c19c9VtFPfdsX"

   Die sich ergebende Zeichenkette kann so, wie sie ist, als der Wert
von ‘rpc-password’ eingesetzt werden. Dadurch kann das Passwort geheim
gehalten werden, selbst in einer Betriebssystemkonfiguration.

   Vom Daemon heruntergeladene Torrent-Dateien sind nur für die Benutzer
in der Benutzergruppe „transmission“ direkt zugänglich. Sie haben auf
das in der Einstellung ‘download-dir’ angegebene Verzeichnis nur
Lesezugriff (und auf das in ‘incomplete-dir’ angegebene Verzeichnis,
sofern ‘incomplete-dir-enabled?’ auf ‘#t’ gesetzt ist). Heruntergeladene
Dateien können in beliebige Verzeichnisse verschoben oder ganz gelöscht
werden, indem Sie ‘transmission-remote’ mit den Befehlszeilenoptionen
‘--move’ zum Verschieben und ‘--remove-and-delete’ zum Löschen benutzen.

   Wenn die Einstellung ‘watch-dir-enabled?’ auf ‘#t’ gesetzt ist, haben
die Benutzer in der Gruppe „transmission“ auch die Möglichkeit,
‘.torrent’-Dateien in dem über ‘watch-dir’ angegebenen Verzeichnis zu
platzieren. Dadurch fügt der Daemon die entsprechenden Torrents hinzu.
(Mit der Einstellung ‘trash-original-torrent-files?’ wird festgelegt, ob
der Daemon diese Dateien löschen soll, wenn er mit ihnen fertig ist.)

   Manche der Einstellungen des Daemons können zeitweilig über
‘transmission-remote’ und ähnliche Werkzeuge geändert werden. Sie können
solche Änderungen rückgängig machen, indem Sie die ‘reload’-Aktion des
Dienstes aufrufen. Dann lädt der Daemon seine Einstellungen neu von der
Platte:

     # herd reload transmission-daemon

   Die vollständige Menge der Einstellmöglichkeiten finden Sie in der
Definition des Datentyps ‘transmission-daemon-configuration’.

 -- Datentyp: transmission-daemon-configuration
     Dieser Datentyp repräsentiert die Einstellungen für den
     Transmission-Daemon. Sie entsprechen direkt den Einstellungen, die
     Clients für Transmission aus deren Datei ‘settings.json’ erkennen
     können.

   Verfügbare ‘transmission-daemon-configuration’-Felder sind:

 -- transmission-daemon-configuration-Parameter: „package“ transmission
     Das Transmission-Paket, das benutzt werden soll.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl stop-wait-period
     Wie viele Sekunden gewartet werden soll, wenn der Dienst für
     ‘transmission-daemon’ gestoppt wird, bis dieser sich beendet, bevor
     sein Prozess erzwungen beendet wird. Dadurch wird dem Daemon etwas
     Zeit gegeben, seine Daten in Ordnung zu bringen und seinen Trackern
     ein letztes Mal Bescheid zu geben, wenn er herunterfährt. Auf
     langsamen Rechnern oder Rechnern mit einer langsamen
     Netzwerkanbindung könnte es besser sein, diesen Wert zu erhöhen.

     Die Vorgabe ist ‘10’.

 -- transmission-daemon-configuration-Parameter: Zeichenkette
          download-dir
     Das Verzeichnis, wohin Torrent-Dateien heruntergeladen werden.

     Die Vorgabe ist ‘"/var/lib/transmission-daemon/downloads"’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          incomplete-dir-enabled?
     Wenn es ‘#t’ ist, werden Dateien in ‘incomplete-dir’
     zwischengespeichert, während ihr Torrent heruntergeladen wird, und
     nach Abschluss des Torrents nach ‘download-dir’ verschoben.
     Andernfalls werden Dateien für alle Torrents gleich in
     ‘download-dir’ gespeichert (einschließlich derer, bei denen das
     Herunterladen noch im Gange ist).

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Zeichenkette
          incomplete-dir
     In welchem Verzeichnis die Dateien bei noch nicht abgeschlossenem
     Herunterladen zwischengespeichert werden, falls
     ‘incomplete-dir-enabled?’ auf ‘#t’ gesetzt ist.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: umask umask
     Die Dateimodusmaske, mit der heruntergeladene Dateien erzeugt
     werden. (Siehe die Handbuchseite von ‘umask’ für mehr
     Informationen.)

     Die Vorgabe ist ‘18’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          rename-partial-files?
     Wenn es ‘#t’ ist, wird an die Namen teilweise heruntergeladener
     Dateien „.part“ angehängt.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Zuweisungsmodus
          preallocation
     Auf welche Art vorab Speicher für heruntergeladene Dateien
     zugewiesen werden soll. Entweder ‘none’ (gar nicht), ‘fast’
     (schnell) bzw. gleichbedeutend ‘sparse’ (dünnbesetzt/kompakt) oder
     ‘full’ (gänzlich). Bei ‘full’ fragmentiert die Platte am wenigsten,
     aber es dauert länger, die Datei zu erzeugen.

     Vorgegeben ist ‘fast’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          watch-dir-enabled?
     Ist es ‘#t’, wird das in ‘watch-dir’ angegebene Verzeichnis
     beobachtet, ob dort neue ‘.torrent’-Dateien eingefügt werden. Die
     darin beschriebenen Torrents werden automatisch hinzugefügt (und
     die ursprünglichen Dateien werden entfernt, wenn
     ‘trash-original-torrent-files?’ auf ‘#t’ steht).

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Zeichenkette
          watch-dir
     Welches Verzeichnis beobachtet wird, ob dort neue
     ‘.torrent’-Dateien eingefügt werden, die neu hinzuzufügende
     Torrents anzeigen, falls ‘watch-dir-enabled’ auf ‘#t’ steht.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          trash-original-torrent-files?
     Wenn es ‘#t’ ist, werden ‘.torrent’-Dateien aus dem beobachteten
     Verzeichnis gelöscht, sobald ihr Torrent hinzugefügt worden ist
     (siehe ‘watch-directory-enabled?’).

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          speed-limit-down-enabled?
     Wenn es ‘#t’ ist, wird die Geschwindigkeit beim Herunterladen durch
     den Daemon durch die in ‘speed-limit-down’ angegebene Rate
     beschränkt.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl speed-limit-down
     Die standardmäßige globale Höchstgeschwindigkeit für das
     Herunterladen, in Kilobyte pro Sekunde.

     Die Vorgabe ist ‘100’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          speed-limit-up-enabled?
     Wenn es ‘#t’ ist, wird die Geschwindigkeit des Daemons beim
     Hochladen durch die in ‘speed-limit-up’ eingestellte Rate
     beschränkt.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl speed-limit-up
     Die standardmäßige globale Höchstgeschwindigkeit für das Hochladen,
     in Kilobyte pro Sekunde.

     Die Vorgabe ist ‘100’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          alt-speed-enabled?
     Wenn es ‘#t’ ist, gelten die alternativen Höchstgeschwindigkeiten
     ‘alt-speed-down’ und ‘alt-speed-up’ (statt ‘speed-limit-down’ und
     ‘speed-limit-up’, wenn sie aktiviert sind), um die
     Bandbreitennutzung des Daemons einzuschränken. Sie können einen
     Plan festlegen, zu welchen Zeiten in der Woche sie automatisch
     aktiviert werden; siehe ‘alt-speed-time-enabled?’.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl alt-speed-down
     Die alternative globale Höchstgeschwindigkeit für das
     Herunterladen, in Kilobyte pro Sekunde.

     Die Vorgabe ist ‘50’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl alt-speed-up
     Die alternative globale Höchstgeschwindigkeit für das Hochladen, in
     Kilobyte pro Sekunde.

     Die Vorgabe ist ‘50’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          alt-speed-time-enabled?
     Wenn es ‘#t’ ist, werden die alternativen Höchstgeschwindigkeiten
     ‘alt-speed-down’ und ‘alt-speed-up’ automatisch während bestimmter
     Zeitperioden aktiviert, entsprechend der Einstellungen für
     ‘alt-speed-time-day’, ‘alt-speed-time-begin’ und
     ‘alt-speed-time-end’.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Tage-Liste
          alt-speed-time-day
     An welchen Wochentagen die alternative
     Höchstgeschwindigkeitsplanung benutzt werden soll. Anzugeben ist
     entweder eine Liste der englischen Namen der Wochentage (‘sunday’,
     ‘monday’ und so weiter) oder eines der Symbole ‘weekdays’ (unter
     der Woche), ‘weekends’ (an Wochenenden) oder ‘all’.

     Die Vorgabe ist ‘all’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl alt-speed-time-begin
     Zu welcher Uhrzeit die alternativen Höchstgeschwindigkeiten in
     Kraft treten, als Anzahl der Minuten seit Mitternacht.

     Die Vorgabe ist ‘540’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl alt-speed-time-end
     Ab welcher Uhrzeit die alternativen Höchstgeschwindigkeiten nicht
     mehr gelten, als Anzahl der Minuten seit Mitternacht.

     Die Vorgabe ist ‘1020’.

 -- transmission-daemon-configuration-Parameter: Zeichenkette
          bind-address-ipv4
     Auf welcher IP-Adresse auf Verbindungen von anderen
     Netzwerkteilnehmern (Peers) gelauscht wird. Benutzen Sie
     „‘0.0.0.0’“, wenn auf allen verfügbaren IP-Adressen gelauscht
     werden soll.

     Die Vorgabe ist ‘"0.0.0.0"’.

 -- transmission-daemon-configuration-Parameter: Zeichenkette
          bind-address-ipv6
     Auf welcher IPv6-Adresse auf Verbindungen von anderen
     Netzwerkteilnehmern (Peers) gelauscht wird. Benutzen Sie „‘::’“,
     wenn auf allen verfügbaren IPv6-Adressen gelauscht werden soll.

     Die Vorgabe ist ‘"::"’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          peer-port-random-on-start?
     Wenn es ‘#t’ ist, wählt der Daemon bei seinem Start einen Port mit
     zufälliger Portnummer, auf dem er auf Verbindungen durch andere
     Netzwerkteilnehmer lauscht. Die Nummer liegt zwischen
     (einschließlich) den Angaben in ‘peer-port-random-low’ und
     ‘peer-port-random-high’. Ansonsten wird er auf dem in ‘peer-port’
     angegebenen Port lauschen.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Portnummer
          peer-port-random-low
     Die niedrigste Portnummer, die ausgewählt werden kann, wenn
     ‘peer-port-random-on-start?’ auf ‘#t’ steht.

     Die Vorgabe ist ‘49152’.

 -- transmission-daemon-configuration-Parameter: Portnummer
          peer-port-random-high
     Die höchste Portnummer, die ausgewählt werden kann, wenn
     ‘peer-port-random-on-start?’ auf ‘#t’ steht.

     Die Vorgabe ist ‘65535’.

 -- transmission-daemon-configuration-Parameter: Portnummer peer-port
     Auf welchem Port auf Verbindungsversuche anderer Netzwerkteilnehmer
     gelauscht wird, wenn ‘peer-port-random-on-start?’ auf ‘#f’ steht.

     Die Vorgabe ist ‘51413’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          port-forwarding-enabled?
     Wenn es ‘#t’ ist, wird der Daemon versuchen, eine Weiterleitung
     benötigter Ports beim Internetzugang (Gateway), an dem der Rechner
     angeschlossen ist, automatisch über UPnP und NAT-PMP einzurichten.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Verschlüsselungsmodus
          encryption
     Ob Verbindungen zu anderen Netzwerkteilnehmern (Peers)
     verschlüsselt werden sollen; entweder
     ‘prefer-unencrypted-connections’ (unverschlüsselte Verbindungen
     bevorzugen), ‘prefer-encrypted-connections’ (verschlüsselte
     Verbindungen bevorzugen) oder ‘require-encrypted-connections’ (nur
     verschlüsselte Verbindungen benutzen).

     Die Vorgabe ist ‘prefer-encrypted-connections’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Zeichenkette
          peer-congestion-algorithm
     Der Algorithmus zur TCP-Staukontrolle, der für Verbindungen zu
     anderen Netzwerkteilnehmern (Peers) verwendet werden soll.
     Anzugeben ist eine Zeichenkette, die das Betriebssystem für Aufrufe
     an ‘setsockopt’ zulässt. Wenn nichts angegeben wird, wird die
     Voreinstellung des Betriebssystems angewandt.

     Es ist anzumerken, dass der Kernel auf GNU/Linux-Systemen so
     konfiguriert werden muss, dass Prozesse zur Nutzung eines nicht
     standardmäßigen Algorithmus zur Staukontrolle berechtigt sind,
     andernfalls wird er solche Anfragen mit „Die Operation ist nicht
     erlaubt“ ablehnen. Um die auf Ihrem System verfügbaren und zur
     Nutzung freigegebenen Algorithmen zu sehen, schauen Sie sich den
     Inhalt der Dateien ‘tcp_available_congestion_control’ und
     ‘tcp_allowed_congestion_control’ im Verzeichnis
     ‘/proc/sys/net/ipv4’ an.

     Wenn Sie zum Beispiel den Transmission-Daemon zusammen mit dem
     TCP-LP-Algorithmus (http://www-ece.rice.edu/networks/TCP-LP/) („TCP
     Low Priority“) zur Staukontrolle benutzen möchten, müssen Sie Ihre
     Kernelkonfiguration anpassen, damit Unterstützung für den
     Algorithmus eingebaut wird. Anschließend müssen Sie Ihre
     Betriebssystemkonfiguration anpassen, um dessen Nutzung zu
     erlauben, indem Sie einen Dienst des Typs ‘sysctl-service-type’
     hinzufügen (bzw. die Konfiguration des bestehenden Dienstes
     anpassen). Fügen Sie Zeilen ähnlich der folgenden hinzu:

          (service sysctl-service-type
                   (sysctl-configuration
                    (settings
                     ("net.ipv4.tcp_allowed_congestion_control" .
                      "reno cubic lp"))))

     Dann können Sie die Konfiguration des Transmission-Daemons
     aktualisieren zu

          (peer-congestion-algorithm "lp")

     und das System rekonfigurieren, damit die Änderungen in Kraft
     treten.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: TCP-Type-Of-Service
          peer-socket-tos
     Welcher Type-Of-Service in ausgehenden TCP-Paketen angefragt werden
     soll; entweder ‘default’, ‘low-cost’, ‘throughput’, ‘low-delay’
     oder ‘reliability’.

     Die Vorgabe ist ‘default’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl peer-limit-global
     Die globale Höchstgrenze für die Anzahl verbundener
     Netzwerkteilnehmer (Peers).

     Die Vorgabe ist ‘200’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl peer-limit-per-torrent
     Die Höchstgrenze pro Torrent für die Anzahl verbundener
     Netzwerkteilnehmer (Peers).

     Die Vorgabe ist ‘50’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl upload-slots-per-torrent
     An wie viele Netzwerkteilnehmer der Daemon höchstens für denselben
     Torrent gleichzeitig Daten hochlädt.

     Die Vorgabe ist ‘14’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl peer-id-ttl-hours
     Wie viele Stunden die jedem öffentlichen Torrent zugewiesene
     Peer-ID höchstens benutzt wird, bevor sie neu erzeugt wird.

     Die Vorgabe ist ‘6’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          blocklist-enabled?
     Wenn es ‘#t’ ist, wird der Daemon in der Sperrliste vorkommende
     Netzwerkteilnehmer ignorieren. Die Sperrliste lädt er von der
     ‘blocklist-url’ herunter.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Zeichenkette
          blocklist-url
     Die URL zu einer Filterliste zu sperrender Netzwerkteilnehmer
     (Peers) im P2P-Plaintext-Format oder im eMule-‘.dat’-Format. Sie
     wird regelmäßig neu heruntergeladen und angewandt, wenn
     ‘blocklist-enabled?’ auf ‘#t’ gesetzt ist.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          download-queue-enabled?
     Wenn es ‘#t’ ist, wird der Daemon höchstens ‘download-queue-size’
     _nicht_ stillstehende Torrents gleichzeitig herunterladen.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl download-queue-size
     Die Größe der Warteschlange herunterzuladender Torrents. Sie ist
     die Höchstzahl _nicht_ stillstehender Torrents, die gleichzeitig
     heruntergeladen werden, wenn ‘download-queue-enabled?’ auf ‘#t’
     gesetzt ist.

     Die Vorgabe ist ‘5’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          seed-queue-enabled?
     Wenn es ‘#t’ ist, wird der Daemon höchstens ‘seed-queue-size’
     _nicht_ stillstehende Torrents gleichzeitig verteilen („seeden“).

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl seed-queue-size
     Die Größe der Warteschlange zu verteilender Torrents. Sie ist die
     Höchstzahl _nicht_ stillstehender Torrents, die gleichzeitig
     verteilt werden, wenn ‘seed-queue-enabled?’ auf ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘10’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          queue-stalled-enabled?
     Wenn es ‘#t’ ist, wird der Daemon solche Torrents als stillstehend
     erachten, für die er in den letzten ‘queue-stalled-minutes’ Minuten
     _keine_ Daten geteilt hat, und diese bei Beachtung der
     Beschränkungen in ‘download-queue-size’ und ‘seed-queue-size’
     _nicht_ berücksichtigen.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl queue-stalled-minutes
     Für wie viele Minuten ein Torrent höchstens inaktiv sein darf,
     bevor er als stillstehend gilt, sofern ‘queue-stalled-enabled?’ auf
     ‘#t’ steht.

     Die Vorgabe ist ‘30’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          ratio-limit-enabled?
     Wenn es ‘#t’ ist, werden Torrents, die verteilt („geseedet“)
     werden, automatisch pausiert, sobald das in ‘ratio-limit’
     festgelegte Verhältnis erreicht ist.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-rationale-Zahl ratio-limit
     Das Verhältnis, ab dem ein Torrent, der verteilt wird, pausiert
     wird, wenn ‘ratio-limit-enabled?’ auf ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘2.0’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          idle-seeding-limit-enabled?
     Wenn es ‘#t’ ist, werden Torrents, die verteilt werden, automatisch
     pausiert, sobald sie für ‘idle-seeding-limit’ Minuten inaktiv
     waren.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl idle-seeding-limit
     Wie viele Minuten ein Torrent, der verteilt wird, höchstens inaktiv
     sein darf, bevor er pausiert wird, wenn
     ‘idle-seeding-limit-enabled?’ auf ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘30’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          dht-enabled?
     Das DHT-Protokoll (http://bittorrent.org/beps/bep_0005.html) zum
     Einsatz einer verteilten Hashtabelle (Distributed Hash Table, DHT)
     zur Unterstützung trackerloser Torrents aktivieren.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          lpd-enabled?
     Local Peer Discovery
     (https://en.wikipedia.org/wiki/Local_Peer_Discovery) (LPD)
     aktivieren, d.h. Netzwerkteilnehmer im lokalen Netz werden
     ermittelt, wodurch vielleicht weniger Daten über das öffentliche
     Internet gesendet werden müssen.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          pex-enabled?
     Peer Exchange (https://en.wikipedia.org/wiki/Peer_exchange) (PEX)
     aktivieren, wodurch der Daemon weniger von externen Trackern
     abhängt und vielleicht schneller ist.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          utp-enabled?
     Das Mikro-Transport-Protokoll
     (http://bittorrent.org/beps/bep_0029.html) (uTP) aktivieren, damit
     BitTorrent-Datenverkehr andere Netzwerknutzungen im lokalen
     Netzwerk weniger beeinträchtigt, die verfügbare Bandbreite aber
     möglichst voll ausgeschöpft wird.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          rpc-enabled?
     Wenn es ‘#t’ ist, wird die Fernsteuerung des Daemons über die
     Schnittstelle entfernter Prozeduraufrufe (Remote Procedure Call,
     RPC) zugelassen. Dadurch kann man ihn über seine Weboberfläche,
     über den Befehlszeilen-Client ‘transmission-remote’ oder über
     ähnliche Werkzeuge steuern.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Zeichenkette
          rpc-bind-address
     Auf welcher IP-Adresse auf RPC-Verbindungen gelauscht wird.
     Benutzen Sie „‘0.0.0.0’“, wenn auf allen verfügbaren IP-Adressen
     gelauscht werden soll.

     Die Vorgabe ist ‘"0.0.0.0"’.

 -- transmission-daemon-configuration-Parameter: Portnummer rpc-port
     Auf welchem Port auf RPC-Verbindungen gelauscht werden soll.

     Die Vorgabe ist ‘9091’.

 -- transmission-daemon-configuration-Parameter: Zeichenkette rpc-url
     Das Präfix für die Pfade in den URLs des RPC-Endpunkts.

     Die Vorgabe ist ‘"/transmission/"’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          rpc-authentication-required?
     Wenn es ‘#t’ ist, müssen sich Clients bei der RPC-Schnittstelle
     authentifizieren (siehe ‘rpc-username’ und ‘rpc-password’).
     Anzumerken ist, dass dann die Liste erlaubter Rechnernamen
     ignoriert wird (siehe ‘rpc-host-whitelist-enabled?’.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Zeichenkette
          rpc-username
     Welchen Benutzernamen Clients verwenden müssen, um über die
     RPC-Schnittstelle zugreifen zu dürfen, wenn
     ‘rpc-authentication-required?’ auf ‘#t’ gesetzt ist.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter:
          Vielleicht-Transmissionpasswort-Hash rpc-password
     Welches Passwort Clients brauchen, um über die RPC-Schnittstelle
     zugreifen zu dürfen, wenn ‘rpc-authentication-required?’ auf ‘#t’
     gesetzt ist. Es muss als Passwort-Hash im von Transmission-Clients
     erkannten Format angegeben werden. Kopieren Sie es entweder aus
     einer bestehenden ‘settings.json’-Datei oder lassen Sie es mit der
     Prozedur ‘transmission-password-hash’ erzeugen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          rpc-whitelist-enabled?
     Wenn es ‘#t’ ist, werden RPC-Anfragen nur dann akzeptiert, wenn sie
     von einer in ‘rpc-whitelist’ angegebenen Adresse kommen.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Zeichenketten-Liste
          rpc-whitelist
     Die Liste der IP- und IPv6-Adressen, von denen RPC-Anfragen
     angenommen werden, wenn ‘rpc-whitelist-enabled?’ auf ‘#t’ gesetzt
     ist. Hierbei kann ‘*’ als Platzhalter verwendet werden.

     Die Vorgabe ist ‘'("127.0.0.1" "::1")’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          rpc-host-whitelist-enabled?
     Wenn es ‘#t’ ist, werden RPC-Anfragen nur dann angenommen, wenn sie
     an einen Rechnernamen aus der Liste ‘rpc-host-whitelist’ adressiert
     sind. Allerdings werden Anfragen an „localhost“ oder „localhost.“
     oder eine numerische Adresse immer angenommen, egal was hier
     eingestellt ist.

     Anzumerken ist, dass diese Funktionalität ignoriert wird, wenn
     ‘rpc-authentication-required?’ auf ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Zeichenketten-Liste
          rpc-host-whitelist
     Die Liste der Rechnernamen, auf die der RPC-Server reagiert, wenn
     ‘rpc-host-whitelist-enabled?’ auf ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘'()’.

 -- transmission-daemon-configuration-Parameter: Meldungsstufe
          message-level
     Ab welcher Schwerestufe der Daemon Meldungen ins Protokoll (in
     ‘/var/log/transmission.log’) aufnimmt, entweder ‘none’ (gar nicht),
     ‘error’ (nur Fehler), ‘info’ oder ‘debug’.

     Die Vorgabe ist ‘info’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          start-added-torrents?
     Wenn es ‘#t’ ist, werden Torrents gestartet, sobald sie hinzugefügt
     wurden, ansonsten sind sie nach dem Hinzufügen im pausierten
     Zustand.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          script-torrent-done-enabled?
     Wenn es ‘#t’ ist, wird immer dann, wenn ein Torrent abgeschlossen
     wurde, das durch ‘script-torrent-done-filename’ angegebene Skript
     aufgerufen.

     Vorgegeben ist ‘#f’.

 -- transmission-daemon-configuration-Parameter: Vielleicht-Dateiobjekt
          script-torrent-done-filename
     Ein Dateiname oder ein dateiartiges Objekt eines Skripts, das nach
     Abschluss eines Torrents aufgerufen werden soll, wenn
     ‘script-torrent-done-enabled?’ auf ‘#t’ gesetzt ist.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          scrape-paused-torrents-enabled?
     Wenn es ‘#t’ ist, wird der Daemon selbst dann auf Trackern nach
     einem Torrent suchen, wenn der Torrent pausiert ist.

     Die Vorgabe ist ‘#t’.

 -- transmission-daemon-configuration-Parameter:
          Nichtnegative-ganze-Zahl cache-size-mb
     Wie viele Megabyte Speicher für den im Arbeitsspeicher liegenden
     Zwischenspeicher des Daemons reserviert werden sollen. Ein größerer
     Wert kann eine höhere Leistung bedeuten, indem weniger oft auf die
     Platte zugegriffen werden muss.

     Die Vorgabe ist ‘4’.

 -- transmission-daemon-configuration-Parameter: Boolescher-Ausdruck
          prefetch-enabled?
     Wenn es ‘#t’ ist, wird der Daemon versuchen, die
     Ein-/Ausgabeleistung zu verbessern, indem er dem Betriebssystem
     Hinweise gibt, auf welche Daten er wahrscheinlich als Nächstes
     zugreift, um den Anfragen anderer Netzwerkteilnehmer nachzukommen.

     Die Vorgabe ist ‘#t’.


File: guix.de.info,  Node: Systemüberwachungsdienste,  Next: Kerberos-Dienste,  Prev: Dateientauschdienste,  Up: Dienste

11.10.17 Systemüberwachungsdienste
----------------------------------

Darkstat-Dienst
...............

Darkstat ist ein Netzwerkanalyseprogramm, das Pakete im Datenverkehr
aufzeichnet, Statistiken zur Netzwerknutzung berechnet und über HTTP
Berichte dazu bereitstellt.

 -- Variable: darkstat-service-type
     Dies ist der Diensttyp für den darkstat-Dienst
     (https://unix4lyfe.org/darkstat/). Sein Wert muss ein
     ‘darkstat-configuration’-Verbundsobjekt sein, wie in diesem
     Beispiel:

          (service darkstat-service-type
                   (darkstat-configuration
                     (interface "eno1")))

 -- Datentyp: darkstat-configuration
     Datentyp, der die Konfiguration von ‘darkstat’ repräsentiert.

     ‘package’ (Vorgabe: ‘darkstat’)
          Welches darkstat-Paket verwendet werden soll.

     ‘interface’
          Datenverkehr an der angegebenen Netzwerkschnittstelle
          mitschneiden.

     ‘port’ (Vorgabe: ‘"667"’)
          Bindet die Weboberfläche an den angegebenen Port.

     ‘bind-address’ (Vorgabe: ‘"127.0.0.1"’)
          Bindet die Weboberfläche an die angegebene Adresse.

     ‘base’ (Vorgabe: ‘"/"’)
          Geben Sie den Pfad der Basis-URL an. Das kann nützlich sein,
          wenn auf ‘darkstat’ über einen inversen Proxy („Reverse
          Proxy“) zugegriffen wird.

Prometheus-Node-Exporter-Dienst
...............................

Der Prometheus-„Node-Exporter“ stellt Statistiken über Hardware und
Betriebssystem für das Prometheus-Systemüberwachungssystem bereit, die
vom Linux-Kernel geliefert werden. Dieser Dienst sollte auf allen
physischen Netzwerkknoten und virtuellen Maschinen installiert werden,
für die eine Überwachung ihrer Statistiken gewünscht wird.

 -- Variable: prometheus-node-exporter-service-type
     Dies ist der Diensttyp für den „prometheus-node-exporter“-Dienst
     (https://github.com/prometheus/node_exporter/). Sein Wert muss ein
     ‘prometheus-node-exporter-configuration’-Verbundsobjekt sein.

          (service prometheus-node-exporter-service-type)

 -- Datentyp: prometheus-node-exporter-configuration
     Repräsentiert die Konfiguration von ‘node_exporter’.

     ‘package’ (Vorgabe: ‘go-github-com-prometheus-node-exporter’)
          Das Paket für den prometheus-node-exporter, was benutzt werden
          soll.

     ‘web-listen-address’ (Vorgabe: ‘":9100"’)
          Bindet die Weboberfläche an die angegebene Adresse.

     ‘textfile-directory’ (Vorgabe: ‘"/var/lib/prometheus/node-exporter"’)
          In dieses Verzeichnis können maschinenspezifische Metriken
          exportiert werden. Hier hinein sollten Dateien mit Metriken im
          Textformat platziert werden, die die Dateiendung ‘.prom’
          haben.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Zusätzliche Befehlszeilenoptionen, die an den
          prometheus-node-exporter übergeben werden sollen.

vnStat-Netzwerkverkehrüberwachung
.................................

vnStat ist ein Programm zur Überwachung des Netzwerkverkehrs. Es benutzt
die Statistiken, die der Kernel zu den Schnittstellen sammelt, statt den
Verkehr mitzuschneiden. Dadurch wird das System selbst bei einer hohen
Datenrate des Netzwerkverkehrs wenig belastet.

 -- Variable: vnstat-service-type
     Dies ist der Diensttyp für den Daemon von vnStat
     (https://humdi.net/vnstat/). Als Wert akzeptiert er eine
     ‘vnstat-configuration’.

     Das folgende Beispiel richtet den Dienst mit seinen Vorgabewerten
     ein:

          (service vnstat-service-type)

 -- Datentyp: vnstat-configuration
     Verfügbare ‘vnstat-configuration’-Felder sind:

     ‘package’ (Vorgabe: ‘vnstat’) (Typ: dateiartig)
          Das vnstat-Paket.

     ‘database-directory’ (Vorgabe: ‘"/var/lib/vnstat"’) (Typ: Zeichenkette)
          Gibt das Verzeichnis an, in dem die Datenbank gespeichert
          werden soll. Es muss ein vollständiger Pfad angegeben werden;
          ein „/“ am Ende ist freiwillig.

     ‘5-minute-hours’ (Vorgabe: ‘48’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit einer fünf Minuten genauen
          Auflösung gespeichert bleiben. Hier legen Sie fest, für wie
          viele Stunden zurück Einträge gespeichert werden. Setzen Sie
          dies auf ‘-1’, damit Einträge unbegrenzt gespeichert bleiben,
          oder auf ‘0’, damit keine Daten mit dieser Auflösung erfasst
          werden.

     ‘64bit-interface-counters’ (Vorgabe: ‘-2’) (Typ: Vielleicht-Ganze-Zahl)
          Wie Zähler von Schnittstellen behandelt werden. Bei ‘1’ wird
          für alle Schnittstellen angenommen, dass sie auf Kernel-Seite
          64-Bit-Zähler benutzen; bei ‘0’, dass sie 32-Bit-Zähler
          benutzen. Bei ‘-1’ wird die frühere Logik aus alten Versionen
          benutzt, nach der für Zählerwerte, die in 32 Bit passen,
          angenommen wird, dass der Zähler 32 Bit hat, und bei größeren
          wird ein 64-Bit-Zähler angenommen. Das kann zu falschen
          Ergebnissen führen, wenn ein 64-Bit-Zähler auf einen Wert
          zurückgesetzt wird, für den 32 Bits genügen. Setzen Sie dies
          auf ‘-2’, damit die Größe anhand von Kernel-Datenstrukturen
          automatisch erkannt wird.

     ‘always-add-new-interfaces?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob neue Datenbankeinträge für Schnittstellen, die in der
          Datenbank noch fehlen, automatisch angelegt werden sollen,
          selbst wenn die Datenbank beim Starten des Daemons bereits
          existiert. Neue Datenbankeinträge werden außerdem angelegt,
          wenn der schon laufende Daemon neue Schnittstellen sieht. Die
          Pseudo-Schnittstellen ‘lo’, ‘lo0’ und ‘sit0’ werden dabei
          immer außen vor gelassen.

     ‘bandwidth-detection?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob versucht werden soll, den Wert für MAX-BANDWIDTH
          automatisch für jede beobachtete Schnittstelle zu finden.
          Hauptsächlich wird das nur bei Ethernet-Schnittstellen
          unterstützt. MAX-BANDWIDTH wird notfalls benutzt, wenn die
          Erkennung fehlschlägt. Wenn die jeweilige Schnittstelle mit
          MAX-BW konfiguriert wurde, wird keine Erkennung dafür
          durchgeführt. In Linux ist die Erkennung bei
          tun-Schnittstellen abgeschaltet, weil der Linux-Kernel immer
          10 Mbit meldet, egal was die echte Schnittstelle benutzt.

     ‘bandwidth-detection-interval’ (Vorgabe: ‘5’) (Typ: Vielleicht-Ganze-Zahl)
          In wie viel Minuten Abstand die Erkennung möglicher Änderungen
          der MAX-BANDWIDTH für jede Schnittstelle durchgeführt werden
          soll, wenn BANDWIDTH-DETECTION aktiv ist. Wenn Sie dies auf
          ‘0’ setzen, deaktivieren Sie es. Wertebereich: ‘0’..‘30’

     ‘boot-variation’ (Vorgabe: ‘15’) (Typ: Vielleicht-Ganze-Zahl)
          Wie viele Sekunden Abweichung bei jeder
          Datenbankaktualisierung zwischen der vom Systemkernel
          gemeldeten Boot Time und der vorigen toleriert werden sollen.
          Wertebereich: ‘0’..‘300’

     ‘check-disk-space?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob vor dem Schreiben der Datenbank geprüft werden soll, ob
          zumindest etwas Plattenplatz verfügbar ist.

     ‘create-directories?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob Verzeichnisse erstellt werden sollen, wenn deren
          konfigurierter Pfad nicht existiert. Dazu gehört auch
          DATABASE-DIRECTORY.

     ‘daemon-group’ (Typ: Vielleicht-Benutzergruppe)
          Zu welcher Benutzergruppe der Daemon-Prozess wechseln soll,
          wenn er gestartet wird. Benutzen Sie ‘%unset-value’, wenn sich
          seine Gruppe nicht ändern soll.

     ‘daemon-user’ (Typ: Vielleicht-Benutzerkonto)
          Zu welchem Benutzer der Daemon-Prozess wechseln soll, wenn er
          gestartet wird. Benutzen Sie ‘%unset-value’, wenn sich das
          Benutzerkonto nicht ändern soll.

     ‘daily-days’ (Vorgabe: ‘62’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit einer tagesgenauen Auflösung
          gespeichert bleiben. Hier legen Sie fest, für wie viele Tage
          zurück Einträge gespeichert werden. Setzen Sie dies auf ‘-1’,
          damit Einträge unbegrenzt gespeichert bleiben, oder auf ‘0’,
          damit keine Daten mit dieser Auflösung erfasst werden.

     ‘database-synchronous’ (Vorgabe: ‘-1’) (Typ: Vielleicht-Ganze-Zahl)
          Ändert die Einstellung der „synchronous“-Option von SQLite,
          mit der Sie steuern, wie aufwendig sichergestellt wird, dass
          ein Schreiben der Datenbank auf die Platte vollzogen wurde,
          bevor andere Aktionen fortgeführt werden. Je höher der Wert,
          desto umfassender wird Datensicherheit gewährleistet, auf
          Kosten langsamerer Leistung. Für den Wert ‘0’ wird das dem
          Dateisystem überlassen. Für ‘-1’ wird der Standardwert anhand
          der Einstellung DATABASE-WRITE-AHEAD-LOGGING? für den
          Datenbankmodus bestimmt. Siehe die Erklärungen in der
          SQLite-Dokumentation für Details zu den Werten von ‘1’ bis
          ‘3’. Wertebereich: ‘-1’..‘3’

     ‘database-write-ahead-logging?’ (Vorgabe: ‘#f’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob Aktionen auf der SQLite-Datenbank erst protokolliert werden
          sollen, bevor sie durchgeführt werden („Write-Ahead Logging“).
          Siehe die SQLite-Dokumentation für genauere Erklärungen.
          Beachten Sie, dass alte Versionen von SQLite dies bei
          Datenbanken nur mit Lesezugriff nicht unterstützen.

     ‘hourly-days’ (Vorgabe: ‘4’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit einer stundengenauen Auflösung
          gespeichert bleiben. Hier legen Sie fest, für wie viele Tage
          zurück Einträge gespeichert werden. Setzen Sie dies auf ‘-1’,
          damit Einträge unbegrenzt gespeichert bleiben, oder auf ‘0’,
          damit keine Daten mit dieser Auflösung erfasst werden.

     ‘log-file’ (Typ: Vielleicht-Zeichenkette)
          Gibt den Dateipfad mit Namen für die Protokolldatei an, wenn
          USE-LOGGING auf ‘1’ gesetzt ist.

     ‘max-bandwidth’ (Typ: Vielleicht-Ganze-Zahl)
          Die maximale Bandbreite, gültig für alle Schnittstellen. Wenn
          der Verkehr über eine Schnittstelle diesen Wert überschreitet,
          wird davon ausgegangen, dass die Daten ungültig sind und sie
          werden abgelehnt. Setzen Sie dies auf 0, um die Funktion
          abzuschalten. Wertebereich: ‘0’..‘50000’

     ‘max-bw’ (Typ: Vielleicht-Assoziative-Liste)
          Genau wie MAX-BANDWIDTH, aber hiermit können Begrenzungen für
          einzelne Schnittstellen festgelegt werden. Anzugeben ist eine
          assoziative Liste von Schnittstellen als Zeichenketten auf
          ganzzahlige Werte. Zum Beispiel:
               (max-bw `(("eth0" .  15000)
                         ("ppp0" .  10000)))
          BANDWIDTH-DETECTION? gilt auf allen Schnittstellen als
          abgeschaltet, wo MAX-BW konfiguriert wurde. Wertebereich:
          ‘0’..‘50000’

     ‘monthly-months’ (Vorgabe: ‘25’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit einer monatsgenauen Auflösung
          gespeichert bleiben. Hier legen Sie fest, für wie viele Monate
          zurück Einträge gespeichert werden. Setzen Sie dies auf ‘-1’,
          damit Einträge unbegrenzt gespeichert bleiben, oder auf ‘0’,
          damit keine Daten mit dieser Auflösung erfasst werden.

     ‘month-rotate’ (Vorgabe: ‘1’) (Typ: Vielleicht-Ganze-Zahl)
          An welchem Tag im Monat ein neuer Monat beginnen soll.
          Normalerweise setzen Sie es auf 1, aber andere Werte sind
          möglich, etwa um monatlich abgerechneten Netzwerkverkehr zu
          überblicken, wenn der Abrechnungszeitraum nicht am
          Monatsersten beginnt. Zum Beispiel werden beim Wert 7 die Tage
          im Februar bis einschließlich 6. Februar noch zum Januar
          gezählt. Eine Änderung an dieser Einstellung bewirkt _keine_
          Neuberechnung bisheriger Daten. Wertebereich: ‘1’..‘28’

     ‘month-rotate-affects-years?’ (Vorgabe: ‘#f’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob sich die Einstellung für MONTH-ROTATE auch auf jährliche
          Daten auswirken soll. Dies ist nur von Bedeutung, wenn der
          Wert von MONTH-ROTATE größer als eins ist.

     ‘offline-save-interval’ (Vorgabe: ‘30’) (Typ: Vielleicht-Ganze-Zahl)
          Mit wie vielen Minuten Abstand zwischengespeicherte Daten zu
          den Schnittstellen in die Datei gespeichert werden sollen,
          wenn alle beobachteten Schnittstellen vom Netz getrennt sind.
          Wertebereich: SAVE-INTERVAL..‘60’

     ‘pid-file’ (Vorgabe: ‘"/var/run/vnstatd.pid"’) (Typ: Vielleicht-Zeichenkette)
          Gibt Pfad und Namen der PID-Datei an.

     ‘poll-interval’ (Vorgabe: ‘5’) (Typ: Vielleicht-Ganze-Zahl)
          Mit wie vielen Sekunden Abstand die Schnittstellen auf
          Statusveränderungen hin überprüft werden. Wertebereich:
          ‘2’..‘60’

     ‘rescan-database-on-save?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob neu hinzugefügte Schnittstellen automatisch aus der
          Datenbank erfasst werden und mit der Beobachtung begonnen
          werden soll. Es wird alle SAVE-INTERVAL bzw.
          OFFLINE-SAVE-INTERVAL Minuten neu geprüft, je nach momentanem
          Aktivitätsstatus.

     ‘save-interval’ (Vorgabe: ‘5’) (Typ: Vielleicht-Ganze-Zahl)
          Mit wie vielen Minuten Abstand zwischengespeicherte Daten zu
          den Schnittstellen in eine Datei gespeichert werden.
          Wertebereich: ( UPDATE-INTERVAL / 60 )..‘60’

     ‘save-on-status-change?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob die zwischengespeicherten Daten zu den Schnittstellen
          außerdem in die Datei gespeichert werden sollen, wenn eine
          Statusveränderung bei einer Schnittstelle festgestellt wurde,
          d.h. wenn eine Schnittstelle vom Netz getrennt oder verbunden
          wird.

     ‘time-sync-wait’ (Vorgabe: ‘5’) (Typ: Vielleicht-Ganze-Zahl)
          Wie viele Minuten beim Starten des Daemons darauf gewartet
          werden soll, dass sich die Systemuhr abgleicht, wenn die
          letzte Datenbankaktualisierung in der Zukunft zu liegen
          scheint. Das kann für Systeme, die keine Echtzeituhr (engl.
          „real-time clock“, RTC) haben, nötig sein, wenn sie erst
          einige Zeit nach dem Hochfahren ihre Uhrzeit berichtigen. ‘0’
          = nicht warten. Wertebereich: ‘0’..‘60’

     ‘top-day-entries’ (Vorgabe: ‘20’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit Spitzentagen gespeichert bleiben.
          Hier legen Sie fest, für wie viele Spitzentage Einträge
          gespeichert werden. Setzen Sie dies auf ‘-1’, damit Einträge
          unbegrenzt gespeichert bleiben, oder auf ‘0’, damit keine
          Daten mit dieser Auflösung erfasst werden.

     ‘trafficless-entries?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob Datenbankeinträge angelegt werden sollen, auch wenn kein
          Netzwerkverkehr während des entsprechenden Zeitabschnitts
          stattgefunden hat.

     ‘update-file-owner?’ (Vorgabe: ‘#t’) (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob der Besitz von Dateien beim Start des Daemon-Prozesses
          übertragen werden soll. Beim Start des Daemons wechseln
          lediglich die Datenbank, die Protokolldatei und die PID-Datei
          den Besitzer, wenn die Felder für Benutzer und Gruppe (
          DAEMON-USER bzw. DAEMON-GROUP ) aktiviert sind und die Dateien
          den falschen Besitzer haben. Bei einer manuellen Erzeugung der
          Datenbank bewirkt diese Einstellung, dass der Besitzer des
          Datenbankverzeichnisses auch für sie eingetragen wird, wenn
          das Verzeichnis bereits existiert. Diese Einstellung bewirkt
          nur dann etwas, wenn der Prozess mit dem root-Benutzer oder
          mit ‘sudo’ gestartet wird.

     ‘update-interval’ (Vorgabe: ‘20’) (Typ: Vielleicht-Ganze-Zahl)
          Mit wie vielen Sekunden Abstand die Daten zu den
          Schnittstellen aktualisiert werden. Wertebereich:
          POLL-INTERVAL..‘300’

     ‘use-logging’ (Vorgabe: ‘2’) (Typ: Vielleicht-Ganze-Zahl)
          Ob eine Protokolldatei geschrieben werden soll. Akzeptierte
          Werte sind: ‘0’ = deaktiviert, ‘1’ = Protokolldatei und ‘2’ =
          syslog.

     ‘use-utc?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob als Zeitzone UTC für alle Einträge genutzt werden soll.
          Wenn aktiviert, benutzen alle zur Datenbank hinzugefügten
          Einträge UTC, egal welche Zeitzone für das System eingestellt
          wurde. Wenn deaktiviert, wird die im System eingestellte
          Zeitzone benutzt. Eine Änderung an dieser Einstellung bewirkt
          keine Änderung bisheriger Daten.

     ‘yearly-years’ (Vorgabe: ‘-1’) (Typ: Vielleicht-Ganze-Zahl)
          Wie lange Dateneinträge mit einer jahresgenauen Auflösung
          gespeichert bleiben. Hier legen Sie fest, für wie viele Jahre
          zurück Einträge gespeichert werden. Setzen Sie dies auf ‘-1’,
          damit Einträge unbegrenzt gespeichert bleiben, oder auf ‘0’,
          damit keine Daten mit dieser Auflösung erfasst werden.

Zabbix-Server
.............

Zabbix ist ein hochleistungsfähiges Überwachungssystem, mit dem Daten
von vielen Quellen gesammelt in einer Web-Oberfläche zur Schau gestellt
werden. Alarm- und Berichtsfunktionen sind eingebaut; auch gibt es
“Vorlagen” für gängige Betriebssystemmetriken, unter anderem die
Netzwerk- und Prozessorauslastung sowie den Plattenplatzverbrauch.

   In diesem Diensttyp steckt das zentrale Überwachungssystem von
Zabbix. Zudem brauchen Sie *note ‘zabbix-front-end-service-type’:
zabbix-front-end, um Zabbix zu konfigurieren und Ergebnisse anzuzeigen,
und vielleicht *note ‘zabbix-agent-service-type’: zabbix-agent. auf den
zu überwachenden Maschinen (auch andere Datenquellen werden unterstützt
wie etwa *note Prometheus Node Exporter: prometheus-node-exporter.).

 -- Variable: zabbix-server-service-type
     Der Diensttyp des Zabbix-Server-Dienstes. Sein Wert muss ein
     ‘zabbix-server-configuration’-Verbundsobjekt sein. Folgendes ist
     enthalten.

 -- Datentyp: zabbix-server-configuration
     Verfügbare ‘zabbix-server-configuration’-Felder sind:

     ‘zabbix-server’ (Vorgabe: ‘zabbix-server’) (Typ: dateiartig)
          Das zabbix-server-Paket.

     ‘user’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Das Benutzerkonto, mit dem der Zabbix-Server ausgeführt wird.

     ‘group’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Die Gruppe, mit der der Zabbix-Server ausgeführt wird.

     ‘db-host’ (Vorgabe: ‘"127.0.0.1"’) (Typ: Zeichenkette)
          Rechnername der Datenbank.

     ‘db-name’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Datenbankname.

     ‘db-user’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Benutzerkonto der Datenbank.

     ‘db-password’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Das Datenbankpasswort. Bitte benutzen Sie stattdessen
          ‘include-files’ mit ‘DBPassword=SECRET’ in einer angegebenen
          Datei.

     ‘db-port’ (Vorgabe: ‘5432’) (Typ: Zahl)
          Datenbank-Portnummer.

     ‘log-type’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Gibt an, wohin Protokollnachrichten geschrieben werden.

             • ‘system’ - Syslog.

             • ‘file’ - Die im ‘log-file’-Parameter angegebene Datei.

             • ‘console’ - Standardausgabe.

     ‘log-file’ (Vorgabe: ‘"/var/log/zabbix/server.log"’) (Typ: Zeichenkette)
          Protokolldateiname für den ‘file’-Parameter von ‘log-type’.

     ‘pid-file’ (Vorgabe: ‘"/var/run/zabbix/zabbix_server.pid"’) (Typ: Zeichenkette)
          Name der PID-Datei.

     ‘ssl-ca-location’ (Vorgabe: ‘"/etc/ssl/certs/ca-certificates.crt"’) (Typ: Zeichenkette)
          Der Ort mit den Dateien über die Zertifikatsautoritäten
          (Certificate Authoritys, CAs) zur Prüfung der
          SSL-Serverzertifikate.

     ‘ssl-cert-location’ (Vorgabe: ‘"/etc/ssl/certs"’) (Typ: Zeichenkette)
          Der Ort mit den SSL-Client-Zertifikaten.

     ‘extra-options’ (Vorgabe: ‘""’) (Typ: Zusatzoptionen)
          Zusätzliche Optionen werden an die
          Zabbix-Server-Konfigurationsdatei angehängt.

     ‘include-files’ (Vorgabe: ‘'()’) (Typ: Einzubindende-Dateien)
          Sie können einzelne Dateien oder alle Dateien in einem
          Verzeichnis in die Konfigurationsdatei einbinden.

Zabbix-Agent
............

Der Zabbix-Agent sammelt Informationen über das laufende System zur
Überwachung mit dem Zabbix-Server. Einige Überprüfungen sind von
vornherein verfügbar; eigene können Sie über “Benutzerparameter”
(https://www.zabbix.com/documentation/current/en/manual/config/items/userparameters)
hinzufügen.

 -- Variable: zabbix-agent-service-type
     Der Diensttyp des Zabbix-Agent-Dienstes. Sein Wert muss ein
     ‘zabbix-agent-configuration’-Verbundsobjekt sein. Folgendes ist
     enthalten.

 -- Datentyp: zabbix-agent-configuration
     Verfügbare ‘zabbix-agent-configuration’-Felder sind:

     ‘zabbix-agent’ (Vorgabe: ‘zabbix-agentd’) (Typ: dateiartig)
          Das zabbix-agent-Paket.

     ‘user’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Das Benutzerkonto, mit dem der Zabbix-Agent ausgeführt wird.

     ‘group’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Die Gruppe, mit der der Zabbix-Agent ausgeführt wird.

     ‘hostname’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Der eindeutige Rechnername in richtiger Groß-/Kleinschreibung,
          der für aktive Überprüfungen benötigt wird und dem im Server
          eingestellten Rechnernamen entsprechen muss.

     ‘log-type’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Gibt an, wohin Protokollnachrichten geschrieben werden.

             • ‘system’ - Syslog.

             • ‘file’ - Die Datei aus dem ‘log-file’-Parameter.

             • ‘console’ - Standardausgabe.

     ‘log-file’ (Vorgabe: ‘"/var/log/zabbix/agent.log"’) (Typ: Zeichenkette)
          Protokolldateiname für den ‘file’-Parameter von ‘log-type’.

     ‘pid-file’ (Vorgabe: ‘"/var/run/zabbix/zabbix_agent.pid"’) (Typ: Zeichenkette)
          Name der PID-Datei.

     ‘server’ (Vorgabe: ‘'("127.0.0.1")’) (Typ: Liste)
          Die Liste der IP-Adressen, optional in CIDR-Notation
          angegeben, oder die Rechnernamen von Zabbix-Servern und
          Zabbix-Proxys. Eingehende Verbindungen werden nur dann
          angenommen, wenn sie von hier angegebenen Rechnern stammen.

     ‘server-active’ (Vorgabe: ‘'("127.0.0.1")’) (Typ: Liste)
          Die Liste aus IP:Port-Paaren (oder Rechnername:Port-Paaren)
          von Zabbix-Servern und Zabbix-Proxys für aktive Überprüfungen.
          Wenn kein Port angegeben wurde, wird der Vorgabeport benutzt.
          Wenn dieser Parameter _nicht_ angegeben wird, werden aktive
          Überprüfungen deaktiviert.

     ‘extra-options’ (Vorgabe: ‘""’) (Typ: Zusatzoptionen)
          Zusätzliche Optionen werden an die
          Zabbix-Server-Konfigurationsdatei angehängt.

     ‘include-files’ (Vorgabe: ‘'()’) (Typ: Einzubindende-Dateien)
          Sie können einzelne Dateien oder alle Dateien in einem
          Verzeichnis in die Konfigurationsdatei einbinden.

Zabbix-Frontend
...............

Mit dem Zabbix-Frontend wird eine Weboberfläche als Vordergrundsystem
(“Frontend”) für Zabbix bereitgestellt. Es kann auch auf einer anderen
Maschine als der Zabbix-Server laufen. Dieser Diensttyp beruht darauf,
die Dienste für *note PHP-FPM:: und *note NGINX:: mit der nötigen
Konfiguration zum Laden der Zabbix-Benutzeroberfläche zu erweitern.

 -- Variable: zabbix-front-end-service-type
     Dieser Diensttyp stellt das Zabbix-Web-Frontend als
     Vordergrundsystem zur Verfügung. Sein Wert muss ein
     ‘zabbix-front-end-configuration’-Verbundsobjekt sein wie hier
     gezeigt.

 -- Datentyp: zabbix-front-end-configuration
     Verfügbare ‘zabbix-front-end-configuration’-Felder sind:

     ‘zabbix-server’ (Vorgabe: ‘zabbix-server’) (Typ: dateiartig)
          Das zabbix-server-Paket, das benutzt werden soll.

     ‘nginx’ (Vorgabe: ‘'()’) (Typ: Liste)
          Liste von *note ‘nginx-server-configuration’:
          nginx-server-configuration.-Blöcken für das Zabbix-Frontend.
          Wenn es leer gelassen wird, lässt die Vorgabeeinstellung auf
          Port 80 lauschen.

     ‘db-host’ (Vorgabe: ‘"localhost"’) (Typ: Zeichenkette)
          Rechnername der Datenbank.

     ‘db-port’ (Vorgabe: ‘5432’) (Typ: Zahl)
          Datenbank-Portnummer.

     ‘db-name’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Datenbankname.

     ‘db-user’ (Vorgabe: ‘"zabbix"’) (Typ: Zeichenkette)
          Benutzerkonto der Datenbank.

     ‘db-password’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Das Datenbankpasswort. Bitte benutzen Sie stattdessen
          ‘db-secret-file’.

     ‘db-secret-file’ (Vorgabe: ‘""’) (Typ: Zeichenkette)
          Die Datei mit den Geheimnis-Informationen, die an die
          ‘zabbix.conf.php’-Datei angehängt wird. Diese Datei enthält
          Zugangsdaten für die Nutzung durch das Zabbix-Frontend. Es
          wird von Ihnen erwartet, dass Sie sie manuell erzeugen.

     ‘zabbix-host’ (Vorgabe: ‘"localhost"’) (Typ: Zeichenkette)
          Zabbix-Server-Rechnername.

     ‘zabbix-port’ (Vorgabe: ‘10051’) (Typ: Zahl)
          Zabbix-Server-Port.


File: guix.de.info,  Node: Kerberos-Dienste,  Next: LDAP-Dienste,  Prev: Systemüberwachungsdienste,  Up: Dienste

11.10.18 Kerberos-Dienste
-------------------------

Das ‘(gnu services kerberos)’-Modul stellt Dienste zur Verfügung, die
mit dem Authentifizierungsprotokoll “Kerberos” zu tun haben.

Krb5-Dienst
...........

Programme, die eine Kerberos-Clientbibliothek benutzen, erwarten meist,
dass sich eine Konfigurationsdatei in ‘/etc/krb5.conf’ befindet. Dieser
Dienst erzeugt eine solche Datei aus einer Definition, die in der
Betriebssystemdeklaration angegebenen wurde. Durch ihn wird kein Daemon
gestartet.

   Keine „Schlüsseltabellen“-Dateien werden durch diesen Dienst zur
Verfügung gestellt – Sie müssen sie ausdrücklich selbst anlegen. Dieser
Dienst funktioniert bekanntermaßen mit der MIT-Clientbibliothek
‘mit-krb5’. Andere Implementierungen wurden nicht getestet.

 -- Variable: krb5-service-type
     Ein Diensttyp für Kerberos-5-Clients.

Hier ist ein Beispiel, wie man ihn benutzt:
     (service krb5-service-type
              (krb5-configuration
               (default-realm "EXAMPLE.COM")
               (allow-weak-crypto? #t)
               (realms (list
                        (krb5-realm
                         (name "EXAMPLE.COM")
                         (admin-server "groucho.example.com")
                         (kdc "karl.example.com"))
                        (krb5-realm
                         (name "ARGRX.EDU")
                         (admin-server "kerb-admin.argrx.edu")
                         (kdc "keys.argrx.edu"))))))

Dieses Beispiel stellt eine Client-Konfiguration für Kerberos 5 zur
Verfügung, mit der:
   • Zwei Administrationsbereiche erkannt werden, nämlich: „EXAMPLE.COM“
     und „ARGRX.EDU“, die beide verschiedene Administrationsserver und
     Schlüsselverteilungszentren haben,
   • als Vorgabe der Administrationsbereich „EXAMPLE.COM“ verwendet
     wird, falls der Administrationsbereich von Clients nicht
     ausdrücklich angegeben wurde, und
   • auch Dienste angenommen werden, die nur Verschlüsselungstypen
     unterstützen, die bekanntermaßen schwach sind.

   Die Typen ‘krb5-realm’ und ‘krb5-configuration’ haben viele Felder.
Hier werden nur die am häufigsten benutzten beschrieben. Eine
vollständige Liste und jeweils detailliertere Erklärungen finden Sie in
der Dokumentation von krb5.conf vom MIT.

 -- Datentyp: krb5-realm
     ‘name’
          Dieses Feld enthält eine Zeichenkette, die den Namen des
          Administrationsbereichs bezeichnet. Üblich ist, den
          vollständigen DNS-Namen („Fully Qualified DNS Name“) Ihrer
          Organisation nur in Großbuchstaben zu benutzen.

     ‘admin-server’
          Dieses Feld enthält eine Zeichenkette, die den Rechner
          benennt, auf dem der Administrationsserver läuft.

     ‘kdc’
          Dieses Feld enthält eine Zeichenkette, die das
          Schlüsselverteilungszentrum für den Administrationsbereich
          angibt.

 -- Datentyp: krb5-configuration

     ‘allow-weak-crypto?’ (Vorgabe: ‘#f’)
          Wenn diese Option auf ‘#t’ gesetzt ist, werden auch Dienste
          akzeptiert, die nur Verschlüsselungsalgorithmen anbieten, die
          bekanntermaßen schwach sind.

     ‘default-realm’ (Vorgabe: ‘#f’)
          Dieses Feld sollte eine Zeichenkette enthalten, die den
          voreingestellten Kerberos-Administrationsbereich für den
          Client angibt. Sie sollten in diesem Feld den Namen Ihres
          Kerberos-Administrationsbereichs eintragen. Wenn der Wert ‘#f’
          ist, dann muss ein Administrationsbereich mit jedem
          Kerberos-Prinzipal zusammen angegeben werden, wenn Programme
          wie ‘kinit’ aufgerufen werden.

     ‘realms’
          Hierin sollte eine nichtleere Liste von je einem
          ‘krb5-realm’-Objekt pro Administrationsbereich stehen, auf den
          Clients zugreifen können. Normalerweise hat einer davon ein
          ‘name’-Feld, das mit dem ‘default-realm’-Feld übereinstimmt.

PAM-krb5-Dienst
...............

Der ‘pam-krb5’-Dienst ermöglicht es, bei der Anmeldung und
Passwortverwaltung Benutzer über Kerberos zu authentifizieren. Sie
brauchen diesen Dienst, damit Anwendungen, die PAM benutzen können,
Nutzer über Kerberos authentifizieren können.

 -- Variable: pam-krb5-service-type
     Ein Diensttyp für das PAM-Modul zu Kerberos 5.

 -- Datentyp: pam-krb5-configuration
     Der Datentyp, der die Konfiguration des PAM-Moduls für Kerberos 5
     repräsentiert. Dieser Typ hat die folgenden Parameter:
     ‘pam-krb5’ (Vorgabe: ‘pam-krb5’)
          Das pam-krb5-Paket, das benutzt werden soll.

     ‘minimum-uid’ (Vorgabe: ‘1000’)
          Der kleinste Benutzeridentifikator (UID), für den
          Authentifizierung über Kerberos versucht werden soll. Lokale
          Benutzerkonten mit niedrigeren Zahlwerten können sich nicht
          authentisieren und bekommen dazu keine Meldung angezeigt.


File: guix.de.info,  Node: LDAP-Dienste,  Next: Web-Dienste,  Prev: Kerberos-Dienste,  Up: Dienste

11.10.19 LDAP-Dienste
---------------------

Authentisierung per LDAP mit nslcd
..................................

Das Modul ‘(gnu services authentication)’ stellt den Diensttyp
‘nslcd-service-type’ zur Verfügung, mit dem sich Benutzer gegenüber
einem LDAP-Server authentisieren können. Sie möchten dabei
wahrscheinlich nicht nur den Dienst konfigurieren, sondern auch ‘ldap’
als einen Namensdienst („Name Service“) für den Name Service Switch
hinzufügen. Siehe *note Name Service Switch:: für Details.

   Hier ist ein Beispiel für eine einfache Betriebssystemdeklaration mit
einer der Vorgabe entsprechenden Konfiguration des ‘nslcd-service-type’
und einer Konfiguration des Name Service Switch, die den
‘ldap’-Namensdienst zuletzt prüft:

     (use-service-modules authentication)
     (use-modules (gnu system nss))
     …
     (operating-system
       …
       (services
         (cons*
           (service nslcd-service-type)
           (service dhcp-client-service-type)
           %base-services))
       (name-service-switch
        (let ((services (list (name-service (name "db"))
                              (name-service (name "files"))
                              (name-service (name "ldap")))))
          (name-service-switch
           (inherit %mdns-host-lookup-nss)
           (password services)
           (shadow   services)
           (group    services)
           (netgroup services)
           (gshadow  services)))))

   Verfügbare ‘nslcd-configuration’-Felder sind:

 -- nslcd-configuration-Parameter: „package“ nss-pam-ldapd
     Das ‘nss-pam-ldapd’-Paket, was benutzt werden soll.

 -- nslcd-configuration-Parameter: Vielleicht-Zahl threads
     Die Anzahl zu startender Threads, die Anfragen bearbeiten und
     LDAP-Abfragen durchführen können. Jeder Thread öffnet eine separate
     Verbindung zum LDAP-Server. Die Vorgabe ist, 5 Threads zu starten.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Zeichenkette uid
     Gibt den Benutzeridentifikator an, unter dem der Daemon ausgeführt
     werden soll.

     Die Vorgabe ist ‘"nslcd"’.

 -- nslcd-configuration-Parameter: Zeichenkette gid
     Gibt den Gruppenidentifikator an, unter dem der Daemon ausgeführt
     werden soll.

     Die Vorgabe ist ‘"nslcd"’.

 -- nslcd-configuration-Parameter: Protokolleinstellung log
     Diese Einstellung steuert über eine Liste aus SCHEMA und STUFE, wie
     protokolliert wird. Als SCHEMA-Argument darf entweder eines der
     Symbole ‘none’ (keines) oder ‘syslog’ angegeben werden oder ein
     absoluter Dateiname. Das Argument STUFE ist optional und legt die
     Protokollierungsstufe fest. Die Protokollierungsstufe kann als
     eines der folgenden Symbole angegeben werden: ‘crit’ (kritisch),
     ‘error’ (Fehler), ‘warning’ (Warnung), ‘notice’ (Benachrichtigung),
     ‘info’ (Information) oder ‘debug’ (Fehlersuche). Alle Mitteilungen
     mit der angegebenen Protokollierungsstufe oder einer höheren werden
     protokolliert.

     Die Vorgabe ist ‘'("/var/log/nslcd" info)’.

 -- nslcd-configuration-Parameter: Liste uri
     Die Liste der LDAP-Server-URIs. Normalerweise wird nur der erste
     Server benutzt; nachfolgende Server dienen als Ersatz.

     Die Vorgabe ist ‘'("ldap://localhost:389/")’.

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette ldap-version
     Die zu benutzende Version des LDAP-Protokolls. Nach Vorgabe wird
     die höchste Version benutzt, die von der LDAP-Bibliothek
     unterstützt wird.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette binddn
     Gibt den „Distinguished Name“ an, der an den Verzeichnisserver
     („Directory Server“) gebunden wird, um Einträge aufzulösen. Nach
     Vorgabe wird anonym gebunden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette bindpw
     Gibt die Zugangsinformationen an, mit denen gebunden wird. Diese
     Einstellung ist nur dann wirksam, wenn sie mit binddn benutzt wird.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette rootpwmoddn
     Gibt den „Distinguished Name“ an, der benutzt wird, wenn der
     Administratornutzer „root“ versucht, das Passwort eines Benutzers
     mit Hilfe des PAM-Moduls zu verändern.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette rootpwmodpw
     Gibt die Zugangsinformationen an, die benutzt werden, wenn der
     Administratornutzer „root“ versucht, das Passwort eines Benutzers
     zu verändern. Diese Einstellung ist nur dann wirksam, wenn sie mit
     rootpwmoddn benutzt wird.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette sasl-mech
     Gibt an, welcher SASL-Mechanismus benutzt werden soll, um
     Authentifizierung über SASL durchzuführen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette sasl-realm
     Gibt den SASL-Administrationsbereich an, um Authentifizierungen
     über SASL durchzuführen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette sasl-authcid
     Gibt die Authentisierungsidentität an, um Authentifizierungen über
     SASL durchzuführen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette sasl-authzid
     Gibt die Autorisierungsidentität an, um Authentifizierungen über
     SASL durchzuführen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          sasl-canonicalize?
     Legt fest, ob der kanonische Rechnername („Hostname“) des
     LDAP-Servers ermittelt werden soll. Wenn ja, wird die
     LDAP-Bibliothek eine inverse Auflösung („Reverse Lookup“) des
     Rechnernamens durchführen. Die Vorgabe ist, es der LDAP-Bibliothek
     zu überlassen, ob eine solche Überprüfung durchgeführt wird.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette krb5-ccname
     Legt den Namen für den Zwischenspeicher der
     GSS-API-Kerberos-Zugangsdaten fest.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Zeichenkette base
     Basis für die Verzeichnissuche.

     Vorgegeben ist ‘"dc=example,dc=com"’.

 -- nslcd-configuration-Parameter: Suchbereichs-Einstellung scope
     Legt den Suchbereich fest als subtree (Teilbaum), onelevel (eine
     Ebene), base (Basis) oder children (Kinder). Die Vorgabe für den
     Suchbereich ist subtree; base ist fast nie geeignet für
     Namensdienstauflösungen; children wird nicht auf allen Servern
     unterstützt.

     Die Vorgabe ist ‘'(subtree)’.

 -- nslcd-configuration-Parameter: Vielleicht-Deref-Einstellung deref
     Legt die Richtlinie für das Dereferenzieren von Alias-Namen fest.
     Die vorgegebene Richtlinie ist, Alias-Namen niemals zu
     dereferenzieren.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          referrals
     Gibt an, ob Verweise („Referrals“) automatisch verfolgt werden
     sollen. Das vorgegebene Verhalten ist, sie zu verfolgen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Liste-von-Abbildungseinträgen maps
     Diese Option ermöglicht es, eigene Attribute bei der Auflösung
     anstelle der vorgegebenen RFC-2307-Attribute zu verwenden. Es ist
     eine Liste von Abbildungen („Maps“), von denen jede aus dem Namen
     der Abbildung, dem abzubildenden RFC-2307-Attribut und einem
     Anfrageausdruck besteht, mit dem es anhand des Verzeichnisses
     aufgelöst wird.

     Die Vorgabe ist ‘'()’.

 -- nslcd-configuration-Parameter: Liste-von-Filtereinträgen filters
     Eine Liste von Filtern, von denen jeder aus dem Namen einer
     Abbildung, auf die sich der Filter auswirkt, und einem
     LDAP-Suchfilter-Ausdruck besteht.

     Die Vorgabe ist ‘'()’.

 -- nslcd-configuration-Parameter: Vielleicht-Zahl bind-timelimit
     Gibt die Zeitbeschränkung in Sekunden an, wie lange eine Verbindung
     zum Verzeichnisserver dauern darf. Die Vorgabe ist 10 Sekunden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl timelimit
     Gibt die Zeitbeschränkung (in Sekunden) an, wie lange auf eine
     Antwort vom LDAP-Server gewartet wird. Ein Wert von null, was die
     Vorgabe ist, bewirkt, dass beliebig lange gewartet wird, bis Suchen
     abgeschlossen sind.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl idle-timelimit
     Gibt an, wie lange bei Inaktivität gewartet wird (in Sekunden), bis
     die Verbindung zum LDAP-Server geschlossen wird. Die Vorgabe ist,
     dass es zu keiner Zeitüberschreitung bei Verbindungen kommen kann.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl reconnect-sleeptime
     Gibt die Anzahl an Sekunden an, wie lange „schlafend“ gewartet
     wird, wenn zu _keinem_ LDAP-Server eine Verbindung hergestellt
     werden kann. Die Vorgabe ist, zwischen dem ersten Fehlversuch und
     dem ersten neuen Versuch 1 Sekunde zu warten.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl reconnect-retrytime
     Gibt an, nach wie viel Zeit der LDAP-Server als dauerhaft nicht
     verfügbar angesehen wird. Sobald dieser Fall eintritt, wird eine
     Verbindungsaufnahme nur noch einmal pro weiterem Ablauf dieser
     Zeitperiode versucht. Der Vorgabewert beträgt 10 Sekunden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-SSL-Einstellung ssl
     Gibt an, ob SSL/TLS benutzt werden soll oder nicht (die Vorgabe
     ist, es _nicht_ zu benutzen). Wenn ’start-tls angegeben wird, dann
     wird StartTLS statt schlichtem LDAP über SSL benutzt.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-„tls-reqcert“-Einstellung
          tls-reqcert
     Gibt an, welche Überprüfungen auf einem vom Server empfangenen
     Zertifikat durchgeführt werden sollen. Die Bedeutung der Werte wird
     auf der Handbuchseite zu ldap.conf(5) beschrieben.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette tls-cacertdir
     Gibt das Verzeichnis an, das X.509-Zertifikate zur Authentifikation
     von Kommunikationspartnern enthält. Dieser Parameter wird
     ignoriert, wenn Sie GnuTLS benutzen lassen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette
          tls-cacertfile
     Gibt den Dateipfad zu dem X.509-Zertifikat zur Authentifikation von
     Kommunikationspartnern an.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette tls-randfile
     Gibt den Pfad zu einer Entropiequelle an. Dieser Parameter wird
     ignoriert, wenn Sie GnuTLS benutzen lassen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette tls-ciphers
     Gibt als eine Zeichenkette an, welche Ciphers für TLS benutzt
     werden sollen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette tls-cert
     Gibt den Pfad zu der Datei an, die das lokale Zertifikat zur
     TLS-Authentisierung als Client enthält.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette tls-key
     Gibt den Pfad zu der Datei an, die den privaten Schlüssel zur
     TLS-Authentisierung als Client enthält.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl pagesize
     Geben Sie hier eine Zahl größer als 0 an, um beim LDAP-Server
     seitenweise Antworten anzufordern, entsprechend RFC2696. Die
     Vorgabe (0) fordert alle Ergebnisse auf einmal an.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-„ignore-users“-Einstellung
          nss-initgroups-ignoreusers
     Diese Einstellung verhindert, dass für die angegebenen Benutzer die
     Gruppenmitgliedschaft über LDAP aufgelöst wird. Alternativ kann der
     Wert ’all-local verwendet werden. Für diesen Wert erzeugt nslcd
     eine vollständige Liste aller Nicht-LDAP-Benutzer, wenn es startet.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl nss-min-uid
     Diese Einstellung lässt sicherstellen, dass LDAP-Benutzer, deren
     numerischer Benutzeridentifikator kleiner als der angegebene Wert
     ist, ignoriert werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl nss-uid-offset
     Diese Einstellung gibt einen Versatz an, der auf den numerischen
     Benutzeridentifikator jedes LDAP-Nutzers aufaddiert wird. Damit
     können Konflikte zwischen den Benutzeridentifikatoren lokaler
     Benutzerkonten und LDAP vermieden werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zahl nss-gid-offset
     Diese Einstellung gibt einen Versatz an, der auf den numerischen
     Gruppenidentifikator jedes LDAP-Nutzers aufaddiert wird. Damit
     können Konflikte zwischen den Gruppenidentifikatoren lokaler
     Gruppen und LDAP vermieden werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          nss-nested-groups
     Wenn diese Einstellung aktiviert ist, können die Attribute einer
     Gruppe auch wieder Verweise auf eine andere Gruppe sein. Attribute
     darin verschachtelter („nested“) Gruppen werden für die Gruppe auf
     höherer Ebene ebenfalls zurückgeliefert und Elterngruppen werden
     zurückgeliefert, wenn nach den Gruppen eines bestimmten Nutzers
     gesucht wird. Die Vorgabe ist, keine zusätzlichen Suchen nach
     verschachtelten Gruppen durchzuführen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          nss-getgrent-skipmembers
     Wenn diese Einstellung aktiviert ist, wird die Liste der
     Gruppenmitglieder beim Auflösen von Gruppen nicht angefragt. Zu
     welchen Gruppen ein Benutzer gehört, kann weiterhin angefragt
     werden, damit dem Benutzer bei der Anmeldung wahrscheinlich dennoch
     die richtigen Gruppen zugeordnet werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          nss-disable-enumeration
     Wenn diese Einstellung aktiviert ist, scheitern Funktionen, die
     alle Benutzer-/Gruppeneinträge aus dem Verzeichnis zu laden
     versuchen. Dadurch kann die Auslastung von LDAP-Servern wesentlich
     reduziert werden, wenn es eine große Anzahl von Benutzern und/oder
     Gruppen gibt. Diese Einstellung wird für die meisten
     Konfigurationen _nicht_ empfohlen.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette validnames
     Mit dieser Einstellung kann festgelegt werden, wie Benutzer- und
     Gruppennamen vom System geprüft werden. Das angegebene Muster wird
     zur Prüfung aller Benutzer- und Gruppennamen benutzt, die über LDAP
     angefragt und zurückgeliefert werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          ignorecase
     Hiermit wird festgelegt, ob bei Suchen nach passenden Einträgen
     _nicht_ auf Groß- und Kleinschreibung geachtet wird. Wenn Sie dies
     aktivieren, könnte es zu Sicherheitslücken kommen, mit denen
     Autorisierungen umgangen („Authorization Bypass“) oder der
     nscd-Zwischenspeicher vergiftet werden kann („Cache Poisoning“),
     was gezielte Überlastungen ermöglichen würde („Denial of Service“).

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Boolescher-Ausdruck
          pam-authc-ppolicy
     Mit dieser Einstellung wird festgelegt, ob
     Passwortrichtliniensteuerung vom LDAP-Server angefragt und
     behandelt wird, wenn Nutzer authentifiziert werden.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette
          pam-authc-search
     Nach Vorgabe führt nslcd eine LDAP-Suche nach jeder BIND-Operation
     (zur Authentisierung) durch, um sicherzustellen, dass die
     BIND-Operation erfolgreich durchgeführt wurde. Die vorgegebene
     Suche ist eine einfache Überprüfung, ob der DN eines Benutzers
     existiert. Hier kann ein Suchfilter angegeben werden, der
     stattdessen benutzt werden soll. Er sollte mindestens einen Eintrag
     liefern.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette
          pam-authz-search
     Diese Einstellung ermöglicht flexible Feineinstellungen an der
     durchzuführenden Autorisierungsprüfung. Der angegebene Suchfilter
     wird ausgeführt, woraufhin Zugriff gewährt wird, wenn mindestens
     ein Eintrag passt, andernfall wird der Zugriff verweigert.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Vielleicht-Zeichenkette
          pam-password-prohibit-message
     Wenn diese Einstellung festgelegt wurde, werden Passwortänderungen
     über pam_ldap abgelehnt und dem Anwender wird stattdessen die
     festgelegte Nachricht gezeigt. Die Nachricht kann benutzt werden,
     um den Anwender auf alternative Methoden aufmerksam zu machen, wie
     er sein Passwort ändern kann.

     Der Vorgabewert ist ‘disabled’ (d.h. deaktiviert).

 -- nslcd-configuration-Parameter: Liste pam-services
     Die Liste der PAM-Dienstnamen, für die eine LDAP-Authentisierung
     als ausreichend gilt.

     Die Vorgabe ist ‘'()’.

LDAP-Verzeichnis-Server
.......................

Das Modul ‘(gnu services ldap)’ stellt den Diensttyp
‘directory-server-service-type’ zur Verfügung, mit dem eine Instanz
eines LDAP-Servers gestartet werden kann.

   Hier sehen Sie eine Beispielkonfiguration für den
‘directory-server-service-type’:

     (use-service-modules ldap)

     …
     (operating-system
       …
       (services
         (cons
           (service directory-server-service-type
                    (directory-server-instance-configuration
                     (slapd
                      (slapd-configuration
                       (root-password "{PBKDF2_SHA256}AAAgAG...ABSOLUTELYSECRET")))))
           %base-services)))

   Das ‘root-password’ sollte mit dem Hilfsprogramm ‘pwdhash’ erzeugt
werden, das im Paket ‘389-ds-base’ enthalten ist.

   Beachten Sie, dass sich Änderungen an der Konfiguration des
Verzeichnis-Servers _nicht_ auf bestehende Instanzen auswirken. Die
Server-Daten werden Sie manuell sichern und wiederherstellen müssen. Nur
neue Instanzen eines Verzeichnis-Servers werden beim Rekonfigurieren des
Systems erzeugt.

 -- Datentyp: directory-server-instance-configuration
     Verfügbare ‘directory-server-instance-configuration’-Felder sind:

     ‘package’ (Vorgabe: ‘389-ds-base’) (Typ: dateiartig)
          Das ‘389-ds-base’-Paket.

     ‘config-version’ (Vorgabe: ‘2’) (Typ: Zahl)
          Gibt die Version des Formats der Konfigurationsdatei an. Wenn
          Sie eine INF-Datei mit ‘dscreate’ benutzen möchten, muss
          dieser Parameter auf 2 stehen.

     ‘full-machine-name’ (Vorgabe: ‘"localhost"’) (Typ: Zeichenkette)
          Setzt den vollständigen Rechnernamen (FQDN) für das System.

     ‘selinux’ (Vorgabe: ‘#false’) (Typ: Boolescher-Ausdruck)
          Ob SELinux bei der Installation dieser Instanz erkannt und
          berücksichtigt werden soll. Wenn es auf ‘#true’ gesetzt ist,
          wird durch ‘dscreate’ automatisch festgestellt, ob SELinux
          aktiviert ist.

     ‘strict-host-checking’ (Vorgabe: ‘#true’) (Typ: Boolescher-Ausdruck)
          Gibt vor, ob durch den Server geprüft werden soll, dass die
          Einträge im Parameter ‘full-machine-name’ in beide Richtungen
          stimmen. Bei der Installation dieser Instanz mit
          GSSAPI-Authentifizierung hinter einer Lastverteilung (load
          balancer) sollten Sie diesen Parameter auf ‘#false’ setzen.

     ‘systemd’ (Vorgabe: ‘#false’) (Typ: Boolescher-Ausdruck)
          Ob Funktionen für die systemd-Plattform bereitgestellt werden
          sollen. Wenn dies auf ‘#true’ gesetzt ist, wird durch
          ‘dscreate’ automatisch festgestellt, ob systemd installiert
          ist.

     ‘slapd’ (Typ: „slapd-configuration“)
          Konfiguration von slapd.

           -- Datentyp: slapd-configuration
               Verfügbare ‘slapd-configuration’-Felder sind:

               ‘instance-name’ (Vorgabe: ‘"localhost"’) (Typ: Zeichenkette)
                    Legt den Namen der Instanz fest. Sie können sich auf
                    diesen Wert in anderen Parametern dieser INF-Datei
                    beziehen, indem Sie die Variable ‘{instance_name}’
                    benutzen. Beachten Sie, dass dieser Name nach der
                    Installation _nicht_ mehr geändert werden kann!

               ‘user’ (Vorgabe: ‘"dirsrv"’) (Typ: Zeichenkette)
                    Legt den Benutzernamen fest, den der
                    ‘ns-slapd’-Prozess nach dem Starten des Dienstes
                    benutzen wird.

               ‘group’ (Vorgabe: ‘"dirsrv"’) (Typ: Zeichenkette)
                    Legt den Gruppennamen fest, den der
                    ‘ns-slapd’-Prozess nach dem Starten des Dienstes
                    benutzen wird.

               ‘port’ (Vorgabe: ‘389’) (Typ: Zahl)
                    Setzt den TCP-Port, den die Instanz für
                    LDAP-Verbindungen gebraucht.

               ‘secure-port’ (Vorgabe: ‘636’) (Typ: Zahl)
                    Setzt den TCP-Port, den die Instanz für
                    TLS-gesicherte LDAP-Verbindungen gebraucht (LDAPS).

               ‘root-dn’ (Vorgabe: ‘"cn=Directory Manager"’) (Typ: Zeichenkette)
                    Setzt den „Distinquished Name“ (DN) des
                    Administratorkontos auf dieser Instanz.

               ‘root-password’ (Vorgabe: ‘"{invalid}YOU-SHOULD-CHANGE-THIS"’ (Typ: Zeichenkette)
                    Setzt das Passwort des im Parameter ‘root-dn’
                    festgelegten Kontos. Sie können für diesen Parameter
                    entweder ein Passwort im Klartext angeben, welches
                    ‘dscreate’ dann bei der Installation zu einem Hash
                    machen wird, oder Sie geben eine Zeichenkette
                    ‘"{algorithm}Hash"’ an, wie das Werkzeug ‘pwdhash’
                    eine liefert. Beachten Sie, dass das Angeben eines
                    Klartextpassworts ein Sicherheitsrisiko darstellt,
                    wenn unpriviligierte Nutzer die Möglichkeit haben,
                    auf diese INF-Datei zuzugreifen!

               ‘self-sign-cert’ (Vorgabe: ‘#true’) (Typ: Boolescher-Ausdruck)
                    Legt fest, ob bei der Einrichtung ein
                    selbstsigniertes Zertifikat erzeugt werden und
                    TLS-Verschlüsselung aktiviert werden soll. Das ist
                    ungeeignet für den Einsatz in Produktivsystemen und
                    macht es Administratoren lediglich möglich, von der
                    Installation an TLS zu benutzen. Sie können das
                    selbstsignierte Zertifikat durch ein von einer
                    Zertifikatsautorität ausgestelltes ersetzen.

               ‘self-sign-cert-valid-months’ (Vorgabe: ‘24’) (Typ: Zahl)
                    Legt die Anzahl der Monate fest, für die das
                    ausgestellte selbstsignierte Zertifikat gültig sein
                    soll.

               ‘backup-dir’ (Vorgabe: ‘"/var/lib/dirsrv/slapd-{instance_name}/bak"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis man Sicherungskopien dieser
                    Instanz ablegt.

               ‘cert-dir’ (Vorgabe: ‘"/etc/dirsrv/slapd-{instance_name}"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis die Datenbank für Network
                    Security Services (NSS) dieser Instanz liegt.

               ‘config-dir’ (Vorgabe: ‘"/etc/dirsrv/slapd-{instance_name}"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis die Konfiguration dieser
                    Instanz gespeichert wird.

               ‘db-dir’ (Vorgabe: ‘"/var/lib/dirsrv/slapd-{instance_name}/db"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis die Datenbank dieser Instanz
                    gespeichert wird.

               ‘initconfig-dir’ (Vorgabe: ‘"/etc/dirsrv/registry"’) (Typ: Zeichenkette)
                    Setzt, wo bei diesem Betriebssystem das Verzeichnis
                    mit rc-Konfigurationsdateien ist.

               ‘ldif-dir’ (Vorgabe: ‘"/var/lib/dirsrv/slapd-{instance_name}/ldif"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis für diese Instanz
                    LDIF-Dateien exportiert und importiert werden.

               ‘lock-dir’ (Vorgabe: ‘"/var/lock/dirsrv/slapd-{instance_name}"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis diese Instanz Sperren ablegt.

               ‘log-dir’ (Vorgabe: ‘"/var/log/dirsrv/slapd-{instance_name}"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis diese Instanz Protokolle
                    speichert.

               ‘run-dir’ (Vorgabe: ‘"/run/dirsrv"’) (Typ: Zeichenkette)
                    Legt das Verzeichnis für die PID dieser Instanz
                    fest.

               ‘schema-dir’ (Vorgabe: ‘"/etc/dirsrv/slapd-{instance_name}/schema"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis Schemata dieser Instanz
                    liegen.

               ‘tmp-dir’ (Vorgabe: ‘"/tmp"’) (Typ: Zeichenkette)
                    In welchem Verzeichnis temporäre Dateien dieser
                    Instanz liegen werden.

     ‘backend-userroot’ (Typ: „backend-userroot-configuration“)
          Konfiguration für das userroot-Hintergrundsystem.

           -- Datentyp: backend-userroot-configuration
               Verfügbare ‘backend-userroot-configuration’-Felder sind:

               ‘create-suffix-entry?’ (Vorgabe: ‘#false’) (Typ: Boolescher-Ausdruck)
                    Setzen Sie diesen Parameter auf ‘#true’, damit ein
                    generischer Wurzeleintrag für das Suffix in der
                    Datenbank erzeugt wird.

               ‘require-index?’ (Vorgabe: ‘#false’) (Typ: Boolescher-Ausdruck)
                    Setzen Sie diesen Parameter auf ‘#true’, damit
                    Suchen ohne Index in der Datenbank verweigert
                    werden.

               ‘sample-entries’ (Vorgabe: ‘"no"’) (Typ: Zeichenkette))
                    Setzen Sie diesen Parameter auf ‘"yes"’, damit die
                    neueste Version von Beispieleinträgen zur Datenbank
                    hinzugefügt werden, oder geben Sie ‘"001003006"’ an
                    für die Beispieleinträge der Version 1.3.6.
                    Verwenden Sie diese Option zum Beispiel zum Testen.

               ‘suffix’ (Typ: Vielleicht-Zeichenkette)
                    Legt das Wurzelsuffix in dieser Datenbank fest. Wenn
                    Sie kein Suffixattribut festlegen, wird beim
                    Installationsprozess kein Hintergrundsystem/Suffix
                    angelegt. Sie können auch mehrere
                    Hintergrundsystem/Suffix-Werte angeben, indem Sie
                    diesen Abschnitt wiederholt angeben.


File: guix.de.info,  Node: Web-Dienste,  Next: High Availability Services,  Prev: LDAP-Dienste,  Up: Dienste

11.10.20 Web-Dienste
--------------------

Das Modul ‘(gnu services web)’ stellt den Apache-HTTP-Server, den
nginx-Webserver und auch einen fastcgi-Wrapperdienst bereit.

Apache-HTTP-Server
..................

 -- Variable: httpd-service-type
     Diensttyp für den Apache-HTTP-Server (https://httpd.apache.org/)
     “httpd”. Der Wert dieses Diensttyps ist ein
     ‘httpd-configuration’-Verbund.

     Es folgt ein einfaches Beispiel der Konfiguration.

          (service httpd-service-type
                   (httpd-configuration
                     (config
                       (httpd-config-file
                         (server-name "www.example.com")
                         (document-root "/srv/http/www.example.com")))))

     Andere Dienste können den ‘httpd-service-type’ auch erweitern, um
     etwas zur Konfiguration hinzuzufügen.

          (simple-service 'www.example.com-server httpd-service-type
                          (list
                            (httpd-virtualhost
                              "*:80"
                              (list (string-join '("ServerName www.example.com"
                                                   "DocumentRoot /srv/http/www.example.com")
                                                 "\n")))))

   Nun folgt eine Beschreibung der Verbundstypen ‘httpd-configuration’,
‘httpd-module’, ‘httpd-config-file’ und ‘httpd-virtualhost’.

 -- Datentyp: httpd-configuration
     Dieser Datentyp repräsentiert die Konfiguration des httpd-Dienstes.

     ‘package’ (Vorgabe: ‘httpd’)
          Das zu benutzende httpd-Paket.

     ‘pid-file’ (Vorgabe: ‘"/var/run/httpd"’)
          Die vom Shepherd-Dienst benutzte PID-Datei.

     ‘config’ (Vorgabe: ‘(httpd-config-file)’)
          Die vom httpd-Dienst zu benutzende Konfigurationsdatei.
          Vorgegeben ist ein ‘httpd-config-file’-Verbundsobjekt, aber
          als Wert kann auch ein anderer G-Ausdruck benutzt werden, der
          eine Datei erzeugt, zum Beispiel ein ‘plain-file’. Es kann
          auch eine Datei außerhalb des Stores mit einer Zeichenkette
          angegeben werden.

 -- Datentyp: httpd-module
     Dieser Datentyp steht für ein Modul des httpd-Dienstes.

     ‘name’
          Der Name des Moduls.

     ‘file’
          Die Datei, in der das Modul steht. Sie kann relativ zum
          benutzten httpd-Paket oder als absoluter Pfad einer Datei oder
          als ein G-Ausdruck für eine Datei im Store angegeben werden,
          zum Beispiel ‘(file-append mod-wsgi "/modules/mod_wsgi.so")’.

 -- Variable: %default-httpd-modules
     Eine vorgegebene Liste von ‘httpd-module’-Objekten.

 -- Datentyp: httpd-config-file
     Dieser Datentyp repräsentiert eine Konfigurationsdatei für den
     httpd-Dienst.

     ‘modules’ (Vorgabe: ‘%default-httpd-modules’)
          Welche Module geladen werden sollen. Zusätzliche Module können
          hier eingetragen werden oder durch eine zusätzliche
          Konfigurationsangabe geladen werden.

          Um zum Beispiel Anfragen nach PHP-Dateien zu behandeln, können
          Sie das Modul ‘mod_proxy_fcgi’ von Apache zusammen mit
          ‘php-fpm-service-type’ benutzen:

               (service httpd-service-type
                        (httpd-configuration
                         (config
                          (httpd-config-file
                           (modules (cons*
                                     (httpd-module
                                      (name "proxy_module")
                                      (file "modules/mod_proxy.so"))
                                     (httpd-module
                                      (name "proxy_fcgi_module")
                                      (file "modules/mod_proxy_fcgi.so"))
                                     %default-httpd-modules))
                           (extra-config (list "\
               <FilesMatch \\.php$>
                   SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
               </FilesMatch>"))))))
               (service php-fpm-service-type
                        (php-fpm-configuration
                         (socket "/var/run/php-fpm.sock")
                         (socket-group "httpd")))

     ‘server-root’ (Vorgabe: ‘httpd’)
          Die ‘ServerRoot’ in der Konfigurationsdatei, vorgegeben ist
          das httpd-Paket. Direktiven wie ‘Include’ und ‘LoadModule’
          werden relativ zur ServerRoot interpretiert.

     ‘server-name’ (Vorgabe: ‘#f’)
          Der ‘ServerName’ in der Konfigurationsdatei, mit dem das
          Anfrageschema (Request Scheme), der Rechnername (Hostname) und
          Port angegeben wird, mit denen sich der Server identifiziert.

          Es muss nicht als Teil der Server-Konfiguration festgelegt
          werden, sondern kann auch in virtuellen Rechnern (Virtual
          Hosts) festgelegt werden. Vorgegeben ist ‘#f’, wodurch kein
          ‘ServerName’ festgelegt wird.

     ‘document-root’ (Vorgabe: ‘"/srv/http"’)
          Das ‘DocumentRoot’-Verzeichnis, in dem sich die Dateien
          befinden, die man vom Server abrufen kann.

     ‘listen’ (Vorgabe: ‘'("80")’)
          Die Liste der Werte für die ‘Listen’-Direktive in der
          Konfigurationsdatei. Als Wert sollte eine Liste von
          Zeichenketten angegeben werden, die jeweils die Portnummer,
          auf der gelauscht wird, und optional auch die zu benutzende
          IP-Adresse und das Protokoll angeben.

     ‘pid-file’ (Vorgabe: ‘"/var/run/httpd"’)
          Hiermit wird die PID-Datei als ‘PidFile’-Direktive angegeben.
          Der Wert sollte mit der ‘pid-file’-Datei in der
          ‘httpd-configuration’ übereinstimmen, damit der
          Shepherd-Dienst richtig konfiguriert ist.

     ‘error-log’ (Vorgabe: ‘"/var/log/httpd/error_log"’)
          Der Ort, an den der Server mit der ‘ErrorLog’-Direktive
          Fehlerprotokolle schreibt.

     ‘user’ (Vorgabe: ‘"httpd"’)
          Der Benutzer, als der der Server durch die ‘User’-Direktive
          Anfragen beantwortet.

     ‘group’ (Vorgabe: ‘"httpd"’)
          Die Gruppe, mit der der Server durch die ‘Group’-Direktive
          Anfragen beantwortet.

     ‘extra-config’ (Vorgabe: ‘(list "TypesConfig etc/httpd/mime.types")’)
          Eine flache Liste von Zeichenketten und G-Ausdrücken, die am
          Ende der Konfigurationsdatei hinzugefügt werden.

          Alle Werte, mit denen dieser Dienst erweitert wird, werden an
          die Liste angehängt.

 -- Datentyp: httpd-virtualhost
     Dieser Datentyp repräsentiert einen Konfigurationsblock für einen
     virtuellen Rechner (Virtual Host) des httpd-Dienstes.

     Sie sollten zur zusätzlichen Konfiguration extra-config des
     httpd-Dienstes hinzugefügt werden.

          (simple-service 'www.example.com-server httpd-service-type
                          (list
                            (httpd-virtualhost
                              "*:80"
                              (list (string-join '("ServerName www.example.com"
                                                    "DocumentRoot /srv/http/www.example.com")
                                                 "\n")))))

     ‘addresses-and-ports’
          Adressen und Ports für die ‘VirtualHost’-Direktive.

     ‘contents’
          Der Inhalt der ‘VirtualHost’-Direktive. Er sollte als Liste
          von Zeichenketten und G-Ausdrücken angegeben werden.

NGINX
.....

 -- Variable: nginx-service-type
     Diensttyp für den NGinx-Webserver (https://nginx.org/). Der Wert
     des Dienstes ist ein ‘<nginx-configuration>’-Verbundsobjekt.

     Es folgt ein einfaches Beispiel der Konfiguration.

          (service nginx-service-type
                   (nginx-configuration
                     (server-blocks
                       (list (nginx-server-configuration
                               (server-name '("www.example.com"))
                               (root "/srv/http/www.example.com"))))))

     Außer durch direktes Hinzufügen von Server-Blöcken zur
     Dienstkonfiguration kann der Dienst auch durch andere Dienste
     erweitert werden, um Server-Blöcke hinzuzufügen, wie man im
     folgenden Beispiel sieht:

          (simple-service 'my-extra-server nginx-service-type
                          (list (nginx-server-configuration
                                  (root "/srv/http/extra-website")
                                  (try-files (list "$uri" "$uri/index.html")))))

   Beim Starten hat ‘nginx’ seine Konfigurationsdatei noch nicht gelesen
und benutzt eine vorgegebene Datei, um Fehlermeldungen zu
protokollieren. Wenn er seine Konfigurationsdatei nicht laden kann,
landen Fehlermeldungen also dort. Nachdem die Konfigurationsdatei
geladen ist, werden Fehlerprotokolle nach Voreinstellung in die Datei
geschrieben, die in der Konfiguration angegeben ist. In unserem Fall
können Sie Fehlermeldungen beim Starten in
‘/var/run/nginx/logs/error.log’ finden und nachdem die Konfiguration
eingelesen wurde, finden Sie sie in ‘/var/log/nginx/error.log’.
Letzterer Ort kann mit der Konfigurationsoption LOG-DIRECTORY geändert
werden.

 -- Datentyp: nginx-configuration
     Dieser Datentyp repräsentiert die Konfiguration von NGinx. Ein Teil
     der Konfiguration kann hierüber und über die anderen zu Ihrer
     Verfügung stehenden Verbundstypen geschehen, alternativ können Sie
     eine Konfigurationsdatei mitgeben.

     ‘nginx’ (Vorgabe: ‘nginx’)
          Das zu benutzende nginx-Paket.

     ‘shepherd-requirement’ (Vorgabe: ‘'()’)
          Eine Liste von Symbolen, die angeben, von welchen anderen
          Shepherd-Diensten der nginx-Dienst abhängen soll.

          Das können Sie dann gebrauchen, wenn Sie wollen, dass ‘nginx’
          erst dann gestartet wird, wenn Web-Server im Hintergrund oder
          Protokollierungsdienste wie Anonip bereits gestartet wurden.

     ‘log-directory’ (Vorgabe: ‘"/var/log/nginx"’)
          In welches Verzeichnis NGinx Protokolldateien schreiben wird.

     ‘log-format’ (default: ‘'combined’) (type: symbol)
          Logging format for the access log. Nginx defaults to the
          httpd-like format named ‘'combined’. Other formats can be
          defined using ‘log-formats’.

     ‘log-formats’ (default: ‘'()’)
          A list of additional “log formats” to define, the elements
          should be of type ‘<nginx-log-format-configuration>’.

     ‘log-level’ (Vorgabe: ‘'error’) (Typ: Symbol)
          Logging level for the error log, which can be any of the
          following values: ‘'debug’, ‘'info’, ‘'notice’, ‘'warn’,
          ‘'error’, ‘'crit’, ‘'alert’, or ‘'emerg’.

     ‘run-directory’ (Vorgabe: ‘"/var/run/nginx"’)
          In welchem Verzeichnis NGinx eine PID-Datei anlegen und
          temporäre Dateien ablegen wird.

     ‘server-blocks’ (Vorgabe: ‘'()’)
          Eine Liste von “Server-Blöcken”, die in der erzeugten
          Konfigurationsdatei stehen sollen. Die Elemente davon sollten
          den Typ ‘<nginx-server-configuration>’ haben.

          Im folgenden Beispiel wäre NGinx so eingerichtet, dass
          Anfragen an ‘www.example.com’ mit Dateien aus dem Verzeichnis
          ‘/srv/http/www.example.com’ beantwortet werden, ohne HTTPS zu
          benutzen.
               (service nginx-service-type
                        (nginx-configuration
                          (server-blocks
                            (list (nginx-server-configuration
                                    (server-name '("www.example.com"))
                                    (root "/srv/http/www.example.com"))))))

     ‘upstream-blocks’ (Vorgabe: ‘'()’)
          Eine Liste von “Upstream-Blöcken”, die in der erzeugten
          Konfigurationsdatei stehen sollen. Ihre Elemente sollten den
          Typ ‘<nginx-upstream-configuration>’ haben.

          Upstreams als ‘upstream-blocks’ zu konfigurieren, kann
          hilfreich sein, wenn es mit ‘locations’ in
          ‘<nginx-server-configuration>’ verbunden wird. Das folgende
          Beispiel erzeugt eine Server-Konfiguration mit einer
          Location-Konfiguration, bei der Anfragen als Proxy
          entsprechend einer Upstream-Konfiguration weitergeleitet
          werden, wodurch zwei Server diese beantworten können.

               (service
                 nginx-service-type
                 (nginx-configuration
                   (server-blocks
                     (list (nginx-server-configuration
                             (server-name '("www.example.com"))
                             (root "/srv/http/www.example.com")
                             (locations
                               (list
                                 (nginx-location-configuration
                                 (uri "/path1")
                                 (body '("proxy_pass http://server-proxy;"))))))))
                   (upstream-blocks
                     (list (nginx-upstream-configuration
                             (name "server-proxy")
                             (servers (list "server1.example.com"
                                            "server2.example.com")))))))

     ‘file’ (Vorgabe: ‘#f’)
          Wenn eine Konfigurationsdatei als FILE angegeben wird, dann
          wird diese benutzt und _keine_ Konfigurationsdatei anhand der
          angegebenen ‘log-directory’, ‘run-directory’, ‘server-blocks’
          und ‘upstream-blocks’ erzeugt. Trotzdem sollten diese
          Argumente bei einer richtigen Konfiguration mit denen in der
          Datei FILE übereinstimmen, damit die Verzeichnisse bei
          Aktivierung des Dienstes erzeugt werden.

          Das kann nützlich sein, wenn Sie schon eine bestehende
          Konfigurationsdatei haben oder das, was Sie brauchen, nicht
          mit anderen Teilen eines nginx-configuration-Verbundsobjekts
          umgesetzt werden kann.

     ‘server-names-hash-bucket-size’ (Vorgabe: ‘#f’)
          Größe der Behälter (englisch „Buckets“) für die Hashtabelle
          der Servernamen; vorgegeben ist ‘#f’, wodurch die Größe der
          Cache-Lines des Prozessors verwendet wird.

     ‘server-names-hash-bucket-max-size’ (Vorgabe: ‘#f’)
          Maximale Behältergröße für die Hashtabelle der Servernamen.

     ‘stream’ (default: ‘#f’)
          ‘<nginx-stream-configuration>’ object describing stream server
          directives.

     ‘modules’ (Vorgabe: ‘'()’)
          Die Liste zu ladender dynamisch gebundener Module für nginx.
          Die dynamischen Module sollten als Liste von Dateinamen
          ladbarer Module angegeben werden. Zum Beispiel:

               (modules
                (list
                 (file-append nginx-accept-language-module "\
               /etc/nginx/modules/ngx_http_accept_language_module.so")
                 (file-append nginx-lua-module "\
               /etc/nginx/modules/ngx_http_lua_module.so")))

     ‘lua-package-path’ (Vorgabe: ‘'()’)
          Die Liste zu ladender nginx-Lua-Pakete. Hier sollte eine Liste
          von Paketnamen ladbarer Lua-Module angegeben werden. Zum
          Beispiel:

               (lua-package-path (list lua-resty-core
                                       lua-resty-lrucache
                                       lua-resty-signal
                                       lua-tablepool
                                       lua-resty-shell))

     ‘lua-package-cpath’ (Vorgabe: ‘'()’)
          Die Liste zu ladender nginx-Lua-C-Pakete. Hier sollte eine
          Liste von Paketnamen ladbarer Lua-C-Module angegeben werden.
          Zum Beispiel:

               (lua-package-cpath (list lua-resty-signal))

     ‘global-directives’ (Vorgabe: ‘'((events . ()))’)
          Assoziative Liste von globalen Direktiven für die oberste
          Ebene der nginx-Konfiguration. Als Werte können wiederum
          assoziative Listen angegeben werden.

               (global-directives
                `((worker_processes . 16)
                  (pcre_jit . on)
                  (events . ((worker_connections . 1024)))))

     ‘extra-content’ (Vorgabe: ‘""’)
          Zusätzlicher Inhalt, der an den ‘http’-Block angehängt wird.
          Sie können entweder einen Wert angeben, der zu einer
          Zeichenkette heruntergebrochen werden kann, oder eine Liste
          solcher Werte. Ersterer wird direkt eingefügt, während
          Letzteren Leerraum zur Einrückung vorangestellt und ein
          Zeilenumbruch angehängt wird. Verschachtelte Listen werden auf
          eine Zeile entschachtelt.

               (extra-content "include /etc/nginx/custom-config.conf;")
               (extra-content `("include /etc/nginx/custom-config.conf;"
                                ("include " ,%custom-config.conf ";")))

 -- Data Type: nginx-log-format-configuration
     Data type representing the configuration of a custom Nginx log
     format. This type has the following parameters:

     ‘name’ (type: symbol)
          The name of the log format as a symbol.

     ‘escape’ (default: ‘'default’) (type: symbol)
          The mode used to escape values of variables in the format. The
          supported values are:

             • ‘'default’, to escape all characters outside of the ASCII
               printable range.
             • ‘'json’, to escape all characters invalid in JSON
               strings.
             • ‘'none’, to disable escaping.

     ‘format’ (type: string)
          The format as accepted by the ‘log_format’ directive.

 -- Datentyp: nginx-server-configuration
     Der Datentyp, der die Konfiguration eines nginx-Serverblocks
     repräsentiert. Dieser Typ hat die folgenden Parameter:

     ‘listen’ (Vorgabe: ‘'("80" "443 ssl")’)
          Jede ‘listen’-Direktive legt Adresse und Port für eine IP fest
          oder gibt einen Unix-Socket an, auf dem der Server Anfragen
          beantwortet. Es können entweder sowohl Adresse als auch Port
          oder nur die Adresse oder nur der Port angegeben werden. Als
          Adresse kann auch ein Rechnername („Hostname“) angegeben
          werden, zum Beispiel:

               '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")

     ‘server-name’ (Vorgabe: ‘(list 'default)’)
          Eine Liste von Servernamen, die dieser Server repräsentiert.
          ‘'default’ repräsentiert den voreingestellten Server, der für
          Verbindungen verwendet wird, die zu keinem anderen Server
          passen.

     ‘root’ (Vorgabe: ‘"/srv/http"’)
          Wurzelverzeichnis des Webauftritts, der über nginx abgerufen
          werden kann.

     ‘locations’ (Vorgabe: ‘'()’)
          Eine Liste von “nginx-location-configuration”- oder
          “nginx-named-location-configuration”-Verbundsobjekten, die
          innerhalb des Serverblocks benutzt werden.

     ‘index’ (Vorgabe: ‘(list "index.html")’)
          Index-Dateien, mit denen Anfragen nach einem Verzeichnis
          beantwortet werden. Wenn _keine_ davon gefunden wird,
          antwortet Nginx mit der Liste der Dateien im Verzeichnis.

     ‘try-files’ (Vorgabe: ‘'()’)
          Eine Liste der Dateien, bei denen in der angegebenen
          Reihenfolge geprüft wird, ob sie existieren. ‘nginx’
          beantwortet die Anfrage mit der ersten Datei, die es findet.

     ‘ssl-certificate’ (Vorgabe: ‘#f’)
          Wo das Zertifikat für sichere Verbindungen gespeichert ist.
          Sie sollten es auf ‘#f’ setzen, wenn Sie kein Zertifikat haben
          oder kein HTTPS benutzen möchten.

     ‘ssl-certificate-key’ (Vorgabe: ‘#f’)
          Wo der private Schlüssel für sichere Verbindungen gespeichert
          ist. Sie sollten ihn auf ‘#f’ setzen, wenn Sie keinen
          Schlüssel haben oder kein HTTPS benutzen möchten.

     ‘server-tokens?’ (Vorgabe: ‘#f’)
          Ob der Server Informationen über seine Konfiguration bei
          Antworten beilegen soll.

     ‘raw-content’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder dateiartigen Objekten, die
          an den Server-Block angehängt werden. Jedem Element wird
          Leerraum zur Einrückung vorangestellt und ein Zeilenumbruch
          angehängt. Verschachtelte Listen werden entschachtelt.

 -- Datentyp: nginx-upstream-configuration
     Der Datentyp, der die Konfiguration eines nginx-‘upstream’-Blocks
     repräsentiert. Dieser Typ hat folgende Parameter:

     ‘name’
          Der Name dieser Servergruppe.

     ‘servers’
          Gibt die Adressen der Server in der Gruppe an. Die Adresse
          kann als IP-Adresse (z.B. ‘127.0.0.1’), Domänenname (z.B.
          ‘backend1.example.com’) oder als Pfad eines Unix-Sockets mit
          dem vorangestellten Präfix ‘unix:’ angegeben werden. Wenn
          Adressen eine IP-Adresse oder einen Domänennamen benutzen, ist
          der voreingestellte Port 80, aber ein abweichender Port kann
          auch explizit angegeben werden.

     ‘extra-content’
          Zusätzlicher Inhalt, welcher an den ‘upstream’-Block angehängt
          wird. Sie können eine Zeichenkette, ein dateiartiges Objekt
          oder eine Liste davon angeben. Bei einer Liste wird jedem
          Element Leerraum zur Einrückung vorangestellt und ein
          Zeilenumbruch angehängt. Verschachtelte Listen werden
          entschachtelt.

               (extra-content "include /etc/nginx/custom-config.conf;")
               (extra-content `("include /etc/nginx/custom-config.conf;"
                                ("include " ,%custom-config.conf ";")))

 -- Datentyp: nginx-location-configuration
     Der Datentyp, der die Konfiguration eines nginx-‘location’-Blocks
     angibt. Der Typ hat die folgenden Parameter:

     ‘uri’
          Die URI, die auf diesen Block passt.

     ‘body’
          Der Rumpf des location-Blocks, der als eine Liste von
          Zeichenketten oder dateiartigen Objekten angegeben werden
          muss. Jedem Element wird Leerraum zur Einrückung vorangestellt
          und ein Zeilenumbruch angehängt. Verschachtelte Listen werden
          entschachtelt.

          Zum Beispiel können Anfragen an eine Upstream-Servergruppe
          weitergeleitet werden, die mit einem
          ‘nginx-upstream-configuration’-Block angegeben wurde, indem
          diese Direktive im Rumpf angegeben wird: ‘(list "proxy_pass
          http://upstream-name;")’.

 -- Datentyp: nginx-named-location-configuration
     Der Datentyp repräsentiert die Konfiguration eines mit Namen
     versehenen nginx-location-Blocks („Named Location Block“). Ein mit
     Namen versehener location-Block wird zur Umleitung von Anfragen
     benutzt und nicht für die normale Anfrageverarbeitung. Dieser Typ
     hat die folgenden Parameter:

     ‘name’
          Der Name, mit dem dieser location-Block identifiziert wird.

     ‘body’
          Siehe *note nginx-location-configuration body::, weil der
          Rumpf („Body“) eines mit Namen versehenen location-Blocks wie
          ein ‘nginx-location-configuration body’ benutzt werden kann.
          Eine Einschränkung ist, dass der Rumpf eines mit Namen
          versehenen location-Blocks keine location-Blöcke enthalten
          kann.

 -- Data Type: nginx-stream-configuration
     Data type representing the configuration file context in which
     stream directives are specified. This type has the following
     parameters:

     ‘upstream-blocks’ (Vorgabe: ‘'()’)
          Eine Liste von Upstream-Blöcken, die in der erzeugten
          Konfigurationsdatei stehen sollen. Ihre Elemente sollten den
          Typ ‘<nginx-upstream-configuration>’ haben.

     ‘server-blocks’ (Vorgabe: ‘'()’)
          Eine Liste von Server-Blöcken, die in der erzeugten
          Konfigurationsdatei stehen sollen. Die Elemente davon sollten
          den Typ ‘<nginx-server-configuration>’ haben.

     ‘extra-content’ (Vorgabe: ‘'()’)
          Zusätzlicher Inhalt, der an den ‘stream’-Block angehängt wird.
          Sie können entweder einen Wert angeben, der zu einer
          Zeichenkette heruntergebrochen werden kann, oder eine Liste
          solcher Werte. Ersterer wird direkt eingefügt, während
          Letzteren Leerraum zur Einrückung vorangestellt und ein
          Zeilenumbruch angehängt wird. Verschachtelte Listen werden auf
          eine Zeile entschachtelt.

Varnish Cache
.............

Varnish ist ein schneller zwischenspeichernder Server, der zwischen
Web-Anwendungen und deren Endbenutzern sitzt. Er leitet Anfragen von
Clients weiter und lagert die URLs, auf die zugegriffen wird, in einen
Zwischenspeicher ein, damit bei mehreren Anfragen auf dieselbe Ressource
nur eine Anfrage an die Hintergrundanwendung gestellt wird.

 -- Variable: varnish-service-type
     Diensttyp für den Varnish-Daemon.

 -- Datentyp: varnish-configuration
     Der Datentyp, der die Konfiguration des ‘varnish’-Dienstes
     repräsentiert. Dieser Typ hat die folgenden Parameter:

     ‘package’ (Vorgabe: ‘varnish’)
          Das Varnish-Paket, was benutzt werden soll.

     ‘name’ (Vorgabe: ‘"default"’)
          Ein Name für diese Varnish-Instanz. Varnish wird ein
          Verzeichnis in ‘/var/varnish/’ mit diesem Namen erzeugen und
          dort temporäre Dateien speichern. Wenn der Name mit einem
          Schrägstrich beginnt, wird er als absoluter Verzeichnispfad
          interpretiert.

          Übergeben Sie die Befehlszeilenoption ‘-n’ an andere
          Varnish-Programme, um sich mit der Instanz diesen Namens zu
          verbinden, z.B. ‘varnishncsa -n default’.

     ‘backend’ (Vorgabe: ‘"localhost:8080"’)
          Welcher Hintergrunddienst benutzt werden soll. Diese Option
          wird ignoriert, wenn ‘vcl’ gesetzt ist.

     ‘vcl’ (Vorgabe: #f)
          Das “VCL”-Programm (in der Varnish Configuration Language),
          das ausgeführt werden soll. Ist dies auf ‘#f’ gesetzt,
          fungiert Varnish als Proxy für den Hintergrunddienst ‘backend’
          mit der voreingestellten Konfiguration. Andernfalls muss dies
          ein dateiartiges Objekt mit gültiger VCL-Syntax sein.

          Um zum Beispiel mit VCL einen Spiegelserver für www.gnu.org
          (https://www.gnu.org) einzurichten, können Sie so etwas
          benutzen:

               (define %gnu-mirror
                 (plain-file "gnu.vcl"
                             "vcl 4.1;
               backend gnu { .host = \"www.gnu.org\"; }"))

               (operating-system
                 ;; …
                 (services (cons (service varnish-service-type
                                          (varnish-configuration
                                           (listen '(":80"))
                                           (vcl %gnu-mirror)))
                                 %base-services)))

          Die Konfiguration einer bereits laufenden Varnish-Instanz kann
          mit dem Programm ‘varnishadm’ eingesehen und verändert werden.

          Ziehen Sie die Varnish User Guide
          (https://varnish-cache.org/docs/) und das Varnish Book
          (https://book.varnish-software.com/4.0/) zu Rate, wenn Sie
          eine umfassende Dokumentation zu Varnish und seiner
          Konfigurationssprache suchen.

     ‘listen’ (Vorgabe: ‘'("localhost:80")’)
          Liste der Adressen, auf denen Varnish lauschen soll.

     ‘storage’ (Vorgabe: ‘'("malloc,128m")’)
          Liste der Speicher-Hintergrunddienste („Storage Backends“),
          die von der VCL aus benutzt werden können.

     ‘parameters’ (Vorgabe: ‘'()’)
          Liste der Laufzeitparameter von der Form ‘'(("Parameter" .
          "Wert"))’.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Zusätzliche Argumente, die an den ‘varnishd’-Prozess übergeben
          werden.

Whoogle Search
--------------

Whoogle Search (https://github.com/benbusby/whoogle-search) ist eine
selbstbetriebene, werbefreie, datenschutzfreundliche Meta-Suchmaschine,
die Suchergebnisse von Google sammelt und anzeigt. Sie können sie in
ihren Vorgabeeinstellungen konfigurieren, indem Sie diese Zeile in das
Feld ‘services’ Ihrer Betriebssystemdeklaration eintragen:

     (service whoogle-service-type)

   Dadurch wird Whoogle Search als lokaler Web-Server laufen, auf den
Sie durch Öffnen von ‘http://localhost:5000’ in Ihrem Browser zugreifen
können. Die Referenz der Konfiguration folgt.

 -- Variable: whoogle-service-type
     Der Diensttyp des Whoogle-Search-Dienstes. Sein Wert muss ein
     ‘whoogle-configuration’-Verbundsobjekt sein, siehe unten.

 -- Datentyp: whoogle-configuration
     Der Datentyp repräsentiert die Konfiguration für den
     Whoogle-Search-Dienst.

     ‘package’ (Vorgabe: ‘whoogle-search’)
          Das zu verwendende Whoogle-Search-Paket.

     ‘host’ (Vorgabe: ‘"127.0.0.1"’)
          Die IP-Adresse des Rechners, auf dem Whoogle laufen wird.

     ‘port’ (Vorgabe: ‘5000’)
          Der Port, auf dem Whoogle zugänglich sein wird.

     ‘environment-variables’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten mit den Umgebungsvariablen, mit
          denen Sie Einstellungen an Whoogle vornehmen. Sehen Sie in den
          Vorlagen für dessen Umgebungsvariable
          (https://github.com/benbusby/whoogle-search/blob/main/whoogle.template.env)
          nach, was zur Verfügung steht.

Patchwork
.........

Patchwork ist ein System, um eingereichten Patches zu folgen. Es kann an
eine Mailing-Liste geschickte Patches sammeln und auf einer
Web-Oberfläche anzeigen.

 -- Variable: patchwork-service-type
     Diensttyp für Patchwork.

   Es folgt ein Minimalbeispiel für einen Patchwork-Dienst, der auf der
Domain ‘patchwork.example.com’ läuft.

     (service patchwork-service-type
              (patchwork-configuration
               (domain "patchwork.example.com")
               (settings-module
                (patchwork-settings-module
                 (allowed-hosts (list domain))
                 (default-from-email "patchwork@patchwork.example.com")))
               (getmail-retriever-config
                (getmail-retriever-configuration
                 (type "SimpleIMAPSSLRetriever")
                 (server "imap.example.com")
                 (port 993)
                 (username "patchwork")
                 (password-command
                  (list (file-append coreutils "/bin/cat")
                        "/etc/getmail-patchwork-imap-password"))
                 (extra-parameters
                 '((mailboxes . ("Patches"))))))))


   Der Patchwork-Dienst wird über drei Verbundsobjekte konfiguriert. Die
‘<patchwork-configuration>’ hat mit der Konfiguration von Patchwork
innerhalb des HTTPD-Dienstes zu tun.

   Das ‘settings-module’-Feld innerhalb des
‘<patchwork-configuration>’-Verbundsobjekts kann mit einem
‘<patchwork-settings-module>’-Verbundsobjekt ausgefüllt werden, das ein
im Guix-Store angelegtes Einstellungsmodul beschreibt.

   Für das ‘database-configuration’-Feld innerhalb des
‘<patchwork-settings-module>’ muss eine
‘<patchwork-database-configuration>’ benutzt werden.

 -- Datentyp: patchwork-configuration
     Der Datentyp, der die Konfiguration des Patchwork-Dienstes
     repräsentiert. Dieser Typ hat die folgenden Parameter:

     ‘patchwork’ (Vorgabe: ‘patchwork’)
          Welches Patchwork-Paket benutzt werden soll.

     ‘domain’
          Welche Domain für Patchwork benutzt werden soll. Sie findet
          Verwendung in Patchworks virtuellen Rechner („Virtual Host“)
          für den HTTPD-Dienst.

     ‘settings-module’
          Das durch Patchwork benutzte Einstellungsmodul. Als eine
          Django-Anwendung wird Patchwork mit einem Python-Modul
          konfiguriert, das die Einstellungen speichert. Es kann
          entweder eine Instanz des
          ‘<patchwork-settings-module>’-Verbundstyps sein, ein
          beliebiges anderes Verbundsobjekt sein, das die Einstellungen
          im Store repräsentiert, oder ein Verzeichnis außerhalb des
          Stores.

     ‘static-path’ (Vorgabe: ‘"/static/"’)
          Der Pfad, auf dem der HTTPD-Dienst die statischen Dateien
          anbieten soll.

     ‘getmail-retriever-config’
          Das durch Patchwork benutzte
          getmail-retriever-configuration-Verbundsobjekt. Getmail wird
          mit diesem Wert konfiguriert. Die Mitteilungen werden mit
          Patchwork als Empfänger zugestellt.

 -- Datentyp: patchwork-settings-module
     Der Datentyp, der das Einstellungsmodul für Patchwork
     repräsentiert. Manche dieser Einstellungen haben direkt mit
     Patchwork zu tun, andere beziehen sich auf Django, dem
     Web-Framework auf dem Patchwork aufsetzt, oder dessen
     Django-Rest-Framework-Bibliothek. Dieser Typ verfügt über die
     folgenden Parameter:

     ‘database-configuration’ (Vorgabe: ‘(patchwork-database-configuration)’)
          Die für Patchwork benutzten Datenbankverbindungseinstellungen.
          Siehe den ‘<patchwork-database-configuration>’-Verbundstyp für
          weitere Informationen.

     ‘secret-key-file’ (Vorgabe: ‘"/etc/patchwork/django-secret-key"’)
          Patchwork benutzt als eine Django-Webanwendung einen geheimen
          Schlüssel, um Werte kryptographisch zu signieren. Diese Datei
          sollte einen einzigartigen, unvorhersehbaren Wert enthalten.

          Wenn diese Datei nicht existiert, wird sie erzeugt und ein
          zufälliger Wert wird durch den Shepherd-Dienst für
          patchwork-setup hineingeschrieben.

          Diese Einstellung bezieht sich auf Django.

     ‘allowed-hosts’
          Eine Liste zulässiger Netzwerkschnittstellen (Hosts), auf
          denen dieser Patchwork-Dienst antwortet. Sie sollte wenigstens
          die im ‘<patchwork-configuration>’-Verbundsobjekt genannte
          Domain enthalten.

          Dies ist eine Django-Einstellung.

     ‘default-from-email’
          Die E-Mail-Adresse, von der aus Patchwork nach Voreinstellung
          E-Mails verschicken soll.

          Dies ist eine Patchwork-Einstellung.

     ‘static-url’ (Vorgabe: ‘#f’)
          Die URL, über die statische Dokumente angeboten werden. Es
          kann eine teilweise URL oder eine vollständige URL angegeben
          werden, aber sie muss auf ‘/’ enden.

          Wenn der Vorgabewert benutzt wird, wird der ‘static-path’-Wert
          aus dem ‘<patchwork-configuration>’-Verbundsobjekt benutzt.

          Dies ist eine Django-Einstellung.

     ‘admins’ (Vorgabe: ‘'()’)
          Die E-Mail-Adressen, an die Details zu auftretenden Fehlern
          versendet werden. Jeder Wert sollte eine zweielementige Liste
          mit dem Namen und der E-Mail-Adresse sein.

          Dies ist eine Django-Einstellung.

     ‘debug?’ (Vorgabe: ‘#f’)
          Ob Patchwork im Fehlersuchmodus („Debug Mode“) ausgeführt
          werden soll. Wenn dies auf ‘#t’ steht, werden detaillierte
          Fehlermeldungen angezeigt.

          Dies ist eine Django-Einstellung.

     ‘enable-rest-api?’ (Vorgabe: ‘#t’)
          Ob Patchworks REST-Programmschnittstelle („REST-API“)
          aktiviert werden soll.

          Dies ist eine Patchwork-Einstellung.

     ‘enable-xmlrpc?’ (Vorgabe: ‘#t’)
          Ob die XML-Programmschnittstelle für entfernte Prozeduraufrufe
          („XML-RPC-API“) aktiviert werden soll.

          Dies ist eine Patchwork-Einstellung.

     ‘force-https-links?’ (Vorgabe: ‘#t’)
          Ob auf den Webseiten von Patchwork die Verweise auf andere
          Seiten HTTPS verwenden sollen.

          Dies ist eine Patchwork-Einstellung.

     ‘extra-settings’ (Vorgabe: ‘""’)
          Zusätzlicher Code, der am Ende des
          Patchwork-Einstellungsmoduls platziert werden soll.

 -- Datentyp: patchwork-database-configuration
     Der Datentyp, der die Datenbankkonfiguration für Patchwork
     repräsentiert.

     ‘engine’ (Vorgabe: ‘"django.db.backends.postgresql_psycopg2"’)
          Welcher Datenbanktreiber („Engine“) benutzt werden soll.

     ‘name’ (Vorgabe: ‘"patchwork"’)
          Der Name der zu benutzenden Datenbank.

     ‘user’ (Vorgabe: ‘"httpd"’)
          Der Benutzer, als der sich Patchwork mit der Datenbank
          verbindet.

     ‘password’ (Vorgabe: ‘""’)
          Das Passwort, das zum Herstellen einer Verbindung zur
          Datenbank verwendet werden soll.

     ‘host’ (Vorgabe: ‘""’)
          Der Rechner, mit dem die Datenbankverbindung hergestellt wird.

     ‘port’ (Vorgabe: ‘""’)
          Der Port, auf dem sich Patchwork mit der Datenbank verbindet.

Mumi
....

Mumi (https://codeberg.org/guix/mumi) ist eine Weboberfläche für
Debbugs, einem System, um Fehlerberichte zu verwalten. Nach Vorgabe
zeigt es die bei GNU angebotene Debbugs-Instanz (https://bugs.gnu.org).
Mumi ist ein Web-Server, er lädt aber auch E-Mails von Debbugs herunter
und indiziert diese.

 -- Variable: mumi-service-type
     Dies ist der Diensttyp für Mumi.

 -- Datentyp: mumi-configuration
     Der Datentyp, der die Konfiguration des Mumi-Dienstes
     repräsentiert. Dieser Typ hat die folgenden Felder:

     ‘mumi’ (Vorgabe: ‘mumi’)
          Das zu verwendende Mumi-Paket.

     ‘data-directory’ (default: ‘"/var/mumi/data"’)
          Data directory to store Debbugs data from upstream Debbugs
          instance.

     ‘rsync-remote’
          Remote rsync path from which to download Debbugs data. The
          remote is polled every 5 minutes, unless a previous instance
          of rsync is already running.

     ‘rsync-flags’ (Vorgabe: ‘'()’)
          Zusätzliche Befehlszeilenoptionen, die an ‘rsync’ übergeben
          werden.

     ‘mailer?’ (Vorgabe: ‘#true’)
          Ob die Komponente zum Mailversand aktiviert sein soll oder
          nicht.

     ‘sender’
          Die E-Mail-Adresse, die bei Kommentaren als Absender angegeben
          wird.

     ‘smtp’
          Eine URI, um die SMTP-Einstellungen für Mailutils
          einzurichten. Hierfür könnte etwas wie
          ‘sendmail:///path/to/bin/msmtp’ angegeben werden, oder eine
          beliebige andere URI, die von Mailutils unterstützt wird.
          Siehe *note SMTP-Postfächer: (mailutils)SMTP Mailboxes.

     ‘Pakete’
          List of ‘<mumi-package-configuration>’ objects representing
          packages configured on Mumi.

 -- Data Type: mumi-package-configuration
     Data type representing the configuration of a package on Mumi. This
     type has the following fields:

     ‘name’
          Name of the package.

     ‘display-name’
          Display name used for this package in the web interface.

     ‘debbugs-packages’
          List of Debbugs packages this package refers to.

     ‘bug-email-address’
          Email address to send bug reports to.

     ‘patch-email-address’
          Email address to send patches to, if that is different from
          ‘bug-email-address’.

     ‘file-tags’
          Association list mapping tags to filename regular expressions.
          Keys are tag names, and values are lists of regular
          expressions. For each entry of the association list, the tag
          is applied if a filename referred to in a patch matches any of
          the regular expressions.

FastCGI
.......

FastCGI ist eine Schnittstelle zwischen den Anwendungen im Vordergrund
(„Front-End“) und Hintergrund („Back-End“) eines Webdienstes. Die Rolle,
die es ausübt, ist nicht mehr ganz aktuell, weil neue Webdienste im
Allgemeinen einfach über HTTP zwischen Vorder- und Hintergrund
kommunizieren sollten. Allerdings gibt es eine Menge von
Hintergrunddiensten wie PHP oder den optimierten Git-Repository-Zugang
über HTTP, welche FastCGI benutzen, also wird es auch in Guix
unterstützt.

   Um FastCGI zu benutzen, konfigurieren Sie den Webserver im
Vordergrund (z.B. nginx) so, dass er eine Teilmenge der Anfragen an die
fastcgi-Hintergrundanwendung weiterleitet, dass auf einem lokalen TCP-
oder Unix-Socket lauscht. Ein dazwischenliegendes ‘fcgiwrap’-Programm
sitzt zwischen dem eigentlichen Hintergrundprozess und dem Webserver.
Vom Vordergrund wird angezeigt, welches Hintergrundprogramm ausgeführt
werden soll. Diese Informationen werden an den ‘fcgiwrap’-Prozess
übermittelt.

 -- Variable: fcgiwrap-service-type
     Ein Diensttyp für den ‘fcgiwrap’-FastCGI-Proxy.

 -- Datentyp: fcgiwrap-configuration
     Der Datentyp, der die Konfiguration des ‘fcgiwrap’-Dienstes
     repräsentiert. Dieser Typ hat die folgenden Parameter:
     ‘package’ (Vorgabe: ‘fcgiwrap’)
          Welches fcgiwrap-Paket benutzt werden soll.

     ‘socket’ (Vorgabe: ‘tcp:127.0.0.1:9000’)
          Der Socket, auf dem der ‘fcgiwrap’-Prozess lauschen soll, als
          eine Zeichenkette. Gültige Werte für SOCKET wären unter
          anderem ‘unix:/PFAD/ZUM/UNIX/SOCKET’,
          ‘tcp:VIER.TEILE.GEPUNKT.ET:PORT’ und
          ‘tcp6:[IPV6-ADRESSE]:Port’.

     ‘user’ (Vorgabe: ‘fcgiwrap’)
     ‘group’ (Vorgabe: ‘fcgiwrap’)
          Die Benutzerkonten- und Gruppennamen als Zeichenketten, unter
          denen der ‘fcgiwrap’-Prozess ausgeführt werden soll. Der
          ‘fastcgi’-Dienst wird sicherstellen, dass, wenn der Nutzer den
          Benutzer- oder Gruppennamen ‘fcgiwrap’ verlangt, der
          entsprechende Benutzer und/oder Gruppe auch auf dem System
          existiert.

          Es ist möglich, einen FastCGI-gestützten Webdienst so zu
          konfigurieren, dass er HTTP-Authentisierungsinformationen vom
          Vordergrundserver an das Hintergrundsystem weiterreicht und es
          ‘fcgiwrap’ möglich macht, den Hintergrundprozess als ein
          entsprechender lokaler Nutzer auszuführen. Um dem
          Hintergrundsystem diese Funktionalität anzubieten, lassen Sie
          ‘fcgiwrap’ als der Administratornutzer ‘root’ mit selbiger
          Gruppe ausführen. Beachten Sie, dass die Funktionalität auch
          auf dem Vordergrundsystem erst eingerichtet werden muss.

PHP-FPM
.......

PHP-FPM (FastCGI Process Manager) ist eine alternative
PHP-FastCGI-Implementierung, die über einige zusätzliche
Funktionalitäten verfügt, die für Webauftritte jeder Größe nützlich
sind.

   Zu diesen Funktionalitäten gehören:
   • Prozesserzeugung nach Bedarf
   • Grundlegende Statistiken (ähnlich wie Apaches mod_status)
   • Fortschrittliche Prozessverwaltung mit sanftem Stoppen und Starten
   • Die Möglichkeit, Arbeiter-Threads mit verschiedenen UIDs, GIDs,
     Chroot- oder Umgebungseinstellungen zu starten und mit
     verschiedener php.ini (als Ersatz für safe_mode)
   • Protokollierung der Standard- und Standardfehlerausgabe
   • Neustart im Notfall einer ungewollten Zerstörung des
     Befehlscode-Zwischenspeichers
   • Unterstützung für beschleunigtes Hochladen
   • Unterstützung für „langsames Protokollieren“ („slowlog“)
   • Verbesserungen gegenüber FastCGI, wie z.B.
     fastcgi_finish_request() – eine besondere Funktion, um eine Anfrage
     fertig abzuarbeiten und alle Daten zu Ende zu verarbeiten, während
     etwas Zeitintensives abläuft (Videokonvertierung,
     Statistikverarbeitung usw.)
   … und vieles mehr.

 -- Variable: php-fpm-service-type
     Ein Diensttyp für ‘php-fpm’.

 -- Datentyp: php-fpm-configuration
     Datentyp für die Konfiguration des php-fpm-Dienstes.
     ‘php’ (Vorgabe: ‘php’)
          Das zu benutzende PHP-Paket.
     ‘socket’ (Vorgabe: ‘(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")’)
          Die Adresse, auf der FastCGI-Anfragen angenommen werden.
          Gültige Syntax hierfür ist:
          ‘"ip.ad.res.se:Port"’
               Lässt auf einem TCP-Socket auf der angegebenen Adresse
               auf dem angegebenen Port lauschen.
          ‘"port"’
               Lässt auf einem TCP-Socket auf allen Adressen auf dem
               angegebenen Port lauschen.
          ‘"/pfad/zum/unix/socket"’
               Lässt auf einem Unix-Socket lauschen.

     ‘user’ (Vorgabe: ‘php-fpm’)
          Der Benutzer, dem die PHP-Arbeiterprozesse gehören werden.
     ‘group’ (Vorgabe: ‘php-fpm’)
          Die Gruppe für die Arbeiterprozesse.
     ‘socket-user’ (Vorgabe: ‘php-fpm’)
          Der Benutzer, der mit dem php-fpm-Socket kommunizieren kann.
     ‘socket-group’ (Vorgabe: ‘nginx’)
          Die Gruppe, die mit dem php-fpm-Socket kommunizieren kann.
     ‘pid-file’ (Vorgabe: ‘(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")’)
          Der Prozessidentifikator des php-fpm-Prozesses wird in diese
          Datei geschrieben, sobald der Dienst gestartet wurde.
     ‘log-file’ (Vorgabe: ‘(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")’)
          Wohin das Protokoll für den php-fpm-Hauptprozess geschrieben
          wird.
     ‘process-manager’ (Vorgabe: ‘(php-fpm-dynamic-process-manager-configuration)’)
          Detaillierte Einstellungen für die php-fpm-Prozessverwaltung.
          Sie müssen eines der Folgenden sein:
          ‘<php-fpm-dynamic-process-manager-configuration>’
          ‘<php-fpm-static-process-manager-configuration>’
          ‘<php-fpm-on-demand-process-manager-configuration>’
     ‘display-errors’ (Vorgabe: ‘#f’)
          Legt fest, ob PHP-Fehler und Warnungen an Clients geschickt
          und in ihren Browsern angezeigt werden. Dies ist nützlich für
          lokale PHP-Entwicklung, aber ein Sicherheitsrisiko für
          öffentliche Webauftritte, weil Fehlermeldungen Passwörter und
          Passwortdaten offenlegen können.
     ‘timezone’ (Vorgabe: ‘#f’)
          Legt den Parameter ‘php_admin_value[date.timezone]’ fest.
     ‘workers-logfile’ (Vorgabe: ‘(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")’)
          In dieser Datei werden ‘stderr’-Ausgaben von
          PHP-Arbeiterprozessen protokolliert. Das Feld kann auf ‘#f’
          gesetzt werden, damit nicht protokolliert wird.
     ‘file’ (Vorgabe: ‘#f’)
          Optional kann hier ein vorrangig benutzter Ersatz für die
          gesamte Konfigurationsdatei angegeben werden. Sie können dafür
          die ‘mixed-text-file’-Funktion oder einen absoluten Dateipfad
          verwenden.
     ‘php-ini-file’ (Vorgabe: ‘#f’)
          Hier können optional die PHP-Voreinstellungen geändert werden.
          Geben Sie dazu eine beliebige Art von „dateiartigem“ Objekt an
          (siehe *note dateiartige Objekte: G-Ausdrücke.). Sie können
          dafür die ‘mixed-text-file’-Funktion oder einen absoluten
          Dateipfad verwenden.

          Bei der Entwicklung mit dem lokalen Rechner bietet es sich an,
          die Zeit- und Speicherbegrenzung erzeugter PHP-Prozesse
          anzuheben. Benutzen Sie dazu folgndes Code-Schnipsel in Ihrer
          Betriebssystemkonfiguration:
               (define %local-php-ini
                 (plain-file "php.ini"
                             "memory_limit = 2G
               max_execution_time = 1800"))

               (operating-system
                 ;; …
                 (services (cons (service php-fpm-service-type
                                          (php-fpm-configuration
                                           (php-ini-file %local-php-ini)))
                                 %base-services)))

          Umfassende Dokumentation dazu, welche Direktiven Sie in der
          ‘php.ini’ verwenden dürfen, sollten Sie unter den
          php.ini-Kerndirektiven
          (https://www.php.net/manual/en/ini.core.php) nachschlagen.

 -- Datentyp: php-fpm-dynamic-process-manager-configuration
     Datentyp für die _dynamische_ Prozessverwaltung durch php-fpm. Bei
     der _dynamischen_ Prozessverwaltung bleiben Arbeiterprozesse nach
     Abschluss ihrer Aufgabe weiterhin erhalten, solange die
     konfigurierten Beschränkungen eingehalten werden.
     ‘max-children’ (Vorgabe: ‘5’)
          Die maximale Anzahl an Arbeiterprozessen.
     ‘start-servers’ (Vorgabe: ‘2’)
          Wie viele Arbeiterprozesse gleich zu Beginn gestartet werden
          sollen.
     ‘min-spare-servers’ (Vorgabe: ‘1’)
          Wie viele untätige Arbeiterprozesse mindestens weiterhin
          vorgehalten bleiben sollen.
     ‘max-spare-servers’ (Vorgabe: ‘3’)
          Wie viele untätige Arbeiterprozesse höchstens weiterhin
          vorgehalten bleiben sollen.

 -- Datentyp: php-fpm-static-process-manager-configuration
     Datentyp für die _statische_ Prozessverwaltung durch php-fpm. Bei
     der _statischen_ Prozessverwaltung wird eine unveränderliche Anzahl
     an Arbeiterprozessen erzeugt.
     ‘max-children’ (Vorgabe: ‘5’)
          Die maximale Anzahl an Arbeiterprozessen.

 -- Datentyp: php-fpm-on-demand-process-manager-configuration
     Datentyp für die Prozessverwaltung _nach Bedarf_ durch php-fpm. Bei
     der Prozessverwaltung _nach Bedarf_ werden Arbeiterprozesse erst
     erzeugt, wenn Anfragen vorliegen.
     ‘max-children’ (Vorgabe: ‘5’)
          Die maximale Anzahl an Arbeiterprozessen.
     ‘process-idle-timeout’ (Vorgabe: ‘10’)
          Die Zeit in Sekunden, nach der ein Prozess ohne Anfragen
          erzwungen beendet wird.

 -- Prozedur: nginx-php-location [#:nginx-package nginx] [socket
          (string-append "/var/run/php" (version-major (package-version
          php)) "-fpm.sock")]
     Eine Hilfsfunktion, mit der in kurzer Zeit PHP zu einer
     ‘nginx-server-configuration’ hinzugefügt werden kann.

   Eine einfache Art, die Dienste für nginx mit PHP einzurichten, kann
so aussehen:
     (services (cons* (service dhcp-client-service-type)
                      (service php-fpm-service-type)
                      (service nginx-service-type
                               (nginx-server-configuration
                                (server-name '("example.com"))
                                (root "/srv/http/")
                                (locations
                                 (list (nginx-php-location)))
                                (listen '("80"))
                                (ssl-certificate #f)
                                (ssl-certificate-key #f)))
                      %base-services))

   Der Cat Avatar Generator („Katzenavatargenerator“) ist ein einfacher
Dienst, um die Nutzung von php-fpm in ‘Nginx’ zu demonstrieren. Mit ihm
können Katzenavatarbilder aus einem Startwert („Seed“) heraus erzeugt
werden, zum Beispiel aus dem Hash der E-Mail-Adresse eines Benutzers.

 -- Prozedur: cat-avatar-generator-service [#:cache-dir
          "/var/cache/cat-avatar-generator"] [#:package
          cat-avatar-generator] [#:configuration
          (nginx-server-configuration)]
     Liefert ein nginx-server-configuration-Objekt, das von der in
     ‘configuration’ angegebenen Konfiguration erbt. Es erweitert die
     Nginx-Konfiguration, indem es einen Server-Block hinzufügt, der die
     in ‘package’ angegebene Version vom cat-avatar-generator anbietet.
     Bei der Ausführung wird dem cat-avatar-generator Zugriff auf sein
     in ‘cache-dir’ angegebenes Zwischenspeicherverzeichnis gewährt.

   Eine einfache Konfiguration des cat-avatar-generator kann so
aussehen:
     (services (cons* (cat-avatar-generator-service
                       #:configuration
                       (nginx-server-configuration
                         (server-name '("example.com"))))
                      ...
                      %base-services))

Hpcguix-web
...........

Das Programm hpcguix-web (https://github.com/UMCUGenetics/hpcguix-web/)
ist eine anpassbare Weboberfläche, um Guix-Pakete zu suchen. Am Anfang
war es für Nutzer von Hochleistungs-Rechenclustern gedacht
(„High-Performance Computing“, kurz HPC).

 -- Variable: hpcguix-web-service-type
     Der Diensttyp für ‘hpcguix-web’.

 -- Datentyp: hpcguix-web-configuration
     Datentyp für die Konfiguration des hpcguix-web-Dienstes.

     ‘specs’ (Vorgabe: ‘#f’)
          Entweder ‘#f’ oder ein G-Ausdruck (siehe *note G-Ausdrücke::),
          der die Konfiguration des hpcguix-web-Dienstes als
          ‘hpcguix-web-configuration’-Verbundsobjekt festlegt. Die
          wichtigsten Felder in diesem Verbundsobjekt sind:

          ‘title-prefix’ (Vorgabe: ‘"hpcguix | "’)
               Das Präfix der Webseitentitel.

          ‘guix-command’ (Vorgabe: ‘"guix"’)
               Welcher Befehl zum Aufrufen von ‘guix’ in Beispielen auf
               den HTML-Seiten dargestellt wird.

          ‘package-filter-proc’ (Vorgabe: ‘(const #t)’)
               Eine Prozedur, die festlegt, wie anzuzeigende Pakete
               gefiltert werden.

          ‘package-page-extension-proc’ (Vorgabe: ‘(const '())’)
               Erweiterungspaket für ‘hpcguix-web’.

          ‘menu’ (Vorgabe: ‘'()’)
               Zusätzlicher Eintrag auf der Menüseite.

          ‘channels’ (Vorgabe: ‘%default-channels’)
               Liste der Kanäle, aus denen die Paketliste erstellt wird
               (siehe *note Kanäle::).

          ‘package-list-expiration’ (Vorgabe: ‘(* 12 3600)’)
               Nach wie viel Zeit in Sekunden die Paketliste aus den
               neuesten Instanzen der angegebenen Kanäle neu erzeugt
               wird.

          Siehe das Repository von hpcguix-web für ein vollständiges
          Beispiel
          (https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm).

     ‘package’ (Vorgabe: ‘hpcguix-web’)
          Das hpcguix-web-Paket, was benutzt werden soll.

     ‘address’ (Vorgabe: ‘"127.0.0.1"’)
          Die IP-Adresse, auf die gelauscht werden soll.

     ‘port’ (Vorgabe: ‘5000’)
          Die Portnummer, auf der gelauscht werden soll.

   Eine typische Deklaration eines hpcguix-web-Dienstes sieht so aus:

     (service hpcguix-web-service-type
              (hpcguix-web-configuration
               (specs
                #~(hpcweb-configuration
                   (title-prefix "Guix-HPC - ")
                   (menu '(("/about" "ABOUT")))))))

     Anmerkung: Der hpcguix-web-Dienst aktualisiert die Liste der
     Pakete, die er veröffentlicht, periodisch, indem er die Kanäle über
     einen Git-„Pull“ lädt. Dazu muss er auf X.509-Zertifikate
     zugreifen, damit Git-Server authentifiziert werden können, wenn mit
     diesen über HTTPS kommuniziert wird, wofür der Dienst davon
     ausgeht, dass sich jene Zertifikate in ‘/etc/ssl/certs’ befinden.

     Dass ein Zertifikatspaket, ‘nss-certs’, verwendet wird, ist als
     Teil der ‘%base-packages’ vorgegeben. Siehe *note
     X.509-Zertifikate:: für weitere Informationen zu
     X.509-Zertifikaten.

gmnisrv
.......

Das Programm gmnisrv (https://git.sr.ht/~sircmpwn/gmnisrv) ist ein
einfacher Server für das Gemini-Protokoll
(https://gemini.circumlunar.space/).

 -- Variable: gmnisrv-service-type
     Dies ist der Diensttyp des gmnisrv-Dienstes, dessen Wert ein
     ‘gmnisrv-configuration’-Objekt wie in diesem Beispiel sein sollte:

          (service gmnisrv-service-type
                   (gmnisrv-configuration
                     (config-file (local-file "./my-gmnisrv.ini"))))

 -- Datentyp: gmnisrv-configuration
     Datentyp, der die Konfiguration von gmnisrv repräsentiert.

     ‘package’ (Vorgabe: GMNISRV)
          Das Paketobjekt des gmnisrv-Servers.

     ‘config-file’ (Vorgabe: ‘%default-gmnisrv-config-file’)
          Ein dateiartiges Objekt mit der zu nutzenden
          gmnisrv-Konfigurationsdatei. Die Vorgabekonfiguration lauscht
          auf Port 1965 und bietet die Dateien in ‘/srv/gemini’ an.
          Zertifikate werden in ‘/var/lib/gemini/certs’ gespeichert.
          Führen Sie für mehr Informationen ‘man gmnisrv’ und ‘man
          gmnisrv.ini’ aus.

Agate
.....

Das Programm Agate (gemini://qwertqwefsday.eu/agate.gmi) (GitHub-Seite
über HTTPS (https://github.com/mbrubeck/agate)) ist ein einfacher Server
für das Gemini-Protokoll (https://gemini.circumlunar.space/), der in
Rust geschrieben ist.

 -- Variable: agate-service-type
     Dies ist der Diensttyp des agate-Dienstes, dessen Wert ein
     ‘agate-configuration’-Objekt wie in diesem Beispiel sein sollte:

          (service agate-service-type
          	 (agate-configuration
          	   (content "/srv/gemini")
          	   (certificates "/srv/gemini-certs")))

     Das obige Beispiel steht für die minimalen Abänderungen, um Agate
     lauffähig zu machen. Den Pfad zum Zertifikat und zum
     Schlüsselverzeichnis anzugeben, ist auf jeden Fall nötig, denn das
     Gemini-Protokoll setzt standardmäßig TLS voraus.

     If the specified ‘certificates’ path is writable by Agate, and
     contains no valid pre-generated key and certificate, Agate will try
     to generate them on the first start. In this case you should pass
     at least one hostname using the ‘hostnames’ option. If the
     specified directory is read-only, key and certificate should be
     pre-generated by the user.

     To obtain a certificate and a key in DER format, you could, for
     example, use OpenSSL, running commands similar to the following
     example:

          openssl genpkey -out key.der -outform DER -algorithm RSA \
              -pkeyopt rsa_keygen_bits:4096
          openssl req -x509 -key key.der -outform DER -days 3650 -out cert.der \
              -subj "/CN=example.com"

     Of course, you’ll have to replace example.com with your own domain
     name, and then point the Agate configuration towards the path of
     the directory with the generated key and certificate using the
     ‘certificates’ option.

 -- Datentyp: agate-configuration
     Der Datentyp, der die Konfiguration von Agate repräsentiert.

     ‘package’ (Vorgabe: ‘agate’)
          Das Paketobjekt des Agate-Servers.

     ‘content’ (Vorgabe: ‘"/srv/gemini"’)
          Aus welchem Verzeichnis Agate Dateien anbieten soll.

     ‘certificates’ (default: ‘"/srv/gemini-certs"’)
          Root of the certificate directory. Must be filled in with a
          value from the user.

     ‘addresses’ (default: ‘'("[::]:1965" "0.0.0.0:1965")’)
          Liste der Adressen, auf denen gelauscht werden soll.

     ‘hostnames’ (default: ‘'()’)
          Virtual hosts for the Gemini server. If multiple values are
          specified, corresponding directory names should be present in
          the ‘content’ directory. Optional.

     ‘languages’ (default: ‘#f’)
          RFC-4646-Sprachcode(s) für Dokumente des Typs text/gemini.
          Optional.

     ‘only-tls13?’ (default: ‘#f’)
          Set to ‘#t’ to disable support for TLSv1.2.

     ‘serve-secret?’ (Vorgabe: ‘#f’)
          Setzen Sie dies auf ‘#t’, um geheime Dateien (mit einem Punkt
          beginnende Dateien und Verzeichnisse) anzubieten.

     ‘central-configuration?’ (default: ‘#f’)
          Set to ‘#t’ to look for the .meta configuration file in the
          ‘content’ root directory and will ignore ‘.meta’ files in
          other directories

     ‘ed25519?’ (default: ‘#f’)
          Set to ‘#t’ to generate keys using the Ed25519 signature
          algorithm instead of the default ECDSA.

     ‘skip-port-check?’ (default: ‘#f’)
          Set to ‘#t’ to skip URL port check even when a ‘hostname’ is
          specified.

     ‘log-ip?’ (Vorgabe: ‘#t’)
          Ob in die Protokolle auch IP-Adressen geschrieben werden
          sollen.

     ‘user’ (Vorgabe: ‘"agate"’)
          Besitzer des ‘agate’-Prozesses.

     ‘group’ (Vorgabe: ‘"agate"’)
          Gruppe des Besitzers des ‘agate’-Prozesses.

     ‘log-file’ (Vorgabe: ‘"/var/log/agate.log"’)
          Die Datei, in die die Protokollierung von Agate ausgegeben
          werden soll.

Miniflux
........

The Miniflux (https://miniflux.app/) is a minimalist RSS feed reader
with a web interface.

   Depending on the configuration, an initial administrator user can be
pre-created on startup. To enable this, ‘create-admin?’ should be set to
‘#t’, and both ‘admin-username-file’ and ‘admin-password-file’ should
point to files containing the username and password, respectively.
However, it is recommended to manually change the password to a secure
one via the web UI after the initial service startup.

 -- Variable: miniflux-service-type
     This is the type of the Miniflux service. Its value must be a
     ‘miniflux-configuration’ record as in this example:

          (service miniflux-service-type
                   (miniflux-configuration
                    (listen-address "0.0.0.0:8080")
                    (base-url "http://my-news-source.test")
                    (create-administrator-account? #t)
                    (administrator-account-name "/var/miniflux/initial-admin-username")
                    (administrator-account-password "/var/miniflux/initial-admin-password")))

     The details of the ‘miniflux-configuration’ record type are given
     below.

 -- Data Type: miniflux-configuration
     Available ‘miniflux-configuration’ fields are:

     ‘listen-address’ (default: ‘"127.0.0.1:8080"’) (type: string)
          Address to listen on. Use absolute path like
          ‘"/var/run/miniflux/miniflux.sock"’ for a Unix socket.

     ‘base-url’ (default: ‘"http://127.0.0.1/"’) (type: string)
          Base URL to generate HTML links and base path for cookies.

     ‘create-administrator-account?’ (default: ‘#f’) (type: boolean)
          Create an initial administrator account.

     ‘administrator-account-name’ (type: maybe-string-or-file-path)
          Initial administrator account name as a string or an absolute
          path to a file with an account name inside.

     ‘administrator-account-password’ (type: maybe-string-or-file-path)
          Initial administrator account password as a string or an
          absolute path to a file with a password inside.

     ‘run-migrations?’ (default: ‘#t’) (type: boolean)
          Run database migrations during application startup.

     ‘database-url’ (default: ‘"host=/var/run/postgresql"’) (type: string)
          PostgreSQL connection string.

     ‘user’ (default: ‘"miniflux"’) (type: string)
          User name for Postgresql and system account.

     ‘group’ (default: ‘"miniflux"’) (type: string)
          Group for the system account.

     ‘log-file’ (default: ‘"/var/log/miniflux.log"’) (type: string)
          Path to the log file.

     ‘extra-settings’ (type: maybe-list)
          Extra configuration parameters as a list of strings.


File: guix.de.info,  Node: High Availability Services,  Next: Zertifikatsdienste,  Prev: Web-Dienste,  Up: Dienste

11.10.21 High Availability Services
-----------------------------------

The ‘(gnu services high-availability)’ module provides RabbitMQ message
broker service.

RabbitMQ
........

 -- Variable: rabbitmq-service-type
     Service type for the RabbitMQ (https://www.rabbitmq.com/) web
     server. The value for this service type is a
     ‘<rabbitmq-configuration>’ record.

     Es folgt ein einfaches Beispiel der Konfiguration.

          (service rabbitmq-service-type
                   (rabbitmq-configuration
                     (rabbitmq-configuration
                       (plugins '("rabbitmq_stream"
                                  "rabbitmq_management"
                                  "rabbitmq_prometheus")))))

   At startup, RabbitMQ broker logs its initialization messages into
‘/var/log/messages’ file. Once running, the logging messages can be
found in a logging file of a RabbitMQ node in ‘/var/log/rabbitmq’
directory.

     Anmerkung: The default configuration of the RabbitMQ service
     enables the RabbitMQ broker to accept connections only on loopback
     interfaces. However, enabling certain plugins may open ports on all
     network interfaces. See also RabbitMQ Port Access
     (https://www.rabbitmq.com/docs/networking#ports).

 -- Data Type: rabbitmq-configuration
     This data type represents the configuration for RabbitMQ.

     ‘rabbitmq’ (default: ‘rabbitmq’)
          The RabbitMQ package to use.

     ‘config-file’ (default: ‘%default-rabbitmq-config-file’)
          Configuration file for the RabbitMQ broker. See also RabbitMQ
          Configuration (https://www.rabbitmq.com/docs/configure).

     ‘data-directory’ (default: ‘"/var/lib/rabbitmq/data"’)
          Directory with RabbitMQ broker data - a schema database,
          message stores, cluster member information, and other
          persistent node state.

     ‘plugins’ (Vorgabe: ‘'()’)
          A list of RabbitMQ plugins to enable. View all available
          plugins using the ‘rabbitmq-plugins list’ command.


File: guix.de.info,  Node: Zertifikatsdienste,  Next: DNS-Dienste,  Prev: High Availability Services,  Up: Dienste

11.10.22 Zertifikatsdienste
---------------------------

Das Modul ‘(gnu services certbot)’ stellt einen Dienst zur Verfügung, um
automatisch ein gültiges TLS-Zertifikat von der Zertifikatsautorität
Let’s Encrypt zu beziehen. Mit diesen Zertifikaten können Informationen
sicher über HTTPS oder andere TLS-basierte Protokolle übertragen werden,
im Wissen, dass der Client die Authentizität des Servers überprüfen wird
können.

   Let’s Encrypt (https://letsencrypt.org/) macht das ‘certbot’-Werkzeug
verfügbar, mit dem der Zertifizierungsvorgang automatisiert werden kann.
Das Werkzeug erzeugt zunächst auf sichere Weise einen Schlüssel auf dem
Server und stellt dann eine Anfrage an die
Let’s-Encrypt-Zertifikatsautorität („Certificate Authority“, kurz CA),
den Schlüssel zu signieren. Die Zertifikatsautorität prüft mit einem
Challenge-Response-Protokoll, dass die Anfrage auch wirklich vom
fraglichen Rechner (auch „Host“ genannt) kommt, wozu der Server über
HTTP seine Antwort geben muss. Wenn dieses Protokoll erfolgreich befolgt
wurde, signiert die Zertifikatsautorität den Schlüssel, woraus sich ein
Zertifikat ergibt. Dieses Zertifikat ist eine begrenzte Zeit lang
gültig, daher muss der Server für eine andauernde Bereitstellung von
TLS-Leistungen immer wieder neu der Zertifikatsautorität eine Bitte um
die Erneuerung der Signatur zukommen lassen.

   Mit dem certbot-Dienst wird dieser Prozess automatisiert. Er sorgt
dafür, dass am Anfang Schlüssel erzeugt werden und eine erste
Zertifizierungsanfrage an den Dienst von Let’s Encrypt gestellt wird.
Weiterhin ist das Challenge-/Response-Verfahren per Web-Server
integriert. Das Zertifikat wird auf die Platte geschrieben und
automatisch periodisch erneuert und bei der Erneuerung anfallende
Aufgaben werden erledigt (z.B. das Neuladen von Diensten und das
Kopieren von Schlüsseln mit entsprechenden Berechtigungen).

   Certbot wird zweimal täglich zu einer zufälligen Minute der Stunde
ausgeführt. Es tut so lange nichts, bis eine Erneuerung Ihrer
Zertifikate fällig wird oder sie gesperrt wurden, durch regelmäßige
Ausführung bekommen Sie aber die Chance, dass Ihr Server am Netz bleibt,
wenn Let’s Encrypt eine Sperrung aus irgendeinem Grund anordnet.

   Durch die Nutzung dieses Dienstes stimmen Sie dem „ACME Subscriber
Agreement“ zu, das Sie hier finden:
<https://acme-v02.api.letsencrypt.org/directory>.

 -- Variable: certbot-service-type
     Ein Diensttyp für den ‘certbot’-Client für Let’s Encrypt. Sein Wert
     muss ein ‘certbot-configuration’-Verbundsobjekt wie in diesem
     Beispiel sein:

          (service certbot-service-type
                   (certbot-configuration
                    (email "foo@example.net")
                    (certificates
                     (list
                      (certificate-configuration
                       (domains '("example.net" "www.example.net")))
                      (certificate-configuration
                       (domains '("bar.example.net")))))))

     Siehe unten für Details zur ‘certbot-configuration’.

 -- Datentyp: certbot-configuration
     Datentyp, der die Konfiguration des ‘certbot’-Dienstes
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:

     ‘package’ (Vorgabe: ‘certbot’)
          Das certbot-Paket, das benutzt werden soll.

     ‘webroot’ (Vorgabe: ‘/var/www’)
          Das Verzeichnis, aus dem heraus die Dateien für den
          Challenge-/Response-Prozess von Let’s Encrypt angeboten werden
          sollen.

     ‘certificates’ (Vorgabe: ‘'()’)
          Eine Liste der ‘certificates-configuration’-Objekte, für die
          Zertifikate und Anfragesignaturen erzeugt werden. Für jedes
          Zertifikat gibt es einen ‘name’-Eintrag und mehrere ‘domains’.

     ‘email’ (Vorgabe: ‘#f’)
          Optional die E-Mail-Adresse, die als Kontakt für die
          Registrierung und das Wiedererlangen dienen soll. Es wird
          empfohlen, sie anzugeben, weil Sie darüber wichtige
          Mitteilungen über Ihr Konto und ausgestellte Zertifikate
          mitbekommen können.

     ‘server’ (Vorgabe: ‘#f’)
          Optional eine andere URL des ACME-Servers. Wenn sie festgelegt
          wird, ersetzt sie die Voreinstellung von Certbot, nämlich die
          URL des Let’s-Encrypt-Servers.

     ‘rsa-key-size’ (Vorgabe: ‘2048’)
          Wie groß der RSA-Schlüssel sein soll.

     ‘default-location’ (Vorgabe: siehe unten)
          Die vorgegebene ‘nginx-location-configuration’. Weil ‘certbot’
          „Challenges“ und „Responses“ anbieten muss, muss durch ihn ein
          Web-Server ausgeführt werden können. Das tut er, indem er den
          ‘nginx’-Webdienst mit einer ‘nginx-server-configuration’
          erweitert, die auf den DOMAINS auf Port 80 lauscht und eine
          ‘nginx-location-configuration’ für den URI-Pfad-Teilraum
          ‘/.well-known/’ umfasst, der von Let’s Encrypt benutzt wird.
          Siehe *note Web-Dienste:: für mehr Informationen über diese
          nginx-Konfigurationsdatentypen.

          Anfragen an andere URL-Pfade werden mit der ‘default-location’
          abgeglichen. Wenn sie angegeben wurde, wird sie zu jeder
          ‘nginx-server-configuration’ hinzugefügt.

          Nach Vorgabe stellt die ‘default-location’ eine Weiterleitung
          von ‘http://DOMAIN/…’ nach ‘https://DOMAIN/…’ her. Sie müssen
          dann nur noch festlegen, was Sie auf Ihrem Webauftritt über
          ‘https’ anbieten wollen.

          Übergeben Sie ‘#f’, um keine ‘default-location’ vorzugeben.

 -- Datentyp: certificate-configuration
     Der Datentyp, der die Konfiguration eines Zertifikats
     repräsentiert. Dieser Typ hat die folgenden Parameter:

     ‘name’ (Vorgabe: siehe unten)
          Dieser Name wird vom Certbot intern zum Aufräumen und in
          Dateipfaden benutzt; er hat keinen Einfluss auf den Inhalt des
          erzeugten Zertifikats. Um Zertifikatsnamen einzusehen, führen
          Sie ‘certbot certificates’ aus.

          Die Vorgabe ist die erste angegebene Domain.

     ‘domains’ (Vorgabe: ‘'()’)
          Die erste angegebene Domain wird als Name des
          Zertifikatseigentümers („Subject CN“) benutzt und alle Domains
          werden als alternative Namen („Subject Alternative Names“) auf
          dem Zertifikat stehen.

     ‘challenge’ (Vorgabe: ‘#f’)
          Welche Art von Challenge durch den Certbot ausgeführt wird.
          Wenn ‘#f’ angegeben wird, wird die HTTP-Challenge
          voreingestellt. Wenn ein Wert angegeben wird, wird das Plugin
          benutzt, das auch bei manuellen Ausführungen benutzt wird
          (siehe ‘authentication-hook’, ‘cleanup-hook’ und die
          Dokumentation unter
          <https://certbot.eff.org/docs/using.html#hooks>), und Let’s
          Encrypt wird dazu berechtigt, die öffentliche IP-Adresse der
          anfordernden Maschine in seinem Protokoll zu speichern.

     ‘csr’ (Vorgabe: ‘#f’)
          Der Dateiname der Zertifizierungsanfrage („Certificate Signing
          Request“, CSR) im DER- oder PEM-Format. Wenn ‘#f’ angegeben
          wird, wird kein solches Argument an den Certbot übermittelt.
          Wenn ein Wert angegeben wird, wird der Certbot ihn anstelle
          einer selbsterstellten CSR verwenden. Die in ‘domains’
          genannten Domänen müssen dabei konsistent sein mit denen, die
          in der CSR-Datei aufgeführt werden.

     ‘authentication-hook’ (Vorgabe: ‘#f’)
          Welcher Befehl in einer Shell zum Antworten auf eine
          Zertifikats-„Challenge“ einmalig ausgeführt wird. Für diesen
          Befehl wird die Shell-Variable ‘$CERTBOT_DOMAIN’ die Domain
          enthalten, für die sich der Certbot authentisiert,
          ‘$CERTBOT_VALIDATION’ enthält die Validierungs-Zeichenkette
          und ‘$CERTBOT_TOKEN’ enthält den Dateinamen der bei einer
          HTTP-01-Challenge angefragten Ressource.

     ‘cleanup-hook’ (Vorgabe: ‘#f’)
          Command to be run in a shell once for each certificate
          challenge that have been answered by the
          ‘authentication-hook’. For this command, the shell variables
          available in the ‘authentication-hook’ script are still
          available, and additionally ‘$CERTBOT_AUTH_OUTPUT’ will
          contain the standard output of the ‘authentication-hook’
          script.

     ‘deploy-hook’ (Vorgabe: ‘#f’)
          Welcher Befehl in einer Shell für jedes erfolgreich
          ausgestellte Zertifikat einmalig ausgeführt wird. Bei diesem
          Befehl wird die Shell-Variable ‘$RENEWED_LINEAGE’ auf das
          Unterverzeichnis für die aktuelle Konfiguration zeigen (zum
          Beispiel ‘"/etc/letsencrypt/live/example.com"’), in dem sich
          die neuen Zertifikate und Schlüssel befinden. Die
          Shell-Variable ‘$RENEWED_DOMAINS’ wird eine
          leerzeichengetrennte Liste der erneuerten Zertifikatsdomänen
          enthalten (zum Beispiel ‘"example.com www.example.com"’.

     ‘dry-run?’ (default: ‘#f’)
          Communicate with the ACME server but do not update
          certificates nor trigger ‘deploy-hook’. This is useful as a
          temporary setting to test the challenge procedure, especially
          the ‘authentication-hook’ and ‘cleanup-hook’ while working on
          them. It’s also a good idea to use the Let’s Encrypt staging
          server at
          <https://acme-staging-v02.api.letsencrypt.org/directory> while
          testing, which allows for higher rate limits, but with which
          ‘certbot’ will helpfully refuse to update certificates and
          recommend the ‘dry-run?’ option. For example:

               (define %authentication-hook
                 (program-file "authentication-hook"
                   #~(let ((domain (getenv "CERTBOT_DOMAIN"))
                           (token (getenv "CERTBOT_TOKEN")))
                       (format #t "Hey, can you authenticate ~a with ~a for me?"
                               domain token))))

               (define %cleanup-hook
                 (program-file "authentication-hook"
                   #~(display "Bye")))

               (service certbot-service-type
                        (certbot-configuration
                         (server "https://acme-staging-v02.api.letsencrypt.org/directory")
                         (certificates
                          (list
                           (certificate-configuration
                             (dry-run? #t)
                             (authentication-hook %authentication-hook)
                             (cleanup-hook %cleanup-hook)
                             (domains '("example.net" "www.example.net")))))))

     ‘start-self-signed?’ (Vorgabe: ‘#t’)
          Ob bei der Aktivierung des Systems für den Anfang ein
          selbstsigniertes Zertifikat erzeugt werden soll. Diese Option
          ist besonders geeignet, weil so ‘nginx’ schon in der Lage ist,
          zu starten, noch bevor ‘certbot’ ausgeführt wurde, denn
          ‘certbot’ kann nur ausgeführt werden, wenn ‘nginx’ läuft und
          damit HTTP-Challenges beantwortet werden können.

   Für jede ‘certificate-configuration’ wird das Zertifikat in
‘/etc/certs/NAME/fullchain.pem’ und der Schlüssel in
‘/etc/certs/NAME/privkey.pem’ gespeichert.


File: guix.de.info,  Node: DNS-Dienste,  Next: VNC-Dienste,  Prev: Zertifikatsdienste,  Up: Dienste

11.10.23 DNS-Dienste
--------------------

Das Modul ‘(gnu services dns)’ stellt Dienste zur Verfügung, die mit dem
“Domain Name System” (DNS) zu tun haben. Es bietet einen Server-Dienst
an, mit dem ein _autoritativer_ DNS-Server für mehrere Zonen betrieben
werden kann, jeweils als untergeordneter „Slave“ oder als „Master“.
Dieser Dienst benutzt Knot DNS (https://www.knot-dns.cz/). Außerdem wird
ein zwischenspeichernder und weiterleitender DNS-Server für das LAN
bereitgestellt, der dnsmasq
(http://www.thekelleys.org.uk/dnsmasq/doc.html) benutzt.

Knot-Dienst
...........

Eine Beispielkonfiguration eines autoritativen Servers für zwei Zonen,
eine „Master“, eine „Slave“, wäre:

     (define-zone-entries example.org.zone
     ;; Name TTL Class Type Data
       ("@"  ""  "IN"  "A"  "127.0.0.1")
       ("@"  ""  "IN"  "NS" "ns")
       ("ns" ""  "IN"  "A"  "127.0.0.1"))

     (define master-zone
       (knot-zone-configuration
         (domain "example.org")
         (zone (zone-file
                 (origin "example.org")
                 (entries example.org.zone)))))

     (define slave-zone
       (knot-zone-configuration
         (domain "plop.org")
         (dnssec-policy "default")
         (master (list "plop-master"))))

     (define plop-master
       (knot-remote-configuration
         (id "plop-master")
         (address (list "208.76.58.171"))))

     (operating-system
       ;; ...
       (services (cons* (service knot-service-type
                          (knot-configuration
                            (remotes (list plop-master))
                            (zones (list master-zone slave-zone))))
                        ;; ...
                        %base-services)))

 -- Variable: knot-service-type
     Dies ist der Diensttyp für den Knot-DNS-Server.

     Knot DNS ist ein autoritativer DNS-Server, das heißt, er kann
     mehrere Zonen bedienen, also mehrere Domainnamen, die Sie von einem
     Registrar kaufen würden. Dieser Server ist kein „Resolver“, er
     dient also nur zur Auflösung von Namen, für die er autoritativ ist.
     Dieser Server kann so konfiguriert werden, dass er Zonen als
     „Master“-Server oder als „Slave“-Server bereitstellt, je nachdem,
     wie er für die jeweilige Zone eingestellt ist. Server für
     „Slave“-Zonen erhalten ihre Daten von „Master“-Servern und stellen
     mit ihnen einen autoritativen Server zur Verfügung. Für einen
     „Resolver“ macht es keinen Unterschied, ob er Namen auflöst, indem
     er einen „Master“ oder einen „Slave“ danach fragt.

     Die folgenden Datentypen werden benutzt, um den Knot-DNS-Server zu
     konfigurieren:

 -- Datentyp: knot-key-configuration
     Datentyp, der einen Schlüssel repräsentiert. Dieser Typ hat die
     folgenden Parameter:

     ‘id’ (Vorgabe: ‘""’)
          Ein Identifikator, mit dem sich andere Konfigurationsfelder
          auf diesen Schlüssel beziehen können. IDs müssen eindeutig
          sein und dürfen _nicht_ leer sein.

     ‘algorithm’ (Vorgabe: ‘#f’)
          Der Algorithmus, der benutzt werden soll. Wählen Sie zwischen
          ‘#f’, ‘'hmac-md5’, ‘'hmac-sha1’, ‘'hmac-sha224’,
          ‘'hmac-sha256’, ‘'hmac-sha384’ und ‘'hmac-sha512’.

     ‘secret’ (Vorgabe: ‘""’)
          Was dabei der geheime Schlüssel sein soll.

 -- Datentyp: knot-acl-configuration
     Datentyp, der die Konfiguration einer Zugriffssteuerungsliste
     („Access Control List“, ACL) repräsentiert. Dieser Typ hat die
     folgenden Parameter:

     ‘id’ (Vorgabe: ‘""’)
          Ein Identifikator, mit dem sich andere Konfigurationsfelder
          auf diesen Schlüssel beziehen können. IDs müssen eindeutig
          sein und dürfen _nicht_ leer sein.

     ‘address’ (Vorgabe: ‘'()’)
          Eine geordnete Liste aus IP-Adresse, Netzwerk-Subnetzen oder
          Netzwerkbereichen, die jeweils als Zeichenketten angegeben
          werden. Die Anfrage muss zu einem davon passen. Ein leerer
          Wert bedeutet, dass die Adresse nicht passen muss.

     ‘key’ (Vorgabe: ‘'()’)
          Eine geordnete Liste von Referenzen auf Schlüssel, die jeweils
          als Zeichenketten angegeben werden. Die Zeichenkette muss zu
          einem Schlüsselidentifikator passen, der in einem der
          ‘knot-key-configuration’-Objekte definiert wurde. Wenn kein
          Schlüssel angegeben wird, bedeutet das, dass kein Schlüssel zu
          dieser Zugriffssteuerungsliste passen muss.

     ‘action’ (Vorgabe: ‘'()’)
          Eine geordete Liste der Aktionen, die von dieser
          Zugriffssteuerungsliste zugelassen oder gesperrt werden.
          Mögliche Werte sind Listen aus null oder mehr Elementen, die
          jeweils ‘'transfer’, ‘'notify’ oder ‘'update’ sind.

     ‘deny?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr steht, werden mit der
          Zugriffssteuerungsliste Einschränkungen festgelegt, d.h.
          aufgelistet Aktionen werden gesperrt. Steht es auf falsch,
          werden aufgelistete Aktionen zugelassen.

 -- Datentyp: zone-entry
     Datentyp, der einen Eintrag in einer Zonendatei repräsentiert.
     Dieser Typ verfügt über die folgenden Parameter:

     ‘name’ (Vorgabe: ‘"@"’)
          Der Name des Eintrags. ‘"@"’ bezieht sich auf den Ursprung der
          Zone. Namen sind relativ zum Ursprung der Zone. Zum Beispiel
          bezieht sich in einer Zone ‘example.org’ der Eintrag
          ‘"ns.example.org"’ tatsächlich auf
          ‘ns.example.org.example.org’. Namen, die auf einen Punkt
          enden, sind absolut. Das bedeutet, dass sich
          ‘"ns.example.org."’ auf ‘ns.example.org’ bezieht.

     ‘ttl’ (Vorgabe: ‘""’)
          Wie lange dieser Eintrag zwischengespeichert werden darf, d.h.
          seine „Time-To-Live“ (TTL). Ist sie nicht festgelegt, wird die
          voreingestellte TTL benutzt.

     ‘class’ (Vorgabe: ‘"IN"’)
          Welche Klasse der Eintrag hat. Derzeit unterstützt Knot nur
          ‘"IN"’ und teilweise ‘"CH"’.

     ‘type’ (Vorgabe: ‘"A"’)
          Der Typ des Eintrags. Zu den üblichen Typen gehören A (für
          eine IPv4-Adresse), AAAA (für eine IPv6-Adresse), NS (der
          Namens-Server) und MX („Mail eXchange“ für E-Mails). Viele
          andere Typen sind auch definiert.

     ‘data’ (Vorgabe: ‘""’)
          Die Daten, die im Eintrag stehen, zum Beispiel eine IP-Adresse
          bei einem A-Eintrag oder ein Domain-Name bei einem NS-Eintrag.
          Bedenken Sie, dass Domain-Namen relativ zum Ursprung angegeben
          werden, außer wenn sie auf einen Punkt enden.

 -- Datentyp: zone-file
     Datentyp, der den Inhalt einer Zonendatei repräsentiert. Dieser Typ
     verfügt über die folgenden Parameter:

     ‘entries’ (Vorgabe: ‘'()’)
          Die Liste der Einträge. Für den SOA-Eintrag wird automatisch
          gesorgt, also müssen Sie ihn nicht zur Liste der Einträge
          hinzufügen. In der Liste sollte vermutlich ein Eintrag für
          Ihren primären autoritativen DNS-Server stehen. Abgesehen vom
          direkten Aufzählen der Einträge können Sie
          ‘define-zone-entries’ verwenden, um ein Objekt zu definieren,
          worin eine Liste von Einträgen leichter angegeben werden kann,
          und was sie dann im ‘entries’-Feld des ‘zone-file’ angeben
          können.

     ‘origin’ (Vorgabe: ‘""’)
          Der Name Ihrer Zone. Dieser Parameter darf nicht leer sein.

     ‘ns’ (Vorgabe: ‘"ns"’)
          Die Domain Ihres primären autoritativen DNS-Servers. Der Name
          wird relativ zum Ursprung angegeben, außer wenn er auf einen
          Punkt endet. Dieser primäre DNS-Server _muss_ verpflichtend
          einem NS-Eintrag in der Zone entsprechen, dem eine IP-Adresse
          in der Liste der Einträge zugeordnet werden muss.

     ‘mail’ (Vorgabe: ‘"hostmaster"’)
          Eine E-Mail-Adresse, unter der man Sie als für diese Zone
          Verantwortlichen („Besitzer“/„Owner“) kontaktieren kann. Sie
          wird zu ‘<mail>@<origin>’ umgeschrieben.

     ‘serial’ (Vorgabe: ‘1’)
          Die Seriennummer der Zone. Da sie von sowohl „Slaves“ als auch
          „Resolvern“ benutzt wird, um bei Änderungen auf dem Laufenden
          zu bleiben, ist es notwendig, dass sie _niemals_ kleiner
          gemacht wird. Erhöhen Sie sie, wann immer Sie eine Änderung an
          Ihrer Zone durchführen.

     ‘refresh’ (Vorgabe: ‘(* 2 24 3600)’)
          Die Häufigkeit, wie oft Slaves eine Zonenübertragung („Zone
          Transfer“) durchführen. Als Wert wird eine Anzahl von Sekunden
          angegeben. Sie kann über eine Multiplikation oder mit
          ‘(string->duration)’ angegeben werden.

     ‘retry’ (Vorgabe: ‘(* 15 60)’)
          Nach welcher Zeitperiode ein Slave versuchen wird, Kontakt mit
          seinem Master aufzunehmen, wenn er ihn beim ersten Mal nicht
          erreichen kann.

     ‘expiry’ (Vorgabe: ‘(* 14 24 3600)’)
          Die Voreinstellung, welche TTL für Einträge verwendet werden
          soll. Bestehende Einträge werden für höchstens diese
          Zeitspanne als korrekt angesehen. Nach Ablauf dieser
          Zeitspanne werden „Resolver“ ihren Zwischenspeicher als
          ungültig markieren und erneut prüfen, ob der Eintrag noch
          existiert.

     ‘nx’ (Vorgabe: ‘3600’)
          Die voreingestellte TTL der _nicht_ existierenden Einträge.
          Sie stellt normalerweise eine kurze Verzögerung dar, weil Sie
          möchten, dass neue Domains für jeden schnell erkannt werden.

 -- Datentyp: knot-remote-configuration
     Datentyp, der die Konfiguration eines entfernten Servers („Remote“)
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:

     ‘id’ (Vorgabe: ‘""’)
          Ein Identifikator, mit dem man sich in anderen
          Konfigurationsfeldern auf diesen entfernten Server („Remote“)
          beziehen kann. IDs müssen eindeutig sein und dürfen _nicht_
          leer sein.

     ‘address’ (Vorgabe: ‘'()’)
          Eine geordnete Liste der Empfänger-IP-Adressen. Adressen
          werden der Reihe nach durchprobiert. Optional kann eine
          Portnummer nach dem Trennzeichen @ angegeben werden, zum
          Beispiel als ‘(list "1.2.3.4" "2.3.4.5@53")’. Die Vorgabe ist
          53.

     ‘via’ (Vorgabe: ‘'()’)
          Eine geordnete Liste der Quell-IP-Adressen. Eine leere Liste
          wird Knot eine sinnvolle Quell-IP-Adresse auswählen lassen.
          Optional kann eine Portnummer nach dem Trennzeichen @
          angegeben werden. Die Vorgabe wird zufällig ausgewählt.

     ‘key’ (Vorgabe: ‘#f’)
          Ein Verweis auf einen Schlüssel („Key“), also eine
          Zeichenkette, die den Identifikator eines Schlüssels enthält,
          der in einem ‘knot-key-configuration’-Feld festgelegt wurde.

 -- Datentyp: knot-keystore-configuration
     Datentyp, der einen Schlüsselspeicher („Keystore“) repräsentiert,
     um DNSSEC-Schlüssel zu fassen. Dieser Typ verfügt über die
     folgenden Parameter:

     ‘id’ (Vorgabe: ‘""’)
          Der Identifikator des Schlüsselspeichers. Er darf nicht leer
          gelassen werden.

     ‘backend’ (Vorgabe: ‘'pem’)
          Die Art von Hintergrundspeicher, in dem Schlüssel eingetragen
          werden. Sie kann ‘'pem’ oder ‘'pkcs11’ sein.

     ‘config’ (Vorgabe: ‘"/var/lib/knot/keys/keys"’)
          Die Zeichenkette mit der Konfiguration des
          Hintergrundspeichers. Ein Beispiel für die PKCS#11 ist
          ‘"pkcs11:token=knot;pin-value=1234
          /gnu/store/…/lib/pkcs11/libsofthsm2.so"’. Für pem als
          Hintergrundspeicher repräsentiert die Zeichenkette einen Pfad
          im Dateisystem.

 -- Datentyp: knot-policy-configuration
     Datentyp, der die DNSSEC-Richtlinie repräsentiert. Knot DNS kann
     Ihre Zonen automatisch signieren. Der Dienst kann Ihre Schlüssel
     automatisch erzeugen und verwalten oder Schlüssel benutzen, die Sie
     selbst erzeugen.

     DNSSEC wird in der Regel mit zwei Schlüsseln implementiert: Ein
     Schlüssel, mit dem Schlüssel signiert werden („Key Signing Key“,
     KSK), signiert den zweiten Schlüssel, einen Schlüssel, der Zonen
     signiert („Zone Signing Key“, ZSK), mit dem die Zone signiert wird.
     Damit er als vertrauenswürdig angesehen wird, muss der KSK in der
     Elternzone stehen (meistens ist das eine Top-Level-Domain). Wenn
     Ihr Registrar DNSSEC unterstützt, müssen Sie ihm den Hash Ihres KSK
     übermitteln, damit er einen DS-Eintrag für Ihre Zone hinzufügen
     kann. Das passiert nicht automatisch und muss jedes Mal wiederholt
     werden, wenn Sie Ihren KSK ändern.

     Die Richtlinie legt auch fest, wie lange Ihre Schlüssel gültig
     bleiben. Normalerweise kann der ZSK leicht geändert werden und
     benutzt kryptografisch schwächere Funktionen (also niedrigere
     Parameter), damit Einträge schnell signiert werden können, wodurch
     man sie oft verändern kann. Der KSK setzt jedoch eine manuelle
     Interaktion mit dem Registrar voraus, also werden sie weniger oft
     geändert und verwenden stärkere Parameter, weil mit ihnen nur ein
     einziger Eintrag signiert wird.

     Dieser Typ verfügt über die folgenden Parameter:

     ‘id’ (Vorgabe: ‘""’)
          Der Identifikator der Richtlinie. Er darf nicht leer sein.

     ‘keystore’ (Vorgabe: ‘"default"’)
          Eine Referenz auf einen Schlüsselspeicher („Keystore“), also
          eine Zeichenkette, die den Identifikator eines
          Schlüsselspeichers enthält, der in einem
          ‘knot-keystore-configuration’-Feld gespeichert ist. Der
          Identifikator ‘"default"’ sorgt dafür, dass der vorgegebene
          Schlüsselspeicher verwendet wird (eine KASP-Datenbank, die
          durch diesen Dienst eingerichtet wurde).

     ‘manual?’ (Vorgabe: ‘#f’)
          Ob Schlüssel manuell verwaltet werden sollen; andernfalls
          werden sie automatisch verwaltet.

     ‘single-type-signing?’ (Vorgabe: ‘#f’)
          Wenn es auf ‘#t’ steht, werden dieselben Schlüssel als KSK und
          ZSK verwendet („Single-Type Signing Scheme“).

     ‘algorithm’ (Vorgabe: ‘"ecdsap256sha256"’)
          Ein Algorithmus für zum Signieren verwendete Schlüssel und
          ausgestellte Signaturen.

     ‘ksk-size’ (Vorgabe: ‘256’)
          Die Länge des KSK. Beachten Sie, dass dieser Wert für den
          vorgegebenen Algorithmus korrekt ist, aber für andere
          Algorithmen _nicht_ sicher wäre.

     ‘zsk-size’ (Vorgabe: ‘256’)
          Die Länge des ZSK. Beachten Sie, dass dieser Wert für den
          vorgegebenen Algorithmus korrekt ist, aber für andere
          Algorithmen _nicht_ sicher wäre.

     ‘dnskey-ttl’ (Vorgabe: ‘'default’)
          Der TTL-Wert für DNSKEY-Einträge, die die Wurzel der Zone
          betreffen. Der besondere Wert ‘'default’ bedeutet, dass
          dieselbe TTL wie für den SOA-Eintrag der Zone verwendet wird.

     ‘zsk-lifetime’ (Vorgabe: ‘(* 30 24 3600)’)
          Die Zeitspanne zwischen der Veröffentlichung eines ZSK und dem
          Anfang des nächsten Schlüsselübergangs („Key Rollover“).

     ‘propagation-delay’ (Vorgabe: ‘(* 24 3600)’)
          Eine zusätzliche Verlängerung, die bei jedem Schritt im
          Schlüsselübergang („Key Rollover“) gewartet wird. Dieser Wert
          sollte hoch genug sein, damit in dieser Zeit Daten vom
          Master-Server alle Slaves erreichen.

     ‘rrsig-lifetime’ (Vorgabe: ‘(* 14 24 3600)’)
          Wie lange neu ausgestellte Signaturen gültig bleiben.

     ‘rrsig-refresh’ (Vorgabe: ‘(* 7 24 3600)’)
          Wie lange im Voraus vor einem Auslaufen der Signatur diese
          Signatur erneuert werden soll.

     ‘nsec3?’ (Vorgabe: ‘#f’)
          Ist es auf ‘#t’ gesetzt, wird NSEC3 statt NSEC benutzt.

     ‘nsec3-iterations’ (Vorgabe: ‘5’)
          Wie oft zusätzlich gehasht werden soll.

     ‘nsec3-salt-length’ (Vorgabe: ‘8’)
          Wie lange das kryptografische „Salt“ sein soll, als Anzahl von
          Oktetten. Es wird vor dem Hashen an den Namen des
          ursprünglichen Besitzers angehängt.

     ‘nsec3-salt-lifetime’ (Vorgabe: ‘(* 30 24 3600)’)
          Wie lange das neu ausgestellte Salt-Feld gültig bleiben soll.

 -- Datentyp: knot-zone-configuration
     Datentyp, der eine durch Knot verfügbar gemachte Zone
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:

     ‘domain’ (Vorgabe: ‘""’)
          Die Domain, die durch diese Konfiguration zur Verfügung
          gestellt wird. Sie darf nicht leer sein.

     ‘file’ (Vorgabe: ‘""’)
          Die Datei, in der diese Zone abgespeichert wird. Dieser
          Parameter wird bei Master-Zonen ignoriert. Bleibt er leer,
          wird die vom Domain-Namen abhängige Voreinstellung benutzt.

     ‘zone’ (Vorgabe: ‘(zone-file)’)
          Der Inhalt der Zonendatei. Dieser Parameter wird bei
          Slave-Zonen ignoriert. Er muss ein Verbundsobjekt vom Typ
          ‘zone-file’ enthalten.

     ‘master’ (Vorgabe: ‘'()’)
          Eine Liste von als „Master“ geltenden entfernten Servern. Ist
          sie leer, ist diese Zone ein Master, sonst ein Slave. Es
          handelt sich um eine Liste von Identifikatoren entfernter
          Server („Remotes“).

     ‘ddns-master’ (Vorgabe: ‘#f’)
          Der vorrangige „Master“. Ist dies leer, wird hierfür der erste
          Master aus der Liste der Master benutzt.

     ‘notify’ (Vorgabe: ‘'()’)
          Eine Liste der Identifikatoren von entfernten Slave-Servern
          („Remotes“).

     ‘acl’ (Vorgabe: ‘'()’)
          Eine Liste von Identifikatoren von Zugriffssteuerungslisten.

     ‘semantic-checks?’ (Vorgabe: ‘#f’)
          Wenn dies festgelegt ist, werden für die Zone mehr semantische
          Überprüfungen durchgeführt.

     ‘zonefile-sync’ (Vorgabe: ‘0’)
          Wie lange nach einer Änderung der im Arbeitsspeicher
          zwischengespeicherten Daten gewartet wird, bis die Daten auf
          die Platte geschrieben werden. Bei 0 werden sie sofort
          synchronisiert.

     ‘zonefile-load’ (Vorgabe: ‘#f’)
          Wie die in der Zonendatei gespeicherten Daten benutzt werden,
          wenn die Zone geladen wird. Mögliche Werte sind:

             • ‘#f’ sorgt dafür, dass nach der Voreinstellung von Knot
               verfahren wird,
             • ‘'none’ bewirkt, dass die Zonendatei überhaupt nicht
               benutzt wird,
             • ‘'difference’ lässt den Unterschied zwischen den bereits
               vorliegenden Daten und dem gespeicherten Inhalt der Zone
               berechnen, welcher dann zum vorliegenden Zoneninhalt
               hinzugenommen wird,
             • ‘'difference-no-serial’ für dasselbe wie bei
               ‘'difference’, aber die SOA-Seriennummer in der
               Zonendatei wird ignoriert und der Server kümmert sich
               automatisch darum.
             • ‘'whole’ lässt den ganzen Inhalt der Zone aus der
               Zonendatei auslesen.

     ‘journal-content’ (Vorgabe: ‘#f’)
          Wie in den Aufzeichnungen die Zone und Änderungen daran
          gespeichert werden sollen. Mögliche Werte sind ‘'none’, um
          keine Aufzeichnungen zu führen, ‘'changes’, um Änderungen zu
          speichern, und ‘'all’, wodurch der gesamte Inhalt gespeichert
          wird. Für ‘#f’ wird dieser Wert nicht gesetzt, so dass der in
          Knot voreingestellte Wert benutzt wird.

     ‘max-journal-usage’ (Vorgabe: ‘#f’)
          Die maximale Größe, die Aufzeichnungen für die
          Wiederherstellbarkeit („Journal“) auf der Platte einnehmen
          können. Für ‘#f’ wird dieser Wert nicht gesetzt, so dass der
          in Knot voreingestellte Wert benutzt wird.

     ‘max-journal-depth’ (Vorgabe: ‘#f’)
          Wie viele Aufzeichnungen höchstens im Änderungsverlauf
          gespeichert werden. Für ‘#f’ wird dieser Wert nicht gesetzt,
          so dass der in Knot voreingestellte Wert benutzt wird.

     ‘max-zone-size’ (Vorgabe: ‘#f’)
          Die maximale Größe der Zonendatei. Diese Beschränkung wird auf
          eingehende Übertragungen und Aktualisierungen angewandt. Für
          ‘#f’ wird dieser Wert nicht gesetzt, so dass der in Knot
          voreingestellte Wert benutzt wird.

     ‘dnssec-policy’ (Vorgabe: ‘#f’)
          Ein Verweis auf ein ‘knot-policy-configuration’-Verbundsobjekt
          oder der besondere Name ‘"default"’, um die Voreinstellung von
          Knot zu verwenden. Wenn dies als der Wert ‘#f’ angegeben
          wurde, findet in dieser Zone kein Signieren mit DNSSEC statt.

     ‘serial-policy’ (Vorgabe: ‘'increment’)
          Eine Richtlinie; entweder ‘'increment’ (Seriennummer
          hochzählen) oder ‘'unixtime’ (Unix-Zeitstempel verwenden).

 -- Datentyp: knot-configuration
     Datentyp, der die Konfiguration von Knot repräsentiert. Dieser Typ
     verfügt über die folgenden Parameter:

     ‘knot’ (Vorgabe: ‘knot’)
          Das Knot-Paket.

     ‘run-directory’ (Vorgabe: ‘"/var/run/knot"’)
          Das Laufzeit-Verzeichnis („run“-Verzeichnis). In diesem
          Verzeichnis werden die PID-Datei mit dem Prozessidentifikator
          und Sockets gespeichert.

     ‘includes’ (Vorgabe: ‘'()’)
          Eine flache Liste von Zeichenketten oder dateiartigen
          Objekten, die oben in der Konfigurationsdatei eingebunden
          werden müssen.

          Hiermit können Geheimnisse abseits von Guix’
          Zuständigkeitsbereich gespeichert werden. Zum Beispiel können
          Sie geheime Schlüssel so in einer externen Datei speichern,
          die nicht von Guix verwaltet und daher auch nicht von jedem in
          ‘/gnu/store’ ausgelesen werden kann – Sie können etwa Ihre
          geheime Schlüsselkonfiguration in ‘/etc/knot/secrets.conf’
          speichern und diese Datei dann zu Ihrer ‘includes’-Liste
          hinzufügen.

          Sie können mit dem Schlüsselverwaltungsprogramm ‘keymgr’ aus
          dem Knot-Paket einen geheimen TSIG-Schlüssel erzeugen lassen
          (für ‘nsupdate’ und Zonentransfers). Beachten Sie, dass das
          Paket _nicht_ automatisch durch den Dienst installiert wird.
          Das folgende Beispiel zeigt, wie man einen neuen
          TSIG-Schlüssel erzeugen lässt:

               keymgr -t meingeheimnis > /etc/knot/secrets.conf
               chmod 600 /etc/knot/secrets.conf

          Außerdem sollten Sie bedenken, dass der erzeugte Schlüssel den
          Namen MEINGEHEIMNIS bekommt, dieser Name also auch im KEY-Feld
          des ‘knot-acl-configuration’-Verbundsobjekts und an anderen
          Stellen verwendet werden muss, wo auf den Schlüssel verwiesen
          wird.

          Sie können die ‘includes’ auch benutzen, um von der
          Guix-Schnittstelle nicht unterstützte Einstellungen
          festzulegen.

     ‘listen-v4’ (Vorgabe: ‘"0.0.0.0"’)
          Eine IP-Adresse, auf der gelauscht werden soll.

     ‘listen-v6’ (Vorgabe: ‘"::"’)
          Eine IP-Adresse, auf der gelauscht werden soll.

     ‘listen-port’ (Vorgabe: ‘53’)
          Ein Port, auf dem gelauscht werden soll.

     ‘keys’ (Vorgabe: ‘'()’)
          Die Liste der ‘knot-key-configuration’-Objekte, die von dieser
          Konfiguration benutzt werden sollen.

     ‘acls’ (Vorgabe: ‘'()’)
          Die Liste der ‘knot-acl-configuration’-Objekte, die von dieser
          Konfiguration benutzt werden sollen.

     ‘remotes’ (Vorgabe: ‘'()’)
          Die Liste der ‘knot-remote-configuration’-Objekte, die von
          dieser Konfiguration benutzt werden sollen.

     ‘zones’ (Vorgabe: ‘'()’)
          Die Liste der ‘knot-zone-configuration’-Objekte, die von
          dieser Konfiguration benutzt werden sollen.

Knot-Resolver-Dienst
....................

 -- Variable: knot-resolver-service-type
     Dies ist der Diensttyp des Knot-Resolver-Dienstes, dessen Wert ein
     ‘knot-resolver-configuration’-Objekt wie in diesem Beispiel sein
     sollte:

          (service knot-resolver-service-type
                   (knot-resolver-configuration
                     (kresd-config-file (plain-file "kresd.conf" "
          net.listen('192.168.0.1', 5353)
          user('knot-resolver', 'knot-resolver')
          modules = { 'hints > iterate', 'stats', 'predict' }
          cache.size = 100 * MB
          "))))

     Weitere Informationen finden Sie in seinem Handbuch
     (https://knot-resolver.readthedocs.io/en/stable/config-overview.html).

 -- Datentyp: knot-resolver-configuration
     Der Datentyp, der die Konfiguration von knot-resolver
     repräsentiert.

     ‘package’ (Vorgabe: KNOT-RESOLVER)
          Das Paketobjekt des Knot-DNS-Resolvers.

     ‘kresd-config-file’ (Vorgabe: %kresd.conf)
          Dateiartiges Objekt der zu nutzenden
          kresd-Konfigurationsdatei. Nach Vorgabe lauscht der
          Knot-Resolver auf ‘127.0.0.1’ und ‘::1’.

     ‘garbage-collection-interval’ (Vorgabe: 1000)
          Wie viele Millisekunden ‘kres-cache-gc’ zwischen Bereinigungen
          seines Zwischenspeichers wartet.

Dnsmasq-Dienst
..............

 -- Variable: dnsmasq-service-type
     Dies ist der Diensttyp des dnsmasq-Dienstes, dessen Wert ein
     ‘dnsmasq-configuration’-Objekt wie in diesem Beispiel sein sollte:

          (service dnsmasq-service-type
                   (dnsmasq-configuration
                     (no-resolv? #t)
                     (servers '("192.168.1.1"))))

     ‘dnsmasq-service-type’ provides two actions:

     ‘reload’
          Send a ‘SIGHUP’ signal to ‘dnsmasq’ to clear cache and reload
          hosts files which triggers the following actions:

             • Clear the DNS cache
             • Reload ‘/etc/hosts’ and ‘/etc/ethers’
             • Reload files specified by ‘--dhcp-hostsfile’,
               ‘--dhcp-hostsdir’, ‘--dhcp-optsfile’, ‘--dhcp-optsdir’,
               ‘--addn-hosts’, or ‘--hostsdir’
             • Execute DHCP lease change scripts for all existing leases
             • Reread ‘/etc/resolv.conf’ (only if ‘--no-poll’ is
               configured).

               Anmerkung: The ‘SIGHUP’ signal does not trigger a reload
               of the main configuration file.

          Ein Beispiel, wie Sie es verwenden:
               herd reload dnsmasq

     ‘stats’
          When ‘dnsmasq’ receives a ‘SIGUSR1’ signal, it writes
          statistics to the system log including:

             • Cache size and number of evicted entries
             • Cache hits, misses, and authoritative queries answered
             • For each upstream server: queries sent and errors
               received
             • TCP connection fork statistics.

          Ein Beispiel, wie Sie es verwenden:
               herd stats dnsmasq

 -- Datentyp: dnsmasq-configuration
     Repräsentiert die dnsmasq-Konfiguration.

     ‘package’ (Vorgabe: DNSMASQ)
          Paketobjekt des dnsmasq-Servers.

     ‘shepherd-provision’ (default: ‘'(dnsmasq)’)
     ‘shepherd-requirement’ (default: ‘'(user-processes networking)’)
          This option can be used to provide a list of Shepherd service
          names (symbols) provided by this service. You might want to
          change the default value if you intend to run several
          ‘dnsmasq’ instances.

          Likewise, ‘shepherd-requirement’ is a list of Shepherd service
          names (symbols) that this service will depend on.

     ‘pid-file’ (default: ‘"/run/dnsmasq.pid"’)
          Specify an alternate path for dnsmasq to record its process-id
          in.

     ‘no-hosts?’ (Vorgabe: ‘#f’)
          Ist es auf wahr gesetzt, werden keine Rechnernamen
          („Hostnames“) aus /etc/hosts ausgelesen.

     ‘port’ (Vorgabe: ‘53’)
          Der Port, auf dem gelauscht werden soll. Wird dies auf null
          gesetzt, werden keinerlei DNS-Anfragen beantwortet und es
          bleiben nur DHCP- und/oder TFTP-Funktionen.

     ‘local-service?’ (Vorgabe: ‘#t’)
          DNS-Anfragen nur von Rechnern akzeptieren, deren Adresse auf
          einem lokalen Subnetz liegt, d.h. einem Subnetz, für dem auf
          dem Server eine Schnittstelle existiert.

     ‘listen-addresses’ (Vorgabe: ‘'()’)
          Lässt auf den angegebenen IP-Adressen lauschen.

     ‘resolv-file’ (Vorgabe: ‘"/etc/resolv.conf"’)
          Aus welcher Datei die IP-Adresse der zu verwendenden
          Nameserver gelesen werden soll.

     ‘no-resolv?’ (Vorgabe: ‘#f’)
          Wenn es auf wahr steht, wird das RESOLV-FILE nicht gelesen.

     ‘forward-private-reverse-lookup?’ (Vorgabe: ‘#t’)
          Wenn dies auf falsch gesetzt ist, werden inverse
          Namensauflösungen in privaten IP-Adressbereichen wie „Domain
          existiert nicht“ beantwortet, anstatt sie an vorgelagerte
          Server weiterzuleiten.

     ‘query-servers-in-order?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, wird dnsmasq die Server in
          genau der Reihenfolge anfragen, in der sie in SERVERS
          aufgeführt sind.

     ‘servers’ (Vorgabe: ‘'()’)
          Geben Sie die IP-Adresse von anzufragenden Servern direkt an.

     ‘servers-file’ (Vorgabe: ‘#f’)
          Hier können Sie eine Datei angeben, in der höhere DNS-Server
          stehen. Diese Datei wird neu eingelesen, wenn dnsmasq ein
          SIGHUP bekommt. Es kann entweder eine Zeichenkette oder ein
          dateiartiges Objekt angegeben werden.

     ‘addresses’ (Vorgabe: ‘'()’)
          Geben Sie in jedem Eintrag eine IP-Adresse an, die für jeden
          Rechner mit einer der angegebenen Domains zurückgeliefert
          werden soll. Anfragen nach den Domains werden niemals
          weitergegeben, sondern werden immer mit der festgelegten
          IP-Adresse beantwortet.

          Dies ist nützlich, um für Rechnernamen lokale Umleitungen
          einzurichten, wie in diesem Beispiel:

               (service dnsmasq-service-type
                        (dnsmasq-configuration
                          (addresses
                            '(; Weiterleitung auf lokalen Webserver.
                              "/example.org/127.0.0.1"
                              ; Weiterleitung einer Subdomain auf eine bestimmte IP.
                              "/subdomain.example.org/192.168.1.42"))))

          Beachten Sie, dass die Regeln in ‘/etc/hosts’ Vorrang haben.

     ‘cache-size’ (Vorgabe: ‘150’)
          Bestimmt die Größe des Zwischenspeichers von dnsmasq. Wird die
          Zwischenspeichergröße auf null festgelegt, wird kein
          Zwischenspeicher benutzt.

     ‘negative-cache?’ (Vorgabe: ‘#t’)
          Ist dies auf falsch gesetzt, werden Negativergebnisse nicht
          zwischengespeichert.

     ‘cpe-id’ (Vorgabe: ‘#f’)
          Wenn es festgelegt ist, wird dies als Endgerätebezeichnung
          („Customer-Premises Equipment Identifier“) in DNS-Anfragen
          übermittelt, die an vorgelagerte Server weitergeleitet werden.

     ‘tftp-enable?’ (Vorgabe: ‘#f’)
          Ob der eingebaute TFTP-Server aktiviert werden soll.

     ‘tftp-no-fail?’ (Vorgabe: ‘#f’)
          Wenn dies wahr ist und der TFTP-Server nicht gestartet werden
          kann, gilt dnsmasq trotzdem _nicht_ als fehlgeschlagen.

     ‘tftp-single-port?’ (Vorgabe: ‘#f’)
          Ob nur ein einzelner Port für TFTP benutzt werden soll.

     ‘tftp-secure?’ (Vorgabe: ‘#f’)
          Wenn dies wahr ist, kann nur auf solche Dateien zugegriffen
          werden, die dem Benutzerkonto gehören, das den dnsmasq-Prozess
          ausführt.

          Wird dnsmasq durch den Administratornutzer root ausgeführt,
          gelten andere Regeln: ‘tftp-secure?’ wirkt sich nicht aus,
          aber es kann nur auf Dateien zugegriffen werden, auf die jeder
          Benutzer zugreifen darf (das „world-readable bit“ ist
          gesetzt).

     ‘tftp-max’ (Vorgabe: ‘#f’)
          Wenn dies gesetzt ist, gibt es die Maximalzahl gleichzeitig
          zugelassener Verbindungen an.

     ‘tftp-mtu’ (Vorgabe: ‘#f’)
          Wenn es gesetzt ist, gibt es die MTU für TFTP-Pakete an, also
          die Maximalgröße für Netzwerkschnittstellen.

     ‘tftp-no-blocksize?’ (Vorgabe: ‘#f’)
          Steht es auf wahr, wird der TFTP-Server die Blockgröße _nicht_
          mit dem Client aushandeln.

     ‘tftp-lowercase?’ (Vorgabe: ‘#f’)
          Ob alle Dateinamen in TFTP-Anfragen in Kleinbuchstaben
          umgesetzt werden sollen.

     ‘tftp-port-range’ (Vorgabe: ‘#f’)
          Wenn es gesetzt ist, wird jeder dynamische Port (einer pro
          Client) aus dem angegebenen Bereich (‘"<von>,<bis>"’)
          genommen.

     ‘tftp-root’ (Vorgabe: ‘/var/empty,lo’)
          Relativ zu welchem Verzeichnis die Dateien für die Übertragung
          per TFTP gesucht werden. Wenn dies gesetzt ist, werden
          TFTP-Pfade, die ‘..’ enthalten, abgelehnt, damit Clients
          keinen Zugriff auf Dateien außerhalb des angegebenen
          Wurzelverzeichnisses haben. Absolute Pfade (solche, die mit
          ‘/’ beginnen) sind erlaubt, aber sie müssen in der TFTP-Root
          liegen. Wenn das optionale Argument ‘interface’ angegeben
          wird, wird das Verzeichnis nur für TFTP-Anfragen über diese
          Schnittstelle benutzt.

     ‘tftp-unique-root’ (Vorgabe: ‘#f’)
          Wenn es gesetzt ist, wird entsprechend die IP- oder
          Hardware-Adresse des TFTP-Clients als eine Pfadkomponente ans
          Ende der TFTP-Root angehängt. Das ist nur gültig, wenn eine
          TFTP-Root gesetzt ist und das Verzeichnis existiert. Die
          Voreinstellung ist, die IP-Adresse anzuhängen (wie üblich als
          punktgetrenntes Quadrupel).

          Ist zum Beispiel ‘tftp-root’ ‘/tftp’ und fragt Client
          ‘1.2.3.4’ die Datei ‘meinedatei’ an, dann wird effektiv als
          Pfad ‘/tftp/1.2.3.4/meinedatei’ abgerufen, wenn
          ‘/tftp/1.2.3.4’ existiert, oder ‘/tftp/meinedatei’
          andernfalls. Wird ‘=mac’ angegeben, wird stattdessen die
          MAC-Adresse angehängt (in Kleinbuchstaben und durch Striche
          getrennt, aufgefüllt mit der Ziffer null), z.B.
          ‘01-02-03-04-aa-bb’. Beachten Sie, dass MAC-Adressen nur
          aufgelöst werden können, wenn sich der Client im lokalen
          Netzwerk befindet oder von dnsmasq eine Adresse per DHCP
          zugewiesen bekommen hat.

     ‘conf-file’ (default: ‘'()’)
          File names of configuration files to use. Strings and
          file-like objects are accepted.

     ‘conf-dir’ (default: ‘#f’)
          Read all the files in the given directory as configuration
          files. Support for ‘dnsmasq’ field extensions is not
          implemented; users can use ‘computed-file’ to build a
          directory of files instead. The configuration files are loaded
          in alphabetical order of file name.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Dieses Feld ist ein „Notausstieg“, mit dem Nutzer beliebige
          Befehlszeilenoptionen direkt an ‘dnsmasq’ übergeben können.
          Diese müssen hier als eine Liste von Zeichenketten angegeben
          werden.

Unbound Service
...............

 -- Variable: unbound-service-type
     This is the type of the service to run Unbound
     (https://www.unbound.net), a validating, recursive, and caching DNS
     resolver. Its value must be a ‘unbound-configuration’ object as in
     this example:

          (service unbound-service-type
                   (unbound-configuration
                    (forward-zone
                     (list
                      (unbound-zone
                       (name ".")
                       (forward-addr '("149.112.112.112#dns.quad9.net"
                                       "2620:fe::9#dns.quad9.net"))
                       (forward-tls-upstream #t))))))

 -- Data Type: unbound-configuration
     Available ‘unbound-configuration’ fields are:

     ‘server’ (type: unbound-server)
          General options for the Unbound server.

     ‘remote-control’ (type: unbound-remote)
          Remote control options for the daemon.

     ‘forward-zone’ (default: ‘()’) (type: list-of-unbound-zone)
          A zone for which queries should be forwarded to another
          resolver.

     ‘extra-content’ (type: maybe-string)
          Raw content to add to the configuration file.

 -- Data Type: unbound-server
     Available ‘unbound-server’ fields are:

     ‘interface’ (type: maybe-list-of-strings)
          Interfaces listened on for queries from clients.

     ‘hide-version’ (type: maybe-boolean)
          Refuse the version.server and version.bind queries.

     ‘hide-identity’ (type: maybe-boolean)
          Refuse the id.server and hostname.bind queries.

     ‘tls-cert-bundle’ (type: maybe-string)
          Certificate bundle file, used for DNS over TLS.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.

 -- Data Type: unbound-remote
     Available ‘unbound-remote’ fields are:

     ‘control-enable’ (type: maybe-boolean)
          Enable remote control.

     ‘control-interface’ (type: maybe-string)
          IP address or local socket path to listen on for remote
          control.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.

 -- Data Type: unbound-zone
     Available ‘unbound-zone’ fields are:

     ‘name’ (Typ: Zeichenkette)
          Zone name.

     ‘forward-addr’ (type: maybe-list-of-strings)
          IP address of server to forward to.

     ‘forward-tls-upstream’ (type: maybe-boolean)
          Whether the queries to this forwarder use TLS for transport.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.


File: guix.de.info,  Node: VNC-Dienste,  Next: VPN-Dienste,  Prev: DNS-Dienste,  Up: Dienste

11.10.24 VNC-Dienste
--------------------

Im Modul ‘(gnu services vnc)’ werden Dienste angeboten, die mit “Virtual
Network Computing” (VNC) zu tun haben, einer Technik, um grafische
Xorg-Anwendungen, die auf einer entfernten Maschine laufen, lokal zu
benutzen. Zusammen mit einer grafischen Anzeigenverwaltung, die das “X
Display Manager Control Protocol” unterstützt, wie etwa GDM (siehe *note
gdm::) oder LightDM (siehe *note lightdm::), kann man somit eine ganze
entfernte Desktop-Arbeitsumgebung auf den eigenen Rechner bringen, um
eine Mehrbenutzerumgebung herzustellen.

Xvnc
....

Xvnc ist ein VNC-Server, der einen eigenen X-Fensterserver startet. So
lässt er sich auf Servern ohne Bildschirm („headless server“) betreiben.
Die Xvnc-Implementierungen, die durch den ‘tigervnc-server’ und
‘turbovnc’ bereitgestellt werden, sind auf Schnelligkeit und Effizienz
ausgerichtet.

 -- Variable: xvnc-service-type

     Ein Dienst des Diensttyps ‘xvnc-service-type’ kann eingerichtet
     werden mit einem ‘xvnc-configuration’-Verbundsobjekt, wie es nun
     beschrieben wird. Über die folgende Konfiguration würde eine
     zweite, virtuelle Anzeige auf einer entfernten Maschine verfügbar
     gemacht:

     (service xvnc-service-type
              (xvnc-configuration (display-number 10)))

   Zu Demonstrationszwecken könnte man dann den Befehl ‘xclock’ auf der
entfernten Maschine auf Anzeige Nummer 10 starten und ihn über den
Befehl ‘vncviewer’ lokal anzeigen:
     # xclock auf der entfernten Maschine starten.
     ssh -L5910:localhost:5910 IHR-RECHNER -- guix shell xclock \
         -- env DISPLAY=:10 xclock
     # Über VNC darauf zugreifen.
     guix shell tigervnc-client -- vncviewer localhost:5910

   Die folgende Konfiguration setzt XDMCP und Inetd gemeinsam ein, damit
mehrere Benutzer gleichzeitig das entfernte System nutzen können und
sich grafisch über die GDM-Anzeigenverwaltung anmelden können:

     (operating-system
       […]
       (services (cons*
                  […]
                  (service xvnc-service-type (xvnc-configuration
                                              (display-number 5)
                                              (localhost? #f)
                                              (xdmcp? #t)
                                              (inetd? #t)))
                  (modify-services %desktop-services
                    (gdm-service-type config => (gdm-configuration
                                                 (inherit config)
                                                 (auto-suspend? #f)
                                                 (xdmcp? #t)))))))

   Eine entfernte Nutzerin könnte sich damit verbinden, indem sie den
Befehl ‘vncviewer’ oder einen kompatiblen VNC-Client einsetzt und eine
Sitzung auf einer Arbeitsumgebung ihrer Wahl beginnt:
     vncviewer name-des-entfernten-rechners:5905

     Warnung: Sofern sich Ihre Maschine _nicht_ in einer kontrollierten
     Umgebung befindet, ist es aus Sicherheitsgründen ratsam, in der
     Konfiguration das Feld ‘localhost?’ des
     ‘xvnc-configuration’-Verbundsobjekts beim vorgegebenen Wert ‘#t’ zu
     belassen und den entfernten Rechner nur über sichere Mittel wie
     eine SSH-Portweiterleitung zugänglich zu machen. Der XDMCP-Port,
     UDP 177, sollte nach außen hin über eine Firewall gesperrt sein,
     denn VNC ist _kein_ sicheres Protokoll und Anmeldedaten könnten im
     Klartext verschickt werden.

 -- Datentyp: xvnc-configuration
     Verfügbare ‘xvnc-configuration’-Felder sind:

     ‘xvnc’ (Vorgabe: ‘tigervnc-server’) (Typ: dateiartig)
          Das Paket, das die Binärdatei Xvnc zur Verfügung stellt.

     ‘display-number’ (Vorgabe: ‘0’) (Typ: Zahl)
          Die Nummer der Anzeige, um die sich Xvnc kümmert. Sie sollten
          eine Zahl wählen, die der Xorg-Server _nicht_ bereits in
          Beschlag nimmt.

     ‘geometry’ (Vorgabe: ‘"1024x768"’) (Typ: Zeichenkette)
          Die Ausmaße der Anzeige, die angelegt wird.

     ‘depth’ (Vorgabe: ‘24’) (Typ: Farbtiefe)
          Die Pixeltiefe in Bits der anzulegenden Anzeige. Akzeptiert
          werden die Werte 16, 24 oder 32.

     ‘port’ (Typ: Vielleicht-Port)
          Auf welchem Port auf Verbindungen durch VNC-Betrachter
          gelauscht wird. Wenn keiner angegeben wird, ist 5900 plus der
          Anzeigennummer vorgegeben.

     ‘ipv4?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Für eingehende und ausgehende Verbindungen IPv4 benutzen.

     ‘ipv6?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Für eingehende und ausgehende Verbindungen IPv6 benutzen.

     ‘password-file’ (Typ: Vielleicht-Zeichenkette)
          Welche Passwortdatei benutzt werden soll, wenn gewünscht.
          Schauen Sie sich vncpasswd(1) an, um zu erfahren, wie Sie so
          eine Datei erzeugen lassen.

     ‘xdmcp?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Stellt an den XDMCP-Server eine Sitzungsanfrage. Dadurch
          können sich Benutzer an der Oberfläche der Anmeldeverwaltung
          für eine Desktop-Sitzung anmelden. In einem Szenario mit
          mehreren Nutzern wird man außerdem die Option ‘inetd?’
          aktivieren wollen, damit jede Verbindung zum VNC-Server
          getrennt behandelt wird, statt sie zusammenzulegen.

     ‘inetd?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Einen Dienst im Inetd-Stil benutzen. Dadurch wird der
          Xvnc-Server bei Bedarf gestartet.

     ‘frame-rate’ (Vorgabe: ‘60’) (Typ: Zahl)
          Wie viele Aktualisierungen höchstens pro Sekunde an jeden
          Client geschickt werden.

     ‘security-types’ (Vorgabe: ‘'("None")’) (Typ: Sicherheitstypen)
          Welche Sicherheitsschemata für eingehende Verbindungen
          zugelassen sind. Vorgegeben ist "None" (keine), was sicher
          ist, weil Xvnc so eingestellt ist, dass sich der Benutzer mit
          der Anzeigenverwaltung anmeldet und nur lokale Verbindungen
          stattfinden. Als Wert akzeptiert wird eine Teilmenge hiervon:
          ("None" "VncAuth" "Plain" "TLSNone" "TLSVnc" "TLSPlain"
          "X509None" "X509Vnc")

     ‘localhost?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Nur Verbindungen von derselben Maschine zulassen. Nach Vorgabe
          ist dies auf wahr gesetzt (‘#true’), weil das sicherer ist,
          denn man sollte ohnehin nur Ports für sichere
          Verbindungsmethoden wie SSH freigeben.

     ‘log-level’ (Vorgabe: ‘30’) (Typ: Protokollstufe)
          Die Protokollstufe als Zahl zwischen 0 und 100. Dabei bedeutet
          100 die ausführlichste Ausgabe. Protokollnachrichten werden an
          Syslog ausgegeben.

     ‘extra-options’ (Vorgabe: ‘'()’) (Typ: Zeichenketten)
          Hiermit können zusätzliche Xvnc-Optionen angegeben werden, die
          über das ‘<xvnc-configuration>’-Verbundsobjekt anderweitig
          unzugänglich sind.


File: guix.de.info,  Node: VPN-Dienste,  Next: Network File System,  Prev: VNC-Dienste,  Up: Dienste

11.10.25 VPN-Dienste
--------------------

Das Modul ‘(gnu services vpn)’ stellt Dienste zur Verfügung, die mit
“Virtual Private Networks” (VPNs) zu tun haben.

Bitmask
.......

 -- Variable: bitmask-service-type
     Ein Diensttyp für den VPN-Client Bitmask (https://bitmask.net).
     Damit wird der Client systemweit verfügbar gemacht und dessen
     Polkit-Richtlinie geladen. Beachten Sie, dass der Client nur mit
     einem laufenden polkit-agent funktioniert, der entweder von Ihrer
     „Desktop“-Arbeitsumgebung oder von Ihnen manuell gestartet wird.

OpenVPN
.......

Hiermit wird ein _Client_-Dienst angeboten, mit dem sich Ihre Maschine
mit einem VPN verbinden kann, sowie ein _Server_-Dienst, mit dem Sie auf
Ihrer Maschine ein VPN betreiben können. ‘openvpn-client-service-type’
und ‘openvpn-server-service-type’ können beide gleichzeitig zum Einsatz
kommen.

 -- Variable: openvpn-client-service-type
     Diensttyp für einen Dienst, der den VPN-Daemon ‘openvpn’ als Client
     ausführt.

     Der Wert dieses Dienstes muss ein
     ‘<openvpn-client-configuration>’-Objekt sein.

 -- Variable: openvpn-server-service-type
     Diensttyp für einen Dienst, der den VPN-Daemon ‘openvpn’ als Server
     ausführt.

     Der Wert dieses Dienstes muss ein
     ‘<openvpn-server-configuration>’-Objekt sein.

 -- Datentyp: openvpn-client-configuration
     Verfügbare ‘openvpn-client-configuration’-Felder sind:

     ‘openvpn’ (Vorgabe: ‘openvpn’) (Typ: dateiartig)
          Das OpenVPN-Paket.

     ‘pid-file’ (Vorgabe: ‘"/var/run/openvpn/openvpn.pid"’) (Typ: Zeichenkette)
          Die Datei für den Prozessidentifikator („PID“) von OpenVPN.

     ‘proto’ (Vorgabe: ‘udp’) (Typ: Protokoll)
          Das Protokoll (UDP oder TCP), das benutzt werden soll, um
          einen Kommunikationskanal zwischen Clients und Servern
          herzustellen.

     ‘dev’ (Vorgabe: ‘tun’) (Typ: Gerätetyp)
          Der Gerätetyp, mit dem die VPN-Verbindung repräsentiert werden
          soll.

     ‘ca’ (Vorgabe: ‘"/etc/openvpn/ca.crt"’) (Typ: Vielleicht-Zeichenkette)
          Die Zertifikatsautorität, mit der Verbindungen geprüft werden.

     ‘cert’ (Vorgabe: ‘"/etc/openvpn/client.crt"’) (Typ: Vielleicht-Zeichenkette)
          Das Zertifikat der Maschine, auf der der Daemon läuft. Es
          sollte von der in ‘ca’ angegebenen Zertifikatsautorität
          signiert sein.

     ‘key’ (Vorgabe: ‘"/etc/openvpn/client.key"’) (Typ: Vielleicht-Zeichenkette)
          Der Schlüssel der Maschine, auf der der Daemon läuft. Er muss
          der Schlüssel zum in ‘cert’ angegebenen Zertifikat sein.

     ‘comp-lzo?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Ob der Kompressionsalgorithmus lzo benutzt werden soll.

     ‘persist-key?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Die Schlüsseldateien nach Auftreten von SIGUSR1 oder
          –ping-restart _nicht_ erneut einlesen.

     ‘persist-tun?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Nach dem Auftreten von SIGUSR1 oder –ping-restart
          TUN/TAP-Geräte _nicht_ schließen und wieder öffnen und auch
          keine Start-/Stop-Skripte ausführen.

     ‘fast-io?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          (Experimentell) Schreibzugriffe durch Datenverkehr bei
          TUN/TAP/UDP optimieren, indem ein Aufruf von poll/epoll/select
          vor der Schreiboperation eingespart wird.

     ‘verbosity’ (Vorgabe: ‘3’) (Typ: Zahl)
          Ausführlichkeitsstufe.

     ‘tls-auth’ (Vorgabe: ‘#f’) (Typ: TLS-Clientauthentifizierung)
          Eine weitere HMAC-Authentifizierung zusätzlich zum
          TLS-Steuerungskanal einsetzen, um das System vor gezielten
          Überlastungsangriffen („Denial of Service“) zu schützen.

     ‘auth-user-pass’ (Typ: Vielleicht-Zeichenkette)
          Beim Server eine Authentisierung über Benutzername/Passwort
          durchführen. Die Option nimmt eine Datei, welche Benutzername
          und Passwort auf zwei Zeilen enthält. Benutzen Sie dafür
          _kein_ dateiartiges Objekt, weil es in den Store eingelagert
          würde, wo es jeder Benutzer einsehen könnte.

     ‘verify-key-usage?’ (Vorgabe: ‘#t’) (Typ: Schlüsselnutzung)
          Ob sichergestellt werden soll, dass das Server-Zertifikat auch
          über eine Erweiterung („Extension“) verfügt, dass es für die
          Nutzung als Server gültig ist.

     ‘bind?’ (Vorgabe: ‘#f’) (Typ: Binden)
          Ob an immer dieselbe, feste lokale Portnummer gebunden wird.

     ‘resolv-retry?’ (Vorgabe: ‘#t’) (Typ: resolv-retry)
          Ob, wenn die Server-Adresse nicht aufgelöst werden konnte, die
          Auflösung erneut versucht wird.

     ‘remote’ (Vorgabe: ‘'()’) (Typ: Liste-von-„openvpn-remote“)
          Eine Liste entfernter Server, mit denen eine Verbindung
          hergestellt werden soll.

           -- Datentyp: openvpn-remote-configuration
               Verfügbare ‘openvpn-remote-configuration’-Felder sind:

               ‘name’ (Vorgabe: ‘"my-server"’) (Typ: Zeichenkette)
                    Der Servername.

               ‘port’ (Vorgabe: ‘1194’) (Typ: Zahl)
                    Die Portnummer, auf der der Server lauscht.

 -- Datentyp: openvpn-server-configuration
     Verfügbare ‘openvpn-server-configuration’-Felder sind:

     ‘openvpn’ (Vorgabe: ‘openvpn’) (Typ: dateiartig)
          Das OpenVPN-Paket.

     ‘pid-file’ (Vorgabe: ‘"/var/run/openvpn/openvpn.pid"’) (Typ: Zeichenkette)
          Die Datei für den Prozessidentifikator („PID“) von OpenVPN.

     ‘proto’ (Vorgabe: ‘udp’) (Typ: Protokoll)
          Das Protokoll (UDP oder TCP), das benutzt werden soll, um
          einen Kommunikationskanal zwischen Clients und Servern
          herzustellen.

     ‘dev’ (Vorgabe: ‘tun’) (Typ: Gerätetyp)
          Der Gerätetyp, mit dem die VPN-Verbindung repräsentiert werden
          soll.

     ‘ca’ (Vorgabe: ‘"/etc/openvpn/ca.crt"’) (Typ: Vielleicht-Zeichenkette)
          Die Zertifikatsautorität, mit der Verbindungen geprüft werden.

     ‘cert’ (Vorgabe: ‘"/etc/openvpn/client.crt"’) (Typ: Vielleicht-Zeichenkette)
          Das Zertifikat der Maschine, auf der der Daemon läuft. Es
          sollte von der in ‘ca’ angegebenen Zertifikatsautorität
          signiert sein.

     ‘key’ (Vorgabe: ‘"/etc/openvpn/client.key"’) (Typ: Vielleicht-Zeichenkette)
          Der Schlüssel der Maschine, auf der der Daemon läuft. Er muss
          der Schlüssel zum in ‘cert’ angegebenen Zertifikat sein.

     ‘comp-lzo?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Ob der Kompressionsalgorithmus lzo benutzt werden soll.

     ‘persist-key?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Die Schlüsseldateien nach Auftreten von SIGUSR1 oder
          –ping-restart _nicht_ erneut einlesen.

     ‘persist-tun?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Nach dem Auftreten von SIGUSR1 oder –ping-restart
          TUN/TAP-Geräte _nicht_ schließen und wieder öffnen und auch
          keine Start-/Stop-Skripte ausführen.

     ‘fast-io?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          (Experimentell) Schreibzugriffe durch Datenverkehr bei
          TUN/TAP/UDP optimieren, indem ein Aufruf von poll/epoll/select
          vor der Schreiboperation eingespart wird.

     ‘verbosity’ (Vorgabe: ‘3’) (Typ: Zahl)
          Ausführlichkeitsstufe.

     ‘tls-auth’ (Vorgabe: ‘#f’) (Typ: TLS-Serverauthentifizierung)
          Eine weitere HMAC-Authentifizierung zusätzlich zum
          TLS-Steuerungskanal einsetzen, um das System vor gezielten
          Überlastungsangriffen („Denial of Service“) zu schützen.

     ‘port’ (Vorgabe: ‘1194’) (Typ: Zahl)
          Gibt die Portnummer an, auf der der Server lauscht.

     ‘server’ (Vorgabe: ‘"10.8.0.0 255.255.255.0"’) (Typ: IP-Maske)
          Eine IP-Adresse gefolgt von deren Maske, die das Subnetz im
          virtuellen Netzwerk angibt.

     ‘server-ipv6’ (Vorgabe: ‘#f’) (Typ: CIDR6)
          Eine CIDR-Notation, mit der das IPv6-Subnetz im virtuellen
          Netzwerk angegeben wird.

     ‘dh’ (Vorgabe: ‘"/etc/openvpn/dh2048.pem"’) (Typ: Zeichenkette)
          Die Datei mit den Diffie-Hellman-Parametern.

     ‘ifconfig-pool-persist’ (Vorgabe: ‘"/etc/openvpn/ipp.txt"’) (Typ: Zeichenkette)
          Die Datei, in der Client-IPs eingetragen werden.

     ‘redirect-gateway?’ (Vorgabe: ‘#f’) (Typ: Zugang)
          Wenn dies auf wahr steht, fungiert der Server als Zugang
          („Gateway“) für seine Clients.

     ‘client-to-client?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Wenn dies auf wahr steht, ist es zugelassen, dass Clients
          untereinander innerhalb des VPNs kommunizieren.

     ‘keepalive’ (Vorgabe: ‘(10 120)’) (Typ: keepalive)
          Lässt ping-artige Nachrichtigen in beide Richtungen über die
          Leitung übertragen, damit beide Seiten bemerken, wenn der
          Kommunikationspartner offline geht. Für ‘keepalive’ muss ein
          Paar angegeben werden. Das erste Element ist die Periode, nach
          der das Pingsignal wieder gesendet werden soll, und das zweite
          ist eine Zeitbegrenzung, in der eines ankommen muss, damit die
          andere Seite nicht als offline gilt.

     ‘max-clients’ (Vorgabe: ‘100’) (Typ: Zahl)
          Wie viele Clients es höchstens geben kann.

     ‘status’ (Vorgabe: ‘"/var/run/openvpn/status"’) (Typ: Zeichenkette)
          Die Datei für einen Zustandsbericht („Status File“). Diese
          Datei enthält einen kurzen Bericht über die momentane
          Verbindung. Sie wird jede Minute gekürzt und neu geschrieben.

     ‘client-config-dir’ (Vorgabe: ‘'()’) (Typ: Liste-von-„openvpn-ccd“)
          Die Liste der Konfigurationen für einige Clients.

strongSwan
----------

Derzeit unterstützt der strongSwan-Dienst nur die alte Art der
Konfiguration über die Dateien ‘ipsec.conf’ und ‘ipsec.secrets’.

 -- Variable: strongswan-service-type
     Ein Diensttyp, um mit strongSwan VPN (Virtual Private Networking)
     über IPsec einzurichten. Als Wert muss ein
     ‘strongswan-configuration’-Verbundsobjekt angegeben werden, wie im
     folgenden Beispiel:

          (service strongswan-service-type
                   (strongswan-configuration
                    (ipsec-conf "/etc/ipsec.conf")
                    (ipsec-secrets "/etc/ipsec.secrets")))

 -- Datentyp: strongswan-configuration
     Der Datentyp, der die Konfiguration des strongSwan-Dienstes
     repräsentiert.

     ‘strongswan’
          Das strongSwan-Paket, was für diesen Dienst benutzt werden
          soll.

     ‘ipsec-conf’ (Vorgabe: ‘#f’)
          Der Dateiname Ihrer ‘ipsec.conf’. Wenn es wahr ist, muss
          hierfür und für ‘ipsec-secrets’ jeweils eine Zeichenkette
          angegeben werden.

     ‘ipsec-secrets’ (Vorgabe: ‘#f’)
          Der Dateiname Ihrer ‘ipsec.secrets’. Wenn es wahr ist, muss
          hierfür und für ‘ipsec-conf’ jeweils eine Zeichenkette
          angegeben werden.

Wireguard
.........

 -- Variable: wireguard-service-type
     Ein Diensttyp für eine Schnittstelle über einen Wireguard-Tunnel.
     Sein Wert muss ein ‘wireguard-configuration’-Verbundsobjekt wie in
     diesem Beispiel sein:

          (service wireguard-service-type
                   (wireguard-configuration
                    (peers
                     (list
                      (wireguard-peer
                       (name "my-peer")
                       (endpoint "my.wireguard.com:51820")
                       (public-key "hzpKg9X1yqu1axN6iJp0mWf6BZGo8m1wteKwtTmDGF4=")
                       (allowed-ips '("10.0.0.2/32")))))))

 -- Datentyp: wireguard-configuration
     Der Datentyp, der die Konfiguration des Wireguard-Dienstes
     repräsentiert.

     ‘wireguard’
          Das Wireguard-Paket, was für diesen Dienst benutzt werden
          soll.

     ‘interface’ (Vorgabe: ‘"wg0"’)
          Der Name der VPN-Schnittstelle.

     ‘addresses’ (Vorgabe: ‘'("10.0.0.1/32")’)
          Eine Liste von Zeichenketten oder G-Ausdrücken, die
          bezeichnen, welche IP-Adressen obiger Schnittstelle zugeordnet
          werden.

     ‘port’ (Vorgabe: ‘51820’)
          Auf welchem Port auf eingehende Verbindungen gelauscht werden
          soll.

     ‘dns’ (Vorgabe: ‘'())’)
          Eine Liste von Zeichenketten oder G-Ausdrücken, die
          bezeichnen, welche DNS-Server den VPN-Clients per DHCP
          mitgeteilt werden.

     ‘monitor-ips?’ (Vorgabe: ‘#f’)
          Ob überwacht werden soll, wenn sich die Internet-Adressen
          (IPs) ändern, zu denen die für Netzwerkteilnehmer angegebenen
          Endpunkte aufgelöst werden. Dann wird der Endpunkt jedes
          Netzwerkteilnehmers, dessen IP-Adresse nicht mehr mit dem neu
          aufgelösten Rechnernamen des Netzwerkteilnehmers
          übereinstimmt, zurückgesetzt. Setzen Sie dies auf ‘#t’, wenn
          einer oder mehrere Endpunkte ihre Rechnernamen über einen
          Anbieter für dynamisches DNS beziehen, damit die Sitzungen
          bestehen bleiben.

     ‘monitor-ips-interval’ (default: ‘"*/5 * * * *"’)
          This is the monitoring schedule, expressed as a string in
          traditional cron syntax or as a gexp evaluating to a Shepherd
          calendar event (*note (shepherd)Timers::).

     ‘private-key’ (Vorgabe: ‘"/etc/wireguard/private.key"’)
          Die Datei mit dem privaten Schlüssel für die Schnittstelle.
          Wenn die angegebene Datei nicht existiert, wird sie
          automatisch erzeugt. Wenn das Feld ‘#f’ ist, wird kein
          privater Schlüssel erzeugt und das Feld nicht in die
          Konfigurationsdatei serialisiert.

     ‘bootstrap-private-key?’ (Vorgabe: ‘#t’)
          Ob der private Schlüssel automatisch erzeugt werden soll, wenn
          er nicht existiert.

          Sie können dies auf ‘#f’ setzen, wenn Sie den privaten
          Schlüssel mit Hilfe von Kommandoersetzung festlegen möchten.
          Ein Beispiel aus dem Handbuch zu ‘wg-quick(8)’ zeigt, wie man
          den privaten Schlüssel aus einem
          ‘password-store’-Passwortspeicher holt. Dazu kann folgender
          Code dienen:

               (wireguard-configuration
                (private-key
                 #~(string-append "<("
                                  #$(file-append password-store "/bin/pass")
                                  ;; Wireguard ersetzt %i durch den Schnittstellennamen.
                                  " WireGuard/private-keys/%i)")))

     ‘peers’ (Vorgabe: ‘'()’)
          Die zugelassenen Netzwerkteilnehmer auf dieser Schnittstelle.
          Dies ist eine Liste von WIREGUARD-PEER-Verbundsobjekten.

     ‘pre-up’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder G-Ausdrücken. Diese
          Skriptschnipsel sollen vor dem Einrichten der Schnittstelle
          ausgeführt werden.

     ‘post-up’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder G-Ausdrücken. Diese
          Skriptschnipsel sollen nach dem Einrichten der Schnittstelle
          ausgeführt werden.

     ‘pre-down’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder G-Ausdrücken. Diese
          Skriptschnipsel sollen vor dem Abwickeln der Schnittstelle
          ausgeführt werden.

     ‘post-down’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder G-Ausdrücken. Diese
          Skriptschnipsel sollen nach dem Abwickeln der Schnittstelle
          ausgeführt werden.

     ‘shepherd-requirement’ (Vorgabe: ‘'()’) (Typ: Liste-von-Symbolen)
          Eine Liste von Symbolen, die Shepherd-Dienste angeben, von
          welchen dieser Dienst abhängen soll.

     ‘table’ (Vorgabe: ‘"auto"’)
          Zu welcher Routing-Tabelle neue Routen hinzugefügt werden,
          angegeben als Zeichenkette. Es gibt zwei besondere Werte: Mit
          ‘"off"’ schalten Sie die Erzeugung neuer Routen ganz ab, mit
          ‘"auto"’ (was vorgegeben ist) werden Routen zur
          Standard-Routingtabelle hinzugefügt und Standardrouten
          besonders behandelt.

     ‘auto-start?’ (default: ‘#t"’)
          Whether the Wireguard network should be started automatically
          by the Shepherd. If it is ‘#f’ the service has to be started
          manually with ‘herd start wireguard-$interface’ (for example:
          ‘herd start wireguard-wg0’).

 -- Datentyp: wireguard-peer
     Der Datentyp, der einen an die angegebene Schnittstelle
     angeschlossenen Netzwerkteilnehmer („Peer“) repräsentiert.

     ‘name’
          Die Bezeichnung für den Netzwerkteilnehmer.

     ‘endpoint’ (Vorgabe: ‘#f’)
          Optional der Endpunkt des Netzwerkteilnehmers, etwa
          ‘"demo.wireguard.com:51820"’.

     ‘public-key’
          Der öffentliche Schlüssel des Netzwerkteilnehmers, dargestellt
          als eine base64-kodierte Zeichenkette.

     ‘preshared-key’ (Vorgabe: ‘#f’)
          Optional eine Datei mit einem vereinbarten „Pre-shared Key“
          für diesen Netzwerkteilnehmer, die als Zeichenkette oder
          G-Ausdruck angegeben werden kann. Die angegebene Datei wird
          _nicht_ automatisch erzeugt.

     ‘allowed-ips’
          Eine Liste der IP-Adressen, von denen für diesen
          Netzwerkteilnehmer eingehende Kommunikation zugelassen wird
          und an die ausgehende Kommunikation für diesen
          Netzwerkteilnehmer gerichtet wird.

     ‘keep-alive’ (Vorgabe: ‘#f’)
          Optional ein Zeitintervall in Sekunden. Einmal pro
          Zeitintervall wird ein Paket an den Serverendpunkt geschickt.
          Das hilft beim Empfangen eingehender Verbindungen von diesem
          Netzwerkteilnehmer, wenn Sie nur über eine
          Netzwerkadressübersetzung („NAT“) oder hinter einer Firewall
          erreichbar sind.


File: guix.de.info,  Node: Network File System,  Next: Samba-Dienste,  Prev: VPN-Dienste,  Up: Dienste

11.10.26 Network File System
----------------------------

Das Modul ‘(gnu services nfs)’ stellt die folgenden Dienste zur
Verfügung, die meistens dazu benutzt werden, Verzeichnisbäume als
Netzwerkdateisysteme, englisch “Network File Systems” (NFS), einzubinden
oder an andere zu exportieren.

   Obwohl man auch die einzelnen Komponenten eines
Network-File-System-Dienstes separat einrichten kann, raten wir dazu,
einen NFS-Server mittels ‘nfs-service-type’ zu konfigurieren.

NFS-Dienst
..........

Der NFS-Dienst sorgt dafür, dass alle NFS-Komponentendienste, die
Konfiguration des NFS-Kernels und Dateisysteme eingerichtet werden, und
er installiert an den von NFS erwarteten Orten Konfigurationsdateien.

 -- Variable: nfs-service-type
     Ein Diensttyp für einen vollständigen NFS-Server.

 -- Datentyp: nfs-configuration
     Dieser Datentyp repräsentiert die Konfiguration des NFS-Dienstes
     und all seiner Subsysteme.

     Er hat folgende Parameter:
     ‘nfs-utils’ (Vorgabe: ‘nfs-utils’)
          Das nfs-utils-Paket, was benutzt werden soll.

     ‘nfs-versions’ (Vorgabe: ‘'("4.2" "4.1" "4.0")’)
          Wenn eine Liste von Zeichenketten angegeben wird, beschränkt
          sich der ‘rpc.nfsd’-Daemon auf die Unterstützung der
          angegebenen Versionen des NFS-Protokolls.

     ‘exports’ (Vorgabe: ‘'()’)
          Diese Liste von Verzeichnissen soll der NFS-Server
          exportieren. Jeder Eintrag ist eine Liste, die zwei Elemente
          enthält: den Namen eines Verzeichnisses und eine Zeichenkette
          mit allen Optionen. Ein Beispiel, wo das Verzeichnis ‘/export’
          an alle NFS-Clients nur mit Lesezugriff freigegeben wird,
          sieht so aus:

               (nfs-configuration
                (exports
                 '(("/export"
                    "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))

     ‘rpcmountd-port’ (Vorgabe: ‘#f’)
          Welchen Netzwerk-Port der ‘rpc.mountd’-Daemon benutzen soll.

     ‘rpcstatd-port’ (Vorgabe: ‘#f’)
          Welchen Netzwerk-Port der ‘rpc.statd’-Daemon benutzen soll.

     ‘rpcbind’ (Vorgabe: ‘rpcbind’)
          Das rpcbind-Paket, das benutzt werden soll.

     ‘idmap-domain’ (Vorgabe: ‘"localdomain"’)
          Der lokale NFSv4-Domainname.

     ‘nfsd-port’ (Vorgabe: ‘2049’)
          Welchen Netzwerk-Port der ‘nfsd’-Daemon benutzen soll.

     ‘nfsd-threads’ (Vorgabe: ‘8’)
          Wie viele Threads der ‘rpc.statd’-Daemon benutzen soll.

     ‘nfsd-tcp?’ (Vorgabe: ‘#t’)
          Ob der ‘nfsd’-Daemon auf einem TCP-Socket lauschen soll.

     ‘nfsd-udp?’ (Vorgabe: ‘#f’)
          Ob der ‘nfsd’-Daemon auf einem UDP-Socket lauschen soll.

     ‘pipefs-directory’ (Vorgabe: ‘"/var/lib/nfs/rpc_pipefs"’)
          Das Verzeichnis, unter dem das Pipefs-Dateisystem eingebunden
          wurde.

     ‘debug’ (Vorgabe: ‘'()"’)
          Eine Liste der Subsysteme, für die Informationen zur
          Fehlersuche bereitgestellt werden sollen, als Liste von
          Symbolen. Jedes der folgenden Symbole ist gültig: ‘nfsd’,
          ‘nfs’, ‘rpc’, ‘idmap’, ‘statd’ oder ‘mountd’.

   Wenn Sie keinen vollständigen NFS-Dienst benötigen oder ihn selbst
einrichten wollen, können Sie stattdessen die im Folgenden
dokumentierten Komponentendienste benutzen.

RPC-Bind-Dienst
...............

Mit dem RPC-Bind-Dienst können Programmnummern auf universelle Adressen
abgebildet werden. Viele Dienste, die mit dem NFS zu tun haben, benutzen
diese Funktion, daher wird sie automatisch gestartet, sobald ein davon
abhängiger Dienst startet.

 -- Variable: rpcbind-service-type
     Ein Diensttyp für den RPC-Portplaner-Daemon („Portmapper“).

 -- Datentyp: rpcbind-configuration
     Datentyp, der die Konfiguration des RPC-Bind-Dienstes
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:
     ‘rpcbind’ (Vorgabe: ‘rpcbind’)
          Das rpcbind-Paket, das benutzt werden soll.

     ‘warm-start?’ (Vorgabe: ‘#t’)
          Wenn dieser Parameter ‘#t’ ist, wird der Daemon beim Starten
          eine Zustandsdatei („State File“) lesen, aus der er die von
          der vorherigen Instanz gespeicherten Zustandsinformationen
          wiederherstellt.

Pipefs-Pseudodateisystem
........................

Mit dem Pipefs-Dateisystem können NFS-bezogene Daten zwischen dem Kernel
und Programmen auf der Anwendungsebene (dem „User Space“) übertragen
werden.

 -- Variable: pipefs-service-type
     Ein Diensttyp für das Pseudodateisystem „Pipefs“.

 -- Datentyp: pipefs-configuration
     Datentyp, der die Konfiguration des
     Pipefs-Pseudodateisystemdienstes repräsentiert. Dieser Typ verfügt
     über die folgenden Parameter:
     ‘mount-point’ (Vorgabe: ‘"/var/lib/nfs/rpc_pipefs"’)
          Das Verzeichnis, unter dem das Dateisystem eingebunden werden
          soll.

GSS-Daemon-Dienst
.................

Der Daemon des “Global Security System” (GSS) ermöglicht starke
Informationssicherheit für RPC-basierte Protokolle. Vor dem Austausch
von Anfragen über entfernte Prozeduraufrufe („Remote Procedure Calls“,
kurz RPC) muss ein RPC-Client einen Sicherheitskontext („Security
Context“) herstellen. Typischerweise wird dazu der ‘kinit’-Befehl von
Kerberos benutzt, oder er wird automatisch bei der Anmeldung über
PAM-Dienste hergestellt (siehe *note Kerberos-Dienste::).

 -- Variable: gss-service-type
     Ein Diensttyp für den Daemon des Global Security System (GSS).

 -- Datentyp: gss-configuration
     Datentyp, der die Konfiguration des GSS-Daemon-Dienstes
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:
     ‘nfs-utils’ (Vorgabe: ‘nfs-utils’)
          Das Paket, in dem der Befehl ‘rpc.gssd’ gesucht werden soll.

     ‘pipefs-directory’ (Vorgabe: ‘"/var/lib/nfs/rpc_pipefs"’)
          Das Verzeichnis, unter dem das Pipefs-Dateisystem eingebunden
          wurde.

IDMAP-Daemon-Dienst
...................

Der idmap-Daemon-Dienst ermöglicht eine Abbildung zwischen
Benutzeridentifikatoren und Benutzernamen. Er wird in der Regel dafür
benötigt, auf über NFSv4 eingebundene Dateisysteme zuzugreifen.

 -- Variable: idmap-service-type
     Ein Diensttyp für den Identity-Mapper-Daemon (IDMAP).

 -- Datentyp: idmap-configuration
     Datentyp, der die Konfiguration des IDMAP-Daemon-Dienstes
     repräsentiert. Dieser Typ verfügt über die folgenden Parameter:
     ‘nfs-utils’ (Vorgabe: ‘nfs-utils’)
          Das Paket, in dem der Befehl ‘rpc.idmapd’ gesucht werden soll.

     ‘pipefs-directory’ (Vorgabe: ‘"/var/lib/nfs/rpc_pipefs"’)
          Das Verzeichnis, unter dem das Pipefs-Dateisystem eingebunden
          wurde.

     ‘domain’ (Vorgabe: ‘#f’)
          Der lokale NFSv4-Domain-Name. Für ihn muss eine Zeichenkette
          oder ‘#f’ angegeben werden. Wenn ‘#f’ angegeben wird, benutzt
          der Daemon den vollständigen Domain-Namen („Fully Qualified
          Domain Name“) des Rechners.

     ‘verbosity’ (Vorgabe: ‘0’)
          Die Ausführlichkeitsstufe des Daemons.

Autofs Service
..............

The autofs service automatically mounts and unmounts filesystems. It can
mount both network and local storage, but is most often used to manage
NFS mounts.

   A typical configuration might look like:

     (operating-system
       (services
        (append
         (list
          (service nfs-service-type (nfs-configuration))
          (service autofs-service-type
                   (autofs-configuration
                    (mounts
                     (list
                      (autofs-indirect-map
                       (mount-point "/net/home")
                       (entries
                        (list
                         ;; Accessing /net/home/foo will mount
                         ;; big.network.server:/home/foo.
                         (autofs-map-entry
                          (type "nfs")
                          (device "big.network.server:/home/&")
                          (mount-point "*"))))))))))
         %base-services)))

 -- Data Type: autofs-indirect-map
     Available ‘autofs-indirect-map’ fields are:

     ‘mount-point’ (type: string)
          Where to mount the indirect map.

     ‘entries’ (default: ‘()’) (type: autofs-map-entries)
          Entries in this map.

 -- Data Type: autofs-map-entry
     Available ‘autofs-map-entry’ fields are:

     ‘type’ (default: ‘"auto"’) (type: string)
          The type of the filesystem.

     ‘device’ (type: string)
          Device or remote host to mount. May contain special character
          ‘&’, which can be referenced in the MOUNT-POINT field.

     ‘mount-point’ (type: string)
          Directory to mount this device on. Map entries come in two
          flavors: direct and indirect. Direct entries map a single
          device to a single mountpoint, while indirect entries can map
          multiple devices to multiple mountpoints. A direct entry has a
          MOUNT-POINT beginning with ‘/’, representing the absolute path
          of the directory to mount the device on. For example:

               (autofs-map-entry
                (type "ext4")
                (device "/dev/sdb1")
                (mount-point "/mnt/external-disk"))

          An indirect entry has a MOUNT-POINT not beginning with ‘/’,
          representing the subdirectory within the parent indirect map
          for this entry. Indirect maps may also use the special
          character ‘*’, which will be replaced with the value of
          special character ‘&’ in the DEVICE field of this entry. For
          example:

               (autofs-indirect-map
                (mount-point "/devices")
                (entries
                 (list
                  ;; Automount any block device r/o by ID.
                  (autofs-map-entry
                   (type "auto")
                   (mount-point "ro/uuid/*")
                   (device "/dev/disk/by-id/&")
                   (options '(ro)))
                  ;; Automount any block device by UUID.
                  (autofs-map-entry
                   (type "auto")
                   (mount-point "rw/uuid/*")
                   (device "/dev/disk/by-uuid/&")))))

     ‘options’ (default: ‘()’) (type: file-system-options)
          List of mount options. Some options are simple flags, such as
          ro, noexec, nosuid, etc. These may be expressed as strings or
          symbols. Other options also accept a value. These are
          expressed as pairs of ‘(option . value)’. ‘option’ may be a
          string or symbol, as with flags. ‘value’ may be a string,
          symbol, or number. Example: ‘(ro (errors . remount-ro)
          noexec)’

 -- Data Type: autofs-configuration
     Available ‘autofs-configuration’ fields are:

     ‘autofs’ (default: ‘autofs’) (type: package)
          The autofs package to use.

     ‘mounts’ (default: ‘()’) (type: autofs-mount-maps)
          Mount maps to manage. This is a list of either direct map
          entries or indirect mount maps.

     ‘timeout’ (default: ‘300’) (type: conf-integer)
          Sets the default mount timeout in seconds.

     ‘master-wait’ (default: ‘10’) (type: conf-integer)
          Sets the default maximum number of retries (actual iterations
          is half this, each is delayed by 2 seconds before retrying)
          waiting for the master map to become available if it cannot be
          read at program start. This can be longer if the map source
          itself waits for availability (such as sss).

     ‘negative-timeout’ (default: ‘60’) (type: conf-integer)
          Set the default timeout for caching failed key lookups.

     ‘mount-verbose?’ (default: ‘#f’) (type: conf-boolean)
          Use the verbose flag when spawning mount(8), and log some
          process info about the requestor and its parent.

     ‘mount-wait’ (default: ‘-1’) (type: conf-integer)
          Set the default time to wait for a response from a spawned
          mount(8) before sending it a SIGTERM. Note that we still need
          to wait for the RPC layer to timeout before the sub-process
          exits so this isn’t ideal but it is the best we can do. The
          default is to wait until mount(8) returns without
          intervention.

     ‘umount-wait’ (default: ‘12’) (type: conf-integer)
          Set the default time to wait for a response from a spawned
          umount(8) before sending it a SIGTERM. Note that we still need
          to wait for the RPC layer to timeout before the sub-process
          exits so this isn’t ideal but it is the best we can do.

     ‘browse-mode?’ (default: ‘#t’) (type: conf-boolean)
          Should maps be browsable by default?

     ‘mount-nfs-default-protocol’ (default: ‘3’) (type: conf-integer)
          Set the default protocol that mount.nfs(8) uses when
          performing a mount. Autofs needs to know the default NFS
          protocol that mount.nfs(8) uses so it can do special case
          handling for its availability probe for different NFS
          protocols. Since we can’t identify this default automatically
          we need to set it in the autofs configuration.

     ‘append-options?’ (default: ‘#t’) (type: conf-boolean)
          When #t, global options are appended to map entry options.
          When #f, map entry options replace the global options.

     ‘logging’ (type: conf-log-level)
          Default log level. May be #:none, #:verbose, or #:debug.

     ‘force-standard-program-map-env?’ (default: ‘#f’) (type: conf-boolean)
          Override the use of a prefix with standard environment
          variables when a program map is executed. Since program maps
          are run as the privileged user setting these standard
          environment variables opens automount(8) to potential user
          privilege escalation when the program map is written in a
          language that can load components from, for example, a user
          home directory.

     ‘map-hash-table-size’ (default: ‘1024’) (type: conf-integer)
          This configuration option may be used to change the number of
          hash table slots. This configuration option affects the
          overhead of searching the map entry cache for map entries when
          there are a large number of entries. It affects the number of
          entries that must be looked at to locate a map entry in the
          map entry cache. For example, the default of 1024 and a direct
          map with 8000 entries would result in each slot containing an
          average of 8 entries, which should be acceptable. However, if
          excessive CPU usage is observed during automount lookups
          increasing this option can reduce the CPU overhead
          considerably because it reduces the length of the search
          chains. Note that the number of entries in a map doesn’t
          necessarily relate to the number of entries used in the map
          entry cache. There are two distinct cases where the map hash
          table can make a significant difference, direct maps and
          indirect maps that use the "browse" option. For indirect maps
          that do not use the "browse" option entries are added to the
          map entry cache at lookup so the number of active cache
          entries, in this case, is usually much less than the number of
          entries in the map. In this last case it would be unusual for
          the map entry cache to grow large enough to warrant increasing
          the default before an event that cleans stale entries, a map
          re-read for example.

     ‘use-hostname-for-mounts?’ (default: ‘#f’) (type: conf-boolean)
          NFS mounts where the host name resolves to more than one IP
          address are probed for availability and to establish the order
          in which mounts to them should be tried. To ensure that mount
          attempts are made only to hosts that are responding and are
          tried in the order of hosts with the quickest response the IP
          address of the host needs to be used for the mount. If it is
          necessary to use the hostname given in the map entry for the
          mount regardless, then set this option to #t. Be aware that if
          this is done there is no defense against the host name
          resolving to one that isn’t responding and while the number of
          attempts at a successful mount will correspond to the number
          of addresses the host name resolves to the order will also not
          correspond to fastest responding hosts.

     ‘disable-not-found-message?’ (default: ‘#f’) (type: conf-boolean)
          The original request to add this log message needed it to be
          unconditional. That produces, IMHO, unnecessary noise in the
          log so a configuration option has been added to provide the
          ability to turn it off.

     ‘use-ignore-mount-option?’ (default: ‘#f’) (type: conf-boolean)
          An option to enable the use of autofs pseudo option "disable".
          This option is used as a hint to user space that the mount
          entry should be omitted from mount table listings. The default
          is #f to avoid unexpected changes in behaviour and so is an
          opt-in setting.

     ‘sss-master-map-wait’ (default: ‘0’) (type: conf-integer)
          Set the time to wait and retry if sssd is unable to read the
          master map at program start. Default is 0 (don’t wait) or 10
          if sss supports returning EHSTDOWN when the provider isn’t
          available. If the sss library upports returning EHOSTDOWN when
          the provider is down then this value is how long to wait
          between re‐ tries reading the master map. When reading
          dependent maps or looking up a map key this value is
          multiplied by the number of retries that would be used when
          reading the master map.

     ‘use-mount-request-log-id?’ (default: ‘#f’) (type: conf-boolean)
          Set whether to use a mount request log id so that log entries
          for specific mount requests can be easily identified in logs
          that have multiple concurrent requests.


File: guix.de.info,  Node: Samba-Dienste,  Next: Kontinuierliche Integration,  Prev: Network File System,  Up: Dienste

11.10.27 Samba-Dienste
----------------------

Das Modul ‘(gnu services samba)’ stellt Dienstdefinitionen für Samba und
zugehörige Hilfsdienste zur Verfügung. Zurzeit werden die folgenden
Dienste unterstützt.

Samba
.....

Mit Samba (https://www.samba.org) wird das Teilen von Verzeichnissen und
Druckern im Netzwerk über das Protokoll SMB/CIFS ermöglicht, was in
Windows häufig verwendet wird. Mit Samba kann auch die Rolle eines
Active-Directory-Domain-Controllers (AD DC) für andere Rechner in einem
heterogenen Netzwerk mit vielen Arten von Computersystemen übernommen
werden.

 -- Variable: samba-service-type

     Der Diensttyp, um die Samba-Dienste ‘samba’, ‘nmbd’, ‘smbd’ und
     ‘winbindd’ zu aktivieren. Nach der Vorgabeeinstellung wird noch
     keiner der Samba-Daemons ausgeführt. Sie müssen einzeln angeben,
     welche Sie aktiviert haben möchten.

     Hier sehen Sie ein grundlegendes Beispiel einer schlichten,
     anonymen (ohne Authentifizierung) Samba-Dateifreigabe, wodurch
     Zugriff auf das Verzeichnis ‘/public’ gewährt wird.

          Tipp: Es wird vorausgesetzt, dass alle Benutzerkonten auf das
          Verzeichnis ‘/public’ und enthaltene Dateien Lese- und
          Schreibzugriff haben, also möchten Sie vielleicht ‘chmod -R
          777 /public’ darauf ausführen.

          Vorsicht: Sie sollten so eine Samba-Konfiguration nur in
          kontrollierten Umgebungen einsetzen und darüber keine privaten
          Dateien teilen, denn jeder in Ihrem Netzwerk würde darauf
          zugreifen können.

          (service samba-service-type (samba-configuration
                                       (enable-smbd? #t)
                                       (config-file (plain-file "smb.conf" "\
          [global]
          map to guest = Bad User
          logging = syslog@1

          [public]
          browsable = yes
          path = /public
          read only = no
          guest ok = yes
          guest only = yes\n"))))

 -- Datentyp: samba-service-configuration
     Verbundsobjekt für die Konfiguration der Samba-Programme.

     ‘package’ (Vorgabe: ‘samba’)
          Das Samba-Paket, das benutzt werden soll.

     ‘config-file’ (Vorgabe: ‘#f’)
          Welche Konfigurationsdatei benutzt werden soll. Die Syntax
          können Sie erfahren, wenn Sie ‘man smb.conf’ ausführen.

     ‘enable-samba?’ (Vorgabe: ‘#f’)
          Den ‘samba’-Daemon aktivieren.

     ‘enable-smbd?’ (Vorgabe: ‘#f’)
          Den ‘smbd’-Daemon aktivieren.

     ‘enable-nmbd?’ (Vorgabe: ‘#f’)
          Den ‘nmbd’-Daemon aktivieren.

     ‘enable-winbindd?’ (Vorgabe: ‘#f’)
          Den ‘winbindd’-Daemon aktivieren.

Web Service Discovery Daemon
............................

Mit dem WSDD (Web-Service-Discovery-Daemon) wird das Protokoll Web
Services Dynamic Discovery
(http://docs.oasis-open.org/ws-dd/discovery/1.1/os/wsdd-discovery-1.1-spec-os.html)
zum Finden anderer Rechner über Multicast DNS aktiviert, ähnlich zu dem,
was Avahi macht. Es kann als Alternative einspringen für Rechner mit
SMB, auf denen SMBv1 aus Sicherheitsgründen abgeschaltet wurde.

 -- Variable: wsdd-service-type
     Dies ist der Diensttyp für den WSD-Host-Daemon. Als Wert wird für
     diesen Diensttyp ein Verbundsobjekt vom Typ ‘wsdd-configuration’
     benutzt. Die Details zum ‘wsdd-configuration’-Verbundstyp folgen
     nun.

 -- Datentyp: wsdd-configuration
     Dieser Datentyp repräsentiert die Konfiguration des wsdd-Dienstes.

     ‘package’ (Vorgabe: ‘wsdd’)
          Das zu benutzende wsdd-Paket.

     ‘ipv4only?’ (Vorgabe: ‘#f’)
          Lässt nur auf IPv4-Adressen lauschen.

     ‘ipv6only’ (Vorgabe: ‘#f’)
          Lässt nur auf IPv6-Adressen lauschen. Beachten Sie: Es ist
          _nicht_ möglich, beide Optionen zu aktivieren, denn sonst
          würde ‘wsdd’ auf gar keiner IP-Version lauschen.

     ‘chroot’ (Vorgabe: ‘#f’)
          Mit Chroot in ein eigenes Verzeichnis wechseln und damit den
          Zugriff auf ungewollte Verzeichnisse verhindern. Dies bietet
          zusätzliche Sicherheit, wenn es eine Schwachstelle in ‘wsdd’
          geben sollte.

     ‘hop-limit’ (Vorgabe: ‘1’)
          Beschränkung, wie viele Zwischenschritte („Hops“)
          Multicast-Pakete nehmen dürfen. Voreingestellt ist 1, um zu
          verhindern, dass Pakete das lokale Netzwerk verlassen.

     ‘interface’ (Vorgabe: ‘'()’)
          Nur auf den hier angegebenen Netzwerkschnittstellen lauschen.
          Die Vorgabe ist, dass wsdd auf allen Schnittstellen erreichbar
          ist, außer der Loopback-Schnittstelle, die niemals benutzt
          wird.

     ‘uuid-device’ (Vorgabe: ‘#f’)
          Im WSD-Protokoll muss ein Gerät eine UUID haben. Sie können
          hier eine UUID für den Dienst selbst vergeben.

     ‘domain’ (Vorgabe: ‘#f’)
          Wenn gemeldet werden soll, dass dieser Rechner zu einer Active
          Directory gehört.

     ‘host-name’ (Vorgabe: ‘#f’)
          Legen Sie den Rechnernamen selbst fest, statt dass ‘wsdd’ den
          Rechnernamen des Rechners verwendet. Normalerweise wird aus
          einem möglichen vollständigen Domain-Namen („Fully Qualified
          Domain Name“) des Rechners nur der Teil mit dem Rechnernamen
          benutzt.

     ‘preserve-case?’ (Vorgabe: ‘#f’)
          Vorgegeben ist, dass ‘wsdd’ die Rechnernamen in der
          Arbeitsgruppe („Workgroup“) in Großbuchstaben wiedergibt. Das
          Gegenteil ist der Fall, wenn der Rechnername aus einer Domain
          kommt. Wenn Sie diesen Parameter auf wahr setzen, bleibt die
          Groß-/Kleinschreibung erhalten.

     ‘workgroup’ (Vorgabe: "WORKGROUP")
          Hier können Sie den Namen der Arbeitsgruppe ändern. ‘wsdd’
          wird diesen Rechner als Mitglied dieser Arbeitsgruppe melden.


File: guix.de.info,  Node: Kontinuierliche Integration,  Next: Dienste zur Stromverbrauchsverwaltung,  Prev: Samba-Dienste,  Up: Dienste

11.10.28 Kontinuierliche Integration
------------------------------------

Cuirass (https://guix.gnu.org/cuirass/) ist ein Werkzeug zur
kontinuierlichen Integration für Guix. Es kann sowohl bei der
Entwicklung helfen als auch beim Anbieten von Substituten für andere
(siehe *note Substitute::).

   Das Modul ‘(gnu services cuirass)’ stellt den folgenden Dienst zur
Verfügung:

 -- Prozedur: cuirass-service-type
     Der Diensttyp des Cuirass-Dienstes. Sein Wert muss ein
     ‘cuirass-configuration’-Verbundsobjekt sein, wie im Folgenden
     beschrieben.

   Um Erstellungsaufträge („Build Jobs“) hinzuzufügen, müssen Sie sie im
‘specifications’-Feld der Konfiguration eintragen. Mit dem folgenden
Beispiel würden alle Pakete aus dem Kanal ‘my-channel’ erstellt.

     (define %cuirass-specs
       #~(list (specification
                (name 'my-channel)
                (build '(channels my-channel))
                (channels
                 (cons (channel
                        (name 'my-channel)
                        (url "https://my-channel.git"))
                       %default-channels)))))

     (service cuirass-service-type
              (cuirass-configuration
               (specifications %cuirass-specs)))

   Um das Paket ‘linux-libre’, das im vorgegebenen Guix-Kanal definiert
ist, zu erstellen, schreibe man die folgende Konfiguration.

     (define %cuirass-specs
       #~(list (specification
                (name 'my-linux)
                (build '(packages "linux-libre")))))

     (service cuirass-service-type
              (cuirass-configuration
               (specifications %cuirass-specs)))

   Für eine Beschreibung der anderen Konfigurationsmöglichkeiten und des
Spezifikations-Verbundsobjektes selbst, siehe das *note
(cuirass)Specifications::.

   Die Informationen, die sich auf Erstellungsaufträge beziehen, werden
direkt in deren Spezifikation festgelegt, aber globale Einstellungen des
‘cuirass’-Prozesses sind über andere Felder der ‘cuirass-configuration’
zugänglich.

 -- Datentyp: cuirass-configuration
     Datentyp, der die Konfiguration von Cuirass repräsentiert.

     ‘cuirass’ (Vorgabe: ‘cuirass’)
          Das Cuirass-Paket, das benutzt werden soll.

     ‘log-file’ (Vorgabe: ‘"/var/log/cuirass.log"’)
          An welchen Ort die Protokolldatei geschrieben wird.

     ‘web-log-file’ (Vorgabe: ‘"/var/log/cuirass-web.log"’)
          An welchem Ort die Protokolldatei der Weboberfläche
          gespeichert wird.

     ‘cache-directory’ (Vorgabe: ‘"/var/cache/cuirass"’)
          Ort, wo Repositorys zwischengespeichert werden.

     ‘user’ (Vorgabe: ‘"cuirass"’)
          Besitzer des ‘cuirass’-Prozesses.

     ‘group’ (Vorgabe: ‘"cuirass"’)
          Gruppe des Besitzers des ‘cuirass’-Prozesses.

     ‘interval’ (default: ‘300’)
          Anzahl der Sekunden, bevor ein Repository wieder neu geladen
          wird und danach Cuirass-Aufträge behandelt werden, als
          Standardeinstellung.

          Note that individual jobset specifications may override this
          in their ‘period’ field; the value specified here is only used
          for specifications that use the default ‘period’ value, which
          is zero.

     ‘parallel-evaluations’ (default: ‘#f’)
          Maximum number of jobset evaluations that may run
          concurrently. If ‘#f’, that number is determined based on a
          number of CPU cores, with an upper bound of 8.

     ‘ttl’ (default: ‘2592000’)
          Duration to keep build results’ GC roots alive, in seconds.

     ‘evaluation-ttl’ (default: 24 months)
          Number of seconds after which an evaluation may be deleted
          from the database.

     ‘build-expiry’ (default: 4 months)
          Duration in seconds after which pending builds are canceled.
          This helps ensure that the backlog does not grow indefinitely.

     ‘threads’ (default: ‘#f’)
     ‘web-threads’ (default: ‘#f’)
          Number of kernel threads to use for Cuirass (main process) and
          for the web interface (the ‘cuirass web’ program). The default
          value should be appropriate for most cases.

     ‘parameters’ (Vorgabe: ‘#f’)
          Parameter aus der angegebenen Parameterdatei lesen. Die
          unterstützten Parameter werden im *note (cuirass)Parameters::
          beschrieben.

     ‘remote-server’ (Vorgabe: ‘#f’)
          Ein ‘cuirass-remote-server-configuration’-Verbundsobjekt, um
          den Mechanismus für entfernte Erstellungen zu benutzen, oder
          ‘#f’, um den voreingestellten Erstellungsmechanismus zu
          benutzen.

     ‘database’ (Vorgabe: ‘"dbname=cuirass host=/var/run/postgresql"’)
          DATABASE als die Datenbank mit den Aufträgen und bisherigen
          Erstellungsergebnissen benutzen. Weil Cuirass als
          Datenbanktreiber PostgreSQL benutzt, muss DATABASE eine
          Zeichenkette sein wie ‘"dbname=cuirass host=localhost"’.

     ‘port’ (Vorgabe: ‘8081’)
          Portnummer, die vom HTTP-Server benutzt wird.

     ‘host’ (Vorgabe: ‘"localhost"’)
          Auf der Netzwerkschnittstelle für den Rechnernamen HOST
          lauschen. Nach Vorgabe werden Verbindungen vom lokalen Rechner
          ‘localhost’ akzeptiert.

     ‘specifications’ (Vorgabe: ‘#~'()’)
          Ein G-Ausdruck (siehe *note G-Ausdrücke::), der zu einer Liste
          von Spezifikations-Verbundsobjekten ausgewertet wird.
          Spezifikations-Verbundsobjekte werden im *note
          (cuirass)Specifications:: beschrieben.

     ‘one-shot?’ (Vorgabe: ‘#f’)
          Spezifikationen nur einmal auswerten und Ableitungen nur
          einmal erstellen.

     ‘fallback?’ (Vorgabe: ‘#f’)
          Pakete lokal erstellen, wenn das Substituieren einer
          vorerstellten Binärdatei fehlschlägt.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Zusätzliche Befehlszeilenoptionen, die beim Ausführen des
          Prozesses ‘cuirass register’ mitgegeben werden sollen.

     ‘web-extra-options’ (Vorgabe: ‘'()’)
          Zusätzliche Befehlszeilenoptionen, die beim Ausführen des
          Prozesses ‘cuirass web’ mitgegeben werden sollen.

Cuirass, entfernte Erstellung mit
.................................

Cuirass kennt zwei Mechanismen, wie damit Ableitungen erstellt werden
können.

   • Den lokalen Guix-Daemon benutzen. Dies ist der voreingestellte
     Erstellungsmechanismus. Sobald Erstellungsaufträge ausgewertet
     wurden, werden sie an den Guix-Daemon auf dem lokalen Rechner
     geschickt. Cuirass lauscht dann auf die Ausgabe des Guix-Daemons,
     um die verschiedenen Ereignisse bei der Erstellung zu erkennen.

   • Den Mechanismus für entfernte Erstellungen benutzen. Die
     Erstellungsaufträge werden _nicht_ beim lokalen Guix-Daemon
     eingereicht. Stattdessen teilt ein entfernter Server die
     Erstellungsanfragen den verbundenen entfernten Arbeitermaschinen
     zu, entsprechend ihren Erstellungsprioritäten.

   Um diesen Erstellungsmodus zu aktivieren, übergeben Sie ein
‘cuirass-remote-server-configuration’-Verbundsobjekt für das Argument
‘remote-server’ des ‘cuirass-configuration’-Verbundsobjektes. Der
‘cuirass-remote-server-configuration’-Verbund wird im Folgenden
beschrieben.

   Dieser Erstellungsmodus skaliert wesentlich besser als der
Vorgabemodus. Mit diesem Erstellungsmodus wird auch die Erstellungfarm
von GNU Guix auf <https://ci.guix.gnu.org> betrieben. Er sollte dann
bevorzugt werden, wenn Sie mit Cuirass eine große Anzahl von Paketen
erstellen möchten.

 -- Datentyp: cuirass-remote-server-configuration
     Der Datentyp, der die Konfiguration des
     Cuirass-„remote-server“-Prozesses repräsentiert.

     ‘backend-port’ (Vorgabe: ‘5555’)
          Der TCP-Port, um mit ‘remote-worker’-Prozessen mit ZMQ zu
          kommunizieren.

     ‘log-port’ (Vorgabe: ‘5556’)
          Der TCP-Port des Protokollservers.

     ‘publish-port’ (Vorgabe: ‘5557’)
          Der TCP-Port des „Publish“-Servers, um Substitute mit anderen
          zu teilen.

     ‘log-file’ (Vorgabe: ‘"/var/log/cuirass-remote-server.log"’)
          An welchen Ort die Protokolldatei geschrieben wird.

     ‘cache’ (Vorgabe: ‘"/var/cache/cuirass/remote"’)
          Im CACHE-Verzeichnis Erstellungsprotokolldateien speichern.

     ‘log-expiry’ (Vorgabe: 6 Monate)
          Nach wie vielen Sekunden die von ‘cuirass remote-worker’
          angesammelten Erstellungsprotokolle gelöscht werden können.

     ‘trigger-url’ (Vorgabe: ‘#f’)
          Sobald ein Substitut erfolgreich heruntergeladen wurde, wird
          dessen Einlagerung als Narinfo („bake the substitute“) auf
          TRIGGER-URL direkt ausgelöst.

     ‘publish?’ (Vorgabe: ‘#t’)
          Wenn dies auf falsch gesetzt ist, wird kein „Publish“-Server
          gestartet und das ‘publish-port’-Argument ignoriert. Verwenden
          Sie es, wenn bereits ein eigenständiger „Publish“-Server für
          den „remote-server“ läuft.

     ‘public-key’
     ‘private-key’
          Die angegebenen DATEIen als das Paar aus öffentlichem und
          privatem Schlüssel zum Signieren veröffentlichter
          Store-Objekte benutzen.

   Mindestens eine entfernte Arbeitermaschine („remote worker“) muss auf
irgendeiner Maschine im lokalen Netzwerk gestartet werden, damit
tatsächlich Erstellungen durchgeführt werden und deren Status gemeldet
wird.

 -- Datentyp: cuirass-remote-worker-configuration
     Der Datentyp, der die Konfiguration des
     Cuirass-„remote-worker“-Prozesses repräsentiert.

     ‘cuirass’ (Vorgabe: ‘cuirass’)
          Das Cuirass-Paket, das benutzt werden soll.

     ‘workers’ (Vorgabe: ‘1’)
          WORKERS-viele parallele Arbeiterprozesse starten.

     ‘server’ (Vorgabe: ‘#f’)
          Keine Maschinen über Avahi ermitteln, sondern stattdessen eine
          Verbindung zum Server unter der in ‘server’ angegebenen
          IP-Adresse aufbauen.

     ‘systems’ (Vorgabe: ‘(list (%current-system))’)
          Nur Erstellungen für die in SYSTEMS angegebenen Systeme
          anfragen.

     ‘log-file’ (Vorgabe: ‘"/var/log/cuirass-remote-worker.log"’)
          An welchen Ort die Protokolldatei geschrieben wird.

     ‘publish-port’ (Vorgabe: ‘5558’)
          Der TCP-Port des „Publish“-Servers, um Substitute mit anderen
          zu teilen.

     ‘substitute-urls’ (Vorgabe: ‘%default-substitute-urls’)
          Die Liste der URLs, auf denen nach Substituten gesucht wird,
          wenn nicht anders angegeben.

     ‘public-key’
     ‘private-key’
          Die angegebenen DATEIen als das Paar aus öffentlichem und
          privatem Schlüssel zum Signieren veröffentlichter
          Store-Objekte benutzen.

Laminar
.......

Laminar (https://laminar.ohwg.net/) ist ein sparsamer und modularer
Dienst zur Kontinuierlichen Integration. Statt einer Weboberfläche zur
Konfiguration werden versionskontrollierte Konfigurationsdateien und
Skripte verwendet.

   Laminar ermutigt dazu, bestehende Werkzeuge wie bash und cron zu
benutzen, statt das Rad neu zu erfinden.

 -- Variable: laminar-service-type
     Der Diensttyp des Laminar-Dienstes. Sein Wert muss ein
     ‘laminar-configuration’-Verbundsobjekt sein, wie im Folgenden
     beschrieben.

     Alle Konfigurationswerte haben bereits vorgegebene Einstellungen.
     Eine minimale Konfiguration, um Laminar aufzusetzen, sehen Sie
     unten. Nach Vorgabe läuft die Weboberfläche auf Port 8080.

          (service laminar-service-type)

 -- Datentyp: laminar-configuration
     Datentyp, der die Konfiguration von Laminar repräsentiert.

     ‘laminar’ (Vorgabe: ‘laminar’)
          Das Laminar-Paket, das benutzt werden soll.

     ‘home-directory’ (Vorgabe: ‘"/var/lib/laminar"’)
          Das Verzeichnis mit Auftragskonfigurationen und
          Verzeichnissen, in denen Aufträge ausgeführt werden
          („run“-Verzeichnissen).

     ‘supplementary-groups’ (Vorgabe: ‘'()’)
          Der Name der Gruppe, zu der das Laminar-Benutzerkonto gehören
          soll.

     ‘bind-http’ (Vorgabe: ‘"*:8080"’)
          Die Netzwerkschnittstelle mit Port oder der Unix-Socket, wo
          laminard auf eingehende Verbindungen zur Web-Oberfläche
          lauschen soll.

     ‘bind-rpc’ (Vorgabe: ‘"unix-abstract:laminar"’)
          Die Netzwerkschnittstelle mit Port oder der Unix-Socket, wo
          laminard auf eingehende Befehle z.B. zum Auslösen einer
          Erstellung lauschen soll.

     ‘title’ (Vorgabe: ‘"Laminar"’)
          Der Seitentitel, der auf der Web-Oberfläche angezeigt wird.

     ‘keep-rundirs’ (Vorgabe: ‘0’)
          Setzen Sie dies auf eine ganze Zahl, die festlegt, wie viele
          Ausführungsverzeichnisse pro Auftrag vorgehalten werden. Die
          mit der niedrigsten Nummer werden gelöscht. Die Vorgabe ist 0,
          d.h. alle Ausführungsverzeichnisse werden sofort gelöscht.

     ‘archive-url’ (Vorgabe: ‘#f’)
          Die von laminard angebotene Weboberfläche wird aus dieser URL
          die Verweise auf Artefakte archivierter Aufträge
          zusammensetzen.

     ‘base-url’ (Vorgabe: ‘#f’)
          Was Laminar in Verweisen auf eigene Seiten als Basis-URL
          verwenden soll.

Forgejo Runner
..............

The ‘(gnu services ci)’ also provides a service for Forgejo Runner
(https://code.forgejo.org/forgejo/runner), a daemon that connects to an
instance of the Forgejo code collaboration tool (https://forgejo.org)
and runs jobs for continuous integration.

   A minimal configuration mostly with default values that can be added
to the ‘services’ field of your operating system looks like this:

     (service forgejo-runner-service-type
              (forgejo-runner-configuration
               (name "my-runner")
               (labels '("guix" "linux"))))

   This provides a ‘forgejo-runner’ Shepherd service. That service will
initially fail to start; you will have to manually “register” the runner
against the Forgejo server by running a command like:

     herd register forgejo-runner URL TOKEN

... where the arguments are as follows:

URL
     the URL of the Forgejo server—e.g., ‘https://codeberg.org’;
TOKEN
     an access token provided by the Forgejo server
     (https://forgejo.org/docs/latest/admin/runner-installation/#standard-registration).

   Once registration has succeeded, you can start the runner:

     herd enable forgejo-runner
     herd start forgejo-runner

   The runner then receives orders from the Forgejo server to execute
“actions”. Actions are commands and workflows specified by YAML files in
the ‘.forgejo/workflows’ directory of source code repositories—see the
Forgejo Action documentation
(https://forgejo.org/docs/v7.0/user/actions/) for more info.

   Note that at the moment ‘forgejo-runner-service-type’ lets you run
only one runner. Details about the configuration of this service follow.

 -- Variable: forgejo-runner-service-type
     This is the service type for Forgejo Runner. Its value must be a
     ‘forgejo-runner-configuration’ record, documented below.

 -- Data Type: forgejo-runner-configuration
     This data type represents the configuration of an instance of
     ‘forgejo-runner-service-type’. It contains the following fields:

     ‘package’ (default: ‘forgejo-runner’)
          The Forgejo Runner package to use.

     ‘name’ (default: ‘#~(gethostname)’)
          Name of the runner as will be shown in the runner management
          interface of Forgejo.

     ‘labels’ (default: ‘'("guix")’)
          List of labels
          (https://forgejo.org/docs/latest/admin/actions/#choosing-labels)
          representing the type of environment the runner provides and
          that actions may refer to.

     ‘capacity’ (default: ‘1’)
          Number of tasks to be executed concurrently.

     ‘timeout’ (default: ‘(* 3 3600)’)
          Maximum duration of a job, in seconds.

     ‘fetch-timeout’ (default: ‘5’)
          Maximum duration for fetching the job from the Forgejo server,
          in seconds.

     ‘fetch-interval’ (default: ‘2’)
          Interval (in seconds) for fetching the job from the Forgejo
          server.

     ‘report-interval’ (default: ‘1’)
          Interval (in seconds) for reporting the job status and log to
          the Forgejo server.

     ‘data-directory’ (default: ‘"/var/lib/forgejo-runner"’)
          Directory where ‘forgejo-runner’ will store persistent data
          such as its configuration and access token.

     ‘run-directory’ (default: ‘"/var/run/forgejo-runner"’)
          Directory where ‘forgejo-runner’ stores cached data.

     ‘log-file’ (default: ‘"/var/log/forgejo-runner.log"’)
          Name of the ‘forgejo-runner’ log file.

