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

Copyright © 2012-2022 Ludovic Courtès
Copyright © 2013, 2014, 2016 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 Leo Famulari
Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo
Wurmus
Copyright © 2016 Ben Woodcroft
Copyright © 2016, 2017, 2018, 2021 Chris Marusich
Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner
Copyright © 2016 John Darrington
Copyright © 2016, 2017 Nikita Gillmann
Copyright © 2016, 2017, 2018, 2019, 2020 Jan 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 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, 2020, 2021, 2022 Maxim Cournoyer
Copyright © 2017–2022 Tobias Geerinckx-Rice
Copyright © 2017 George Clemmer
Copyright © 2017 Andy Wingo
Copyright © 2017, 2018, 2019, 2020 Arun Isaac
Copyright © 2017 nee
Copyright © 2018 Rutger Helling
Copyright © 2018, 2021 Oleg Pykhalov
Copyright © 2018 Mike Gerwitz
Copyright © 2018 Pierre-Antoine Rouby
Copyright © 2018, 2019 Gábor Boskovits
Copyright © 2018, 2019, 2020, 2022 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 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 Pierre Langlois
Copyright © 2020 pinoaffe
Copyright © 2020 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, 2022 Josselin Poiret
Copyright © 2021 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

   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 Free Documentation
License“.
INFO-DIR-SECTION Systemadministration
START-INFO-DIR-ENTRY
* Guix: (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: Kurznachrichtendienste,  Next: Telefondienste,  Prev: Mail-Dienste,  Up: Dienste

12.9.13 Kurznachrichtendienste
------------------------------

Das Modul ‘(gnu services messaging)’ stellt Guix-Dienstdefinitionen für
Kurznachrichtendienste, d.h. „Instant Messaging“, zur Verfügung. Zurzeit
werden folgende Dienste unterstützt:

Prosody-Dienst
..............

 -- Scheme-Variable: prosody-service-type
     Dies ist der Diensttyp für den XMPP-Kommunikationsserver Prosody
     (https://prosody.im). Sein Wert muss ein
     ‘prosody-configuration’-Verbundsobjekt wie in diesem Beispiel sein:

          (service prosody-service-type
                   (prosody-configuration
                    (modules-enabled (cons* "groups" "mam" %default-modules-enabled))
                    (int-components
                     (list
                      (int-component-configuration
                       (hostname "conference.example.net")
                       (plugin "muc")
                       (mod-muc (mod-muc-configuration)))))
                    (virtualhosts
                     (list
                      (virtualhost-configuration
                       (domain "example.net"))))))

     Siehe im Folgenden Details über die ‘prosody-configuration’.

   Prosody kann mit den Vorgabeeinstellungen ohne viel weitere
Konfiguration benutzt werden. Nur ein ‘virtualhosts’-Feld wird
gebraucht: Es legt die Domain fest, um die sich Prosody kümmert.

   Sie können die Korrektheit der generierten Konfigurationsdatei
überprüfen, indem Sie den Befehl ‘prosodyctl check’ ausführen.

   Prosodyctl hilft auch dabei, Zertifikate aus dem
‘letsencrypt’-Verzeichnis zu importieren, so dass das
‘prosody’-Benutzerkonto auf sie Zugriff hat. Siehe
<https://prosody.im/doc/letsencrypt>.

     prosodyctl --root cert import /etc/letsencrypt/live

   Im Folgenden finden Sie die verfügbaren Konfigurationsparameter.
Jeder Parameterdefinition ist ihr Typ vorangestellt; zum Beispiel
bedeutet ‘Zeichenketten-Liste foo’, dass der Parameter ‘foo’ als Liste
von Zeichenketten angegeben werden sollte. Typangaben, die mit
‘Vielleicht-’ beginnen, stehen für Parameter, die in ‘prosody.cfg.lua’
_nicht_ vorkommen, falls deren Wert _nicht_ angegeben wurde.

   Sie können die Konfiguration auch als eine Zeichenkette festlegen,
wenn Sie über eine alte ‘prosody.cfg.lua’-Datei verfügen, die Sie von
einem anderen System übernehmen möchten; siehe das Ende dieses
Abschnitts für Details.

   Der Typ ‘Dateiobjekt’ bezeichnet hierbei entweder ein dateiartiges
Objekt (siehe *note dateiartige Objekte: G-Ausdrücke.) oder einen
Dateinamen.

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

 -- ‘prosody-configuration’-Parameter: „package“ prosody
     Das Prosody-Paket.

 -- ‘prosody-configuration’-Parameter: Dateiname data-path
     Der Ort, wo sich Prosodys Verzeichnis zum Speichern von Daten
     befinden soll. Siehe <https://prosody.im/doc/configure>. Die
     Vorgabe ist ‘"/var/lib/prosody"’.

 -- ‘prosody-configuration’-Parameter: Dateiobjekt-Liste plugin-paths
     Zusätzliche Plugin-Verzeichnisse. Plugins werden der Reihe nach in
     allen festgelegten Pfaden gesucht. Siehe
     <https://prosody.im/doc/plugins_directory>. Die Vorgabe ist ‘()’.

 -- ‘prosody-configuration’-Parameter: Dateiname certificates
     Jeder virtuellte Rechner und jede Komponente braucht ein
     Zertifikat, mit dem Clients und Server ihre Identität sicher
     verifizieren können. Prosody lädt automatisch Zertifikate bzw.
     Schlüssel aus dem hier angegebenen Verzeichnis. Die Vorgabe ist
     ‘"/etc/prosody/certs"’.

 -- ‘prosody-configuration’-Parameter: Zeichenketten-Liste admins
     Dies ist eine Liste der Benutzerkonten, die auf diesem Server
     Administratoren sind. Beachten Sie, dass Sie die Benutzerkonten
     noch separat als Nutzer erzeugen lassen müssen. Siehe
     <https://prosody.im/doc/admins> and
     <https://prosody.im/doc/creating_accounts>. Ein Beispiel: ‘(admins
     '("user1@example.com" "user2@example.net"))’ Die Vorgabe ist ‘()’.

 -- ‘prosody-configuration’-Parameter: Boolescher-Ausdruck use-libevent?
     Die Nutzung von libevent aktivieren, damit bessere
     Leistungsfähigkeit auch unter hoher Last gewährleistet wird. Siehe
     <https://prosody.im/doc/libevent>. Die Vorgabe ist ‘#f’.

 -- ‘prosody-configuration’-Parameter: Modul-Liste modules-enabled
     Die Liste der Module, die Prosody beim Starten lädt. Es sucht nach
     ‘mod_modulename.lua’ im Plugin-Verzeichnis, also sollten Sie
     sicherstellen, dass es dort auch existiert. Dokumentation über
     Module können Sie hier finden: <https://prosody.im/doc/modules>.
     Die Vorgabe ist ‘("roster" "saslauth" "tls" "dialback" "disco"
     "carbons" "private" "blocklist" "vcard" "version" "uptime" "time"
     "ping" "pep" "register" "admin_adhoc")’.

 -- ‘prosody-configuration’-Parameter: Zeichenketten-Liste
          modules-disabled
     ‘"offline"’, ‘"c2s"’ und ‘"s2s"’ werden automatisch geladen, aber
     wenn Sie sie deaktivieren möchten, tragen Sie sie einfach in die
     Liste ein. Die Vorgabe ist ‘()’.

 -- ‘prosody-configuration’-Parameter: Dateiobjekt groups-file
     Der Pfad zu einer Textdatei, in der gemeinsame Gruppen definiert
     werden. Wenn dieser Pfad leer ist, dann tut ‘mod_groups’ nichts.
     Siehe <https://prosody.im/doc/modules/mod_groups>. Die Vorgabe ist
     ‘"/var/lib/prosody/sharedgroups.txt"’.

 -- ‘prosody-configuration’-Parameter: Boolescher-Ausdruck
          allow-registration?
     Ob nach Voreinstellung _keine_ neuen Benutzerkonten angelegt werden
     können, aus Sicherheitsgründen. Siehe
     <https://prosody.im/doc/creating_accounts>. Die Vorgabe ist ‘#f’.

 -- ‘prosody-configuration’-Parameter: Vielleicht-„ssl-configuration“
          ssl
     Dies ist der Teil der Einstellungen, der mit SSL/TLS zu tun hat.
     Der Großteil davon ist deaktiviert, damit die Voreinstellungen von
     Prosody verwendet werden. Wenn Sie diese Optionen hier nicht völlig
     verstehen, sollten Sie sie _nicht_ in Ihrer Konfiguration
     verwenden. Es passiert leicht, dass Sie die Sicherheit Ihres
     Servers absenken, indem Sie sie falsch benutzen. Siehe
     <https://prosody.im/doc/advanced_ssl_config>.

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

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenkette protocol
          Dadurch wird entschieden, was für ein Handshake benutzt wird.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Dateiname key
          Der Pfad zur Datei mit Ihrem privaten Schlüssel.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Dateiname certificate
          Der Pfad zur Datei mit Ihrem Zertifikat.

      -- ‘ssl-configuration’-Parameter: Dateiobjekt capath
          Der Pfad zum Verzeichnis, das die Wurzelzertifikate enthält,
          die Prosody zur Verifikation der Zertifikate entfernter Server
          benutzen soll. Die Vorgabe ist ‘"/etc/ssl/certs"’.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Dateiobjekt cafile
          Der Pfad zu einer Datei, in der Wurzelzertifikate enthalten
          sind, denen Prosody vertrauen soll. Er verhält sich ähnlich
          wie ‘capath’, aber alle Zertifikate stehen hintereinander in
          der Datei.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenketten-Liste
               verify
          Eine Liste von Verifikationsoptionen. (Die meisten bilden auf
          die ‘set_verify()’-Flags von OpenSSL ab.)

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenketten-Liste
               options
          Eine Liste allgemeiner Optionen, die mit SSL/TLS zu tun haben.
          Diese bilden auf OpenSSLs ‘set_options()’ ab. Eine
          vollständige Liste der in LuaSec verfügbaren Optionen finden
          Sie im Quellcode von LuaSec.

      -- ‘ssl-configuration’-Parameter:
               Vielleicht-Nichtnegative-ganze-Zahl depth
          Wie lange eine Kette von Zertifikatsautoritäten („Certificate
          Authorities“) nach einem passenden Wurzelzertifikat durchsucht
          wird, dem vertraut wird.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenkette ciphers
          Eine Zeichenkette mit OpenSSL-Ciphers. Damit wird ausgewählt,
          welche Ciphers Prosody seinen Clients anbietet, und in welcher
          Reihenfolge.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Dateiname dhparam
          Ein Pfad zu einer Datei, in der Parameter für
          Diffie-Hellman-Schlüsselaustausche stehen. Sie können so eine
          Datei mit diesem Befehl erzeugen: ‘openssl dhparam -out
          /etc/prosody/certs/dh-2048.pem 2048’

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenkette curve
          Die Kurve, die für Diffie-Hellman mit elliptischen Kurven
          verwendet werden soll. Prosodys Voreinstellung ist
          ‘"secp384r1"’.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenketten-Liste
               verifyext
          Eine Liste von zusätzlichen Verifikationsoptionen.

      -- ‘ssl-configuration’-Parameter: Vielleicht-Zeichenkette password
          Das Passwort fÜr verschlüsselte private Schlüssel.

 -- ‘prosody-configuration’-Parameter: Boolescher-Ausdruck
          c2s-require-encryption?
     Ob alle Verbindungen von Client zu Server zwangsweise verschlüsselt
     sein müssen. Siehe <https://prosody.im/doc/modules/mod_tls>. Die
     Vorgabe ist ‘#f’.

 -- ‘prosody-configuration’-Parameter: Zeichenketten-Liste
          disable-sasl-mechanisms
     Welche Mechanismen angeboten werden. Siehe
     <https://prosody.im/doc/modules/mod_saslauth>. Die Vorgabe ist
     ‘("DIGEST-MD5")’.

 -- ‘prosody-configuration’-Parameter: Boolescher-Ausdruck
          s2s-require-encryption?
     Ob alle Verbindungen von Server zu Server zwangsweise verschlüsselt
     sein müssen. Siehe <https://prosody.im/doc/modules/mod_tls>. Die
     Vorgabe ist ‘#f’.

 -- ‘prosody-configuration’-Parameter: Boolescher-Ausdruck
          s2s-secure-auth?
     Ob Verschlüsselung und Zertifikatsauthentifizierung verpflichtend
     durchgeführt werden müssen. Das bietet das ideale Maß an
     Sicherheit, jedoch müssen dann auch die Server, mit denen Sie
     kommunizieren, Verschlüsselung unterstützen _und_ gültige
     Zertifikate vorweisen, denen Sie auch vertrauen. Siehe
     <https://prosody.im/doc/s2s#security>. Die Vorgabe ist ‘#f’.

 -- ‘prosody-configuration’-Parameter: Zeichenketten-Liste
          s2s-insecure-domains
     Viele Server bieten keine Unterstützung für Verschlüsselung oder
     ihre Zertifikate sind ungültig oder selbstsigniert. Hier können Sie
     Domains eintragen, die von der Pflicht zur Authentisierung mit
     Zertifikaten ausgenommen werden. Diese werden dann über DNS
     authentifiziert. Siehe <https://prosody.im/doc/s2s#security>. Die
     Vorgabe ist ‘()’.

 -- ‘prosody-configuration’-Parameter: Zeichenketten-Liste
          s2s-secure-domains
     Selbst wenn Sie ‘s2s-secure-auth?’ deaktiviert lassen, können Sie
     noch immer gültige Zertifikate bei manchen Domains verlangen, indem
     Sie diese hier auflisten. Siehe
     <https://prosody.im/doc/s2s#security>. Die Vorgabe ist ‘()’.

 -- ‘prosody-configuration’-Parameter: Zeichenkette authentication
     Wählen Sie aus, welcher Hintergrunddienst („Provider“) zur
     Authentifizierung benutzt werden soll. Das vorgegebene System
     speichert Passwörter im Klartext ab und benutzt dafür den in
     Prosody eingestellten Datenspeicher, um Authentifizierungsdaten zu
     speichern. Wenn Sie Ihrem Server kein Vertrauen entgegenbringen,
     siehe <https://prosody.im/doc/modules/mod_auth_internal_hashed> für
     Informationen, wie Sie den gehashten Hintergrunddienst benutzen.
     Siehe auch <https://prosody.im/doc/authentication>. Die Vorgabe ist
     ‘"internal_plain"’.

 -- ‘prosody-configuration’-Parameter: Vielleicht-Zeichenkette log
     Hiermit werden die Protokollierungsoptionen festgelegt.
     Fortgeschrittene Protokollierungskonfigurationen werden vom
     Prosody-Dienst noch nicht unterstützt. Siehe
     <https://prosody.im/doc/logging>. Die Vorgabe ist ‘"*syslog"’.

 -- ‘prosody-configuration’-Parameter: Dateiname pidfile
     Die Datei, in der Prosodys Prozessidentifikator („PID“) abgelegt
     wird. Siehe <https://prosody.im/doc/modules/mod_posix>. Die Vorgabe
     ist ‘"/var/run/prosody/prosody.pid"’.

 -- ‘prosody-configuration’-Parameter:
          Vielleicht-Nichtnegative-ganze-Zahl http-max-content-size
     Die maximal zulässige Größe des HTTP-Rumpfs (in Bytes).

 -- ‘prosody-configuration’-Parameter: Vielleicht-Zeichenkette
          http-external-url
     Manche Module machen auf verschiedene Arten ihre eigene URL
     verfügbar. Diese URL setzt sich aus dem benutzten Protokoll,
     Rechnernamen und Port zusammen. Wenn Prosody hinter einem Proxy
     ausgeführt wird, ist die öffentliche URL stattdessen die
     ‘http-external-url’. Siehe
     <https://prosody.im/doc/http#external_url>.

 -- ‘prosody-configuration’-Parameter: „virtualhost-configuration“-Liste
          virtualhosts
     Der Name eines Rechners („Host“) in Prosody bezeichnet eine Domain,
     auf der Benutzerkonten angelegt werden können. Wenn Sie zum
     Beispiel möchten, dass Nutzer Adressen haben wie
     ‘"john.smith@example.com"’, dann müssen Sie einen Rechnernamen
     ‘"example.com"’ hinzufügen. Alle Optionen in dieser Liste gelten
     nur für diesen Rechnernamen.

          Anmerkung: Die Bezeichnung _virtueller_ Rechnername wird in
          der Konfiguration verwendet, damit es nicht zu Verwechslungen
          mit dem tatsächlichen physischen Rechner kommt, auf dem
          Prosody installiert ist. Eine einzelne Prosody-Instanz kann
          mehrere Domains bedienen, jede definiert mit ihrem eigenen
          VirtualHost-Eintrag in der Konfiguration von Prosody. Im
          Gegensatz dazu hätte ein Server, der nur eine Domain anbietet,
          nur einen einzigen VirtualHost-Eintrag.

          Siehe
          <https://prosody.im/doc/configure#virtual_host_settings>.

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

     Alle folgenden Felder, wie sie auch die ‘prosody-configuration’
     hat: ‘admins’, ‘use-libevent?’, ‘modules-enabled’,
     ‘modules-disabled’, ‘groups-file’, ‘allow-registration?’, ‘ssl’,
     ‘c2s-require-encryption?’, ‘disable-sasl-mechanisms’,
     ‘s2s-require-encryption?’, ‘s2s-secure-auth?’,
     ‘s2s-insecure-domains’, ‘s2s-secure-domains’, ‘authentication’,
     ‘log’, ‘http-max-content-size’, ‘http-external-url’, ‘raw-content’,
     und außerdem:
      -- ‘virtualhost-configuration’-Parameter: Zeichenkette domain
          Die Domain, auf der man Prosody erreichen soll.

 -- ‘prosody-configuration’-Parameter:
          „int-component-configuration“-Liste int-components
     Komponenten sind zusätzliche Dienste auf einem Server, die Clients
     zur Verfügung stehen. Sie sind normalerweise auf einer Subdomain
     des Hauptservers verfügbar (wie zum Beispiel
     ‘"mycomponent.example.com"’). Beispiele für Komponenten könnten
     Server für Chaträume, Benutzerverzeichnisse oder Zugänge
     („Gateways“) zu anderen Protokollen sein.

     Interne Komponenten werden über Prosody-spezifische Plugins
     implementiert. Um eine interne Komponente hinzuzufügen, tragen Sie
     einfach das ‘hostname’-Feld für den Rechnernamen und die Plugins
     ein, die Sie für die Komponente benutzen möchten.

     Siehe <https://prosody.im/doc/components>. Die Vorgabe ist ‘()’.

     Verfügbare ‘int-component-configuration’-Felder sind:

     Alle folgenden Felder, wie sie auch die ‘prosody-configuration’
     hat: ‘admins’, ‘use-libevent?’, ‘modules-enabled’,
     ‘modules-disabled’, ‘groups-file’, ‘allow-registration?’, ‘ssl’,
     ‘c2s-require-encryption?’, ‘disable-sasl-mechanisms’,
     ‘s2s-require-encryption?’, ‘s2s-secure-auth?’,
     ‘s2s-insecure-domains’, ‘s2s-secure-domains’, ‘authentication’,
     ‘log’, ‘http-max-content-size’, ‘http-external-url’, ‘raw-content’,
     und außerdem:
      -- ‘int-component-configuration’-Parameter: Zeichenkette hostname
          Der Rechnername für diese Komponente.

      -- ‘int-component-configuration’-Parameter: Zeichenkette plugin
          Das Plugin, das Sie für diese Komponente benutzen möchten.

      -- ‘int-component-configuration’-Parameter:
               Vielleicht-„mod-muc-configuration“ mod-muc
          Multi-User Chat (MUC) ist der Name von Prosodys Modul, womit
          Sie Chaträume/Konferenzen für XMPP-Benutzer anbieten lassen
          können.

          Allgemeine Informationen über das Einrichten und Benutzen von
          Multi-User-Chaträumen können Sie in der Dokumentation über
          Chaträume finden (<https://prosody.im/doc/chatrooms>), die Sie
          lesen sollten, wenn Ihnen XMPP-Chaträume neu sind.

          Siehe auch <https://prosody.im/doc/modules/mod_muc>.

          Verfügbare ‘mod-muc-configuration’-Felder sind:

           -- ‘mod-muc-configuration’-Parameter: Zeichenkette name
               Der Name, der in Antworten auf die Diensteermittlung
               benutzt. Die Vorgabe ist ‘"Prosody Chatrooms"’.

           -- ‘mod-muc-configuration’-Parameter:
                    Zeichenkette-oder-Boolescher-Ausdruck
                    restrict-room-creation
               Für ‘#t’ können nur Administratoren neue Chaträume
               anlegen. Andernfalls kann jeder einen Raum anlegen. Der
               Wert ‘"local"’ schränkt das Anlegen neuer Räume auf
               solche Nutzer ein, die zur Eltern-Domain des Dienstes
               gehören. Z.B. kann ‘user@example.com’ Räume auf
               ‘rooms.example.com’ anlegen. Für den Wert ‘"admin"’
               können nur Dienstadministratoren Chaträume anlegen. Die
               Vorgabe ist ‘#f’.

           -- ‘mod-muc-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl max-history-messages
               Die Maximalzahl der Nachrichten aus dem Chat-Verlauf, die
               an ein Mitglied nachversandt werden, das gerade erst dem
               Raum beigetreten ist. Die Vorgabe ist ‘20’.

 -- ‘prosody-configuration’-Parameter:
          „ext-component-configuration“-Liste ext-components
     Externe Komponenten benutzen XEP-0114, das von den meisten
     eigenständigen Komponenten unterstützt wird. Um eine externe
     Komponente hinzuzufügen, tragen Sie einfach den Rechnernamen ins
     ‘hostname’-Feld ein. Siehe <https://prosody.im/doc/components>. Die
     Vorgabe ist ‘()’.

     Verfügbare ‘ext-component-configuration’-Felder sind:

     Alle folgenden Felder, wie sie auch die ‘prosody-configuration’
     hat: ‘admins’, ‘use-libevent?’, ‘modules-enabled’,
     ‘modules-disabled’, ‘groups-file’, ‘allow-registration?’, ‘ssl’,
     ‘c2s-require-encryption?’, ‘disable-sasl-mechanisms’,
     ‘s2s-require-encryption?’, ‘s2s-secure-auth?’,
     ‘s2s-insecure-domains’, ‘s2s-secure-domains’, ‘authentication’,
     ‘log’, ‘http-max-content-size’, ‘http-external-url’, ‘raw-content’,
     und außerdem:
      -- ‘ext-component-configuration’-Parameter: Zeichenkette
               component-secret
          Das Passwort, das die Komponente für die Anmeldung benutzt.

      -- ‘ext-component-configuration’-Parameter: Zeichenkette hostname
          Der Rechnername für diese Komponente.

 -- ‘prosody-configuration’-Parameter: Nichtnegative-ganze-Zahl-Liste
          component-ports
     Der/Die Port(s), wo Prosody auf Verbindungen zu Komponenten
     lauscht. Die Vorgabe ist ‘(5347)’.

 -- ‘prosody-configuration’-Parameter: Zeichenkette component-interface
     Die Schnittstelle, auf der Prosody auf Verbindungen zu Komponenten
     lauscht. Die Vorgabe ist ‘"127.0.0.1"’.

 -- ‘prosody-configuration’-Parameter: Vielleicht-Roher-Inhalt
          raw-content
     „Roher Inhalt“, der so, wie er ist, an die Konfigurationsdatei
     angefügt wird.

   Möglicherweise möchten Sie einfach nur eine bestehende
‘prosody.cfg.lua’ zum Laufen bringen. In diesem Fall können Sie ein
‘opaque-prosody-configuration’-Verbundsobjekt als der Wert des
‘prosody-service-type’ übergeben. Wie der Name schon sagt, bietet eine
opake Konfiguration keinerlei Unterstützung für Reflexion. Verfügbare
‘opaque-prosody-configuration’-Felder sind:

 -- ‘opaque-prosody-configuration’-Parameter: „package“ prosody
     Das Prosody-Paket.

 -- ‘opaque-prosody-configuration’-Parameter: Zeichenkette
          prosody.cfg.lua
     Der Inhalt, der als ‘prosody.cfg.lua’ benutzt werden soll.

   Wenn Ihre ‘prosody.cfg.lua’ zum Beispiel nur aus der leeren
Zeichenkette bestünde, könnten Sie einen Prosody-Dienst wie folgt
instanziieren:

     (service prosody-service-type
              (opaque-prosody-configuration
               (prosody.cfg.lua "")))

BitlBee-Dienst
..............

BitlBee (https://bitlbee.org) ist ein Zugang („Gateway“), der eine
IRC-Schnittstelle für verschiedene Kurznachrichtenprotokolle wie XMPP
verfügbar macht.

 -- Scheme-Variable: bitlbee-service-type
     Dies ist der Diensttyp für den BitlBee-IRC-Zugangsdaemon
     (https://bitlbee.org) (englisch „IRC Gateway Daemon“). Sein Wert
     ist eine ‘bitlbee-configuration’ (siehe unten).

     Damit BitlBee auf Port 6667 vom lokalen Rechner („localhost“)
     lauscht, fügen Sie diese Zeile zu Ihrem „services“-Feld hinzu:

          (service bitlbee-service-type)

 -- Datentyp: bitlbee-configuration
     Dies ist die Konfiguration für BitlBee. Sie hat folgende Felder:

     ‘interface’ (Vorgabe: ‘"127.0.0.1"’)
     ‘port’ (Vorgabe: ‘6667’)
          Lauscht auf der Netzwerkschnittstelle, die der als INTERFACE
          angegebenen IP-Adresse entspricht, auf dem angegebenen PORT.

          Wenn als INTERFACE ‘127.0.0.1’ angegeben wurde, können sich
          nur lokale Clients verbinden; bei ‘0.0.0.0’ können die
          Verbindungen von jeder Netzwerkschnittstelle aus hergestellt
          werden.

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

     ‘plugins’ (Vorgabe: ‘'()’)
          Die Liste zu verwendender Plugin-Pakete – z.B.
          ‘bitlbee-discord’.

     ‘extra-settings’ (Vorgabe: ‘""’)
          Ein Konfigurationsschnipsel, das wortwörtlich in die
          BitlBee-Konfigurationsdatei eingefügt wird.

Quassel-Dienst
..............

Quassel (https://quassel-irc.org/) ist ein verteilter IRC-Client, was
bedeutet, dass sich ein oder mehr Clients mit dem zentralen Kern
verbinden und die Verbindung wieder trennen können.

 -- Scheme-Variable: quassel-service-type
     Dies ist der Diensttyp für den Daemon zum IRC-Hintergrundsystem
     („Backend“) Quassel (https://quassel-irc.org/). Sein Wert ist eine
     ‘quassel-configuration’ (siehe unten).

 -- Datentyp: quassel-configuration
     Die Konfiguration für Quassel mit den folgenden Feldern:

     ‘quassel’ (Vorgabe: ‘quassel’)
          Das zu verwendende Quassel-Paket.

     ‘interface’ (Vorgabe: ‘"::,0.0.0.0"’)
     ‘port’ (Vorgabe: ‘4242’)
          Lauscht auf der/den Netzwerkschnittstelle(n), die den in der
          kommagetrennten INTERFACE-Liste festgelegten IPv4- oder
          IPv6-Schnittstellen entsprechen, auf dem angegebenen PORT.

     ‘loglevel’ (Vorgabe: ‘"Info"’)
          Die gewünschte Detailstufe der Protokollierung. Akzeptiert
          werden die Werte Debug (ausführlich zur Fehlersuche), Info,
          Warning (nur Warnungen und Fehler) und Error (nur Fehler).


File: guix.de.info,  Node: Telefondienste,  Next: Dateientauschdienste,  Prev: Kurznachrichtendienste,  Up: Dienste

12.9.14 Telefondienste
----------------------

Das Modul ‘(gnu services telephony)’ stellt Guix-Dienstdefinitionen für
Telefoniedienste zur Verfügung. Zurzeit werden folgende Dienste
unterstützt:

Jami
....

In diesem Abschnitt wird beschrieben, wie Sie einen Server für Jami
einrichten, mit dem Video- oder Audiokonferenzen bereitgestellt werden
können, neben anderen Nutzungsmöglichkeiten. Das folgende Beispiel
zeigt, wie Jami-Kontenarchive (Sicherungskopien) automatisch
eingerichtet werden:

     (service jami-service-type
              (jami-configuration
               (accounts
                (list (jami-account
                       (archive "/etc/jami/unverschlüsseltes-konto-1.gz"))
                      (jami-account
                       (archive "/etc/jami/unverschlüsseltes-konto-2.gz"))))))

   Wenn etwas für das ‘accounts’-Feld angegeben wird, werden die
Jami-Kontendateien des Dienstes unter ‘/var/lib/jami’ bei jedem Neustart
des Dienstes neu erzeugt.

   Jami-Konten und die zugehörigen Archive mit Sicherungskopien können
mit dem Jami-Client ‘jami’ oder auch mit dem Client ‘jami-gnome’
angelegt werden. Die Konten sollten _nicht_ mit einem Passwort geschützt
werden, aber es ist ratsam, sie nur für den Administratornutzer ‘root’
lesbar zu machen.

   Im nächsten Beispiel sehen Sie, wie deklariert wird, dass nur manche
Kontakte mit einem bestimmten Konto kommunizieren dürfen:

     (service jami-service-type
              (jami-configuration
               (accounts
                (list (jami-account
                       (archive "/etc/jami/unverschlüsseltes-konto-1.gz")
                       (peer-discovery? #t)
                       (rendezvous-point? #t)
                       (allowed-contacts
                        '("1dbcb0f5f37324228235564b79f2b9737e9a008f"
                          "2dbcb0f5f37324228235564b79f2b9737e9a008f")))))))

   In diesem Modus können nur die als ‘allowed-contacts’ deklarierten
Kontakte eine Kommunikation mit diesem Jami-Konto einleiten. So etwas
kann zum Beispiel benutzt werden, um Konten als „Treffpunkt“ zur
Erstellung von privaten Videokonferenzräumen einzurichten.

   Um dem Systemadministrator die volle Kontrolle über von deren System
angebotene Konferenzen zu geben, unterstützt der Jami-Dienst die
folgenden Aktionen:

     # herd doc jami list-actions
     (list-accounts
      list-account-details
      list-banned-contacts
      list-contacts
      list-moderators
      add-moderator
      ban-contact
      enable-account
      disable-account)

   Das Ziel ist, mit den obigen Aktionen die für die Moderation
wertvollsten Aktionen zur Verfügung zu stellen; wir versuchen _nicht_,
die gesamte Programmierschnittstelle von Jami abzudecken. Benutzer, die
aus Guile heraus mit dem Jami-Daemon interagieren möchten, interessieren
sich vielleicht für das Modul ‘(gnu build jami-service)’, womit die
obigen Shepherd-Aktionen implementiert wurden.

   Die Aktionen ‘add-moderator’ und ‘ban-contact’ nehmen den
_Fingerabdruck_ (einen 40-zeichigen Hash) als erstes Argument und einen
Konto-Fingerabdruck oder Benutzernamen als zweites Argument an.

     # herd add-moderator jami 1dbcb0f5f37324228235564b79f2b9737e9a008f \
       f3345f2775ddfe07a4b0d95daea111d15fbc1199

     # herd list-moderators jami
     Moderators for account f3345f2775ddfe07a4b0d95daea111d15fbc1199:
       - 1dbcb0f5f37324228235564b79f2b9737e9a008f


   Im Fall von ‘ban-contact’ ist das zweite Benutzernamen-Argument
optional; wenn Sie es weglassen, wird das Konto gegenüber allen
Jami-Konten gesperrt.

     # herd ban-contact jami 1dbcb0f5f37324228235564b79f2b9737e9a008f

     # herd list-banned-contacts jami
     Banned contacts for account f3345f2775ddfe07a4b0d95daea111d15fbc1199:
       - 1dbcb0f5f37324228235564b79f2b9737e9a008f


   Gesperrten Kontakten werden auch ihre Moderatorrechte entzogen.

   Die Aktion ‘disable-account’ ermöglicht es, ein Konto gänzlich vom
Netzwerk abzutrennen, also unerreichbar zu machen. Dagegen bewirkt
‘enable-account’ das Gegenteil. Sie nehmen einen einzelnen
Kontobenutzernamen oder -fingerabdruck als erstes Argument:

     # herd disable-account jami f3345f2775ddfe07a4b0d95daea111d15fbc1199

     # herd list-accounts jami
     The following Jami accounts are available:
       - f3345f2775ddfe07a4b0d95daea111d15fbc1199 (dummy) [disabled]


   Die Aktion ‘list-account-details’ zeigt die Parameter jedes Kontos
ausführlich im Recutils-Format an, d.h. der Befehl ‘recsel’ kann benutzt
werden, um die relevanten Konten auszuwählen (siehe *note
(recutils)Selection Expressions::). Beachten Sie, dass anstelle der
Punkt-Zeichen (‘.’) in den Schlüsseln der Kontoparameter Unterstriche
(‘_’) angezeigt werden, um den Anforderungen des Recutils-Formats zu
genügen. Folgendes Beispiel zeigt, wie man den Fingerabdruck jedes im
Treffpunktmodus befindlichen Kontos angezeigt bekommt:

     # herd list-account-details jami | \
       recsel -p Account.username -e 'Account.rendezVous ~ "true"'
     Account_username: f3345f2775ddfe07a4b0d95daea111d15fbc1199

   Die anderen Aktionen sollten selbsterklärend sein.

   Nun folgt eine vollständige Übersicht über die verfügbaren
Konfigurationsoptionen.

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

     ‘libjami’ (Vorgabe: ‘libjami’) (Typ: „package“)
          Das Jami-Daemon-Paket, was benutzt werden soll.

     ‘dbus’ (Vorgabe: ‘dbus-for-jami’) (Typ: „package“)
          Das D-Bus-Paket, mit dem die benötigte D-Bus-Sitzung gestartet
          wird.

     ‘nss-certs’ (Vorgabe: ‘nss-certs’) (Typ: „package“)
          Das nss-certs-Paket, was die TLS-Zertifikate bereitstellt.

     ‘enable-logging?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Ob Protokollierung in Syslog aktiviert sein soll.

     ‘debug?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Meldungen der Fehlersuch-Ausführlichkeitsstufe aktiviert
          sein sollen.

     ‘auto-answer?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Anrufe erzwungen automatisch entgegengenommen werden
          sollen.

     ‘accounts’ (Typ: Vielleicht-„jami-account“-Liste)
          Eine Liste der Jami-Konten, die jedes Mal (neu) eingerichtet
          werden, wenn der Jami-Daemon-Dienst startet. Wenn Sie dieses
          Feld angeben, werden die Kontoverzeichnisse unter
          ‘/var/lib/jami/’ bei jedem Start des Dienstes aufs Neue
          erzeugt, was einen konsistenten Zustand gewährleistet.

 -- Datentyp: jami-account
     Verfügbare ‘jami-account’-Felder sind:

     ‘archive’ (Typ: Zeichenkette-oder-„computed-file“)
          Der Dateiname des Kontenarchivs mit den Sicherungskopien des
          Kontos. Damit werden die Konten neu eingerichtet, sobald der
          Dienst startet. Das Kontenarchiv muss _unverschlüsselt_ sein.
          Es wird dringend empfohlen, diese Dateien nur für den
          Administratornutzer ‘root’ lesbar zu machen (sie also _nicht_
          im Store zu speichern), damit die darin enthaltenen geheimen
          Schlüssel des Jami-Kontos nicht bekannt werden.

     ‘allowed-contacts’ (Typ: Vielleicht-Kontofingerabdruck-Liste)
          Die Liste der erlaubten Kontakte des Kontos in Form deren
          40 Zeichen langen Fingerabdrucks. Nachrichten und eingehende
          Anrufe von Konten, die in der Liste fehlen, werden abgewiesen.
          Wenn keine Liste angegeben wird, wird die gesamte
          Konfiguration des Kontenarchivs als Kontakte und für
          öffentliche eingehende Anrufe und Nachrichten zugelassen, was
          normalerweise bedeutet, dass jeder Kontakt mit dem Konto
          kommunizieren kann.

     ‘moderators’ (Typ: Vielleicht-Kontofingerabdruck-Liste)
          Die Liste der Kontakte, die Moderationsrecht (andere Nutzer
          sperren, stummschalten usw.) in Treffpunkt-Konferenzen
          („Rendezvous“) haben. Kontakte werden in Form ihres 40 Zeichen
          langen Fingerabdrucks angegeben. Wird nichts festgelegt,
          werden Moderationsrechte an die gesamte Konfiguration des
          Kontenarchivs übertragen, was normalerweise bedeutet, dass
          jeder die Moderatorrolle einnehmen kann.

     ‘rendezvous-point?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob das Konto im Treffpunktmodus (Rendezvous-Modus) arbeiten
          soll. In diesem Modus werden alle eingehenden
          Audio-/Videoanrufe in eine Konferenz gemischt. Wenn nichts
          angegeben wird, gilt der Wert im Kontenarchiv.

     ‘peer-discovery?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Ob sich der Jami-Daemon am Multicast-Mechanismus zum Finden
          lokaler Netzwerkteilnehmer beteiligen soll. Damit werden
          andere OpenDHT-Knoten im lokalen Netzwerk erkannt, wodurch die
          Kommunikation zwischen Geräten in einem solchen Netzwerk
          aufrechterhalten werden kann, selbst wenn die
          Internetverbindung verloren geht. Wenn nichts angegeben wird,
          gilt der Wert im Kontenarchiv.

     ‘bootstrap-hostnames’ (Typ: Vielleicht-Zeichenketten-Liste)
          Eine Liste von Rechnernamen oder IP-Adressen, die auf
          OpenDHT-Knoten verweisen, über die beim Start eine Verbindung
          zum OpenDHT-Netzwerk aufgebaut wird. Wenn nichts angegeben
          wird, gilt der Wert im Kontenarchiv.

     ‘name-server-uri’ (Typ: Vielleicht-Zeichenkette)
          Die URI des zu nutzenden Namens-Servers, mit dem der
          Konto-Fingerabdruck eines registrierten Nutzers erfragt werden
          kann.

Mumble-Server
.............

Dieser Abschnitt beschreibt, wie Sie einen Server für Mumble
(https://mumble.info) einrichten und ausführen. (Die Server-Komponente
war ehemals bekannt unter dem Namen Murmur.)

 -- Datentyp: mumble-server-configuration
     Der Diensttyp für den Mumble-Server. Eine Beispielkonfiguration
     kann so aussehen:

          (service mumble-server-service-type
                   (mumble-server-configuration
                    (welcome-text
                      "Willkommen zu diesem mit Guix betriebenen Mumble-Server!")
                    (cert-required? #t) ;Anmeldungen mit Textpasswort deaktivieren
                    (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
                    (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))

     Nachdem Sie Ihr System rekonfiguriert haben, können Sie das
     Passwort des Administratornutzers ‘SuperUser’ auf dem Mumble-Server
     mit Hilfe des Befehls von Hand festlegen, der Ihnen in der
     Aktivierungsphase des Mumble-Servers angezeigt wird.

     Es wird empfohlen, ein normales Mumble-Benutzerkonto zu
     registrieren und mit Administrator- oder Moderatorrechten
     auszustatten. Sie können auch das Clientprogramm ‘mumble’ benutzen,
     um sich als neuer normaler Benutzer anzumelden und zu registrieren,
     und sich dann abmelden. Im nächsten Schritt melden Sie sich mit dem
     Benutzernamen ‘SuperUser’ mit dem vorher festgelegten
     ‘SuperUser’-Passwort an und statten Ihren registrierten
     Mumble-Benutzer mit Administrator- oder Moderatorrechten aus oder
     erzeugen ein paar Kanäle.

     Verfügbare ‘mumble-server-configuration’-Felder sind:

     ‘package’ (Vorgabe: ‘mumble’)
          Das Paket, das ‘bin/mumble-server’ enthält.

     ‘user’ (Vorgabe: ‘"mumble-server"’)
          Der Benutzer, der den Mumble-Server ausführt.

     ‘group’ (Vorgabe: ‘"mumble-server"’)
          Die Gruppe des Benutzers, der den Mumble-Server ausführt.

     ‘port’ (Vorgabe: ‘64738’)
          Der Port, auf dem der Server lauschen wird.

     ‘welcome-text’ (Vorgabe: ‘""’)
          Der Willkommenstext, der an Clients geschickt wird, sobald sie
          eine Verbindung aufgebaut haben.

     ‘server-password’ (Vorgabe: ‘""’)
          Das Passwort, das Clients eingeben müssen, um sich verbinden
          zu können.

     ‘max-users’ (Vorgabe: ‘100’)
          Die Maximalzahl von Nutzern, die gleichzeitig mit dem Server
          verbunden sein können.

     ‘max-user-bandwidth’ (Vorgabe: ‘#f’)
          Wie viele Stimmdaten ein Benutzer pro Sekunde versenden kann.

     ‘database-file’ (Vorgabe: ‘"/var/lib/mumble-server/db.sqlite"’)
          Der Dateiname der SQLite-Datenbank. Das Benutzerkonto für den
          Dienst wird Besitzer des Verzeichnisses.

     ‘log-file’ (Vorgabe: ‘"/var/log/mumble-server/mumble-server.log"’)
          Der Dateiname der Protokolldatei. Das Benutzerkonto für den
          Dienst wird Besitzer des Verzeichnisses.

     ‘autoban-attempts’ (Vorgabe: ‘10’)
          Wie oft sich ein Benutzer innerhalb des in ‘autoban-timeframe’
          angegebenen Zeitrahmens verbinden kann, ohne automatisch für
          die in ‘autoban-time’ angegebene Zeit vom Server verbannt zu
          werden.

     ‘autoban-timeframe’ (Vorgabe: ‘120’)
          Der Zeitrahmen für automatisches Bannen in Sekunden.

     ‘autoban-time’ (Vorgabe: ‘300’)
          Wie lange in Sekunden ein Client gebannt wird, wenn er die
          Autobann-Beschränkungen überschreitet.

     ‘opus-threshold’ (Vorgabe: ‘100’)
          Der Prozentanteil der Clients, die Opus unterstützen müssen,
          bevor der Opus-Audiocodec verwendet wird.

     ‘channel-nesting-limit’ (Vorgabe: ‘10’)
          Wie tief Kanäle höchstens ineinander verschachtelt sein
          können.

     ‘channelname-regex’ (Vorgabe: ‘#f’)
          Eine Zeichenkette in Form eines regulären Ausdrucks von Qt, zu
          dem Kanalnamen passen müssen.

     ‘username-regex’ (Vorgabe: ‘#f’)
          Eine Zeichenkette in Form eines regulären Ausdrucks von Qt, zu
          dem Nutzernamen passen müssen.

     ‘text-message-length’ (Vorgabe: ‘5000’)
          Wie viele Bytes ein Benutzer höchstens in einer
          Textchatnachricht verschicken kann.

     ‘image-message-length’ (Vorgabe: ‘(* 128 1024)’)
          Wie viele Bytes ein Benutzer höchstens in einer Bildnachricht
          verschicken kann.

     ‘cert-required?’ (Vorgabe: ‘#f’)
          Falls dies auf ‘#t’ gesetzt ist, werden Clients abgelehnt, die
          sich bloß mit Passwörtern authentisieren. Benutzer müssen den
          Zertifikatsassistenten abgeschlossen haben, bevor sie sich
          verbinden können.

     ‘remember-channel?’ (Vorgabe: ‘#f’)
          Ob sich ‘mumble-server’ für jeden Nutzer den Kanal merken
          soll, auf dem er sich zuletzt befunden hat, als er die
          Verbindung getrennt hat, so dass er wieder auf dem gemerkten
          Kanal landet, wenn er dem Server wieder beitritt.

     ‘allow-html?’ (Vorgabe: ‘#f’)
          Ob HTML in Textnachrichten, Nutzerkommentaren und
          Kanalbeschreibungen zugelassen wird.

     ‘allow-ping?’ (Vorgabe: ‘#f’)
          Wenn es auf wahr gesetzt ist, wird an nicht angemeldete
          Anwender die momentane Benutzerzahl, die maximale Benutzerzahl
          und die maximale Bandbreite pro Benutzer übermittelt. Im
          Mumble-Client werden diese Informationen im Verbinden-Dialog
          angezeigt.

          Wenn diese Einstellung deaktiviert ist, wird der Server nicht
          in der öffentlichen Serverliste aufgeführt.

     ‘bonjour?’ (Vorgabe: ‘#f’)
          Ob der Server im lokalen Netzwerk anderen über das
          Bonjour-Protokoll mitgeteilt werden soll.

     ‘send-version?’ (Vorgabe: ‘#f’)
          Ob die ‘mumble-server’-Serverversion Clients gegenüber in
          Ping-Anfragen mitgeteilt werden soll.

     ‘log-days’ (Vorgabe: ‘31’)
          Mumble führt in der Datenbank Protokolle, auf die über
          entfernte Prozeduraufrufe („Remote Procedure Calls“, kurz RPC)
          zugegriffen werden kann. Nach Vorgabe bleiben diese 31 Tage
          lang erhalten, aber sie können diese Einstellung auf 0 setzen,
          damit sie ewig gespeichert werden, oder auf -1, um _keine_
          Protokolle in die Datenbank zu schreiben.

     ‘obfuscate-ips?’ (Vorgabe: ‘#t’)
          Ob IP-Adressen in Protokollen anonymisiert werden sollen, um
          die Privatsphäre von Nutzern zu schützen.

     ‘ssl-cert’ (Vorgabe: ‘#f’)
          Der Dateiname des SSL-/TLS-Zertifikats, das für verschlüsselte
          Verbindungen benutzt werden soll.

               (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
     ‘ssl-key’ (Vorgabe: ‘#f’)
          Dateipfad zum privaten Schlüssel für SSL, was für
          verschlüsselte Verbindungen benutzt wird.
               (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")

     ‘ssl-dh-params’ (Vorgabe: ‘#f’)
          Dateiname einer PEM-kodierten Datei mit
          Diffie-Hellman-Parametern für die SSL-/TLS-Verschlüsselung.
          Alternativ setzen Sie ihn auf ‘"@ffdhe2048"’, ‘"@ffdhe3072"’,
          ‘"@ffdhe4096"’, ‘"@ffdhe6144"’ oder ‘"@ffdhe8192"’, wodurch
          die mitgelieferten Parameter aus RFC 7919 genutzt werden.

     ‘ssl-ciphers’ (Vorgabe: ‘#f’)
          Die Option ‘ssl-ciphers’ wählt aus, welche Cipher-Suites zur
          Verwendung in SSL/TLS verfügbar sein sollen.

          Diese Option wird in der OpenSSL-Notation für Cipher-Listen
          (https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT)
          angegeben.

          Es wird empfohlen, dass Sie Ihre Cipher-Zeichenkette mit
          „openssl ciphers <Zeichenkette>“ prüfen, bevor Sie sie hier
          einsetzen, um ein Gefühl dafür zu bekommen, was für eine
          Cipher-Suite sie damit bekommen. Nachdem Sie diese Option
          festgelegt haben, wird empfohlen, dass Sie das Protokoll Ihres
          Mumble-Servers durchsehen und sicherstellen, dass Mumble auch
          wirklich die Cipher-Suites benutzt, die Sie erwarten.

               Anmerkung: Änderungen hieran können die
               Rückwärtskompatibilität Ihres Mumble-Servers
               beeinträchtigen; dadurch kann es für ältere
               Mumblie-Clients unmöglich werden, sich damit zu
               verbinden.

     ‘public-registration’ (Vorgabe: ‘#f’)
          Hier muss ein
          ‘<mumble-server-public-registration-configuration>’-Verbundsobjekt
          oder ‘#f’ angegeben werden.

          Sie können Ihren Server optional in die öffentliche
          Serverliste eintragen lassen, die der Mumble-Client ‘mumble’
          beim Start anzeigt. Sie können Ihren Server nicht
          registrieren, wenn Sie ein ‘server-password’ festgelegt oder
          ‘allow-ping’ auf ‘#f’ gesetzt haben.

          Es könnte ein paar Stunden dauern, bis er in der öffentlichen
          Liste zu finden ist.

     ‘file’ (Vorgabe: ‘#f’)
          Optional kann hier eine vorrangig benutzte alternative
          Konfiguration festgelegt werden.

 -- Datentyp: mumble-server-public-registration-configuration
     Konfiguration für das öffentliche Registrieren eines
     ‘mumble-server’-Dienstes.

     ‘name’
          Dies ist ein Anzeigename für Ihren Server. Er ist nicht zu
          verwechseln mit dem Rechnernamen („Hostname“).

     ‘password’
          Ein Passwort, um Ihre Registrierung zu identifizieren.
          Nachfolgende Aktualisierungen müssen dasselbe Passwort
          benutzen. Verlieren Sie Ihr Passwort nicht.

     ‘url’
          Dies sollte ein Link mit ‘http://’ oder ‘https://’ auf Ihren
          Webauftritt sein.

     ‘hostname’ (Vorgabe: ‘#f’)
          Nach Vorgabe wird Ihr Server über seine IP-Adresse aufgeführt.
          Wenn dies gesetzt ist, wird er stattdessen mit diesem
          Rechnernamen verknüpft.

     Hinweis: Folgendes wird demnächst verschwinden: Aus historischen
     Gründen werden alle oben genannten ‘mumble-server’-Prozeduren auch
     unter dem Namenspräfix ‘murmur-’ exportiert. Sie sollten für die
     Zukunft auf ‘mumble-server-’ umsteigen.


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

12.9.15 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.

 -- Scheme-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.

 -- Scheme-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.

 -- Scheme-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 zwangsweise abgewürgt 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

12.9.16 Systemüberwachungsdienste
---------------------------------

Tailon-Dienst
.............

Tailon (https://tailon.readthedocs.io/) ist eine Web-Anwendung, um
Protokolldateien zu betrachten und zu durchsuchen.

   Das folgende Beispiel zeigt, wie Sie den Dienst mit den Vorgabewerten
konfigurieren. Nach Vorgabe kann auf Tailon auf Port 8080 zugegriffen
werden (‘http://localhost:8080’).

     (service tailon-service-type)

   Im folgenden Beispiel werden mehr Anpassungen an der
Tailon-Konfiguration vorgenommen: ‘sed’ gehört dort auch zur Liste der
erlaubten Befehle dazu.

     (service tailon-service-type
              (tailon-configuration
                (config-file
                  (tailon-configuration-file
                    (allowed-commands '("tail" "grep" "awk" "sed"))))))

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

     ‘config-file’ (Vorgabe: ‘(tailon-configuration-file)’)
          Die Konfigurationsdatei, die für Tailon benutzt werden soll.
          Als Wert kann ein “tailon-configuration-file”-Verbundsobjekt
          oder ein beliebiger G-Ausdruck dienen (siehe *note
          G-Ausdrücke::).

          Um zum Beispiel stattdessen eine lokale Datei zu benutzen,
          kann von der Funktion ‘local-file’ Gebrauch gemacht werden.

               (service tailon-service-type
                        (tailon-configuration
                          (config-file (local-file "./my-tailon.conf"))))

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

 -- Datentyp: tailon-configuration-file
     Datentyp, der die Konfigurationsoptionen für Tailon repräsentiert.
     Dieser Typ verfügt über die folgenden Parameter:

     ‘files’ (Vorgabe: ‘(list "/var/log")’)
          Die Liste der anzuzeigenden Dateien. In der Liste dürfen
          Zeichenketten stehen, die jeweils für eine einzelne Datei oder
          ein Verzeichnis stehen, oder auch Listen, deren erstes Element
          den Namen eines Unterbereichs angibt und deren übrige Elemente
          die Dateien oder Verzeichnisse in diesem Unterbereich
          benennen.

     ‘bind’ (Vorgabe: ‘"localhost:8080"’)
          Adresse und Port, an die sich Tailon binden soll.

     ‘relative-root’ (Vorgabe: ‘#f’)
          Welcher URL-Pfad für Tailon benutzt werden soll. Wenn Sie
          hierfür ‘#f’ angeben, wird kein Pfad benutzt.

     ‘allow-transfers?’ (Vorgabe: ‘#t’)
          Ob es möglich sein soll, die Protokolldateien über die
          Weboberfläche herunterzuladen.

     ‘follow-names?’ (Vorgabe: ‘#t’)
          Ob noch nicht existierende Dateien „getailt“ werden können.

     ‘tail-lines’ (Vorgabe: ‘200’)
          Wie viele Zeilen am Anfang aus jeder Datei gelesen werden.

     ‘allowed-commands’ (Vorgabe: ‘(list "tail" "grep" "awk")’)
          Welche Befehle ausgeführt werden dürfen. Nach Vorgabe wird
          ‘sed’ _nicht_ erlaubt.

     ‘debug?’ (Vorgabe: ‘#f’)
          Legen Sie ‘debug?’ als ‘#t’ fest, um Nachrichten zur
          Fehlersuche anzuzeigen.

     ‘wrap-lines’ (Vorgabe: ‘#t’)
          Ob lange Zeilen nach der Anfangseinstellung in der
          Weboberfläche umgebrochen werden sollen. Setzen Sie es auf
          ‘#t’, werden Zeilen in der Anfangseinstellung umgebrochen (die
          Vorgabe), bei ‘#f’ werden sie anfänglich nicht umgebrochen.

     ‘http-auth’ (Vorgabe: ‘#f’)
          Welcher HTTP-Authentifizierungstyp benutzt werden soll. Setzen
          Sie dies auf ‘#f’, damit sich Benutzer nicht authentisieren
          müssen (die Vorgabe). Unterstützte Werte sind ‘"digest"’ oder
          ‘"basic"’.

     ‘users’ (Vorgabe: ‘#f’)
          Wenn HTTP-Authentifizierung aktiviert ist (siehe ‘http-auth’),
          wird der Zugriff nur gewährt, nachdem die hier angegebenen
          Zugangsinformationen eingegeben wurden. Um Nutzer
          hinzuzufügen, geben Sie hier eine Liste von Paaren an, deren
          erstes Element jeweils der Benutzername und deren zweites
          Element das Passwort ist.

               (tailon-configuration-file
                 (http-auth "basic")
                 (users     '(("benutzer1" . "passwort1")
                              ("benutzer2" . "passwort2"))))

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

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

 -- Variable: Scheme-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: Scheme-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.

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: Scheme-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: Gruppe)
          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: Scheme-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: Gruppe)
          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: Scheme-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

12.9.17 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.

 -- Scheme-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.

 -- Scheme-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

12.9.18 LDAP-Dienste
--------------------

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 ‘()’.


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

12.9.19 Web-Dienste
-------------------

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

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

 -- Scheme-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")’.

 -- Scheme-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
.....

 -- Scheme-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.

     ‘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.

     ‘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 des ‘http’-Blocks. Er sollte eine
          Zeichenkette oder ein zeichenkettenwertiger G-Ausdruck.

 -- 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 Zeilen, die unverändert in den Serverblock
          eingefügt werden.

 -- 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’
          Eine Liste von Zeilen, die in den ‘upstream’-Block eingefügt
          werden.

 -- 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 angegeben werden muss. Er kann viele
          Konfigurationsdirektiven enthalten, 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.

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.

 -- Scheme-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.

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.

 -- Scheme-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://git.elephly.net/gitweb.cgi?p=software/mumi.git) 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.

 -- Scheme-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.

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

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

     ‘mumi-configuration-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.

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.

 -- Scheme-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.

 -- Scheme-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
          abgewürgt wird.

 -- Scheme-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.

 -- Scheme-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).

 -- Scheme-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’
          Ein G-Ausdruck (siehe *note G-Ausdrücke::), der die
          Konfiguration des hpcguix-web-Dienstes festlegt. In dieser
          Spezifikation („Spec“) sollten vor allem diese Sachen
          angegeben werden:

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

          ‘guix-command’ (Vorgabe: ‘"guix"’)
               Der ‘guix’-Befehl.

          ‘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
                #~(define site-config
                    (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.

     Stellen Sie also sicher, dass ‘nss-certs’ oder ein anderes
     Zertifikatspaket im ‘packages’-Feld ihrer Konfiguration steht.
     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/).

 -- Scheme-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.

 -- Scheme-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")
                     (cert "/srv/cert.pem")
                     (key "/srv/key.rsa")))

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

     Um ein Zertifikat und einen Schlüssel zu bekommen, können Sie zum
     Beispiel OpenSSL benutzen. Das ginge mit einem Befehl ähnlich zu
     diesem Beispiel hier:

          openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem \
              -days 3650 -nodes -subj "/CN=beispiel.com"

     Natürlich müssen Sie statt beispiel.com Ihren eigenen Domainnamen
     angeben und dann die Konfiguration von Agate auf den Pfad des damit
     erzeugten Schlüssels und Zertifikats verweisen lassen.

 -- 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.

     ‘cert’ (Vorgabe: ‘#f’)
          Der Pfad zur PEM-Datei mit dem TLS-Zertifikat, das
          verschlüsselte Verbindungen ermöglicht. Hier muss ein Wert
          angegeben werden.

     ‘key’ (Vorgabe: ‘#f’)
          Dateipfad zur Datei mit dem privaten PKCS8-Schlüssel, der für
          verschlüsselte Verbindungen benutzt wird. Hier muss ein Wert
          angegeben werden.

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

     ‘hostname’ (Vorgabe: ‘#f’)
          Der Domainname dieses Gemini-Servers. Optional.

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

     ‘silent?’ (Vorgabe: ‘#f’)
          Setzen Sie dies auf ‘#t’, um Protokollausgaben auszuschalten.

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

     ‘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.


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

12.9.20 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-v01.api.letsencrypt.org/directory>.

 -- Scheme-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:

          (define %nginx-deploy-hook
            (program-file
             "nginx-deploy-hook"
             #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
                 (kill pid SIGHUP))))

          (service certbot-service-type
                   (certbot-configuration
                    (email "foo@example.net")
                    (certificates
                     (list
                      (certificate-configuration
                       (domains '("example.net" "www.example.net"))
                       (deploy-hook %nginx-deploy-hook))
                      (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’)
          Welcher Befehl in einer Shell für jede Zertifikat-„Challenge“
          einmalig ausgeführt wird, die vom ‘auth-hook’ beantwortet
          wurde. Für diesen Befehl bleiben die Shell-Variablen weiterhin
          verfügbar, die im ‘auth-hook’-Skript zur Verfügung standen,
          und außerdem wird ‘$CERTBOT_AUTH_OUTPUT’ die Standardausgabe
          des ‘auth-hook’-Skripts enthalten.

     ‘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"’.

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


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

12.9.21 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)))

 -- Scheme-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
....................

 -- Scheme-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.org/en/stable/daemon.html#configuration).

 -- 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
..............

 -- Scheme-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"))))

 -- Datentyp: dnsmasq-configuration
     Repräsentiert die dnsmasq-Konfiguration.

     ‘package’ (Vorgabe: DNSMASQ)
          Paketobjekt des dnsmasq-Servers.

     ‘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
          Namensserver gelesen werden sollen.

     ‘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.

     ‘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.

ddclient-Dienst
...............

Der im Folgenden beschriebene ddclient-Dienst führt den ddclient-Daemon
aus, der dafür sorgt, dass DNS-Einträge für Dienstanbieter wie Dyn
(https://dyn.com/dns/) automatisch aktualisiert werden.

   Das folgende Beispiel zeigt, wie man den Dienst mit seiner
Vorgabekonfiguration instanziiert:

     (service ddclient-service-type)

   Beachten Sie, dass der ddclient auf Zugangsdaten zugreifen muss, die
in einer “Geheimnisdatei” („Secret File“) stehen; nach Vorgabe wird sie
in ‘/etc/ddclient/secrets’ gesucht (siehe ‘secret-file’ unten). Es wird
erwartet, dass Sie diese Datei manuell erstellen, ohne Guix dafür zu
benutzen (theoretisch _könnten_ Sie die Datei zu einem Teil Ihrer
Dienstkonfiguration machen, indem Sie z.B. ‘plain-file’ benutzen, aber
dann könnte jeder über ‘/gnu/store’ ihren Inhalt einsehen). Siehe die
Beispiele im Verzeichnis ‘share/ddclient’ des ‘ddclient’-Pakets.

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

 -- ‘ddclient-configuration’-Parameter: „package“ ddclient
     Das ddclient-Paket.

 -- ‘ddclient-configuration’-Parameter: Ganze-Zahl daemon
     Nach wie viel Zeit ddclient erneut versuchen wird, IP und
     Domain-Namen zu überprüfen.

     Die Vorgabe ist ‘300’.

 -- ‘ddclient-configuration’-Parameter: Boolescher-Ausdruck syslog
     Ob die Ausgabe an Syslog gehen soll.

     Die Vorgabe ist ‘#t’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette mail
     An welchen Benutzer Mitteilungen gemailt werden sollen.

     Die Vorgabe ist ‘"root"’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette mail-failure
     Den Nutzer per Mail bei fehlgeschlagenen Aktualisierungen
     benachrichtigen.

     Die Vorgabe ist ‘"root"’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette pid
     PID-Datei für den ddclient.

     Die Vorgabe ist ‘"/var/run/ddclient/ddclient.pid"’.

 -- ‘ddclient-configuration’-Parameter: Boolescher-Ausdruck ssl
     SSL-Unterstützung aktivieren.

     Die Vorgabe ist ‘#t’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette user
     Gibt den Namen oder Identifikator des Benutzerkontos an, unter dem
     das ddclient-Programm laufen soll.

     Die Vorgabe ist ‘"ddclient"’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette group
     Die Gruppe des Benutzers, mit dem das ddclient-Programm läuft.

     Die Vorgabe ist ‘"ddclient"’.

 -- ‘ddclient-configuration’-Parameter: Zeichenkette secret-file
     Die Geheimnisdatei („Secret File“), die an die erzeugte
     ‘ddclient.conf’-Datei angehängt wird. Diese Datei enthält die
     Zugangsdaten, die ddclient benutzen soll. Es wird erwartet, dass
     Sie sie manuell erzeugen.

     Die Vorgabe ist ‘"/etc/ddclient/secrets.conf"’.

 -- ‘ddclient-configuration’-Parameter: Liste extra-options
     Zusätzliche Einstellungsoptionen, die an die ‘ddclient.conf’-Datei
     angehängt werden.

     Die Vorgabe ist ‘()’.


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

12.9.22 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: Scheme-Variable xvnc-service-type

     Ein Dienst des Diensttyps ‘xvnc-server-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 -- 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

12.9.23 VPN-Dienste
-------------------

Das Modul ‘(gnu services vpn)’ stellt Dienste zur Verfügung, die mit
“Virtual Private Networks” (VPNs) zu tun haben.

Bitmask
.......

 -- Scheme-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.

 -- Scheme-Prozedur: openvpn-client-service [#:config
          (openvpn-client-configuration)]

     Liefert einen Dienst, der den VPN-Daemon ‘openvpn’ als Client
     ausführt.

 -- Scheme-Prozedur: openvpn-server-service [#:config
          (openvpn-server-configuration)]

     Liefert einen Dienst, der den VPN-Daemon ‘openvpn’ als Server
     ausführt.

     Beide können zeitgleich laufen gelassen werden.

 -- 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’.

 -- Scheme-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
.........

 -- Scheme-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")’)
          Welche IP-Adressen obiger Schnittstelle zugeordnet werden.

     ‘port’ (Vorgabe: ‘51820’)
          Auf welchem Port auf eingehende Verbindungen gelauscht werden
          soll.

     ‘dns’ (Vorgabe: ‘#f’)
          Die DNS-Server, die den VPN-Clients per DHCP mitgeteilt
          werden.

     ‘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.

     ‘peers’ (Vorgabe: ‘'()’)
          Die zugelassenen Netzwerkteilnehmer auf dieser Schnittstelle.
          Dies ist eine Liste von WIREGUARD-PEER-Verbundsobjekten.

     ‘pre-up’ (Vorgabe: ‘'()’)
          Welche Skriptbefehle vor dem Einrichten der Schnittstelle
          ausgeführt werden soll.

     ‘post-up’ (Vorgabe: ‘'()’)
          Welche Skriptbefehle nach dem Einrichten der Schnittstelle
          ausgeführt werden soll.

     ‘pre-down’ (Vorgabe: ‘'()’)
          Welche Skriptbefehle vor dem Abwickeln der Schnittstelle
          ausgeführt werden soll.

     ‘post-down’ (Vorgabe: ‘'()’)
          Welche Skriptbefehle nach dem Abwickeln der Schnittstelle
          ausgeführt werden 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.

 -- 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.

     ‘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

12.9.24 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.

 -- Scheme-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.

 -- Scheme-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.

 -- Scheme-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::).

 -- Scheme-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.

 -- Scheme-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.


File: guix.de.info,  Node: Samba-Dienste,  Next: Kontinuierliche Integration,  Prev: Network File System,  Up: Dienste

12.9.25 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: Scheme-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.

 -- Scheme-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

12.9.26 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:

 -- Scheme-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’ (Vorgabe: ‘60’)
          Anzahl der Sekunden, bevor ein Repository wieder neu geladen
          wird und danach Cuirass-Aufträge behandelt werden.

     ‘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.

     ‘use-substitutes?’ (Vorgabe: ‘#f’)
          Hierdurch wird zugelassen, Substitute zu benutzen, damit
          _nicht_ jede Abhängigkeit eines Auftrags erst aus ihrem
          Quellcode heraus erstellt werden muss.

     ‘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
          Cuirass-Prozesses 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.

     ‘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.

 -- Scheme-Prozedur: 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).

     ‘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.

