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

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

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

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


File: guix.de.info,  Node: Swap-Speicher,  Next: Benutzerkonten,  Prev: Zugeordnete Geräte,  Up: Systemkonfiguration

11.6 Swap-Speicher
==================

Swap-Speicher, wie man ihn oft nennt, ist ein Bereich auf der Platte,
wohin Speicherseiten verdrängt werden können. Als Seitenaustausch
(englisch „Paging“) bezeichnet man das Verfahren, wie der für die
Speicherverwaltung zuständige Prozess (d.h. der Linux-Kernel oder der
„Default Pager“ in Hurd) entscheiden kann, manche Speicherseiten aus dem
Arbeitsspeicher (RAM), die einem laufenden Prozess zugewiesen sind, ohne
gerade benutzt zu werden, stattdessen auf der Platte zu speichern.
Dadurch wird Arbeitsspeicher frei, wodurch mehr wertvoller schneller
Speicher verfügbar wird; die Daten darin werden in den Swap-Speicher
ausgelagert. Wenn das Programm auf eben diese Speicherseite zuzugreifen
versucht, lädt der Speicherverwaltungsprozess die Daten zurück in den
Speicher, damit das Programm sie benutzen kann.

   Häufig begegnet man der falschen Vorstellung, Swap nütze nur dann
etwas, wenn das System wenig Arbeitsspeicher zur Verfügung hat. Doch
benutzen Kernels oft allen Arbeitsspeicher als Zwischenspeicher für
Plattenzugriffe, um Ein- und Ausgaben zu beschleunigen. Deswegen steht
durch den Austausch ungenutzter Teile des Arbeitsspeichers mehr RAM für
diese Art von Caching zur Verfügung.

   Wenn Sie genauer wissen wollen, wie Arbeitsspeicher aus Sicht eines
monolithisch aufgebauten Kernels verwaltet wird, siehe *note
Speicherkonzepte: (libc)Memory Concepts.

   Der Linux-Kernel unterstützt Swap-Partitionen und Swap-Dateien:
Erstere reservieren eine ganze Plattenpartition für den Seitenaustausch,
wohingegen Zweitere dafür eine Datei aus dem Dateisystem einsetzen (der
Dateisystemtreiber muss sie unterstützen). Auf vergleichbaren Systemen
haben beide die gleiche Leistung, also sollte man sich für das
entscheiden, was es einem leichter macht. Partitionen sind „einfacher“
und brauchen keine Unterstützung durch das Dateisystem, aber man muss
sie schon beim Formatieren der Platte zuweisen (außer man nutzt logische
Datenträger). Dateien hingegen kann man jederzeit anlegen oder löschen.

   Auch ist Swap-Speicher notwendig, damit das System in den
“Ruhezustand” wechseln kann (man spricht auch von “Suspend to Disk”).
Dabei wird der Systemzustand aus dem Arbeitsspeicher in den
Swap-Speicher ausgelagert, bevor der Rechner herunterfährt, so dass er
beim nächsten Start der Maschine wiederhergestellt werden kann. Der
Ruhezustand benötigt höchstens so viel wie die halbe Größe des
Arbeitsspeichers als konfigurierter Swap-Speicher. Es ist erforderlich,
dass der Linux-Kernel die Information über zur Wiederherstellung zu
nutzenden Swap-Speicher schon beim Booten mitgeteilt bekommt (über ein
Kernel-Argument). Wenn eine Swap-Datei benutzt wird, muss deren Versatz
gegenüber dem sie beinhaltenden Gerät ebenso von vornherein dem Kernel
übergeben werden; dieser Wert muss erneuert werden, wenn die Datei als
Swap-Speicher neu initialisiert wird, weil z.B. Sie ihre Größe geändert
haben.

   Vorsicht, Swap-Speicher wird beim Herunterfahren nicht genullt.
Sensible Daten (wie Passwörter) können sich darin befinden, wenn deren
Speicherseiten verdrängt wurden. Daher sollten Sie in Betracht ziehen,
Ihren Swap-Speicher auf ein verschlüsseltes Gerät zu legen (siehe *note
Zugeordnete Geräte::).

 -- Datentyp: swap-space
     Objekte dieses Typs repräsentieren Swap-Speicher. Sie weisen
     folgende Komponenten auf:

     ‘target’
          Welches Gerät oder welche Datei verwendet werden soll,
          angegeben entweder über die UUID, über ein
          ‘file-system-label’-Objekt mit der Bezeichnung oder über eine
          Zeichenkette wie in der Definition eines ‘file-system’-Objekts
          für ein Dateisystem (siehe *note Dateisysteme::).

     ‘dependencies’ (Vorgabe: ‘'()’)
          Eine Liste von ‘file-system’-Objekten oder
          ‘mapped-device’-Objekten, die vorausgesetzt werden, damit der
          Speicher verfügbar ist. Achtung: Genau wie bei
          ‘file-system’-Objekten gilt auch für die Abhängigkeiten im
          ‘dependencies’-Feld, dass zum Hochfahren des Systems
          notwendige Abhängigkeiten, die beim Start der Anwendungsebene
          („User Space“) eingebunden werden, nicht durch Shepherd
          verwaltet werden, sondern weggefiltert werden.

     ‘priority’ (Vorgabe: ‘#f’)
          Wird nur beim Linux-Kernel unterstützt. Entweder ‘#f’, damit
          _keine_ Priorität festgelegt wird, oder eine ganze Zahl
          zwischen 0 und 32767. Der Kernel wird erst den Swap-Speicher
          mit der höheren Priorität für den Seitenaustausch benutzen und
          bei gleicher Priorität im Rundlauf wechseln
          („Round-Robin-Verfahren“). Swap-Speicher ohne festgelegte
          Priorität wird später als priorisierter verwendet, in der
          angegebenen Reihenfolge ohne Round Robin.

     ‘discard?’ (Vorgabe: ‘#f’)
          Wird nur beim Linux-Kernel unterstützt. Wenn es wahr ist,
          benachrichtigt der Kernel die Steuereinheit (Controller) der
          Platte, welche Seiten verworfen wurden, zum Beispiel mit der
          TRIM-Operation auf SSD-Speicher.

   Hier sind einige Beispiele:

     (swap-space (target (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))

   Die Swap-Partition mit der angegebenen UUID verwenden. Sie können die
UUID einer Linux-Swap-Partition erfahren, indem Sie ‘swaplabel GERÄT’
ausführen, wobei GERÄT der Dateiname unter ‘/dev’ für die Partition ist.

     (swap-space
       (target (file-system-label "swap"))
       (dependencies mapped-devices))

   Die Swap-Partition mit der Bezeichnung ‘swap’ verwenden. Die
Bezeichnung können Sie finden, nachdem all die zugeordneten Geräte aus
MAPPED-DEVICES geöffnet wurden. Auch hier können Sie mittels
‘swaplabel’-Befehls die Bezeichnung einer Linux-Swap-Partition einsehen
und ändern.

   Nun folgt ein anspruchsvolleres Beispiel. Sie sehen auch den
entsprechenden Teil zu ‘file-systems’ aus der Deklaration eines
‘operating-system’.

     (file-systems
       (list (file-system
               (device (file-system-label "root"))
               (mount-point "/")
               (type "ext4"))
             (file-system
               (device (file-system-label "btrfs"))
               (mount-point "/btrfs")
               (type "btrfs"))))

     (swap-devices
       (list
         (swap-space
           (target "/btrfs/swapfile")
           (dependencies (filter (file-system-mount-point-predicate "/btrfs")
                                 file-systems)))))

   Die Datei ‘/btrfs/swapfile’ als Swap-Speicher benutzen, die abhängig
ist von dem als ‘/btrfs’ eingebundenen Dateisystem. Sie sehen, wie wir
mit Guiles ‘filter’-Prozedur das Dateisystem auf elegante Weise
auswählen!

     (swap-devices
       (list
         (swap-space
           (target "/dev/mapper/my-swap")
           (dependencies mapped-devices))))

     (kernel-arguments
       (cons* "resume=/dev/mapper/my-swap"
              %default-kernel-arguments))

   Obiges Schnipsel im ‘operating-system’ einer
Betriebssystemdeklaration aktiviert das zugeordnete Gerät
‘/dev/mapper/my-swap’ (was aus einem verschlüsselten Gerät kommen kann)
als Swap-Speicher und teilt dem Kernel über das Kernel-Argument ‘resume’
mit, dass es für den Ruhezustand benutzt werden soll (siehe *note
„operating-system“-Referenz::, ‘kernel-arguments’).

     (swap-devices
       (list
         (swap-space
           (target "/swapfile")
           (dependencies (filter (file-system-mount-point-predicate "/")
                                 file-systems)))))

     (kernel-arguments
       (cons* "resume=/dev/sda3"        ;Gerät, das /swapfile enthält
              "resume_offset=92514304"  ;Versatz, den /swapfile darauf hat
              %default-kernel-arguments))

   Das zweite Schnipsel eines ‘operating-system’ zeigt, wie man die
Swap-Datei ‘/swapfile’ für den Ruhezustand benutzen kann, indem dem
Kernel die Partition, auf der sie liegt, (im ‘resume’-Argument) und ihr
Versatz auf dieser Partition (im ‘resume_offset’-Argument) mitgeteilt
werden. Letzteren Wert können Sie der Ausgabe des Befehls ‘filefrag -e’
entnehmen; er ist die erste Zahl, die gleich unter dem Spaltenkopf
‘physical_offset’ steht (mit dem zweiten Befehl wird der Wert direkt
ausgelesen):

     $ sudo filefrag -e /swapfile
     Filesystem type is: ef53
     File size of /swapfile is 2463842304 (601524 blocks of 4096 bytes)
      ext:     logical_offset:        physical_offset: length:   expected: flags:
        0:        0..    2047:   92514304..  92516351:   2048:
     …
     $ sudo filefrag -e /swapfile | grep '^ *0:' | cut -d: -f3 | cut -d. -f1
        92514304


File: guix.de.info,  Node: Benutzerkonten,  Next: Tastaturbelegung,  Prev: Swap-Speicher,  Up: Systemkonfiguration

11.7 Benutzerkonten
===================

Benutzerkonten und Gruppen werden allein durch die
‘operating-system’-Deklaration des Betriebssystems verwaltet. Sie werden
mit den ‘user-account’- und ‘user-group’-Formen angegeben:

     (user-account
       (name "alice")
       (group "users")
       (supplementary-groups '("wheel"   ;zur sudo-Nutzung usw. berechtigen
                               "audio"   ;Soundkarte
                               "video"   ;Videogeräte wie Webcams
                               "cdrom")) ;die gute alte CD-ROM
       (comment "Bobs Schwester"))

   Hier sehen Sie ein Benutzerkonto, das eine andere Shell und ein
geändertes Persönliches Verzeichnis benutzt (die Vorgabe wäre
‘"/home/bob"’):

     (user-account
       (name "bob")
       (group "users")
       (comment "Alices Bruder")
       (shell (file-append zsh "/bin/zsh"))
       (home-directory "/home/robert"))

   Beim Hochfahren oder nach Abschluss von ‘guix system reconfigure’
stellt das System sicher, dass nur die in der
‘operating-system’-Deklaration angegebenen Benutzerkonten und Gruppen
existieren, mit genau den angegebenen Eigenschaften. Daher gehen durch
direkten Aufruf von Befehlen wie ‘useradd’ erwirkte Erstellungen oder
Modifikationen von Konten oder Gruppen verloren, sobald rekonfiguriert
oder neugestartet wird. So wird sichergestellt, dass das System genau so
funktioniert, wie es deklariert wurde.

 -- Datentyp: user-account
     Objekte dieses Typs repräsentieren Benutzerkonten. Darin können
     folgende Komponenten aufgeführt werden:

     ‘name’
          Der Name des Benutzerkontos.

     ‘group’
          Dies ist der Name (als Zeichenkette) oder die Bezeichnung (als
          Zahl) der Benutzergruppe, zu der dieses Konto gehört.

     ‘supplementary-groups’ (Vorgabe: ‘'()’)
          Dies kann optional als Liste von Gruppennamen angegeben
          werden, zu denen dieses Konto auch gehört.

     ‘uid’ (Vorgabe: ‘#f’)
          Dies ist entweder der Benutzeridentifikator dieses Kontos
          (seine „User ID“) als Zahl oder ‘#f’. Bei Letzterem wird vom
          System automatisch eine Zahl gewählt, wenn das Benutzerkonto
          erstellt wird.

     ‘comment’ (Vorgabe: ‘""’)
          Ein Kommentar zu dem Konto, wie etwa der vollständige Name des
          Kontoinhabers.

          Beachten Sie, dass Benutzer den für ihr Benutzerkonto
          hinterlegten echten Namen beliebig ändern können, _außer_ es
          handelt sich um „System“-Benutzerkonten. Den in ‘/etc/passwd’
          gespeicherten Namen können sie mit dem Befehl ‘chfn’ ändern.
          Wenn sie das tun, hat der gewählte Name Vorrang vor dem vom
          Systemadministrator auserkorenen Namen. Rekonfigurieren ändert
          den Namen _nicht_.

     ‘home-directory’
          Der Name des Persönlichen Verzeichnisses („Home“-Verzeichnis)
          für dieses Konto.

     ‘create-home-directory?’ (Vorgabe: ‘#t’)
          Zeigt an, ob das Persönliche Verzeichnis für das Konto
          automatisch erstellt werden soll, falls es noch nicht
          existiert.

     ‘shell’ (Vorgabe: Bash)
          Ein G-Ausdruck, der den Dateinamen des Programms angibt, das
          dem Benutzer als Shell dienen soll (siehe *note
          G-Ausdrücke::). Auf die Programmdatei der Bash-Shell würden
          Sie zum Beispiel so verweisen:

               (file-append bash "/bin/bash")

          … und so auf die Programmdatei von Zsh:

               (file-append zsh "/bin/zsh")

     ‘system?’ (Vorgabe: ‘#f’)
          Dieser boolesche Wert zeigt an, ob das Konto ein
          „System“-Benutzerkonto ist. Systemkonten werden manchmal
          anders behandelt, zum Beispiel werden sie auf grafischen
          Anmeldebildschirmen nicht aufgeführt.

     ‘password’ (Vorgabe: ‘#f’)
          Normalerweise lassen Sie dieses Feld auf ‘#f’ und
          initialisieren Benutzerpasswörter als ‘root’ mit dem
          ‘passwd’-Befehl. Die Benutzer lässt man ihr eigenes Passwort
          dann mit ‘passwd’ ändern. Mit ‘passwd’ festgelegte Passwörter
          bleiben natürlich beim Neustarten und beim Rekonfigurieren
          erhalten.

          Wenn Sie aber _doch_ ein anfängliches Passwort für ein Konto
          voreinstellen möchten, muss dieses Feld hier das
          verschlüsselte Passwort als Zeichenkette enthalten. Sie können
          dazu die Prozedur ‘crypt’ benutzen.

               (user-account
                 (name "charlie")
                 (group "users")

                 ;; Ein mit SHA-512 gehashtes initiales Passwort.
                 (password (crypt "InitialPassword!" "$6$abc")))

               Anmerkung: Der Hash dieses initialen Passworts wird in
               einer Datei im ‘/gnu/store’ abgelegt, auf die alle
               Benutzer Lesezugriff haben, daher ist Vorsicht geboten,
               wenn Sie diese Methode verwenden.

          Siehe *note (libc)Passphrase Storage:: für weitere
          Informationen über Passwortverschlüsselung und *note
          (guile)Encryption:: für Informationen über die Prozedur
          ‘crypt’ in Guile.

   Benutzergruppen-Deklarationen sind noch einfacher aufgebaut:

     (user-group (name "students"))

 -- Datentyp: user-group
     Dieser Typ gibt, nun ja, eine Benutzergruppe an. Es gibt darin nur
     ein paar Felder:

     ‘name’
          Der Name der Gruppe.

     ‘id’ (Vorgabe: ‘#f’)
          Der Gruppenbezeichner (eine Zahl). Wird er als ‘#f’ angegeben,
          wird automatisch eine neue Zahl reserviert, wenn die Gruppe
          erstellt wird.

     ‘system?’ (Vorgabe: ‘#f’)
          Dieser boolesche Wert gibt an, ob es sich um eine
          „System“-Gruppe handelt. Systemgruppen sind solche mit einer
          kleinen Zahl als Bezeichner.

     ‘password’ (Vorgabe: ‘#f’)
          Wie, Benutzergruppen können ein Passwort haben? Nun ja,
          anscheinend schon. Wenn es nicht auf ‘#f’ steht, gibt dieses
          Feld das Passwort der Gruppe an.

   Um Ihnen das Leben zu erleichtern, gibt es eine Variable, worin alle
grundlegenden Benutzergruppen aufgeführt sind, die man erwarten könnte:

 -- Variable: %base-groups
     Die Liste von Basis-Benutzergruppen, von denen Benutzer und/oder
     Pakete erwarten könnten, dass sie auf dem System existieren. Dazu
     gehören Gruppen wie „root“, „wheel“ und „users“, sowie Gruppen, um
     den Zugriff auf bestimmte Geräte einzuschränken, wie „audio“,
     „disk“ und „cdrom“.

 -- Variable: %base-user-accounts
     Diese Liste enthält Basis-Systembenutzerkonten, von denen Programme
     erwarten können, dass sie auf einem GNU/Linux-System existieren,
     wie das Konto „nobody“.

     Beachten Sie, dass das Konto „root“ für den Administratornutzer
     nicht dazugehört. Es ist ein Sonderfall und wird automatisch
     erzeugt, egal ob es spezifiziert wurde oder nicht.

   The Linux kernel also implements “subordinate user and group IDs”, or
“subids”, which are used to map the ID of a user and group to several
IDs inside separate name spaces—inside “containers”. *Note the
subordinate user and group ID service: subordinate-user-group-ids, for
information on how to configure it.


File: guix.de.info,  Node: Tastaturbelegung,  Next: Locales,  Prev: Benutzerkonten,  Up: Systemkonfiguration

11.8 Tastaturbelegung
=====================

Um anzugeben, was jede Taste auf Ihrer Tastatur tut, müssen Sie angeben,
welche “Tastaturbelegung” das Betriebssystem benutzen soll. Wenn nichts
angegeben wird, ist die „US English“-QWERTY-Tastaturbelegung für
PC-Tastaturen mit 105 Tasten voreingestellt. Allerdings bevorzugen
Deutsch sprechende Nutzer meistens die deutsche QWERTZ-Tastaturbelegung,
Französisch sprechende haben lieber die AZERTY-Belegung und so weiter;
Hacker wollen vielleicht Dvorak oder Bépo als Tastaturbelegung benutzen
oder sogar eigene Anpassungen bei manchen Tasten vornehmen. Dieser
Abschnitt erklärt, wie das geht.

   Die Informationen über Ihre Tastaturbelegung werden an drei Stellen
gebraucht:

   • Der _Bootloader_ muss auslesen können, welche Tastaturbelegung Sie
     benutzen möchten (siehe *note ‘keyboard-layout’:
     Bootloader-Konfiguration.). Das ist praktisch, wenn Sie zum
     Beispiel die Passphrase Ihrer verschlüsselten Wurzelpartition mit
     der richtigen Tastaturbelegung eintippen wollen.

   • Der _Kernel des Betriebssystems_, Linux, braucht die Information,
     damit die Konsole richtig eingestellt ist (siehe *note
     ‘keyboard-layout’: „operating-system“-Referenz.).

   • Der _grafische Anzeigeserver_, meistens ist das Xorg, hat auch
     seine eigene Konfiguration der Tastaturbelegung (siehe *note
     ‘keyboard-layout’: X Window.).

   Mit Guix können Sie alle drei Komponenten separat konfigurieren, aber
zum Glück können Sie damit auch dieselbe Konfiguration der
Tastaturbelegung für alle drei benutzen.

   Tastaturbelegungen werden durch Verbundsobjekte repräsentiert, die
mit der Prozedur ‘keyboard-layout’ aus dem Modul ‘(gnu system keyboard)’
angelegt werden. Entsprechend der „X-Keyboard“-Erweiterung (XKB) verfügt
jede Tastaturbelegung über vier Attribute: einen Namen (oft ist das ein
Sprachkürzel wie „fi“ für Finnisch oder „jp“ für Japanisch), ein
optionaler Variantenname, ein optionaler Tastaturmodellname und eine
möglicherweise leere Liste zusätzlicher Optionen. In den meisten Fällen
interessiert Sie nur der Name der Tastaturbelegung.

 -- Prozedur: keyboard-layout Name [Variante] [#:model] [#:options '()]
     Liefert eine neue Tastaturbelegung mit dem angegebenen NAMEn in der
     VARIANTE.

     Der NAME muss eine Zeichenkette wie ‘"fr"’ sein und die VARIANTE
     eine Zeichenkette wie ‘"bepo"’ oder ‘"nodeadkeys"’. Siehe das Paket
     ‘xkeyboard-config’ für Informationen, welche Optionen gültig sind.

   Hier sind ein paar Beispiele:

     ;; Die deutsche QWERTZ-Belegung. Hierbei nehmen wir
     ;; ein Standard-"pc105"-Tastaturmodell an.
     (keyboard-layout "de")

     ;; Die Bépo-Variante der französischen Belegung.
     (keyboard-layout "fr" "bepo")

     ;; Die katalanische Tastaturbelegung.
     (keyboard-layout "es" "cat")

     ;; Arabische Tastaturbelegung. "Alt-Umschalt" wechselt auf US-Amerikanisch.
     (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))

     ;; Die lateinamerikanisch-spanische Tastaturbelegung. Des Weiteren
     ;; wird die Feststelltaste (auf Englisch "Caps Lock") als eine
     ;; weitere Steuerungstaste (auf Englisch "Ctrl") festgelegt und
     ;; die Menütaste soll als eine "Compose"-Taste herhalten, mit der
     ;; Buchstaben mit Diakritika geschrieben werden können.
     (keyboard-layout "latam"
                      #:options '("ctrl:nocaps" "compose:menu"))

     ;; Die russische Tastaturbelegung für eine ThinkPad-Tastatur.
     (keyboard-layout "ru" #:model "thinkpad")

     ;; Die Tastaturbelegung "US international", d.h. die US-Belegung
     ;; mit Tottasten zur Eingabe von Buchstaben mit Diakritika. Hier
     ;; wird die Belegung für eine Apple-MacBook-Tastatur gewählt.
     (keyboard-layout "us" "intl" #:model "macbook78")

   Im Verzeichnis ‘share/X11/xkb’ des ‘xkeyboard-config’-Pakets finden
Sie eine vollständige Liste der unterstützten Tastaturbelegungen,
Varianten und Modelle.

   Sagen wir, Sie würden gerne die türkische Tastaturbelegung für Ihr
gesamtes System – Bootloader, Konsole und Xorg – verwenden. Dann würde
Ihre Systemkonfiguration so aussehen:

     ;; Die türkische Tastaturbelegung für Bootloader, Konsole und Xorg
     ;; benutzen.

     (operating-system
       ;; …
       (keyboard-layout (keyboard-layout "tr"))  ;für die Konsole
       (bootloader (bootloader-configuration
                     (bootloader grub-efi-bootloader)
                     (targets '("/boot/efi"))
                     (keyboard-layout keyboard-layout))) ;für GRUB
       (services (cons (set-xorg-configuration
                         (xorg-configuration             ;für Xorg
                           (keyboard-layout keyboard-layout)))
                       %desktop-services)))

   Im obigen Beispiel beziehen wir uns für GRUB und Xorg einfach auf das
‘keyboard-layout’-Feld, was wir darüber definiert haben, wir könnten
aber auch eine andere Tastaturbelegung angeben. Die Prozedur
‘set-xorg-configuration’ kommuniziert an die grafische Anmeldeverwaltung
(d.h. nach Vorgabe an GDM), welche Xorg-Konfiguration verwendet werden
soll.

   Wir haben uns bisher damit auseinandergesetzt, wie die
_Voreinstellung_ für die Tastaturbelegung ausgewählt werden kann, die
das System annimmt, wenn es startet, aber zur Laufzeit kann sie geändert
werden:

   • Wenn Sie GNOME benutzen, können Sie in den Einstellungen dazu einen
     Eintrag „Region und Sprache“ finden, in dem Sie eine oder mehrere
     Tastaturbelegungen auswählen können.

   • Unter Xorg können Sie den Befehl ‘setxkbmap’ (aus dem gleichnamigen
     Paket) zum Anpassen der momentan aktiven Tastaturbelegung benutzen.
     Zum Beispiel würden Sie so die Belegung auf US Dvorak wechseln:

          setxkbmap us dvorak

   • Mit dem Befehl ‘loadkeys’ ändern Sie die für die Linux-Konsole
     geltende Tastaturbelegung. Allerdings ist zu beachten, dass
     ‘loadkeys’ _nicht_ die Kategorisierung der Tastaturbelegungen von
     XKB benutzt. Der Befehl, um die französische Bépo-Belegung zu
     laden, wäre folgender:

          loadkeys fr-bepo


File: guix.de.info,  Node: Locales,  Next: Dienste,  Prev: Tastaturbelegung,  Up: Systemkonfiguration

11.9 Locales
============

Eine “Locale” legt die kulturellen Konventionen einer bestimmten Sprache
und Region auf der Welt fest (siehe *note (libc)Locales::). Jede Locale
hat einen Namen, der typischerweise von der Form
‘SPRACHE_GEBIET.KODIERUNG’ – z.B. benennt ‘fr_LU.utf8’ die Locale für
französische Sprache mit den kulturellen Konventionen aus Luxemburg
unter Verwendung der UTF-8-Kodierung.

   Normalerweise werden Sie eine standardmäßig zu verwendende Locale für
die Maschine vorgeben wollen, indem Sie das ‘locale’-Feld der
‘operating-system’-Deklaration verwenden (siehe *note ‘locale’:
„operating-system“-Referenz.).

   Die ausgewählte Locale wird automatisch zu den dem System bekannten
“Locale-Definitionen” hinzugefügt, falls nötig, und ihre Kodierung wird
aus dem Namen hergeleitet – z.B. wird angenommen, dass ‘bo_CN.utf8’ als
Kodierung ‘UTF-8’ verwendet. Zusätzliche Locale-Definitionen können im
Feld ‘locale-definitions’ vom ‘operating-system’ festgelegt werden – das
ist zum Beispiel dann nützlich, wenn die Kodierung nicht aus dem
Locale-Namen hergeleitet werden konnte. Die vorgegebene Menge an
Locale-Definitionen enthält manche weit verbreiteten Locales, aber um
Platz zu sparen, nicht alle verfügbaren Locales.

   Um zum Beispiel die nordfriesische Locale für Deutschland
hinzuzufügen, könnte der Wert des Feldes wie folgt aussehen:

     (cons (locale-definition
             (name "fy_DE.utf8") (source "fy_DE"))
           %default-locale-definitions)

   Um Platz zu sparen, könnte man auch wollen, dass ‘locale-definitions’
nur die tatsächlich benutzen Locales aufführt, wie etwa:

     (list (locale-definition
             (name "ja_JP.eucjp") (source "ja_JP")
             (charset "EUC-JP")))

   Die kompilierten Locale-Definitionen sind unter
‘/run/current-system/locale/X.Y’ verfügbar, wobei ‘X.Y’ die Version von
libc bezeichnet. Dies entspricht dem Pfad, an dem eine von Guix
ausgelieferte GNU libc standardmäßig nach Locale-Daten sucht. Er kann
überschrieben werden durch die Umgebungsvariable ‘LOCPATH’ (siehe *note
‘LOCPATH’ und Locale-Pakete: locales-and-locpath.).

   Die ‘locale-definition’-Form wird vom Modul ‘(gnu system locale)’ zur
Verfügung gestellt. Details folgen unten.

 -- Datentyp: locale-definition
     Dies ist der Datentyp einer Locale-Definition.

     ‘name’
          Der Name der Locale. Siehe *note (libc)Locale Names:: für mehr
          Informationen zu Locale-Namen.

     ‘source’
          Der Name der Quelle der Locale. Typischerweise ist das der
          Teil ‘SPRACHE_GEBIET’ des Locale-Namens.

     ‘charset’ (Vorgabe: ‘"UTF-8"’)
          Der „Zeichensatz“ oder das „Code set“, d.h. die Kodierung
          dieser Locale, wie die IANA sie definiert
          (https://www.iana.org/assignments/character-sets).

 -- Variable: %default-locale-definitions
     Eine Liste häufig benutzter UTF-8-Locales, die als Vorgabewert des
     ‘locale-definitions’-Feldes in ‘operating-system’-Deklarationen
     benutzt wird.

     Diese Locale-Definitionen benutzen das “normalisierte Codeset” für
     den Teil des Namens, der nach dem Punkt steht (siehe *note
     normalisiertes Codeset: (libc)Using gettextized software.). Zum
     Beispiel ist ‘uk_UA.utf8’ enthalten, dagegen ist etwa ‘uk_UA.UTF-8’
     darin _nicht_ enthalten.

11.9.1 Kompatibilität der Locale-Daten
--------------------------------------

‘operating-system’-Deklarationen verfügen über ein ‘locale-libcs’-Feld,
um die GNU libc-Pakete anzugeben, die zum Kompilieren von
Locale-Deklarationen verwendet werden sollen (siehe *note
„operating-system“-Referenz::). „Was interessiert mich das?“, könnten
Sie fragen. Naja, leider ist das binäre Format der Locale-Daten von
einer libc-Version auf die nächste manchmal nicht miteinander
kompatibel.

   Zum Beispiel kann ein an die libc-Version 2.21 gebundenes Programm
keine mit libc 2.22 erzeugten Locale-Daten lesen; schlimmer noch, das
Programm _terminiert_, statt einfach die inkompatiblen Locale-Daten zu
ignorieren(1). Ähnlich kann ein an libc 2.22 gebundenes Programm die
meisten, aber nicht alle, Locale-Daten von libc 2.21 lesen (Daten zu
‘LC_COLLATE’ sind aber zum Beispiel inkompatibel); somit schlagen
Aufrufe von ‘setlocale’ vielleicht fehl, aber das Programm läuft weiter.

   Das „Problem“ mit Guix ist, dass Nutzer viel Freiheit genießen: Sie
können wählen, ob und wann sie die Software in ihren Profilen
aktualisieren und benutzen vielleicht eine andere libc-Version als sie
der Systemadministrator benutzt hat, um die systemweiten Locale-Daten zu
erstellen.

   Glücklicherweise können „unprivilegierte“ Nutzer ohne zusätzliche
Berechtigungen dann zumindest ihre eigenen Locale-Daten installieren und
‘GUIX_LOCPATH’ entsprechend definieren (siehe *note ‘GUIX_LOCPATH’ und
Locale-Pakete: locales-and-locpath.).

   Trotzdem ist es am besten, wenn die systemweiten Locale-Daten unter
‘/run/current-system/locale’ für alle libc-Versionen erstellt werden,
die auf dem System noch benutzt werden, damit alle Programme auf sie
zugreifen können – was auf einem Mehrbenutzersystem ganz besonders
wichtig ist. Dazu kann der Administrator des Systems mehrere libc-Pakete
im ‘locale-libcs’-Feld vom ‘operating-system’ angeben:

     (use-package-modules base)

     (operating-system
       ;; …
       (locale-libcs (list glibc-2.21 (canonical-package glibc))))

   Mit diesem Beispiel ergäbe sich ein System, was Locale-Definitionen
sowohl für libc 2.21 als auch die aktuelle Version von libc in
‘/run/current-system/locale’ hat.

   ---------- Footnotes ----------

   (1) Versionen 2.23 von GNU libc und neuere werden inkompatible
Locale-Daten nur mehr überspringen, was schon einmal eine Verbesserung
ist.


File: guix.de.info,  Node: Dienste,  Next: Privilegierte Programme,  Prev: Locales,  Up: Systemkonfiguration

11.10 Dienste
=============

Ein wichtiger Bestandteil des Schreibens einer
‘operating-system’-Deklaration ist das Auflisten der “Systemdienste” und
ihrer Konfiguration (siehe *note Das Konfigurationssystem nutzen::).
Systemdienste sind typischerweise im Hintergrund laufende
Daemon-Programme, die beim Hochfahren des Systems gestartet werden, oder
andere Aktionen, die zu dieser Zeit durchgeführt werden müssen – wie das
Konfigurieren des Netzwerkzugangs.

   Guix hat eine weit gefasste Definition, was ein „Dienst“ ist (siehe
*note Dienstkompositionen::), aber viele Dienste sind solche, die von
GNU Shepherd verwaltet werden (siehe *note Shepherd-Dienste::). Auf
einem laufenden System kann der ‘herd’-Befehl benutzt werden, um
verfügbare Dienste aufzulisten, ihren Status anzuzeigen, sie zu starten
und zu stoppen oder andere angebotene Operationen durchzuführen (siehe
*note (shepherd)Jump Start::). Zum Beispiel:

     # herd status

   Dieser Befehl, durchgeführt als ‘root’, listet die momentan
definierten Dienste auf. Der Befehl ‘herd doc’ fasst kurz zusammen, was
ein gegebener Dienst ist und welche Aktionen mit ihm assoziiert sind:

     # herd doc nscd
     Run libc's name service cache daemon (nscd).

     # herd doc nscd action invalidate
     invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.

   Die Unterbefehle ‘start’, ‘stop’ und ‘restart’ haben die Wirkung, die
man erwarten würde. Zum Beispiel kann mit folgenden Befehlen der
nscd-Dienst angehalten und der Xorg-Anzeigeserver neu gestartet werden:

     # herd stop nscd
     Service nscd has been stopped.
     # herd restart xorg-server
     Service xorg-server has been stopped.
     Service xorg-server has been started.

   Für einige Dienste wird mit ‘herd configuration’ der Name der
Konfigurationsdatei des Dienstes ausgegeben. Das ist sinnvoll, wenn Sie
die benutzte Konfigurationsdatei untersuchen möchten:

     # herd configuration sshd
     /gnu/store/…-sshd_config

   Die folgenden Abschnitte dokumentieren die verfügbaren Dienste, die
in einer ‘operating-system’-Deklaration benutzt werden können,
angefangen mit den Diensten im Kern des Systems („core services“)

* Menu:

* Basisdienste::             Essenzielle Systemdienste.
* Geplante Auftragsausführung::  Der mcron-Dienst.
* Log-Rotation::             Alte Protokolle archivieren und löschen.
* Netzwerkeinrichtung::      Netzwerkschnittstellen verbinden.
* Netzwerkdienste::          Firewall, SSH-Daemon etc.
* Unbeaufsichtigte Aktualisierungen::  Automatische Systemaktualisierungen.
* X Window::                 Grafische Anzeige.
* Druckdienste::             Unterstützung für lokale und entfernte Drucker.
* Desktop-Dienste::          D-Bus- und Desktop-Dienste.
* Tondienste::               Dienste für ALSA und Pulseaudio.
* Dateisuch-Dienste::        Um nach Dateien suchen zu können.
* Datenbankdienste::         SQL-Datenbanken, Schlüssel-Wert-Speicher etc.
* Mail-Dienste::             IMAP, POP3, SMTP und so weiter.
* Kurznachrichtendienste::   Dienste für Kurznachrichten.
* Telefondienste::           Telefoniedienste.
* Dateientauschdienste::     File Sharing.
* Systemüberwachungsdienste::  Dienste zur Systemüberwachung.
* Kerberos-Dienste::         Kerberos-Dienste.
* LDAP-Dienste::             LDAP-Dienste.
* Web-Dienste::              Web-Server.
* High Availability Services::  High availability services.
* Zertifikatsdienste::       TLS-Zertifikate via Let’s Encrypt.
* DNS-Dienste::              DNS-Daemons.
* VNC-Dienste::              VNC-Daemons.
* VPN-Dienste::              VPN-Daemons.
* Network File System::      Dienste mit Bezug zum Netzwerkdateisystem.
* Samba-Dienste::            Dienste zu Samba.
* Kontinuierliche Integration::  Cuirass- und Laminar-Dienste.
* Dienste zur Stromverbrauchsverwaltung::  Den Akku schonen, etc.
* Audio-Dienste::            Der MPD.
* Virtualisierungsdienste::  Dienste für virtuelle Maschinen.
* Versionskontrolldienste::  Entfernten Zugang zu Git-Repositorys bieten.
* Spieldienste::             Spielserver.
* PAM-Einbindedienst::       Dienst, um Datenträger beim Anmelden
                               einzubinden.
* Guix-Dienste::             Dienste, die speziell mit Guix zu tun haben.
* Linux-Dienste::            Dienste nur für Systeme mit Linux-Kernel.
* Hurd-Dienste::             Dienste, die nur Hurd-Systeme betreffen.
* Verschiedene Dienste::     Andere Dienste.


File: guix.de.info,  Node: Basisdienste,  Next: Geplante Auftragsausführung,  Up: Dienste

11.10.1 Basisdienste
--------------------

Das Modul ‘(gnu services base)’ stellt Definitionen für Basis-Dienste
zur Verfügung, von denen man erwartet, dass das System sie anbietet. Im
Folgenden sind die von diesem Modul exportierten Dienste aufgeführt.

 -- Variable: %base-services
     Diese Variable enthält eine Liste von Basis-Diensten, die man auf
     einem System vorzufinden erwartet (siehe *note Diensttypen und
     Dienste:: für weitere Informationen zu Dienstobjekten): ein
     Anmeldungsdienst (mingetty) auf jeder Konsole (jedem „tty“),
     syslogd, den Name Service Cache Daemon (nscd) von libc, die
     udev-Geräteverwaltung und weitere.

     Dies ist der Vorgabewert für das ‘services’-Feld für die Dienste
     von ‘operating-system’-Deklarationen. Normalerweise werden Sie,
     wenn Sie ein Betriebssystem anpassen, Dienste an die
     ‘%base-services’-Liste anhängen, wie hier gezeigt:

          (append (list (service avahi-service-type)
                        (service openssh-service-type))
                  %base-services)

 -- Variable: special-files-service-type
     Dieser Dienst richtet „besondere Dateien“ wie ‘/bin/sh’ ein; eine
     Instanz des Dienstes ist Teil der ‘%base-services’.

     Der mit ‘special-files-service-type’-Diensten assoziierte Wert muss
     eine Liste von zweielementigen Listen sein, deren erstes Element
     eine „besondere Datei“ und deren zweites Element deren Zielpfad
     ist. Der Vorgabewert ist:

          `(("/bin/sh" ,(file-append bash "/bin/sh"))
            ("/usr/bin/env" ,(file-append coreutils "/bin/env")))

     Wenn Sie zum Beispiel auch ‘/bin/bash’ zu Ihrem System hinzufügen
     möchten, können Sie den Wert ändern auf:

          `(("/bin/sh" ,(file-append bash "/bin/sh"))
            ("/usr/bin/env" ,(file-append coreutils "/bin/env"))
            ("/bin/bash" ,(file-append bash "/bin/bash")))

     Da dieser Dienst Teil der ‘%base-services’ ist, können Sie
     ‘modify-services’ benutzen, um die Liste besonderer Dateien
     abzuändern (siehe *note ‘modify-services’: Service-Referenz.). Die
     leichte Alternative, um eine besondere Datei hinzuzufügen, ist über
     die Prozedur ‘extra-special-file’ (siehe unten).

 -- Prozedur: extra-special-file Datei Ziel
     Das ZIEL als „besondere Datei“ DATEI verwenden.

     Beispielsweise können Sie die folgenden Zeilen in das
     ‘services’-Feld Ihrer Betriebssystemdeklaration einfügen für eine
     symbolische Verknüpfung ‘/usr/bin/env’:

          (extra-special-file "/usr/bin/env"
                              (file-append coreutils "/bin/env"))

     This procedure is meant for ‘/bin/sh’, ‘/usr/bin/env’ and similar
     targets. In particular, use for targets under ‘/etc’ might not work
     as expected if the target is managed by Guix in other ways.

     Die besonderen Dateien bleiben auf Ihrem System bestehen, auch
     nachdem Sie den ‘extra-special-file’-Aufruf schon aus Ihrer
     Systemkonfiguration entfernt und das System rekonfiguriert haben.
     Sie müssen die besonderen Dateien manuell entfernen.

 -- Variable: host-name-service-type
     Diensttyp für einen Dienst, der den Rechnernamen (den „Host“-Namen
     des Rechners) systemweit festlegt. Als Wert muss eine Zeichenkette
     angegeben werden. Vorgegeben ist, dass dieser Dienst in einem
     ‘operating-system’ enthalten ist (siehe *note ‘essential-services’:
     operating-system-essential-services.).

 -- Variable: console-font-service-type
     Installiert die angegebenen Schriftarten auf den festgelegten TTYs
     (auf dem Linux-Kernel werden Schriftarten für jede virtuelle
     Konsole einzeln festgelegt). Als Wert nimmt dieser Dienst eine
     Liste von Paaren aus TTY und Schriftart. Als Schriftart kann der
     Name einer vom ‘kbd’-Paket zur Verfügung gestellten Schriftart oder
     ein beliebiges gültiges Argument für ‘setfont’ dienen. Ein
     Beispiel:

          `(("tty1" . "LatGrkCyr-8x16")
            ("tty2" . ,(file-append
                          font-tamzen
                          "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
            ("tty3" . ,(file-append
                          font-terminus
                          "/share/consolefonts/ter-132n"))) ; für HiDPI

 -- Variable: hosts-service-type
     Der Typ des Dienstes, um Einträge in ‘/etc/hosts’ festzulegen.
     Andere Dienste können ihn erweitern, indem sie eine Liste von
     ‘host’-Verbundsobjekten übergeben.

     Das folgende Beispiel zeigt, wie man zwei Einträge zu ‘/etc/hosts’
     hinzufügt:

          (simple-service 'add-extra-hosts
                          hosts-service-type
                          (list (host "192.0.2.1" "example.com"
                                      '("example.net" "example.org"))
                                (host "2001:db8::1" "example.com"
                                      '("example.net" "example.org"))))

          Anmerkung: Vorgegeben ist, dass ‘/etc/hosts’ folgende Einträge
          enthält:
               127.0.0.1 localhost RECHNERNAME
               ::1       localhost RECHNERNAME

          Auf den meisten Installationen will man genau das. Wenn Sie
          allerdings einen Grund haben, die vorgegebenen Einträge zu
          ändern, können Sie sie innerhalb von ‘operating-system’ mit
          ‘modify-services’ ändern (siehe *note ‘modify-services’:
          Service-Referenz.).

          Folgendes Beispiel zeigt, wie sich verhindern lässt, dass der
          eingestellte RECHNERNAME dasselbe wie ‘localhost’ bedeutet.
               (operating-system
                 ;; …

                 (essential-services
                  (modify-services
                    (operating-system-default-essential-services this-operating-system)
                    (hosts-service-type config => (list
                                                    (host "127.0.0.1" "localhost")
                                                    (host "::1"       "localhost"))))))

 -- Prozedur: host ADRESSE KANONISCHER-RECHNERNAME [ALIAS-NAMEN]
     Liefert einen neuen Eintrag für einen Rechnernamen für ADRESSE als
     KANONISCHER-RECHNERNAME, wenn Sie wollen mit weiteren ALIAS-NAMEN.

     ADRESSE muss eine Zeichenkette sein, die eine gültige IPv4- oder
     IPv6-Adresse angibt. KANONISCHER-RECHNERNAME und die Zeichenketten
     in der Liste ALIAS-NAMEN müssen gültige Rechnernamen sein.

 -- Variable: login-service-type
     Diensttyp für einen Dienst, der die Benutzeranmeldung auf der
     Konsole möglich macht. Sein Wert ist ein
     ‘<login-configuration>’-Objekt.

 -- Datentyp: login-configuration
     Der Datentyp, der die Konfiguration der Benutzeranmeldung
     repräsentiert und unter anderem die beim Anmelden angezeigte
     Mitteilung des Tages („Message of the Day“) festlegt.

     ‘motd’
          Ein dateiartiges Objekt, das die „Message of the Day“ enthält.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#t’)
          Leere Passwörter standardmäßig zulassen, damit sich neue
          Anwender anmelden können, direkt nachdem das Benutzerkonto
          „root“ für den Administrator angelegt wurde.

 -- Variable: mingetty-service-type
     Diensttyp, der Mingetty ausführt, eine Implementierung der
     Anmeldung auf der virtuellen Konsole. Der Wert dieses Dienstes ist
     ein ‘<mingetty-configuration>’-Objekt.

 -- Datentyp: mingetty-configuration
     Dieser Datentyp repräsentiert die Konfiguration von Mingetty. Sie
     legt unter anderem die Konsole (das „tty“) fest, auf der Mingetty
     laufen soll.

     ‘tty’
          Der Name der Konsole, auf der diese Mingetty-Instanz läuft –
          z.B. ‘"tty1"’.

     ‘auto-login’ (Vorgabe: ‘#f’)
          Steht dieses Feld auf wahr, muss es eine Zeichenkette sein,
          die den Benutzernamen angibt, als der man vom System
          automatisch angemeldet wird. Ist es ‘#f’, so muss zur
          Anmeldung ein Benutzername und ein Passwort eingegeben werden.

     ‘login-program’ (Vorgabe: ‘#f’)
          Dies muss entweder ‘#f’ sein, dann wird das voreingestellte
          Anmeldeprogramm benutzt (‘login’ aus dem Shadow-Werkzeugsatz)
          oder der Name des Anmeldeprogramms als G-Ausdruck.

     ‘login-pause?’ (Vorgabe: ‘#f’)
          Ist es auf ‘#t’ gesetzt, sorgt es in Verbindung mit AUTO-LOGIN
          dafür, dass der Benutzer eine Taste drücken muss, ehe eine
          Login-Shell gestartet wird.

     ‘clear-on-logout?’ (Vorgabe: ‘#t’)
          When set to ‘#t’, the screen will be cleared before showing
          the login prompt. The field name is bit unfortunate, since it
          controls clearing also before the initial login, not just
          after a logout.

     ‘delay’ (Vorgabe: ‘#f’)
          When set to a number, sleep that many seconds after startup.

     ‘print-issue’ (default: ‘#t’)
          When set to ‘#t’, write out a new line and the content of
          ‘/etc/issue’. Value of ‘'no-nl’ can be used to suppress the
          new line.

     ‘print-hostname’ (default: ‘#t’)
          When set to ‘#t’, print the host name before the login prompt.
          The host name is printed up to the first dot. Can be set to
          ‘'long’ to print the full host name.

     ‘nice’ (Vorgabe: ‘#f’)
          When set to a number, change the process priority using
          ‘nice’.

     ‘working-directory’ (default: ‘#f’)
          When set to a string, change into that directory before
          calling the login program.

     ‘root-directory’ (default: ‘#f’)
          When set to a string, use this directory at the process’s root
          directory.

     ‘shepherd-requirement’
          List of shepherd requirements. Unless you know what you are
          doing, it is recommended to extend the default list instead of
          overriding it.

          As an example, when using auto-login on a system with elogind,
          it is necessary to wait on the ‘'dbus-system’ service:

               (modify-services %base-services
                 (mingetty-service-type config =>
                                        (mingetty-configuration
                                         (inherit config)
                                         ;; Automatically log in as "guest".
                                         (auto-login "guest")
                                         (shepherd-requirement
                                          (cons 'dbus-system
                                                (mingetty-configuration-shepherd-requirement
                                                 config))))))

     ‘mingetty’ (Vorgabe: MINGETTY)
          Welches Mingetty-Paket benutzt werden soll.

 -- Variable: agetty-service-type
     Diensttyp eines Dienstes, der agetty ausführt, was Anmeldungen auf
     einer virtuellen oder seriellen Konsole implementiert. Der Wert
     dieses Dienstes ist ein ‘<agetty-configuration>’-Objekt.

 -- Datentyp: agetty-configuration
     Dieser Datentyp repräsentiert die Konfiguration von agetty. Sie
     legt unter anderem die Konsole (das „tty“) fest, auf der agetty
     laufen soll(1).

     ‘tty’
          Der Name der Konsole, auf der diese Instanz von agetty läuft,
          als Zeichenkette – z.B. ‘"ttyS0"’. Dieses Argument ist
          optional, sein Vorgabewert ist eine vernünftige Wahl unter den
          seriellen Schnittstellen, auf deren Benutzung der Linux-Kernel
          eingestellt ist.

          Hierzu wird, wenn in der Kernel-Befehlszeile ein Wert für eine
          Option namens ‘agetty.tty’ festgelegt wurde, der Gerätename
          daraus für agetty extrahiert und benutzt.

          Andernfalls wird agetty, falls auf der Kernel-Befehlszeile
          eine Option ‘console’ mit einem tty vorkommt, den daraus
          extrahierten Gerätenamen der seriellen Schnittstelle benutzen.

          In beiden Fällen wird agetty nichts an den anderen
          Einstellungen für serielle Geräte verändern (Baud-Rate etc.),
          in der Hoffnung, dass Linux sie auf die korrekten Werte
          festgelegt hat.

     ‘baud-rate’ (Vorgabe: ‘#f’)
          Eine Zeichenkette, die aus einer kommagetrennten Liste von
          einer oder mehreren Baud-Raten besteht, absteigend sortiert.

     ‘term’ (Vorgabe: ‘#f’)
          Eine Zeichenkette, die den Wert enthält, der für die
          Umgebungsvariable ‘TERM’ benutzt werden soll.

     ‘eight-bits?’ (Vorgabe: ‘#f’)
          Steht dies auf ‘#t’, wird angenommen, dass das TTY
          8-Bit-korrekt ist, so dass die Paritätserkennung abgeschaltet
          wird.

     ‘auto-login’ (Vorgabe: ‘#f’)
          Wird hier ein Anmeldename als eine Zeichenkette übergeben,
          wird der angegebene Nutzer automatisch angemeldet, ohne nach
          einem Anmeldenamen oder Passwort zu fragen.

     ‘no-reset?’ (Vorgabe: ‘#f’)
          Steht dies auf ‘#t’, werden die Cflags des Terminals (d.h.
          dessen Steuermodi) nicht zurückgesetzt.

     ‘host’ (Vorgabe: ‘#f’)
          Dies akzeptiert eine Zeichenkette mit dem einzutragenden
          Anmeldungs-Rechnernamen („login_host“), der in die Datei
          ‘/var/run/utmpx’ geschrieben wird.

     ‘remote?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird in Verbindung mit HOST eine
          Befehlszeilenoption ‘-r’ für einen falschen Rechnernamen
          („Fakehost“) in der Befehlszeile des mit LOGIN-PROGRAM
          angegebenen Anmeldeprogramms übergeben.

     ‘flow-control?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird Hardware-Flusssteuerung
          (RTS/CTS) aktiviert.

     ‘no-issue?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird der Inhalt der Datei
          ‘/etc/issue’ _nicht_ angezeigt, bevor die Anmeldeaufforderung
          zu sehen ist.

     ‘init-string’ (Vorgabe: ‘#f’)
          Dies akzeptiert eine Zeichenkette, die zum TTY oder zum Modem
          zuerst vor allem anderen gesendet wird. Es kann benutzt
          werden, um ein Modem zu initialisieren.

     ‘no-clear?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird agetty den Bildschirm _nicht_
          löschen, bevor es die Anmeldeaufforderung anzeigt.

     ‘login-program’ (Vorgabe: (file-append shadow "/bin/login"))
          Hier muss entweder ein G-Ausdruck mit dem Namen eines
          Anmeldeprogramms übergeben werden, oder dieses Feld wird nicht
          gesetzt, so dass als Vorgabewert das Programm ‘login’ aus dem
          Shadow-Werkzeugsatz verwendet wird.

     ‘local-line’ (Vorgabe: ‘#f’)
          Steuert den Leitungsschalter CLOCAL. Hierfür wird eines von
          drei Symbolen als Argument akzeptiert, ‘'auto’, ‘'always’ oder
          ‘'never’. Für ‘#f’ wählt agetty als Vorgabewert ‘'auto’.

     ‘extract-baud?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, so wird agetty angewiesen, die
          Baud-Rate aus den Statusmeldungen mancher Arten von Modem
          abzulesen.

     ‘skip-login?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird der Benutzer nicht
          aufgefordert, einen Anmeldenamen einzugeben. Dies kann
          zusammen mit dem LOGIN-PROGRAM-Feld benutzt werden, um nicht
          standardkonforme Anmeldesysteme zu benutzen.

     ‘no-newline?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird _kein_ Zeilenumbruch
          ausgegeben, bevor die Datei ‘/etc/issue’ ausgegeben wird.

     ‘login-options’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine Zeichenkette mit den
          Befehlszeilenoptionen für das Anmeldeprogramm. Beachten Sie,
          dass bei einem selbst gewählten LOGIN-PROGRAM ein böswilliger
          Nutzer versuchen könnte, als Anmeldenamen etwas mit
          eingebetteten Befehlszeilenoptionen anzugeben, die vom
          Anmeldeprogramm interpretiert werden könnten.

     ‘login-pause’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird auf das Drücken einer
          beliebigen Taste gewartet, bevor die Anmeldeaufforderung
          angezeigt wird. Hiermit kann in Verbindung mit AUTO-LOGIN
          weniger Speicher verbraucht werden, indem man Shells erst
          erzeugt, wenn sie benötigt werden.

     ‘chroot’ (Vorgabe: ‘#f’)
          Wechselt die Wurzel des Dateisystems auf das angegebene
          Verzeichnis. Dieses Feld akzeptiert einen Verzeichnispfad als
          Zeichenkette.

     ‘hangup?’ (Vorgabe: ‘#f’)
          Mit dem Linux-Systemaufruf ‘vhangup’ auf dem angegebenen
          Terminal virtuell auflegen.

     ‘keep-baud?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird versucht, die bestehende
          Baud-Rate beizubehalten. Die Baud-Raten aus dem Feld BAUD-RATE
          werden benutzt, wenn agetty ein <BREAK>-Zeichen empfängt.

     ‘timeout’ (Vorgabe: ‘#f’)
          Ist dies auf einen ganzzahligen Wert gesetzt, wird terminiert,
          falls kein Benutzername innerhalb von TIMEOUT Sekunden
          eingelesen werden konnte.

     ‘detect-case?’ (Vorgabe: ‘#f’)
          Ist dies auf ‘#t’ gesetzt, wird Unterstützung für die
          Erkennung von Terminals aktiviert, die nur Großschreibung
          beherrschen. Mit dieser Einstellung wird, wenn ein Anmeldename
          nur aus Großbuchstaben besteht, dieser als Anzeichen dafür
          aufgefasst, dass das Terminal nur Großbuchstaben beherrscht,
          und einige Umwandlungen von Groß- in Kleinbuchstaben
          aktiviert. Beachten Sie, dass dabei _keine_ Unicode-Zeichen
          unterstützt werden.

     ‘wait-cr?’ (Vorgabe: ‘#f’)
          Wenn dies auf ‘#t’ gesetzt ist, wird gewartet, bis der
          Benutzer oder das Modem einen Wagenrücklauf („Carriage
          Return“) oder einen Zeilenvorschub („Linefeed“) absendet, ehe
          ‘/etc/issue’ oder eine Anmeldeaufforderung angezeigt wird.
          Dies wird typischerweise zusammen mit dem Feld INIT-STRING
          benutzt.

     ‘no-hints?’ (Vorgabe: ‘#f’)
          Ist es auf ‘#t’ gesetzt, werden _keine_ Hinweise zu den
          Feststelltasten Num-Taste, Umschaltsperre („Caps Lock“) und
          Rollen-Taste („Scroll Lock“) angezeigt.

     ‘no-hostname?’ (Vorgabe: ‘#f’)
          Das vorgegebene Verhalten ist, den Rechnernamen auszugeben.
          Ist dieses Feld auf ‘#t’ gesetzt, wird überhaupt kein
          Rechnername angezeigt.

     ‘long-hostname?’ (Vorgabe: ‘#f’)
          Das vorgegebene Verhalten ist, den Rechnernamen nur bis zu
          seinem ersten Punkt anzuzeigen. Ist dieses Feld auf ‘#t’
          gesetzt, wird der vollständige Rechnername (der „Fully
          Qualified Hostname“), wie ihn ‘gethostname’ oder ‘getaddrinfo’
          liefern, angezeigt.

     ‘erase-characters’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine Zeichenkette aus Zeichen, die auch
          als Rücktaste (zum Löschen) interpretiert werden sollen, wenn
          der Benutzer seinen Anmeldenamen eintippt.

     ‘kill-characters’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine Zeichenkette aus Zeichen, deren
          Eingabe als „ignoriere alle vorherigen Zeichen“ interpretiert
          werden soll (auch „Kill“-Zeichen genannt), wenn der Benutzer
          seinen Anmeldenamen eintippt.

     ‘chdir’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine Zeichenkette, die einen
          Verzeichnispfad angibt, zu dem vor der Anmeldung gewechselt
          wird.

     ‘delay’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine ganze Zahl mit der Anzahl
          Sekunden, die gewartet werden soll, bis ein TTY geöffnet und
          die Anmeldeaufforderung angezeigt wird.

     ‘nice’ (Vorgabe: ‘#f’)
          Dieses Feld akzeptiert eine ganze Zahl mit dem „nice“-Wert,
          mit dem das Anmeldeprogramm ausgeführt werden soll.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Dieses Feld ist ein „Notausstieg“, mit dem Nutzer beliebige
          Befehlszeilenoptionen direkt an ‘agetty’ übergeben können.
          Diese müssen hier als eine Liste von Zeichenketten angegeben
          werden.

     ‘shepherd-requirement’ (Vorgabe: ‘'()’)
          Mit dieser Option können zusätzliche Shepherd-Anforderungen
          für die einzelnen ‘'term-’*-Shepherd-Dienste festgelegt werden
          (zum Beispiel ‘'syslogd’).

 -- Variable: kmscon-service-type
     Diensttyp für kmscon
     (https://www.freedesktop.org/wiki/Software/kmscon), was das
     Anmelden auf virtuellen Konsolen ermöglicht. Der Wert des Dienstes
     mit diesem Typ ist ein ‘<kmscon-configuration>’-Objekt.

 -- Datentyp: kmscon-configuration
     Dieser Datentyp repräsentiert die Konfiguration von Kmscon, die
     unter anderem angibt, auf welchem TTY es ausgeführt werden soll.

     ‘virtual-terminal’
          Der Name der Konsole, auf der diese Kmscon läuft – z.B.
          ‘"tty1"’.

     ‘login-program’ (Vorgabe: ‘#~(string-append #$shadow "/bin/login")’)
          Ein G-Ausdruck, der den Namen des Anmeldeprogramms angibt. Als
          Vorgabe wird das Anmeldeprogramm ‘login’ aus dem
          Shadow-Werkzeugsatz verwendet.

     ‘login-arguments’ (Vorgabe: ‘'("-p")’)
          Eine Liste der Argumente, die an ‘login’ übergeben werden
          sollen.

     ‘auto-login’ (Vorgabe: ‘#f’)
          Wird hier ein Anmeldename als eine Zeichenkette übergeben,
          wird der angegebene Nutzer automatisch angemeldet, ohne nach
          einem Anmeldenamen oder Passwort zu fragen.

     ‘hardware-acceleration?’ (Vorgabe: #f)
          Ob Hardware-Beschleunigung verwendet werden soll.

     ‘font-engine’ (Vorgabe: ‘"pango"’)
          Welcher Schriftartentreiber in Kmscon benutzt wird.

     ‘font-size’ (Vorgabe: ‘12’)
          Welche Schriftgröße in Kmscon benutzt wird.

     ‘keyboard-layout’ (Vorgabe: ‘#f’)
          Wenn es auf ‘#f’ gesetzt ist, benutzt Kmscon die
          voreingestellte Tastaturbelegung, also normalerweise US
          English („QWERTY“) für eine PC-Tastatur mit 105 Tasten.

          Andernfalls muss hier ein ‘keyboard-layout’-Objekt stehen, das
          angibt, welche Tastaturbelegung aktiv sein soll. Siehe *note
          Tastaturbelegung:: für mehr Informationen, wie die
          Tastaturbelegung angegeben werden kann.

     ‘kmscon’ (Vorgabe: KMSCON)
          Das Kmscon-Paket, das benutzt werden soll.

 -- Variable: nscd-service-type
     Dies ist der Diensttyp für den nscd (Name Service Cache Daemon) aus
     der libc. Der Wert des Dienstes ist ein
     ‘<nscd-configuration>’-Objekt.

     Der Einfachheit halber bietet der Shepherd-Dienst für nscd die
     folgenden Aktionen an:

     ‘invalidate’
          Dies macht den angegebenen Zwischenspeicher ungültig. Wenn Sie
          zum Beispiel:

               herd invalidate nscd hosts

          ausführen, wird der Zwischenspeicher für die Auflösung von
          Rechnernamen (von „Host“-Namen) des nscd ungültig.

     ‘statistics’
          Wenn Sie ‘herd statistics nscd’ ausführen, werden Ihnen
          Informationen angezeigt, welche Ihnen Informationen über den
          nscd-Zustand und die Zwischenspeicher angezeigt.

 -- Datentyp: nscd-configuration
     Dieser Datentyp repräsentiert die Konfiguration des nscd (Name
     Service Cache Daemon).

     ‘name-services’ (Vorgabe: ‘'()’)
          Liste von Paketen, die “Namensdienste” bezeichnen, die für den
          nscd sichtbar sein müssen, z.B. ‘(list NSS-MDNS)’.

     ‘glibc’ (Vorgabe: GLIBC)
          Ein Paket-Objekt, das die GNU-C-Bibliothek angibt, woraus der
          ‘nscd’-Befehl genommen werden soll.

     ‘log-file’ (Vorgabe: ‘#f’)
          Name of the nscd log file. Debugging output goes to that file
          when ‘debug-level’ is strictly positive, or to standard error
          if it is ‘#f’. Regular messages are written to syslog when
          ‘debug-level’ is zero, regardless of the value of ‘log-file’.

     ‘debug-level’ (Vorgabe: ‘0’)
          Eine ganze Zahl, die den Detailgrad der Ausgabe zur
          Fehlersuche angibt. Größere Zahlen bewirken eine
          ausführlichere Ausgabe.

     ‘caches’ (Vorgabe: ‘%nscd-default-caches’)
          Liste der ‘<nscd-cache>’-Objekte, die repräsentieren, was
          alles zwischengespeichert werden soll; siehe unten.

 -- Datentyp: nscd-cache
     Ein Datentyp, der eine Zwischenspeicher-Datenbank von nscd mitsamt
     ihren Parametern definiert.

     ‘Datenbank’
          Dies ist ein Symbol, was den Namen der Datenbank
          repräsentiert, die zwischengespeichert werden soll. Gültige
          Werte sind ‘passwd’, ‘group’, ‘hosts’ und ‘services’, womit
          jeweils die entsprechende NSS-Datenbank bezeichnet wird (siehe
          *note (libc)NSS Basics::).

     ‘positive-time-to-live’
     ‘negative-time-to-live’ (Vorgabe: ‘20’)
          Eine Zahl, die für die Anzahl an Sekunden steht, die ein
          erfolgreiches (positives) oder erfolgloses (negatives)
          Nachschlageresultat im Zwischenspeicher verbleibt.

     ‘check-files?’ (Vorgabe: ‘#t’)
          Ob auf Änderungen an den der DATABASE entsprechenden Dateien
          reagiert werden soll.

          Wenn DATABASE zum Beispiel ‘hosts’ ist, wird, wenn dieses Feld
          gesetzt ist, nscd Änderungen an ‘/etc/hosts’ beobachten und
          berücksichtigen.

     ‘persistent?’ (Vorgabe: ‘#t’)
          Ob der Zwischenspeicher dauerhaft auf der Platte gespeichert
          werden soll.

     ‘shared?’ (Vorgabe: ‘#t’)
          Ob der Zwischenspeicher zwischen den Nutzern geteilt werden
          soll.

     ‘max-database-size’ (Vorgabe: 32 MiB)
          Die Maximalgröße des Datenbank-Zwischenspeichers in Bytes.

 -- Variable: %nscd-default-caches
     Liste von ‘<nscd-cache>’-Objekten, die von der vorgegebenen
     ‘nscd-configuration’ benutzt werden (siehe oben).

     Damit wird dauerhaftes und aggressives Zwischenspeichern beim
     Nachschlagen von Dienst- und Rechnernamen („Host“-Namen) aktiviert.
     Letzteres verbessert die Leistungsfähigkeit beim Nachschlagen von
     Rechnernamen, sorgt für mehr Widerstandsfähigkeit gegenüber
     unverlässlichen Namens-Servern und bietet außerdem einen besseren
     Datenschutz – oftmals befindet sich das Ergebnis einer Anfrage nach
     einem Rechnernamen bereits im lokalen Zwischenspeicher und externe
     Namens-Server müssen nicht miteinbezogen werden.

 -- Variable: syslog-service-type
     Type of the service that runs the syslog daemon (‘syslogd’), whose
     value is a ‘<syslog-configuration>’ object (see below).

          Anmerkung: Dieser Dienst ist redundant und größtenteils
          abgelöst durch ‘shepherd-system-log-service-type’ (siehe *note
          Shepherd Systemprotokoll ‘system-log’: shepherd-system-log.).

   Wenn eine geänderte ‘syslog-configuration’ nach dem Rekonfigurieren
Ihres Systems in Kraft treten soll, sollten Sie bevorzugt die
‘reload’-Aktion benutzen, statt den Dienst neu zu starten, weil viele
Dienste von Syslog abhängen und das auch viele Dienste wie die
Anmeldeverwaltung neu starten lassen würde:

     # herd reload syslog

   Das sorgt dafür, dass der schon laufende ‘syslogd’-Prozess seine
Konfiguration neu lädt.

 -- Datentyp: syslog-configuration
     Dieser Datentyp repräsentiert die Konfiguration des syslog-Daemons.

     ‘syslogd’ (Vorgabe: ‘#~(string-append #$inetutils "/libexec/syslogd")’)
          Welcher Syslog-Daemon benutzt werden soll.

     ‘config-file’ (Vorgabe: ‘%default-syslog.conf’)
          Die zu benutzende syslog-Konfigurationsdatei. Siehe *note
          (inetutils)syslogd invocation:: für weitere Informationen über
          die Syntax der Konfiguration.

     ‘extra-options’ (Vorgabe: ‘'()’)
          List of extra command-line options for ‘syslog’.

 -- Variable: guix-service-type
     Dies ist der Typ für den Dienst, der den Erstellungs-Daemon
     ‘guix-daemon’ ausführt (siehe *note Aufruf des guix-daemon::). Als
     Wert muss ein ‘guix-configuration’-Verbundsobjekt verwendet werden,
     wie unten beschrieben.

 -- Datentyp: guix-configuration
     Dieser Datentyp repräsentiert die Konfiguration des
     Erstellungs-Daemons von Guix. Siehe *note Aufruf des guix-daemon::
     für weitere Informationen.

     ‘guix’ (Vorgabe: GUIX)
          Das zu verwendende Guix-Paket. Siehe *note Anpassung des
          systemweiten Guix::, um zu erfahren, wie Sie ein Paket
          zusammen mit Kanälen voreinstellen.

     ‘privileged?’ (default: ‘#t’)
          Whether to run ‘guix-daemon’ as root.

          When true, ‘guix-daemon’ runs with root privileges and build
          processes run under unprivileged user accounts as specified by
          ‘build-group’ and ‘build-accounts’ (see below); when false,
          ‘guix-daemon’ run as the ‘guix-daemon’ user, which is
          unprivileged, and so do build processes. The unprivileged or
          “rootless” mode can reduce the impact of some classes of
          vulnerabilities that could affect the daemon.

          The default is currently ‘#t’ (‘guix-daemon’ runs with root
          privileges) but may eventually be changed to ‘#f’.

               Warnung: When changing this option, ‘/gnu/store’,
               ‘/var/guix’, and ‘/etc/guix’ have their ownership
               automatically changed by the ‘guix-ownership’ service to
               either the ‘guix-daemon’ user or the ‘root’ user (*note
               unprivileged-daemon-migration::).

               Das kann eine Weile dauern, besonders wenn der Store groß
               ist. Es kann nicht unterbrochen werden und ‘guix-daemon’
               kann nicht benutzt werden, bis die Änderung abgeschlossen
               ist.

          *Note Einrichten der Erstellungsumgebung::, for more
          information on the two ways to run ‘guix-daemon’.

     ‘build-group’ (Vorgabe: ‘"guixbuild"’)
          Der Name der Gruppe, zu der die Erstellungs-Benutzerkonten
          gehören.

     ‘build-accounts’ (Vorgabe: ‘10’)
          Die Anzahl zu erzeugender Erstellungs-Benutzerkonten.

     ‘chroot?’ (default: ‘'default’)
          The value should be one of ‘#t’ or ‘#f’, in which case chroot
          is enabled or disabled, respectively; or it should be
          ‘'default’, which amounts to ‘#f’ in Docker containers (so
          that they can be run in non-privileged mode) or ‘#t’
          otherwise.

     ‘authorize-key?’ (Vorgabe: ‘#t’)
          Ob die unter ‘authorized-keys’ aufgelisteten
          Substitutschlüssel autorisiert werden sollen – vorgegeben ist,
          den von ‘bordeaux.guix.gnu.org’ und ‘ci.guix.gnu.org’ zu
          autorisieren (siehe *note Substitute::).

          Wenn ‘authorize-key?’ wahr ist, kann ‘/etc/guix/acl’ durch
          einen Aufruf von ‘guix archive --authorize’ _nicht_ verändert
          werden. Sie müssen stattdessen die ‘guix-configuration’ wie
          gewünscht anpassen und das System rekonfigurieren. Dadurch
          wird sichergestellt, dass die
          Betriebssystemkonfigurationsdatei eigenständig ist.

               Anmerkung: Wenn Sie ein System mit auf wahr gesetztem
               ‘authorize-key?’ starten oder dahin rekonfigurieren, wird
               eine Sicherungskopie der bestehenden ‘/etc/guix/acl’ als
               ‘/etc/guix/acl.bak’ angelegt, wenn festgestellt wurde,
               dass jemand die Datei von Hand verändert hatte. Das
               passiert, um die Migration von früheren Versionen zu
               erleichtern, als eine direkte Modifikation der Datei
               ‘/etc/guix/acl’, „in place“, noch möglich war.

     ‘authorized-keys’ (Vorgabe: ‘%default-authorized-guix-keys’)
          Die Liste der Dateien mit autorisierten Schlüsseln, d.h. eine
          Liste von Zeichenketten als G-Ausdrücke (siehe *note Aufruf
          von guix archive::). Der vorgegebene Inhalt ist der Schlüssel
          von ‘bordeaux.guix.gnu.org’ und ‘ci.guix.gnu.org’ (siehe *note
          Substitute::). Siehe im Folgenden ‘substitute-urls’ für ein
          Beispiel, wie Sie sie ändern können.

     ‘use-substitutes?’ (Vorgabe: ‘#t’)
          Ob Substitute benutzt werden sollen.

     ‘substitute-urls’ (Vorgabe: ‘%default-substitute-urls’)
          Die Liste der URLs, auf denen nach Substituten gesucht wird,
          wenn nicht anders angegeben.

          Wenn Sie zum Beispiel gerne Substitute von ‘guix.example.org’
          zusätzlich zu ‘bordeaux.guix.gnu.org’ laden würden, müssen Sie
          zwei Dinge tun: Erstens ‘guix.example.org’ zu den
          ‘substitute-urls’ hinzufügen und zweitens dessen
          Signierschlüssel autorisieren, nachdem Sie ihn hinreichend
          geprüft haben (siehe *note Substitut-Server autorisieren::).
          Mit der Konfiguration unten wird das erledigt:

               (guix-configuration
                 (substitute-urls
                  (append (list "https://guix.example.org")
                          %default-substitute-urls))
                 (authorized-keys
                  (append (list (local-file "./guix.example.org-key.pub"))
                          %default-authorized-guix-keys)))

          In diesem Beispiel wird angenommen, dass die Datei
          ‘./guix.example.org-key.pub’ den öffentlichen Schlüssel
          enthält, mit dem auf ‘guix.example.org’ Substitute signiert
          werden.

     ‘generate-substitute-key?’ (Vorgabe: ‘#t’)
          Ob ein “Schlüsselpaar für Substitute” als
          ‘/etc/guix/signing-key.pub’ und ‘/etc/guix/signing-key.sec’
          erzeugt werden soll, wenn noch keines da ist.

          Mit dem Schlüsselpaar werden Store-Objekte exportiert, z.B.
          bei ‘guix publish’ (siehe *note Aufruf von guix publish::)
          oder ‘guix archive’ (siehe *note Aufruf von guix archive::).
          Es zu erzeugen dauert einige Sekunden, wenn genug Entropie
          vorrätig ist, und ist auch nur einmal nötig, aber z.B. auf
          virtuellen Maschinen, die so etwas _nicht_ brauchen, schalten
          Sie es vielleicht lieber aus, wenn die zusätzliche Zeit beim
          Systemstart ein Problem darstellt.

     ‘channels’ (Vorgabe: ‘#f’)
          Eine Liste der Kanäle, die in ‘/etc/guix/channels.scm’ genannt
          werden sollen, von wo sie ‘guix pull’ nach Vorgabe ausliest
          (siehe *note Aufruf von guix pull::):

               Anmerkung: Wenn Sie ein System rekonfigurieren, wird eine
               Sicherungskopie der bestehenden ‘/etc/guix/channels.scm’
               als ‘/etc/guix/channels.scm.bak’ angelegt, wenn
               festgestellt wurde, dass jemand die Datei von Hand
               verändert hatte. Das passiert, um die Migration von
               früheren Versionen zu erleichtern, als eine direkte
               Modifikation der Datei ‘/etc/guix/channels.scm’, „in
               place“, noch möglich war.

     ‘max-silent-time’ (Vorgabe: ‘3600’)
     ‘timeout’ (Vorgabe: ‘(* 3600 24)’)
          Die Anzahl an Sekunden, die jeweils nichts in die Ausgabe
          geschrieben werden darf bzw. die es insgesamt dauern darf, bis
          ein Erstellungsprozess abgebrochen wird. Beim Wert null wird
          nie abgebrochen.

     ‘log-compression’ (Vorgabe: ‘'gzip’)
          Die für Erstellungsprotokolle zu benutzende
          Kompressionsmethode – entweder ‘gzip’, ‘bzip2’ oder ‘none’.

     ‘discover?’ (Vorgabe: ‘#f’)
          Ob im lokalen Netzwerk laufende Substitutserver mit mDNS und
          DNS-SD ermittelt werden sollen oder nicht.

     ‘build-machines’ (Vorgabe: ‘#f’)
          In diesem Feld muss entweder ‘#f’ stehen oder eine Liste von
          G-Ausdrücken, die zu einem ‘build-machine’-Verbundsobjekt oder
          zu einer Liste von ‘build-machine’-Verbundsobjekten
          ausgewertet werden (siehe *note Auslagern des Daemons
          einrichten::).

          Wenn es ‘#f’ ist, bleibt die Datei ‘/etc/guix/machines.scm’
          unberührt. Ansonsten wird die Liste der G-Ausdrücke in
          ‘/etc/guix/machines.scm’ geschrieben. Wenn dort bereits eine
          vorherige Datei vorgefunden wird, wird eine Sicherungskopie
          von ihr in ‘/etc/guix/machines.scm.bak’ angelegt. So können
          Sie die Erstellungsmaschinen, an die Sie auslagern möchten,
          direkt in die Betriebssystemdeklaration schreiben, etwa so:

               (guix-configuration
                 (build-machines
                   (list #~(build-machine (name "foo.example.org") …)
                         #~(build-machine (name "bar.example.org") …))))

          Weitere Erstellungsmaschinen können über den
          ‘guix-extension’-Mechanismus hinzugefügt werden (siehe unten).

     ‘extra-options’ (Vorgabe: ‘'()’)
          Eine Liste zusätzlicher Befehlszeilenoptionen zu
          ‘guix-daemon’.

     ‘log-file’ (Vorgabe: ‘"/var/log/guix-daemon.log"’)
          Die Datei, in die die Standardausgabe und die
          Standardfehlerausgabe von ‘guix-daemon’ geschrieben werden.

     ‘http-proxy’ (Vorgabe: ‘#f’)
          Die URL des für das Herunterladen von Ableitungen mit fester
          Ausgabe und von Substituten zu verwendenden HTTP- und
          HTTPS-Proxys.

          Sie können den für den Daemon benutzten Proxy auch zur
          Laufzeit ändern, indem Sie die ‘set-http-proxy’-Aktion
          aufrufen, wodurch er neu gestartet wird.

               herd set-http-proxy guix-daemon http://localhost:8118

          Um die Proxy-Einstellungen zu löschen, führen Sie dies aus:

               herd set-http-proxy guix-daemon

     ‘tmpdir’ (Vorgabe: ‘#f’)
          Ein Verzeichnispfad, der angibt, wo ‘guix-daemon’ seine
          Erstellungen durchführt.

     ‘environment’ (Vorgabe: ‘'()’)
          Welche Umgebungsvariablen beim Aufruf des Daemons gesetzt sein
          sollen, als Liste von Zeichenketten der Form ‘Schlüssel=Wert’.

     ‘socket-directory-permissions’ (Vorgabe: ‘#o755’)
          Welche Dateiberechtigungen an das Verzeichnis
          ‘/var/guix/daemon-socket’ vergeben werden sollen. Hiermit,
          sowie mit ‘socket-directory-group’ und
          ‘socket-directory-user’, kann festgelegt werden, wer sich mit
          dem Erstellungs-Daemon über dessen Unix-Socket verbinden kann.
          TCP-Socket-Verbindungen sind hiervon _nicht_ betroffen.

     ‘socket-directory-user’ (Vorgabe: ‘#f’)
     ‘socket-directory-group’ (Vorgabe: ‘#f’)
          Benutzer und Gruppe, der das Verzeichnis
          ‘/var/guix/daemon-socket’ gehören soll, oder ‘#f’, um Benutzer
          und Gruppe beim Administrator root zu belassen.

 -- Datentyp: guix-extension
     Dieser Datentyp repräsentiert die Parameter des Erstellungs-Daemons
     von Guix, die erweiterbar sind. Ein Objekt dieses Typs kann als
     Diensterweiterung für Guix verwendet werden. Siehe *note
     Dienstkompositionen:: für weitere Informationen.

     ‘authorized-keys’ (Vorgabe: ‘'()’)
          Eine Liste dateiartiger Objekte, wobei jedes Listenelement
          einen öffentlichen Schlüssel enthält.

     ‘substitute-urls’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten, die jeweils eine URL mit
          Substituten enthalten.

     ‘build-machines’ (Vorgabe: ‘'()’)
          Eine Liste von G-Ausdrücken, die zu
          ‘build-machine’-Verbundsobjekten oder zu einer Liste von
          ‘build-machine’-Verbundsobjekten ausgewertet werden (siehe
          *note Auslagern des Daemons einrichten::).

          Mithilfe dieses Feldes kann ein Dienst geschrieben werden,
          durch den neue Erstellungsmaschinen hinzugefügt werden, an die
          Erstellungen durch den Daemon ausgelagert werden sollen. Das
          ist nützlich für Dienste wie die des Typs
          ‘hurd-vm-service-type’, womit eine virtuelle GNU/Hurd-Maschine
          direkt zum Auslagern eingerichtet wird (siehe *note
          ‘hurd-vm-service-type’: hurd-vm.).

     ‘chroot-directories’ (Vorgabe: ‘'()’)
          Eine Liste von dateiartigen Objekten oder Zeichenketten, die
          Verzeichnisse anzeigen, die im Erstellungs-Daemon zusätzlich
          nutzbar sind.

 -- Variable: udev-service-type
     Diensttyp des Dienstes, um udev auszuführen, was zur Laufzeit
     Gerätedateien ins Verzeichnis ‘/dev’ einfügt. Sein Wert ist ein
     ‘<udev-configuration>’-Objekt.

     Weil es einen Unterschied macht, welchen Dateinamen eine udev-Regel
     bzw. eine Hardwarebeschreibungsdatei trägt, ist es notwendig, nicht
     nur einfache dateiartige Objekte mit Regeln darin anzugeben, wo der
     Name ignoriert wird, sondern die dateiartigen Objekte für
     Verzeichnisse zu benutzen, wo sich optional Regeln unter
     ‘lib/udev/rules.d’ und sich optional Hardwaredateien unter
     ‘lib/udev/hwdb.d’ befinden. So ist es auch möglich, den Dienst mit
     ganzen Paketen zu konfigurieren, die Regeln und hwdb-Dateien
     enthalten.

     Der ‘udev-service-type’ kann mit dateiartigen Objekten, die dieser
     Hierarchie folgen, _erweitert_ werden. Um sie einfach zu erzeugen,
     gibt es die Prozeduren ‘udev-rule’ und ‘file->udev-rule’, um
     udev-Regeln bereitzustellen, sowie ‘udev-hardware’ und
     ‘file->udev-hardware’, um Hardwarebeschreibungsdateien
     bereitzustellen.

     Innerhalb der Betriebssystemdeklaration kann der Diensttyp mit den
     Prozeduren ‘udev-rules-service’ and ‘udev-hardware-service’
     erweitert werden.

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

     ‘udev (Vorgabe: eudev) (Typ: dateiartig)’
          Das Paketobjekt des udev-Dienstes. Zur Laufzeit wird dieses
          Paket benutzt und ist kompiliert für das Zielsystem. Um den
          Hardware-Index ‘hwdb.bin’ zu erstellen, wird das für das
          aktuelle System kompilierte Paket auch beim Erzeugen der
          Systemdefinition benutzt.

     ‘debug? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)’
          Whether to enable debug output. The debug output is written to
          the system log, ‘/var/log/messages’.

     ‘rules (default: '()) (type: list-of-file-like)’
          Liste von dateiartigen Objekten mit udev-Regeln in einem
          Unterverzeichnis.

     ‘hardware (Vorgabe: '()) (Typ: Liste-von-Dateiartigen)’
          Liste von dateiartigen Objekten mit
          udev-Hardwarebeschreibungsdateien in einem Unterverzeichnis.

 -- Prozedur: udev-rule DATEINAME INHALT
     Liefert eine udev-Regeldatei mit dem angegebenen DATEINAMEn, in der
     die vom Literal INHALT definierten Regeln stehen.

     Im folgenden Beispiel wird eine Regel für ein USB-Gerät definiert
     und in der Datei ‘90-usb-ding.rules’ gespeichert. Mit der Regel
     wird ein Skript ausgeführt, sobald ein USB-Gerät mit der
     angegebenen Produktkennung erkannt wird.

          (define %beispiel-udev-rule
            (udev-rule
              "90-usb-ding.rules"
              (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
                             "ATTR{product}==\"Beispiel\", "
                             "RUN+=\"/pfad/zum/skript\"")))

 -- Prozedur: udev-hardware DATEINAME INHALT
     Liefert eine udev-Hardwarebeschreibungsdatei mit dem angegebenen
     DATEINAMEn, in der die Hardwareinformationen INHALT stehen.

 -- Prozedur: udev-rules-service NAME REGELN [#:groups '()]
     Liefert einen Dienst, der den Dienst vom Typ ‘udev-service-type’ um
     die REGELN erweitert und den Dienst vom Typ ‘account-service-type’
     um die unter ‘#:groups’ angegebenen Systembenutzergruppen. Dazu
     wird ein Diensttyp ‘NAME-udev-rules’ für den einmaligen Gebrauch
     erzeugt, den der zurückgelieferte Dienst instanziiert.

     Hier zeigen wir, wie damit ‘udev-service-type’ um die vorher
     definierte Regel ‘%beispiel-udev-rule’ erweitert werden kann.

          (operating-system
           ;; …
           (services
             (cons (udev-rules-service 'usb-ding %beispiel-udev-rule)
                   %desktop-services)))

 -- Prozedur: udev-hardware-service NAME HARDWARE
     Liefert einen Dienst, der den Dienst vom Typ ‘udev-service-type’ um
     die HARDWARE erweitert. Sein Dienstname ist ‘NAME-udev-hardware’.

 -- Prozedur: file->udev-rule DATEINAME DATEI
     Liefert eine Datei mit udev-Regeln mit dem angegebenen DATEINAMEn,
     in der alle in der DATEI, einem dateiartigen Objekt, definierten
     Regeln stehen.

     Folgendes Beispiel stellt dar, wie wir eine bestehende Regeldatei
     verwenden können.

          (use-modules (guix download)     ;für url-fetch
                       (guix packages)     ;für origin
                       …)

          (define %android-udev-rules
            (file->udev-rule
              "51-android-udev.rules"
              (let ((version "20170910"))
                (origin
                 (method url-fetch)
                 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
                                     "android-udev-rules/" version "/51-android.rules"))
                 (sha256
                  (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))

   Weil auch Guix-Paketdefinitionen unter den RULES aufgeführt werden
können, um die udev-Regeln um diejenigen Definitionen zu ergänzen, die
im Unterverzeichnis ‘lib/udev/rules.d’ des jeweiligen Pakets aufgeführt
sind, hätten wir statt des bisherigen Beispiels zu FILE->UDEV-RULE also
auch das Paket ANDROID-UDEV-RULES benutzen können, das in Guix im Modul
‘(gnu packages android)’ vorhanden ist.

 -- Prozedur: file->udev-hardware DATEINAME DATEI
     Liefert eine udev-Hardwarebeschreibungsdatei mit dem angegebenen
     DATEINAMEn, in der alle in der DATEI, einem dateiartigen Objekt,
     definierten Regeln stehen.

   Das folgende Beispiel zeit, wie dieses Paket ‘android-udev-rules’
benutzt werden kann, damit das „Android-Tool“ ‘adb’ Geräte erkennen
kann, ohne dafür Administratorrechte vorauszusetzen. Man sieht hier
auch, wie die Benutzergruppe ‘adbusers’ erstellt werden kann, die
existieren muss, damit die im Paket ‘android-udev-rules’ definierten
Regeln richtig funktionieren. Um so eine Benutzergruppe zu erzeugen,
müssen wir sie sowohl unter den ‘supplementary-groups’ unserer
‘user-account’-Deklaration aufführen als auch sie im ‘groups’-Feld der
‘udev-rules-service’-Prozedur aufführen.

     (use-modules (gnu packages android)  ;für android-udev-rules
                  (gnu system shadow)     ;für user-group
                  …)

     (operating-system
       ;; …
       (users (cons (user-account
                     ;; …
                     (supplementary-groups
                      '("adbusers"   ;für adb
                        "wheel" "netdev" "audio" "video")))))
       ;; …
       (services
         (cons (udev-rules-service 'android android-udev-rules
                                   #:groups '("adbusers"))
               %desktop-services)))

 -- Variable: urandom-seed-service-type
     Etwas Entropie in der Datei ‘%random-seed-file’ aufsparen, die als
     Startwert (als sogenannter „Seed“) für ‘/dev/urandom’ dienen kann,
     nachdem das System neu gestartet wurde. Es wird auch versucht,
     ‘/dev/urandom’ beim Hochfahren mit Werten aus ‘/dev/hwrng’ zu
     starten, falls ‘/dev/hwrng’ existiert und lesbar ist.

 -- Variable: %random-seed-file
     Der Name der Datei, in der einige zufällige Bytes vom
     URANDOM-SEED-SERVICE abgespeichert werden, um sie nach einem
     Neustart von dort als Startwert für ‘/dev/urandom’ auslesen zu
     können. Als Vorgabe wird ‘/var/lib/random-seed’ verwendet.

 -- Variable: gpm-service-type
     Dieser Typ wird für den Dienst verwendet, der GPM ausführt, den
     “General-Purpose Mouse Daemon”, welcher zur Linux-Konsole
     Mausunterstützung hinzufügt. GPM ermöglicht es seinen Benutzern,
     auch in der Konsole die Maus zu benutzen und damit etwa Text
     auszuwählen, zu kopieren und einzufügen.

     Der Wert für Dienste dieses Typs muss eine ‘gpm-configuration’ sein
     (siehe unten). Dieser Dienst gehört _nicht_ zu den
     ‘%base-services’.

 -- Datentyp: gpm-configuration
     Repräsentiert die Konfiguration von GPM.

     ‘options’ (Vorgabe: ‘%default-gpm-options’)
          Befehlszeilenoptionen, die an ‘gpm’ übergeben werden. Die
          vorgegebenen Optionen weisen ‘gpm’ an, auf Maus-Ereignisse auf
          der Datei ‘/dev/input/mice’ zu lauschen. Siehe *note
          (gpm)Command Line:: für weitere Informationen.

     ‘gpm’ (Vorgabe: ‘gpm’)
          Das GPM-Paket, was benutzt werden soll.

 -- Variable: guix-publish-service-type
     Dies ist der Diensttyp für ‘guix publish’ (siehe *note Aufruf von
     guix publish::). Sein Wert muss ein
     ‘guix-publish-configuration’-Objekt sein, wie im Folgenden
     beschrieben.

     Hierbei wird angenommen, dass ‘/etc/guix’ bereits ein mit ‘guix
     archive --generate-key’ erzeugtes Schlüsselpaar zum Signieren
     enthält (siehe *note Aufruf von guix archive::). Falls nicht, wird
     der Dienst beim Starten fehlschlagen.

 -- Datentyp: guix-publish-configuration
     Der Datentyp, der die Konfiguration des „‘guix publish’“-Dienstes
     repräsentiert.

     ‘guix’ (Vorgabe: ‘guix’)
          Das zu verwendende Guix-Paket.

     ‘port’ (Vorgabe: ‘80’)
          Der TCP-Port, auf dem auf Verbindungen gelauscht werden soll.

     ‘host’ (Vorgabe: ‘"localhost"’)
          Unter welcher Rechneradresse (welchem „Host“, also welcher
          Netzwerkschnittstelle) auf Verbindungen gelauscht wird.
          Benutzen Sie ‘"0.0.0.0"’, wenn auf allen verfügbaren
          Netzwerkschnittstellen gelauscht werden soll.

     ‘advertise?’ (Vorgabe: ‘#f’)
          Steht dies auf wahr, wird anderen Rechnern im lokalen Netzwerk
          über das Protokoll DNS-SD unter Verwendung von Avahi
          mitgeteilt, dass dieser Dienst zur Verfügung steht.

          Dadurch können in der Nähe befindliche Guix-Maschinen mit
          eingeschalteter Ermittlung (siehe oben die
          ‘guix-configuration’) diese Instanz von ‘guix publish’
          entdecken und Substitute darüber beziehen.

     ‘compression’ (Vorgabe: ‘'(("gzip" 3) ("zstd" 3))’)
          Dies ist eine Liste von Tupeln aus Kompressionsmethode und
          -stufe, die zur Kompression von Substituten benutzt werden. Um
          zum Beispiel alle Substitute mit _beiden_, sowohl lzip auf
          Stufe 7 und gzip auf Stufe 9, zu komprimieren, schreiben Sie:

               '(("lzip" 7) ("gzip" 9))

          Auf Stufe 9 ist das Kompressionsverhältnis am besten, auf
          Kosten von hoher Prozessorauslastung, während auf Stufe 1 eine
          schnelle Kompression erreicht wird. Siehe *note Aufruf von
          guix publish:: für weitere Informationen zu den verfügbaren
          Kompressionsmethoden und ihren jeweiligen Vor- und Nachteilen.

          Wird eine leere Liste angegeben, wird Kompression
          abgeschaltet.

     ‘nar-path’ (Vorgabe: ‘"nar"’)
          Der URL-Pfad, unter dem „Nars“ zum Herunterladen angeboten
          werden. Siehe *note ‘--nar-path’: Aufruf von guix publish. für
          Details.

     ‘cache’ (Vorgabe: ‘#f’)
          Wenn dies ‘#f’ ist, werden Archive nicht zwischengespeichert,
          sondern erst bei einer Anfrage erzeugt. Andernfalls sollte
          dies der Name eines Verzeichnisses sein – z.B.
          ‘"/var/cache/guix/publish"’ –, in das ‘guix publish’ fertige
          Archive und Metadaten zwischenspeichern soll. Siehe *note
          ‘--cache’: Aufruf von guix publish. für weitere Informationen
          über die jeweiligen Vor- und Nachteile.

     ‘workers’ (Vorgabe: ‘#f’)
          Ist dies eine ganze Zahl, gibt es die Anzahl der
          Worker-Threads an, die zum Zwischenspeichern benutzt werden;
          ist es ‘#f’, werden so viele benutzt, wie es Prozessoren gibt.
          Siehe *note ‘--workers’: Aufruf von guix publish. für mehr
          Informationen.

     ‘cache-bypass-threshold’ (Vorgabe: 10 MiB)
          Wenn ‘cache’ wahr ist, ist dies die Maximalgröße in Bytes, die
          ein Store-Objekt haben darf, damit ‘guix publish’ den
          Zwischenspeicher umgehen darf, falls eine Suche darin mit
          negativem Ergebnis ausfällt („Cache Miss“). Siehe *note
          ‘--cache-bypass-threshold’: Aufruf von guix publish. für
          weitere Informationen.

     ‘ttl’ (Vorgabe: ‘#f’)
          Wenn dies eine ganze Zahl ist, bezeichnet sie die
          “Time-to-live” als die Anzahl der Sekunden, die
          heruntergeladene veröffentlichte Archive zwischengespeichert
          werden dürfen. Siehe *note ‘--ttl’: Aufruf von guix publish.
          für mehr Informationen.

     ‘negative-ttl’ (Vorgabe: ‘#f’)
          Wenn dies eine ganze Zahl ist, bezeichnet sie die
          “Time-to-live” für erfolglose (negative) Suchen, als Anzahl
          der Sekunden. Siehe *note ‘--negative-ttl’: Aufruf von guix
          publish. für mehr Informationen.

 -- Variable: rngd-service-type
     Diensttyp des Dienstes, um das ‘rngd’-Programm aus den ‘rng-tools’
     auszuführen. Sein Wert ist ein ‘<rngd-configuration>’-Objekt.

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

     ‘rng-tools’ (Vorgabe: ‘rng-tools’) (Typ: dateiartig)
          Paketobjekt mit dem ‘rngd’-Programm aus den ‘rng-tools’.

     ‘device’ (Vorgabe: "/DEV/HWRNG") (Typ: Zeichenkette)
          Der Pfad zum Gerät, das zum Entropie-Pool des Kernels
          hinzugefügt werden soll. Dieser Dienst wird fehlschlagen,
          falls das mit DEVICE bezeichnete Gerät nicht existiert.<

 -- Variable: pam-limits-service-type
     Diensttyp des Dienstes, der eine Konfigurationsdatei für das
     ‘pam_limits’-Modul
     (http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html)
     installiert. Der Wert des Dienstes ist eine Liste von
     ‘pam-limits-entry’-Werten, die benutzt werden können, um
     ‘ulimit’-Limits und ‘nice’-Prioritäten für Benutzersitzungen
     festzulegen. Vorgegeben ist, dass der Wert die leere Liste ist.

     Die folgenden Limit-Definitionen setzen zwei harte und weiche
     Limits für alle Anmeldesitzungen für Benutzer in der
     ‘realtime’-Gruppe.

          (service pam-limits-service-type
                   (list
                    (pam-limits-entry "@realtime" 'both 'rtprio 99)
                    (pam-limits-entry "@realtime" 'both 'memlock 'unlimited)))

     Der erste Eintrag erhöht die maximale Echtzeit-Priorität für
     unprivilegierte Prozesse ohne zusätzliche Berechtigungen; der
     zweite Eintrag hebt jegliche Einschränkungen des maximalen
     Adressbereichs auf, der im Speicher reserviert werden darf. Diese
     Einstellungen werden in dieser Form oft für Echtzeit-Audio-Systeme
     verwendet.

     Ein weiteres nützliches Beispiel stellt das Erhöhen der Begrenzung
     dar, wie viele geöffnete Dateideskriptoren auf einmal benutzt
     werden können:

          (service pam-limits-service-type
                   (list
                    (pam-limits-entry "*" 'both 'nofile 100000)))

     Im Beispiel oben steht das Sternchen dafür, dass die Beschränkung
     für alle Benutzer gelten soll. Es ist wichtig, dass Sie darauf
     achten, dass der Wert _nicht_ größer als der Höchstwert des Systems
     ist, der in der Datei ‘/proc/sys/fs/file-max’ zu finden ist, denn
     sonst könnten sich Benutzer _nicht_ mehr anmelden. Weitere
     Informationen über Schranken im Pluggable Authentication Module
     (PAM) bekommen Sie, wenn Sie die Handbuchseite im ‘linux-pam’-Paket
     lesen.

 -- Variable: greetd-service-type
     ‘greetd’ (https://git.sr.ht/~kennylevinsen/greetd) ist ein
     minimaler und flexibler Daemon zur Anmeldeverwaltung, der _nicht_
     voraussetzt, dass zu startende Programme außergewöhnliche
     Anforderungen erfüllen müssen.

     Wenn Sie etwas von der Shell in einer virtuellen Konsole aufrufen
     können, dann kann greetd das auch aufrufen. Wenn dem Programm ein
     einfaches JSON-basiertes Protokoll zur Interprozesskommunikation
     beigebracht werden kann, kann es für die Anmeldung verwendet werden
     als „Greeter“.

     ‘greetd-service-type’ steuert die Infrastruktur bei, um Nutzer
     anzumelden. Dazu gehört:

        • ‘greetd’-PAM-Dienst

        • Eine besondere Variation von ‘pam-mount’, mit der das
          ‘XDG_RUNTIME_DIR’-Verzeichnis eingebunden wird

     Hier ist ein Beispiel, wie Sie von ‘mingetty-service-type’ auf
     ‘greetd-service-type’ umsteigen können und wie verschiedene
     Terminals eingerichtet werden könnten:

            (append
             (modify-services %base-services
               ;; greetd-service-type bringt uns den PAM-Dienst von "greetd"
               (delete login-service-type)
               ;; und er kann mingetty-service-type ersetzen
               (delete mingetty-service-type))
             (list
              (service greetd-service-type
                       (greetd-configuration
                        (terminals
                         (list
                          ;; wir haben die Wahl, welches Terminal anfangs aktiv sein soll
                          (greetd-terminal-configuration (terminal-vt "1") (terminal-switch #t))
                          ;; wir bestimmen, ob in der Umgebung XDG_RUNTIME_DIR gesetzt wird
                          ;; und können sogar eigene Umgebungsvariable vorgeben
                          (greetd-terminal-configuration
                           (terminal-vt "2")
                           (default-session-command
                             (greetd-agreety-session
                              (command
                               (greetd-user-session
                                (extra-env '(("MEINE_VAR" . "1")))
                                (xdg-env? #f))))))
                          ;; wir können eine andere Shell als wie vorgegeben bash benutzen
                          (greetd-terminal-configuration
                           (terminal-vt "3")
                           (default-session-command
                             (greetd-agreety-session
                              (command
                               (greetd-user-session
                                (command (file-append zsh "/bin/zsh"))
                                (command-args '("-l"))
                                (extra-env '(("MEINE_VAR" . "1")))
                                (xdg-env? #f))))))
                          ;; wir können jeden ausführbaren Befehl zum Greeter machen
                          (greetd-terminal-configuration
                           (terminal-vt "4")
                           (default-session-command (program-file "nichts-tun-greeter" #~(exit))))
                          (greetd-terminal-configuration (terminal-vt "5"))
                          (greetd-terminal-configuration (terminal-vt "6"))))))
              ;; mingetty-service-type kann auch parallel benutzt werden;
              ;; wenn man das will, sollte man (delete login-service-type)
              ;; oben weglassen
              #| (service mingetty-service-type (mingetty-configuration (tty "tty8"))) |#))

 -- Datentyp: greetd-configuration
     Das Verbundsobjekt mit der Konfiguration des ‘greetd-service-type’.

     ‘motd’
          Ein dateiartiges Objekt, das die „Message of the Day“ enthält.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#t’)
          Leere Passwörter standardmäßig zulassen, damit sich neue
          Anwender anmelden können, direkt nachdem das Benutzerkonto
          „root“ für den Administrator angelegt wurde.

     ‘terminals’ (Vorgabe: ‘'()’)
          Eine Liste von ‘greetd-terminal-configuration’ für jedes
          Terminal, für das ‘greetd’ gestartet werden soll.

     ‘greeter-supplementary-groups’ (Vorgabe: ‘'()’)
          Die Liste der Gruppen, zu denen das Benutzerkonto ‘greeter’
          hinzugefügt werden soll. Zum Beispiel:
               (greeter-supplementary-groups '("seat" "video"))
          Beachten Sie, diese Aktion schlägt fehl, wenn es die Gruppe
          ‘seat’ nicht gibt.

 -- Datentyp: greetd-terminal-configuration
     Verbundsobjekt zur Konfiguration des greetd-Daemons auf einem der
     Terminals.

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

     ‘extra-shepherd-requirement’ (Vorgabe: ‘'()’)
          Mit dieser Option können Sie als eine Liste von Symbolen
          _zusätzliche_ Shepherd-Dienste benennen, von welchen dieser
          Dienst abhängen soll. Beispielsweise geben Sie hier ‘'seatd’
          oder ‘'elogind’ an, wenn es sich bei der Terminal-Sitzung um
          einen grafischen Greeter handelt.

     ‘config-file-name’
          Welchen Namen die Konfigurationsdatei des greetd-Daemons
          bekommen soll. Im Allgemeinen wird er automatisch aus dem Wert
          von ‘terminal-vt’ abgeleitet.

     ‘log-file-name’
          Welchen Namen die Protokolldatei des greetd-Daemons bekommen
          soll. Im Allgemeinen wird er automatisch aus dem Wert von
          ‘terminal-vt’ abgeleitet.

     ‘terminal-vt’ (Vorgabe: ‘"7"’)
          Auf welchem virtuellen Terminal das hier läuft. Wir empfehlen,
          ein bestimmtes VT zu wählen und Konflikte zu vermeiden.

     ‘terminal-switch’ (Vorgabe: ‘#f’)
          Ob dieses Terminal beim Start von ‘greetd’ aktiv gemacht
          werden soll.

     ‘source-profile?’ (Vorgabe: ‘#t’)
          Ob ‘/etc/profile’ und ‘~/.profile’ mit ‘source’ geladen werden
          sollen, wenn die Dateien existieren.

     ‘initial-session-user’ (default: ‘#f’)
          The user to use for running the initial session, if any.

     ‘initial-session-command’ (default: ‘#f’)
          The command to run the first time the greeter starts up, to
          auto-login. For that to be useful, you should also set
          ‘initial-session-user’. Then, greetd will automatically log in
          with that user and execute that command. When you eventually
          log out again, the regular greeter will appear.

     ‘default-session-user’ (Vorgabe: ‘"greeter"’)
          Mit welchem Benutzerkonto der Greeter ausgeführt werden soll.

     ‘default-session-command’ (Vorgabe: ‘(greetd-agreety-session)’)
          Dafür können Sie entweder eine ‘greetd-agreety-session’, eine
          ‘greetd-wlgreet-sway-session’ oder eine
          ‘greetd-gtkgreet-sway-session’ angeben oder ein dateiartiges
          Objekt als Greeter benutzen.

 -- Datentyp: greetd-user-session
     Verbundsobjekt für die Konfiguration des Befehls für die
     Benutzersitzung. Für Greeter muss der Benutzerbefehl auf die eine
     oder andere Weise angegeben werden. ‘greetd-user-session’ bietet
     einen gemeinsamen Befehl dafür. Benutzer sollten POSIX-Shellbefehle
     wie ‘bash’ bevorzugen, die eine richtige Benutzerterminalshell,
     eine Fensterverwaltung oder Desktop-Arbeitsumgebung mit deren
     eigenem Mechanismus starten können, zum Beispiel über ‘~/.bashrc’
     im Fall von Bash.

     ‘command’ (Vorgabe: ‘(file-append bash "/bin/bash")’)
          Der bei erfolgreicher Anmeldung durch ‘agreety’ auszuführende
          Befehl.

     ‘command-args’ (Vorgabe: ‘'("-l")’)
          Die Befehlszeilenargumente, die an den ‘command’-Befehl
          übergeben werden.

     ‘extra-env’ (Vorgabe: ‘'()’)
          Zusätzliche Umgebungsvariable, die bei der Anmeldung gesetzt
          werden sollen.

     ‘xdg-session-type’ (Vorgabe: ‘"tty"’)
          Welchen Wert ‘XDG_SESSION_TYPE’ haben soll. Die
          Benutzerumgebung kann sich abhängig von diesem Wert anders
          einrichten (normalerweise über ‘.bashrc’ oder Ähnliches).

     ‘xdg-env?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr steht, werden ‘XDG_RUNTIME_DIR’ und
          ‘XDG_SESSION_TYPE’ gesetzt, bevor ‘command’ ausgeführt wird.
          Es ist zu bedenken, dass die Variablen in ‘extra-env’ sofort
          anschließend gesetzt werden und somit Vorrang haben.

 -- Datentyp: greetd-agreety-session
     Verbundstyp zur Konfiguration des greetd-Greeters agreety.

     ‘agreety’ (Vorgabe: ‘greetd’)
          Das Paket mit dem Befehl ‘agreety’.

     ‘command’ (Vorgabe: ‘(greetd-user-session)’)
          Der bei erfolgreicher Anmeldung durch ‘agreety’ auszuführende
          Befehl, als Instanz von ‘greetd-user-session’.

 -- Datentyp: greetd-wlgreet-configuration
     Allgemeiner Verbundstyp zur Konfiguration des greetd-Greeters
     wlgreet.

     ‘output-mode’ (Vorgabe: ‘"all"’)
          Was für die Option ‘outputMode’ in die
          TOML-Konfigurationsdatei eingetragen wird.

     ‘scale’ (Vorgabe: ‘1’)
          Was für die Option ‘scale’ in die TOML-Konfigurationsdatei
          eingetragen wird.

     ‘background’ (Vorgabe: ‘'(0 0 0 0.9)’)
          Eine RGBA-Liste, die die Hintergrundfarbe der
          Anmeldeaufforderung angibt.

     ‘headline’ (Vorgabe: ‘'(1 1 1 1)’)
          Eine RGBA-Liste, die die Farbe der Titelzeile in der
          Benutzeroberfläche angibt.

     ‘prompt’ (Vorgabe: ‘'(1 1 1 1)’)
          Eine RGBA-Liste, die die Farbe von Aufforderungen in der
          Benutzeroberfläche angibt.

     ‘prompt-error’ (Vorgabe: ‘'(1 1 1 1)’)
          Eine RGBA-Liste, die die Farbe von Fehlern in der
          Benutzeroberfläche angibt.

     ‘border’ (Vorgabe: ‘'(1 1 1 1)’)
          Eine RGBA-Liste, die die Farbe von Umrandungen in der
          Benutzeroberfläche angibt.

 -- Datentyp: greetd-wlgreet-sway-session
     Verbundstyp zur auf Sway bezogenen Konfiguration des
     greetd-Greeters wlgreet.

     ‘wlgreet-session’ (Vorgabe: ‘(greetd-wlgreet-session)’)
          Ein Verbundsobjekt vom Typ ‘greetd-wlgreet-session’, das die
          allgemeine wlgreet-Konfiguration enthält, zusätzlich zur auf
          Sway bezogenen ‘greetd-wlgreet-sway-session’.

     ‘sway’ (Vorgabe: ‘sway’)
          Das Paket mit dem Befehl ‘sway’.

     ‘sway-configuration’ (Vorgabe: #f)
          Ein dateiartiges Objekt, das eine Sway-Konfigurationsdatei
          enthält, die dem Pflichtteil der Konfiguration vorangestellt
          wird.

     ‘wlgreet’ (Vorgabe: ‘wlgreet’)
          Das Paket mit dem Befehl ‘wlgreet’.

     ‘wlgreet-configuration’ (Vorgabe: ‘(greetd-wlgreet-configuration)’)
          Die Konfiguration von ‘wlgreet’, repräsentiert als
          ‘greetd-wlgreet-configuration’.

     ‘command’ (Vorgabe: ‘(greetd-user-session)’)
          Der bei erfolgreicher Anmeldung durch ‘wlgreet’ auszuführende
          Befehl, als Instanz von ‘greetd-user-session’.

     Hier ist ein Beispiel, wie Sie greetd unter Verwendung von wlgreet
     und Sway konfigurieren können:

            (greetd-configuration
             ;; Der grafische Greeter braucht zusätzliche Gruppenzugehörigkeiten.
             (greeter-supplementary-groups (list "video" "input" "seat"))
             (terminals
              (list (greetd-terminal-configuration
                     ;; Sway braucht den seatd-Dienst.
                     (extra-shepherd-requirement '(seatd))
                     (terminal-vt "1")
                     (terminal-switch #t)
                     (default-session-command
                      (greetd-wlgreet-sway-session
                       (sway-configuration
                        ;; Optional weitere Sway-Konfigurationen.
                        (local-file "sway-greetd.conf"))))))))

 -- Datentyp: greetd-gtkgreet-sway-session
     Verbundstyp zur Konfiguration des greetd-Greeters gtkgreet. Er wird
     wie folgt benutzt:

            (greetd-configuration
             ;; Der grafische Greeter braucht zusätzliche Gruppenzugehörigkeiten.
             (greeter-supplementary-groups (list "video" "input" "seat"))
             (terminals
              (list (greetd-terminal-configuration
                     ;; Sway braucht den seatd-Dienst.
                     (extra-shepherd-requirement '(seatd))
                     (terminal-vt "1")
                     (terminal-switch #t)
                     (default-session-command
                      (greetd-gtkgreet-sway-session
                       (command
                        (greetd-user-session
                         ;; Optional wird an .bashrc signalisiert, dass wir gerne den
                         ;; Wayland-Compositor hätten.
                         (xdg-session-type "wayland")))))))))

     ‘sway’ (Vorgabe: ‘sway’)
          Das Paket mit den Befehlen ‘sway’ und ‘swaymsg’.

     ‘sway-configuration’ (Vorgabe: ‘#f’)
          Zusätzliche dateiartige Konfiguration für Sway, die
          eingebunden wird, bevor der Greeter ausgeführt wird.

     ‘gtkgreet’ (Vorgabe: ‘gtkgreet’)
          Das Paket mit dem Befehl ‘gtkgreet’.

     ‘gtkgreet-style’ (Vorgabe: ‘#f’)
          Zusätzliche dateiartige CSS-Stylesheet, um das Aussehen von
          GTK anzupassen.

     ‘command’ (Vorgabe: ‘(greetd-user-session)’)
          Der bei erfolgreicher Anmeldung durch ‘gtkgreet’ auszuführende
          Befehl, als Instanz von ‘greetd-user-session’.

   ---------- Footnotes ----------

   (1) Siehe die Handbuchseite ‘agetty(8)’ für mehr Informationen.


File: guix.de.info,  Node: Geplante Auftragsausführung,  Next: Log-Rotation,  Prev: Basisdienste,  Up: Dienste

11.10.2 Geplante Auftragsausführung
-----------------------------------

Oft müssen Sie Systemaufgaben wiederholt laufen lassen. Dazu können Sie
Shepherds “Timer” verwenden oder den früheren, etwas weniger
vielseitigen mcron-Dienst.

11.10.2.1 Shepherd-Timer
........................

Shepherd ermöglicht, Aufträge (sogenannte „Jobs“) wiederholt ausführen
zu lassen, indem Sie “Timer” definieren, eine besondere Art von Dienst.
Ein Shepherd-Timer kann wie andere Shepherd-Dienste definiert werden,
aber mit bestimmten ‘start’- und ‘stop’-Methoden (siehe *note
Shepherd-Dienste::):

     ;; Wir definieren einen Timer, auf ausführlich.
     (shepherd-service
      (provision '(updatedb))
      (requirement '(user-processes))
      (modules '((shepherd service timer)))
      (start #~(make-timer-constructor
                ;; Täglich um 3 Uhr morgens (in Vixie-cron-Syntax).
                (cron-string->calendar-event "0 3 * * *")
                (command '(#$(file-append findutils "/bin/updatedb")))
                #:wait-for-termination? #t))
      (stop #~(make-timer-destructor))
      (documentation "'updatedb' immer wieder wiederholen.")
      (actions (list shepherd-trigger-action)))

   Das ist ganz schön viel zu schreiben, aber es gibt dafür auch eine
gleichbedeutende kurze Schreibweise:

     ;; Gleichbedeutenden Timer definieren in kurz.
     (shepherd-timer '(updatedb) "0 3 * * *"
                     #~(#$(file-append findutils "/bin/updatedb"))
                     #:requirement '(user-processes))

   Diese Prozedur ist folgendermaßen definiert:

 -- Procedure: shepherd-timer PROVISION SCHEDULE COMMAND [#:requirement
          '()]  [#:documentation
     %default-timer-documentation] Return a Shepherd service with the
     given PROVISION periodically running COMMAND, a list-valued gexp,
     according to SCHEDULE, a string in Vixie cron syntax or a gexp
     providing a Shepherd calendar event. DOCUMENTATION is the string
     that appears when running ‘herd doc SERVICE’.

   The example below shows how to define a timer and to add it to your
operating system configuration.

     (use-modules (gnu))
     (use-service-modules shepherd)
     (use-package-modules base)

     (define updatedb-timer
       ;; Run 'updatedb' at 3AM everyday.
       (shepherd-timer '(updatedb)
                       "0 3 * * *"  ;Vixie cron syntax
                       #~(#$(file-append findutils "/bin/updatedb")
                          "--prunepaths=/tmp /var/tmp /gnu/store")
                       #:requirement '(user-processes)))

     (define garbage-collection-timer
       ;; Run 'guix gc' everyday at 5AM.
       (shepherd-timer '(garbage-collection)
                       #~(calendar-event #:hours '(5) #:minutes '(0))
                       #~("/run/current-system/profile/bin/guix"
                          "gc" "-F" "10G")
                       #:requirement '(guix-daemon)))

     (operating-system
       ;; …

       ;; Extend the Shepherd service with additional timers
       ;; using 'simple-service'.
       (services (cons (simple-service 'my-timers
                                        shepherd-root-service-type
                                        (list garbage-collection-timer
                                              updatedb-timer))
                       %base-services)))

   The resulting system contains these two services, which can be
inspected with ‘herd status’. They can also be triggered manually:

     herd trigger garbage-collection

   Siehe *note (shepherd)Timers:: für weitere Informationen zu
Shepherd-Timern.

11.10.2.2 Mcron
...............

Alternativ enthält das Modul ‘(gnu services mcron)’ eine Schnittstelle
zu GNU mcron, einem Daemon, der gemäß einem vorher festgelegten Zeitplan
Aufträge ausführt (siehe *note (mcron)Top::). GNU mcron ist ähnlich zum
traditionellen ‘cron’-Daemon aus Unix; der größte Unterschied ist, dass
mcron in Guile Scheme implementiert ist. Es bietet insgesamt weniger
Komfort als Shepherd-Timer: einzelne Aufträge können _nicht_ von
bestimmten Shepherd-Diensten abhängen, protokolliert wird nur grob (in
einer Datei für alle Aufträge), die Aufträge kann man dort _nicht_
untersuchen, anpassen oder manuell auslösen.

     Anmerkung: Aus den oben genannten Gründen empfehlen wir, dass Sie
     Shepherd-Timer verwenden statt mcron, wenn Sie Aufgaben wiederholen
     müssen.

   Das folgende Beispiel definiert ein Betriebssystem, das täglich die
Befehle ‘updatedb’ (siehe *note (find)Invoking updatedb::) und ‘guix gc’
(siehe *note Aufruf von guix gc::) ausführt sowie den Befehl ‘mkid’ im
Namen eines „unprivilegierten“ Nutzers ohne besondere Berechtigungen
laufen lässt (siehe *note (idutils)mkid invocation::). Zum Anlegen von
Auftragsdefinitionen benutzt es G-Ausdrücke, die dann an mcron übergeben
werden (siehe *note G-Ausdrücke::).

     (use-modules (guix) (gnu) (gnu services mcron))
     (use-package-modules base idutils)

     (define updatedb-job
       ;; 'updatedb' jeden Tag um 3 Uhr morgens ausführen. Hier schreiben wir
       ;; die vom Auftrag durchzuführende Aktion als eine Scheme-Prozedur.
       #~(job '(next-hour '(3))
              (lambda ()
                (system* (string-append #$findutils "/bin/updatedb")
                         "--prunepaths=/tmp /var/tmp /gnu/store"))
              "updatedb"))

     (define garbage-collector-job
       ;; Jeden Tag 5 Minuten nach Mitternacht Müll sammeln gehen.
       ;; Die Aktion des Auftrags ist ein Shell-Befehl.
       #~(job "5 0 * * *"            ;Vixie-cron-Syntax
              "guix gc -F 1G"))

     (define idutils-job
       ;; Die Index-Datenbank des Benutzers "charlie" um 12:15 Uhr und
       ;; 19:15 Uhr aktualisieren. Dies wird aus seinem Persönlichen
       ;; Ordner heraus ausgeführt.
       #~(job '(next-minute-from (next-hour '(12 19)) '(15))
              (string-append #$idutils "/bin/mkid src")
              #:user "charlie"))

     (operating-system
       ;; …

       ;; In den %BASE-SERVICES kommt bereits eine Instanz des
       ;; 'mcron-service-type' vor. Wir erweitern sie um weitere
       ;; Aufträge mit einem 'simple-service'.
       (services (cons (simple-service 'my-cron-jobs
                                        mcron-service-type
                                        (list garbage-collector-job
                                              updatedb-job
                                              idutils-job))
                       %base-services)))

     Tipp: Wenn Sie die Aktion einer Auftragsspezifikation als eine
     Prozedur angeben, sollten Sie ausdrücklich einen Namen für den
     Auftrag im dritten Argument angeben, wie oben im Beispiel zum
     ‘updatedb-job’ gezeigt. Andernfalls wird für den Auftrag nur
     „Lambda function“ in der Ausgabe von ‘herd schedule mcron’
     angezeigt, was viel zu wenig Aussagekraft hat!

     Tipp: Benutzen Sie _nicht_ die Guile-Prozeduren ‘execl’, ‘execle’
     oder ‘execlp’ in Auftragsspezifikationen, sonst wäre mcron nicht in
     der Lage, auszugeben, mit welchem Status der Auftrag abgeschlossen
     wurde.

   Wenn Sie einen komplexeren Auftrag mit Scheme-Code auf oberster Ebene
festlegen möchten, um zum Beispiel eine ‘use-modules’-Form einzuführen,
können Sie Ihren Code in ein separates Programm verschieben, indem Sie
die Prozedur ‘program-file’ aus dem Modul ‘(guix gexp)’ benutzen (siehe
*note G-Ausdrücke::). Das folgende Beispiel veranschaulicht dies.

     (define %batterie-alarm-auftrag
       ;; Piepsen, wenn die Akkuladung in Prozent unter %MIN-NIVEAU fällt.
       #~(job
          '(next-minute (range 0 60 1))
          #$(program-file
             "batterie-alarm.scm"
             (with-imported-modules (source-module-closure
                                     '((guix build utils)))
               #~(begin
                   (use-modules (guix build utils)
                                (ice-9 popen)
                                (ice-9 regex)
                                (ice-9 textual-ports)
                                (srfi srfi-2))
                   (define %min-niveau 20)
                   (setenv "LC_ALL" "C")     ;Ausgabe auf Englisch
                   (and-let* ((input-pipe (open-pipe*
                                           OPEN_READ
                                           #$(file-append acpi "/bin/acpi")))
                              (ausgabe (get-string-all input-pipe))
                              (m (string-match "Discharging, ([0-9]+)%" ausgabe))
                              (niveau (string->number (match:substring m 1)))
                              ((< niveau %min-niveau)))
                     (format #t "Warnung: Batterieladung nur noch (~a%)~%" niveau)
                     (invoke #$(file-append beep "/bin/beep") "-r5")))))))

   Siehe *note mcron-Auftragsspezifikationen: (mcron)Guile Syntax. für
weitere Informationen zu mcron-Auftragsspezifikationen. Nun folgt die
Referenz des mcron-Dienstes.

   Wenn das System läuft, können Sie mit der Aktion ‘schedule’ des
Dienstes visualisieren lassen, welche mcron-Aufträge als Nächstes
ausgeführt werden:

     # herd schedule mcron

Das vorangehende Beispiel listet die nächsten fünf Aufgaben auf, die
ausgeführt werden, aber Sie können auch angeben, wie viele Aufgaben
angezeigt werden sollen:

     # herd schedule mcron 10

 -- Variable: mcron-service-type
     Dies ist der Diensttyp des ‘mcron’-Dienstes. Als Wert verwendet er
     ein ‘mcron-configuration’-Objekt.

     Dieser Diensttyp kann als Ziel einer Diensterweiterung verwendet
     werden, die ihn mit zusätzlichen Auftragsspezifikationen versorgt
     (siehe *note Dienstkompositionen::). Mit anderen Worten ist es
     möglich, Dienste zu definieren, die weitere mcron-Aufträge
     ausführen lassen.

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

     ‘mcron’ (Vorgabe: ‘mcron’) (Typ: dateiartig)
          Welches mcron-Paket benutzt werden soll.

     ‘jobs’ (Vorgabe: ‘'()’) (Typ: Liste-von-G-Ausdrücken)
          Dies muss eine Liste von G-Ausdrücken sein (siehe *note
          G-Ausdrücke::), die jeweils einer mcron-Auftragsspezifikation
          (der Spezifikation eines „Jobs“) entsprechen (siehe *note
          mcron-Auftragsspezifikationen: (mcron)Syntax.).

     ‘log?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Lässt Protokolle auf die Standardausgabe schreiben.

     ‘log-file’ (Vorgabe: ‘"/var/log/mcron.log"’) (Typ: Zeichenkette)
          Der Ort der Protokolldatei.

     ‘log-format’ (Vorgabe: ‘"~1@*~a ~a: ~a~%"’) (Typ: Zeichenkette)
          Eine Formatzeichenkette gemäß ‘(ice-9 format)’ für die
          Protokollnachrichten. Mit dem Vorgabewert werden Nachrichten
          in der Form ‘PROZESSKENNUNG NAME: NACHRICHT’ geschrieben
          (siehe *note Aufrufen von mcron: (mcron)Invoking mcron.).
          Außerdem schreibt GNU Shepherd vor jeder Nachricht einen
          Zeitstempel.

     ‘date-format’ (Typ: Vielleicht-Zeichenkette)
          Formatzeichenkette gemäß ‘(srfi srfi-19)’ für das Datum.


File: guix.de.info,  Node: Log-Rotation,  Next: Netzwerkeinrichtung,  Prev: Geplante Auftragsausführung,  Up: Dienste

11.10.3 Log-Rotation
--------------------

Protokolldateien wie die in ‘/var/log’ neigen dazu, bis ins Unendliche
zu wachsen, deshalb ist es eine gute Idee, sie von Zeit zu Zeit zu
“rotieren” – d.h. ihren Inhalt in separaten Dateien zu archivieren,
welche optional auch komprimiert werden. Das Modul ‘(gnu services
admin)’ stellt eine Schnittstelle zum von Shepherd mitgelieferten
Protokollrotationsdienst bereit (siehe *note (shepherd)Log Rotation
Service::).

   Dieser Protokollrotationsdienst wird als ‘log-rotation-service-type’
zur Verfügung gestellt, der ein
‘log-rotation-configuration’-Verbundsobjekt als dessen Wert
entgegennimmt. In der Vorgabeeinstellung stellt er ‘log-rotation’
bereit, als „zeitgesteuerter Dienst“ (Timer) von Shepherd, der
regelmäßig läuft – vorgegeben ist einmal pro Woche. Die von
Shepherd-Diensten erzeugten Protokollfateien erfasst er automatisch und
externe Protokolldateien kann man ihn auch verwalten lassen. Es ist wie
immer möglich, den Dienst zu untersuchen, um zu sehen, wann er laufen
wird:

     $ sudo herd status log-rotation
     Status von log-rotation:
       Es läuft seit Mo 09 Dez 2024 15:27:47 CET (vor 2 Tagen).
       …

     Bevorstehende Timer-Alarme:
       So 15 Dez 2024 22:00:00 CET (in 4 Tagen)
       So 22 Dez 2024 22:00:00 CET (in 11 Tagen)
       So 29 Dez 2024 22:00:00 CET (in 18 Tagen)

   Sie können außerdem mit ‘herd files log-rotation’ Dateien auflisten,
die rotiert werden sollen, und mit ‘herd trigger log-rotation’ eine
Rotation manuell auslösen.

   Dieser Dienst gehört zu den ‘%base-services’ und ist somit als aktiv
vorgegeben, mit den vorgegebenen Einstellungen.

 -- Variable: log-rotation-service-type
     This is the type of the log rotation service. Its associated value
     must be a ‘log-rotation-configuration’ record, as discussed below.

 -- Data Type: log-rotation-configuration
     Available ‘log-rotation-configuration’ fields are:

     ‘provision’ (default: ‘(log-rotation)’) (type: list-of-symbols)
          The name(s) of the log rotation Shepherd service.

     ‘requirement’ (default: ‘(user-processes)’) (type: list-of-symbols)
          Dependencies of the log rotation Shepherd service.

     ‘calendar-event’ (type: gexp)
          Gexp containing the “calendar event” when log rotation occurs.
          *Note (shepherd)Timers::, for more information on calendar
          events.

     ‘external-log-files’ (default: ‘()’) (type: list-of-strings)
          List of file names, external log files that should also be
          rotated.

     ‘compression’ (default: ‘zstd’) (type: gexp-or-symbol)
          The compression method used for rotated log files, one of
          ‘'none’, ‘'gzip’, and ‘'zstd’. Alternatively, it can be a gexp
          that evaluates to a procedure; that procedure gets called with
          the file to be rotated.

     ‘expiry’ (type: gexp-or-integer)
          Age in seconds after which a log file is deleted.

     ‘size-threshold’ (type: gexp-or-integer)
          Size in bytes below which a log file is _not_ rotated.

   Manche Protokolldateien müssen einfach nur regelmäßig gelöscht
werden, wenn sie alt geworden sind, ohne Sonderfälle und ohne
Archivierung. Das trifft auf Erstellungsprotokolle zu, die ‘guix-daemon’
unter ‘/var/log/guix/drvs’ vorhält (siehe *note Aufruf des
guix-daemon::). Der Dienst ‘log-cleanup’ kann diesen Anwendungsfall
übernehmen. Zum Beispiel ist Folgendes Teil der ‘%base-services’ (siehe
*note Basisdienste::):

     ;; Regelmäßig alte Erstellungsprotokolle löschen.
     (service log-cleanup-service-type
              (log-cleanup-configuration
               (directory "/var/log/guix/drvs")))

   Dadurch sammeln sich Erstellungsprotokolle _nicht_ bis in alle
Ewigkeit an.

 -- Variable: log-cleanup-service-type
     Der Diensttyp des Dienstes, um alte Protokolldateien zu löschen.
     Sein Wert muss ein ‘log-cleanup-configuration’-Verbundsobjekt sein,
     wie im Folgenden beschrieben.

 -- Datentyp: log-cleanup-configuration
     Der Datentyp repräsentiert die Konfiguration, um Protokolldateien
     zu löschen.

     ‘directory’
          Der Name des Verzeichnisses mit den Protokolldateien.

     ‘expiry’ (Vorgabe: ‘(* 6 30 24 3600)’)
          Nach wie vielen Sekunden eine Datei für die Löschung
          vorgesehen ist (sechs Monate nach Vorgabe).

     ‘schedule’ (Vorgabe: ‘"30 12 01,08,15,22 * *"’)
          Schedule of the log cleanup job written either as a string in
          traditional cron syntax or as a gexp representing a Shepherd
          calendar event (*note (shepherd)Timers::).

Anonip-Dienst
-------------

Anonip ist ein Datenschutz-Filter, der IP-Adressen aus den Protokollen
von Web-Servern entfernt. Mit diesem Dienst wird eine FIFO erzeugt und
jede Zeile, die in diese hinein geschrieben wird, wird mit anonip
gefiltert und das gefilterte Protokoll in eine Zieldatei übertragen.

   Folgendes Beispiel zeigt, wie die FIFO
‘/var/run/anonip/https.access.log’ eingerichtet wird und die gefilterte
Protokolldatei ‘/var/log/anonip/https.access.log’ geschrieben wird.

     (service anonip-service-type
              (anonip-configuration
                (input  "/var/run/anonip/https.access.log")
                (output "/var/log/anonip/https.access.log")))

   Richten Sie Ihren Web-Server so ein, dass er seine Protokolle in die
FIFO unter ‘/var/run/anonip/https.access.log’ schreibt, und Sie finden
die anonymisierte Protokolldatei in ‘/var/web-logs/https.access.log’
vor.

 -- Datentyp: anonip-configuration
     Dieser Datentyp repräsentiert die Konfiguration von anonip. Zu ihm
     gehören folgende Parameter:

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

     ‘input’
          Der Dateiname der zu verarbeitenden Eingabeprotokolldatei.
          Durch den Dienst wird eine FIFO erzeugt, die diesen Namen
          trägt. Der Web-Server sollte seine Protokolle in diese FIFO
          hinein schreiben.

     ‘output’
          The file name of the processed log file. This file is subject
          to log rotation via the Shepherd’s log rotation service (*note
          Log-Rotation::).

     Die folgenden optionalen Einstellungen können Sie angeben:

     ‘debug?’
          Print debug messages when ‘#true’.

     ‘skip-private?’
          Wenn das auf ‘#true’ gesetzt ist, werden Adressen in privaten
          Adressbereichen _nicht_ verborgen.

     ‘column’
          Eine bei 1 beginnende Spaltennummer. Es werden IP-Adressen in
          der angegebenen Spalte verarbeitet (die Vorgabe ist Spalte 1).

     ‘replacement’
          Durch welche Zeichenkette ersetzt wird, wenn die IP-Adresse
          _nicht_ erkannt wird; zum Beispiel ‘"0.0.0.0"’.

     ‘ipv4mask’
          Anzahl der Bits, die in IPv4-Adressen verborgen werden.

     ‘ipv6mask’
          Anzahl der Bits, die in IPv6-Adressen verborgen werden.

     ‘increment’
          Die IP-Adresse wird um diese Zahl erhöht. Vorgegeben ist null.

     ‘delimiter’
          Welche Zeichenkette der Trenner im Protokoll ist.

     ‘regex’
          Ein regulärer Ausdruck zur Erkennung von IP-Adressen. Er kann
          statt ‘column’ benutzt werden.


File: guix.de.info,  Node: Netzwerkeinrichtung,  Next: Netzwerkdienste,  Prev: Log-Rotation,  Up: Dienste

11.10.4 Netzwerkeinrichtung
---------------------------

Durch das Modul ‘(gnu services networking)’ werden Dienste zum
Konfigurieren der Netzwerkschnittstellen und zum Einrichten der
Netzwerkverbindung Ihrer Maschine bereitgestellt. Die Dienste decken
unterschiedliche Arten ab, wie Sie Ihre Maschine einrichten können: Sie
können eine statische Netzwerkkonfiguration einrichten, einen Client für
das Dynamic Host Configuration Protocol (DHCP) benutzen oder Daemons wie
NetworkManager oder Connman einsetzen, mit denen der gesamte Vorgang
automatisch abläuft, automatisch auf Änderungen an der Verbindung
reagiert wird und eine abstrahierte Benutzerschnittstelle bereitgestellt
wird.

   Auf einem Laptop sind NetworkManager und Connman bei weitem die
komfortabelsten Optionen, darum enthalten die vorgegebenen Dienste für
Desktop-Arbeitsumgebungen NetworkManager (siehe *note
‘%desktop-services’: Desktop-Dienste.). Für einen Server, eine virtuelle
Maschine oder einen Container sind eine statische Netzwerkkonfiguration
oder ein schlichter DHCP-Client meist angemessener.

   Dieser Abschnitt beschreibt die verschiedenen Dienste zur
Netzwerkeinrichtung, die Ihnen zur Verfügung stehen, angefangen bei der
statischen Netzwerkkonfiguration.

 -- Variable: static-networking-service-type
     Dies ist der Diensttyp für statisch konfigurierte
     Netzwerkschnittstellen. Sein Wert muss eine Liste von
     ‘static-networking’-Verbundsobjekten sein. Jedes deklariert eine
     Menge von Adressen, Routen und Links, wie im Folgenden gezeigt.

     Hier sehen Sie die einfachst mögliche Konfiguration, die nur über
     eine einzelne Netzwerkkarte („Network Interface Controller“, NIC)
     eine Verbindung nur für IPv4 herstellt.

          ;; Statische Netzwerkkonfiguration mit einer Netzwerkkarte, nur IPv4.
          (service static-networking-service-type
                   (list (static-networking
                          (addresses
                           (list (network-address
                                  (device "eno1")
                                  (value "10.0.2.15/24"))))
                          (routes
                           (list (network-route
                                  (destination "default")
                                  (gateway "10.0.2.2"))))
                          (name-servers '("10.0.2.3")))))

     Obiges Code-Schnipsel kann ins ‘services’-Feld Ihrer
     Betriebssystemkonfiguration eingetragen werden (siehe *note Das
     Konfigurationssystem nutzen::), um Ihre Maschine mit 10.0.2.15 als
     ihre IP-Adresse zu versorgen mit einer 24-Bit-Netzmaske für das
     lokale Netzwerk – also dass jede 10.0.2.X-Adresse im lokalen
     Netzwerk (LAN) ist. Kommunikation mit Adressen außerhalb des
     lokalen Netzwerks wird über 10.0.2.2 geleitet. Rechnernamen werden
     über Anfragen ans Domain Name System (DNS) an 10.0.2.3 aufgelöst.

 -- Datentyp: static-networking
     Dieser Datentyp repräsentiert eine statische Netzwerkkonfiguration.

     Folgendes Beispiel zeigt, wie Sie die Konfiguration einer Maschine
     deklarieren, die nur über eine einzelne Netzwerkkarte („Network
     Interface Controller“, NIC), die als ‘eno1’ verfügbar ist, über
     eine IPv4-Adresse und eine IPv6-Adresse verbunden ist:

          ;; Netzwerkkonfiguration mit einer Netzwerkkarte, IPv4 + IPv6.
          (static-networking
           (addresses (list (network-address
                             (device "eno1")
                             (value "10.0.2.15/24"))
                            (network-address
                             (device "eno1")
                             (value "2001:123:4567:101::1/64"))))
           (routes (list (network-route
                          (destination "default")
                          (gateway "10.0.2.2"))
                         (network-route
                          (destination "default")
                          (gateway "2020:321:4567:42::1"))))
           (name-servers '("10.0.2.3")))

     Wenn Sie mit dem Befehl ‘ip’ aus dem ‘iproute2’-Paket
     (https://wiki.linuxfoundation.org/networking/iproute2) von
     Linux-basierten Systemen vertraut sind, sei erwähnt, dass obige
     Deklaration gleichbedeutend damit ist, wenn Sie dies eingeben:

          ip address add 10.0.2.15/24 dev eno1
          ip address add 2001:123:4567:101::1/64 dev eno1
          ip route add default via inet 10.0.2.2
          ip route add default via inet6 2020:321:4567:42::1

     Führen Sie für mehr Informationen ‘man 8 ip’ aus. Alteingesessene
     GNU/Linux-Nutzer werden sicherlich wissen, wie sie das mit
     ‘ifconfig’ und ‘route’ machen, aber wir ersparen es Ihnen.

     Für den Datentyp stehen folgende Felder zur Verfügung:

     ‘addresses’
     ‘links’ (Vorgabe: ‘'()’)
     ‘routes’ (Vorgabe: ‘'()’)
          Die Liste der ‘network-address’-, ‘network-link’- und
          ‘network-route’-Verbundsobjekte für dieses Netzwerk (siehe
          unten).

     ‘name-servers’ (Vorgabe: ‘'()’)
          Die Liste der IP-Adressen (als Zeichenketten) der DNS-Server.
          Diese IP-Adressen werden in ‘/etc/resolv.conf’ geschrieben.

     ‘provision’ (Vorgabe: ‘'(networking)’)
          Wenn dies ein wahrer Wert ist, bezeichnet dies die Liste von
          Symbolen für den Shepherd-Dienst, der dieser
          Netzwerkkonfiguration entspricht.

     ‘requirement’ (Vorgabe: ‘'()’)
          Die Liste der Shepherd-Dienste, von denen dieser abhängt.

 -- Datentyp: network-address
     Dieser Datentyp repräsentiert die IP-Adresse einer
     Netzwerkschnittstelle.

     ‘device’
          Der Name der Netzwerkschnittstelle, die für diese Adresse
          benutzt wird – z.B. ‘"eno1"’.

     ‘value’
          Die eigentliche IP-Adresse und Netzwerkmaske in CIDR-Notation
          (https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
          als Zeichenkette.

          Zum Beispiel bezeichnet ‘"10.0.2.15/24"’ die IPv4-Adresse
          10.0.2.15 auf einem Subnetzwerk, dessen erste 24 Bit gleich
          sind – alle 10.0.2.X-Adressen befinden sich im selben lokalen
          Netzwerk

     ‘ipv6?’
          Ob mit ‘value’ eine IPv6-Adresse angegeben wird. Vorgegeben
          ist, dies automatisch festzustellen.

 -- Datentyp: network-route
     Dieser Datentyp steht für eine Netzwerkroute.

     ‘destination’
          Das Ziel der Route (als Zeichenkette) entweder mit einer
          IP-Adresse und Netzwerkmaske oder ‘"default"’ zum Einstellen
          der Vorgaberoute.

     ‘source’ (Vorgabe: ‘#f’)
          Die Quelle der Route.

     ‘device’ (Vorgabe: ‘#f’)
          Welches Gerät für diese Route benutzt wird – z.B. ‘"eno2"’.

     ‘ipv6?’ (Vorgabe: automatisch)
          Ob es sich um eine IPv6-Route handelt. Das vorgegebene
          Verhalten ist, dies automatisch anhand des Eintrags in
          ‘destination’ oder ‘gateway’ zu bestimmen.

     ‘gateway’ (Vorgabe: ‘#f’)
          Die IP-Adresse des Netzwerkzugangs (als Zeichenkette), über
          die der Netzwerkverkehr geleitet wird.

 -- Datentyp: network-link
     Der Datentyp für einen Netzwerk-Link (Link ist englisch für eine
     Verbindung, siehe *note (guile-netlink)Link::). Beim Hochfahren
     werden mit Netzwerk-Links echte oder virtuelle
     Ethernet-Verbindungen aufgebaut oder verändert. Solche
     Ethernet-Links können anhand eines Namens im NAME-Feld oder einer
     MAC-Adresse im Feld MAC-ADDRESS bezeichnet werden. Wenn eine
     virtuelle Schnittstelle erzeugt werden soll, müssen die Felder NAME
     und TYPE angegeben werden.

     ‘name’
          Der Name des Links – z.B. ‘"v0p0"’ (Vorgabe: ‘#f’).

     ‘type’
          Eine Zeichenkette, die für den Typ des Links steht – z.B.
          ‘'veth’ (Vorgabe: ‘#f’).

     ‘mac-address’
          Die MAC-Adresse für den Link – z.B. ‘"98:11:22:33:44:55"’
          (Vorgabe: ‘#f’).

     ‘arguments’
          Eine Liste der Argumente für diesen Link-Typ.

   Als Nutzungsszenario betrachten wir einen Server, der mit einer
Netzwerkschnittstelle mit mehreren Ports ausgestattet ist. Diese Ports
sind mit einem Switch verbunden, der Link-Bündelung unterstützt (siehe
link aggregation (https://de.wikipedia.org/wiki/Link_Aggregation), auch
bekannt als Bonding oder NIC-Teaming). Der Switch verwendet Port-Kanäle,
um mehrere physische Schnittstellen zu einer logischen Schnittstelle
zusammenzufassen, die eine höhere Bandbreite, Lastverteilung und
Link-Redundanz bietet. Wenn ein Port zu einer LAG („link aggregation
group“) hinzugefügt wird, erbt er die Eigenschaften des Port-Kanals. Zu
den Eigenschaften gehören VLAN-Zugehörigkeit, Trunk-Status und weitere.

   Ein VLAN (https://de.wikipedia.org/wiki/Virtual_Local_Area_Network)
(oder virtuelles lokales Netzwerk) ist ein logisches Netzwerk, das von
anderen VLANs auf demselben physischen Netzwerk isoliert ist. Damit kann
Netzwerkverkehr getrennt verarbeitet werden, die Sicherheit verbessert
werden und die Netzwerkadministration erleichtert werden.

   Mit all diesem Wissen können wir etwa unser statisches Netzwerk am
Server konfigurieren, indem wir zwei bestehende Netzwerke nach dem
802.3ad-Schema bündeln und zusätzlich eine VLAN-Schnittstelle mit Id
1055 hinzufügen. Wir teilen unserer VLAN-Schnittstelle eine statische IP
zu.

     (static-networking
      (links (list (network-link
                    (name "bond0")
                    (type 'bond)
                    (arguments '((mode . "802.3ad")
                                 (miimon . 100)
                                 (lacp-active . "on")
                                 (lacp-rate . "fast"))))

                   (network-link
                    (mac-address "98:11:22:33:44:55")
                    (arguments '((master . "bond0"))))

                   (network-link
                    (mac-address "98:11:22:33:44:56")
                    (arguments '((master . "bond0"))))

                   (network-link
                    (name "bond0.1055")
                    (type 'vlan)
                    (arguments '((id . 1055)
                                 (link . "bond0"))))))
      (addresses (list (network-address
                        (value "192.168.1.4/24")
                        (device "bond0.1055")))))

 -- Variable: %loopback-static-networking
     Dies ist das ‘static-networking’-Verbundsobjekt, das für das
     „Loopback-Gerät“ ‘lo’ steht, mit IP-Adressen 127.0.0.1 und ::1, was
     den Shepherd-Dienst ‘loopback’ zur Verfügung stellt.

 -- Variable: %qemu-static-networking
     Dies ist das ‘static-networking’-Verbundsobjekt, das für eine
     Netzwerkeinrichtung mit QEMUs als Nutzer ausgeführtem
     Netzwerkstapel („User-Mode Network Stack“) auf dem Gerät ‘eth0’
     steht (siehe *note (qemu)Using the user mode network stack::).

 -- Variable: dhcp-client-service-type
     Dies ist der Diensttyp für den Dienst, der DHCLIENT ausführt, den
     Client des ISC für das „Dynamic Host Configuration Protocol“
     (DHCP).

 -- Datentyp: dhcp-client-configuration
     Der Datentyp, der die Konfiguration des Dienstes für den
     ISC-DHCP-Client repräsentiert.

     ‘package’ (Vorgabe: ‘isc-dhcp’)
          Das ISC-DHCP-Client-Paket, was benutzt werden soll.

     ‘interfaces’ (Vorgabe: ‘'all’)
          Geben Sie entweder ‘'all’ an oder die Liste der Namen der
          Schnittstellen, auf denen der ISC-DHCP-Client lauschen soll –
          z.B. ‘'("eno1")’.

          Wenn es auf ‘'all’ gesetzt ist, wird der ISC-DHCP-Client auf
          allen verfügbaren Netzwerkschnittstellen außer „loopback“, die
          aktiviert werden können, lauschen. Andernfalls lauscht der
          ISC-DHCP-Client nur auf den angegebenen Schnittstellen.

     ‘config-file’ (Vorgabe: ‘#f’)
          Die Konfigurationsdatei für den ISC-DHCP-Client.

     ‘version’ (Vorgabe: ‘"4"’)
          The DHCP protocol version to use, as a string. Accepted values
          are ‘"4"’ or ‘"6"’ for DHCPv4 or DHCPv6, respectively, as well
          as ‘"4o6"’, for DHCPv4 over DHCPv6 (as specified by RFC 7341).

     ‘shepherd-requirement’ (Vorgabe: ‘'()’)
     ‘shepherd-provision’ (Vorgabe: ‘'(networking)’)
          Mit dieser Option können Sie als eine Liste von Symbolen
          zusätzliche Shepherd-Dienste benennen, von welchen dieser
          Dienst abhängen soll. Beispielsweise geben Sie hier
          ‘'wpa-supplicant’ oder ‘'iwd’ an, wenn Sie Ihren Rechner
          gegenüber verschlüsselten WLAN- oder Ethernet-Netzwerken
          authentisieren müssen.

          Ebenso können Sie mit ‘shepherd-provision’ eine Liste von
          Namen von Shepherd-Diensten angeben (als Symbole), die durch
          diesen Dienst bereitgestellt werden. Sie könnten vom
          Vorgabewert abweichen wollen, wenn Sie mehrere
          ISC-DHCP-Clients auszuführen planen, von denen nur einer den
          Shepherd-Dienst ‘networking’ bereitstellt.

 -- Variable: dhcpcd-service-type
     This the type for a service running ‘dhcpcd’, a DHCP (Dynamic Host
     Configuration Protocol) client that can be used as a replacement
     for the historical ISC client supported by
     ‘dhcp-client-service-type’.

     Its value must be a ‘dhcpcd-configuration’ record, as described
     below. As an example, consider the following setup which runs
     ‘dhcpcd’ with a local DNS (Domain Name System) resolver:

          (service dhcpcd-service-type
            (dhcpcd-configuration
              (option '("rapid_commit" "interface_mtu"))
              (no-option '("nd_rdnss"
                           "dhcp6_name_servers"
                           "domain_name_servers"
                           "domain_name"
                           "domain_search"))
              (static '("domain_name_servers=127.0.0.1"))
              (no-hook '("hostname"))))

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

     ‘interfaces’ (default: ‘()’) (type: list)
          List of networking interfaces—e.g., ‘"eth0"’—to start a DHCP
          client for. If no interface is specified (i.e., the list is
          empty) then ‘dhcpcd’ discovers available Ethernet interfaces,
          that can be configured, automatically.

     ‘command-arguments’ (default: ‘("-q" "-q")’) (type: list)
          List of additional command-line options.

     ‘host-name’ (default: ‘""’) (type: maybe-string)
          Host name to send via DHCP, defaults to the current system
          host name.

     ‘duid’ (default: ‘""’) (type: maybe-string)
          DHCPv4 clients require a unique client identifier, this option
          uses the DHCPv6 Unique Identifier as a DHCPv4 client
          identifier as well. For more information, refer to RFC 4361
          (https://www.rfc-editor.org/rfc/rfc4361) and ‘dhcpcd.conf(5)’.

     ‘persistent?’ (default: ‘#t’) (type: boolean)
          When true, automatically de-configure the interface when
          ‘dhcpcd’ exits.

     ‘option’ (default: ‘("rapid_commit" "domain_name_servers" "domain_name" "domain_search" "host_name" "classless_static_routes" "interface_mtu")’) (type: list-of-strings)
          List of options to request from the server.

     ‘require’ (default: ‘("dhcp_server_identifier")’) (type: list-of-strings)
          List of options to require in responses.

     ‘slaac’ (default: ‘"private"’) (type: maybe-string)
          Interface identifier used for SLAAC generated IPv6 addresses.

     ‘no-option’ (default: ‘()’) (type: list-of-strings)
          List of options to remove from the message before it’s
          processed.

     ‘no-hook’ (default: ‘()’) (type: list-of-strings)
          List of hook script which should not be invoked.

     ‘static’ (default: ‘()’) (type: list-of-strings)
          DHCP client can request different options from a DHCP server,
          through ‘static’ it is possible to configure static values for
          selected options. For example,
          ‘"domain_name_servers=127.0.0.1"’.

     ‘vendor-class-id’ (Typ: Vielleicht-Zeichenkette)
          Set the DHCP Vendor Class (e.g., ‘MSFT’). For more
          information, refer to RFC 2132
          (https://www.rfc-editor.org/rfc/rfc2132#section-9.13).

     ‘client-id’ (type: maybe-string)
          Use the interface hardware address or the given string as a
          client identifier, this is mutually exclusive with the ‘duid’
          option.

     ‘extra-content’ (type: maybe-string)
          Extra content to append to the configuration as-is.

     ‘shepherd-provision’ (Vorgabe: ‘'(networking)’) (Typ: Liste-von-Symbolen)
          Eine Liste von Symbolen, die von diesem Dienst angebotene
          Shepherd-Dienste angeben.

     ‘shepherd-requirement’ (default: ‘()’) (type: list-of-symbols)
          Eine Liste von Symbolen, die andere Shepherd-Dienste angeben,
          von denen dieser Dienst abhängen soll.

 -- Variable: network-manager-service-type
     Dies ist der Diensttyp für den NetworkManager-Dienst
     (https://wiki.gnome.org/Projects/NetworkManager). Der Wert dieses
     Diensttyps ist ein ‘network-manager-configuration’-Verbundsobjekt.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: network-manager-configuration
     Datentyp, der die Konfiguration von NetworkManager repräsentiert.

     ‘network-manager’ (Vorgabe: ‘network-manager’)
          Das zu verwendende NetworkManager-Paket.

     ‘shepherd-requirement’ (default: ‘'(wireless-daemon)’)
          This option can be used to provide a list of symbols naming
          Shepherd services that this service will depend on. The
          default ‘'wireless-daemon’ is provided by
          ‘'wpa-supplicant-service-type’ and ‘'iwd-service-type’. Make
          sure you have one of these configured. Note, that
          ‘%desktop-services’ already include
          ‘wpa-supplicant-service-type’.

     ‘dns’ (Vorgabe: ‘"default"’)
          Der Verarbeitungsmodus für DNS-Anfragen. Er hat Einfluss
          darauf, wie NetworkManager mit der Konfigurationsdatei
          ‘resolv.conf’ verfährt.

          ‘default’
               NetworkManager aktualisiert ‘resolv.conf’, damit sie die
               Nameserver enthält, die von zurzeit aktiven Verbindungen
               benutzt werden.

          ‘dnsmasq’
               NetworkManager führt ‘dnsmasq’ als lokal
               zwischenspeichernden Nameserver aus und aktualisiert
               ‘resolv.conf’ so, dass es auf den lokalen Nameserver
               verweist. Falls Sie mit einem VPN verbunden sind, wird
               dafür eine getrennte DNS-Auflösung verwendet
               („Conditional Forwarding“).

               Mit dieser Einstellung können Sie Ihre Netzwerkverbindung
               teilen. Wenn Sie sie zum Beispiel mit einem anderen
               Laptop über ein Ethernet-Kabel teilen möchten, können Sie
               ‘nm-connection-editor’ öffnen und die Methode der
               Ethernet-Verbindung für IPv4 und IPv6 auf „Gemeinsam mit
               anderen Rechnern“ stellen und daraufhin die Verbindung
               neu herstellen (oder Ihren Rechner neu starten).

               Sie können so auch eine Verbindung vom Wirts- zum
               Gastsystem in virtuellen Maschinen mit QEMU (siehe *note
               Guix in einer VM installieren::) herstellen, d.h. eine
               „Host-to-Guest Connection“). Mit einer solchen
               Wirt-nach-Gast-Verbindung können Sie z.B. von einem
               Webbrowser auf Ihrem Wirtssystem auf einen Web-Server
               zugreifen, der auf der VM läuft (siehe *note
               Web-Dienste::). Sie können sich damit auch über SSH mit
               der virtuellen Maschine verbinden (siehe *note
               ‘openssh-service-type’: Netzwerkdienste.). Um eine
               Wirt-nach-Gast-Verbindung einzurichten, führen Sie einmal
               diesen Befehl aus:

                    nmcli connection add type tun \
                     connection.interface-name tap0 \
                     tun.mode tap tun.owner $(id -u) \
                     ipv4.method shared \
                     ipv4.addresses 172.28.112.1/24

               Danach geben Sie bei jedem Start Ihrer virtuellen
               QEMU-Maschine (siehe *note Guix in einer VM starten::)
               die Befehlszeilenoption ‘-nic
               tap,ifname=tap0,script=no,downscript=no’ an
               ‘qemu-system-…’ mit.

          ‘none’
               NetworkManager verändert ‘resolv.conf’ nicht.

     ‘vpn-plugins’ (Vorgabe: ‘'()’)
          Dies ist die Liste der verfügbaren Plugins für virtuelle
          private Netzwerke (VPN). Zum Beispiel kann das Paket
          ‘network-manager-openvpn’ angegeben werden, womit
          NetworkManager virtuelle private Netzwerke mit OpenVPN
          verwalten kann.

     ‘extra-configuration-files’ (default: ‘'()’)
          A list of two-element lists; the first element of each list is
          a file name (as a string), and the second is a file-like
          object. Used to specify configuration files which will be
          added to the ‘/etc/NetworkManager/conf.d’. NetworkManager will
          read additional configuration from this directory. For details
          on configuration file precedence and the configuration file
          format, see ‘man 5 NetworkManager.conf’.

          For example, to add two files named ‘001-basic.conf’ and
          ‘002-unmanaged.conf’:

               (service network-manager-service-type
                        (network-manager-configuration
                         (extra-configuration-files
                          `(("001-basic.conf" ,(local-file "basic.conf"))
                            ("002-unmanaged.conf" ,(plain-file "constructed-unmanaged.conf"
                                                               "\
               [keyfile]
               unmanaged-devices=interface-name:wlo1_ap\n"))))))

 -- Variable: connman-service-type
     Mit diesem Diensttyp wird Connman (https://01.org/connman)
     ausgeführt, ein Programm zum Verwalten von Netzwerkverbindungen.

     Sein Wert muss ein ‘connman-configuration’-Verbundsobjekt wie im
     folgenden Beispiel sein:

          (service connman-service-type
                   (connman-configuration
                     (disable-vpn? #t)))

     Weiter unten werden Details der ‘connman-configuration’ erklärt.

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

     ‘connman’ (Vorgabe: CONNMAN)
          Das zu verwendende Connman-Paket.

     ‘shepherd-requirement’ (Vorgabe: ‘'()’)
          Mit dieser Option können Sie als eine Liste von Symbolen
          zusätzliche Shepherd-Dienste benennen, von welchen dieser
          Dienst abhängen soll. Beispielsweise geben Sie hier
          ‘'wpa-supplicant’ oder ‘'iwd’ an, wenn Sie Ihren Rechner
          gegenüber verschlüsselten WLAN- oder Ethernet-Netzwerken
          authentisieren müssen.

     ‘disable-vpn?’ (Vorgabe: ‘#f’)
          Falls dies auf wahr gesetzt ist, wird Connmans VPN-Plugin
          deaktiviert.

     ‘general-configuration’ (Vorgabe: ‘(connman-general-configuration)’)
          Die nach ‘main.conf’ serialisierte Konfiguration, die mit
          ‘--config’ an ‘connmand’ übergeben werden wird.

 -- Datentyp: connman-general-configuration
     Verfügbare ‘connman-general-configuration’-Felder sind:

     ‘input-request-timeout’ (Typ: Vielleicht-Zahl)
          Bestimmt die Zeitspanne, in der angefragte Eingaben getätigt
          werden müssen. Vorgegeben sind 120 Sekunden. Wird z.B. eine
          Passphraseneingabe angefordert, ist sie irgendwann nicht mehr
          gültig. Mit dieser Einstellung können Sie die Zeitspanne
          verlängern, wenn es für die Benutzerführung bei Ihnen
          angemessener ist.

     ‘browser-launch-timeout’ (Typ: Vielleicht-Zahl)
          Set browser launch timeout. Default is 300 seconds. The
          request for launching a browser for portal pages will timeout
          after certain amount of time. Use this setting to increase the
          value in case of different user interface designs.

     ‘background-scanning?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Enable background scanning. Default is true. If wifi is
          disconnected, the background scanning will follow a simple
          back off mechanism from 3s up to 5 minutes. Then, it will stay
          in 5 minutes unless user specifically asks for scanning
          through a D-Bus call. If so, the mechanism will start again
          from 3s. This feature activates also the background scanning
          while being connected, which is required for roaming on wifi.
          When ‘background-scanning?’ is false, ConnMan will not perform
          any scan regardless of wifi is connected or not, unless it is
          requested by the user through a D-Bus call.

     ‘use-gateways-as-timeservers?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Assume that service gateways also function as timeservers.
          Default is false.

     ‘fallback-timeservers’ (Typ: Vielleicht-Liste)
          List of Fallback timeservers. These timeservers are used for
          NTP sync when there are no timeservers set by the user or by
          the service, and when ‘use-gateways-as-timeservers?’ is ‘#f’.
          These can contain a mixed combination of fully qualified
          domain names, IPv4 and IPv6 addresses.

     ‘fallback-nameservers’ (Typ: Vielleicht-Liste)
          List of fallback nameservers appended to the list of
          nameservers given by the service. The nameserver entries must
          be in numeric format, host names are ignored.

     ‘default-auto-connect-technologies’ (Typ: Vielleicht-Liste)
          Liste der Technologien, die ohne weitere Einstellung für
          automatisches Aufbauen einer Verbindung vorgesehen sind.
          Vorgegeben ist, dass es, wenn kein Eintrag gemacht wird, bei
          ‘"ethernet"’, ‘"wifi"’ und ‘"cellular"’ vorgesehen ist. Für
          eine automatische Verbindung muss ein Dienst aber vorher
          eingerichtet und gespeichert worden sein.

     ‘default-favourite-technologies’ (Typ: Vielleicht-Liste)
          Liste der Technologien, die ohne weitere Einstellung bevorzugt
          werden. Vorgegeben ist, dass, wenn kein Eintrag gemacht wird,
          ‘"ethernet"’ bevorzugt wird. Über Dienste dieser Technologie
          wird selbst dann eine Verbindung aufgebaut, wenn sie _nicht_
          vorher eingerichtet und gespeichert wurden.

     ‘always-connected-technologies’ (Typ: Vielleicht-Liste)
          Liste der Technologien, über die eine Verbindung aufgebaut
          wird, egal welche Technologien Vorrang haben (‘auto-connect?’
          ‘#t’). Vorgegeben ist, dass diese Funktion deaktiviert ist,
          wenn Sie sie nicht ausdrücklich aktivieren..

     ‘preferred-technologies’ (Typ: Vielleicht-Liste)
          Liste, in welcher Reihenfolge Technologien vorrangig verbunden
          werden sollen, geordnet von der mit dem meisten Vorrang
          absteigend. Mit den Diensten der jeweiligen Technologie wird
          nacheinander in der angegebenen Reihenfolge eine Verbindung
          versucht, bis eine Verbindung hergestellt werden kann oder
          alles fehlgeschlagen ist. Wenn ein Dienst einer vorrangigen
          Technologie den Zustand ‚ready‘ hat, wird die Vorgaberoute
          über ihn laufen gegenüber weniger vorrangigen Typen in der
          Liste mit Status ‚ready‘ oder gegenüber nicht vorrangigen
          Typen. Ein Dienst mit Zustand ‚online‘ hat die Vorgaberoute
          gegenüber nicht vorrangigen Typen oder weniger vorrangigen
          Typen.

     ‘network-interface-blacklist’ (Typ: Vielleicht-Liste)
          List of blacklisted network interfaces. Found interfaces will
          be compared to the list and will not be handled by ConnMan, if
          their first characters match any of the list entries. Default
          value is ‘"vmnet"’, ‘"vboxnet"’, ‘"virbr"’, ‘"ifb"’.

     ‘allow-hostname-updates?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Allow ConnMan to change the system hostname. This can happen
          for example if we receive DHCP hostname option. Default value
          is ‘#t’.

     ‘allow-domainname-updates?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Allow connman to change the system domainname. This can happen
          for example if we receive DHCP domainname option. Default
          value is ‘#t’.

     ‘single-connected-technology?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Keep only a single connected technology at any time. When a
          new service is connected by the user or a better one is found
          according to preferred-technologies, the new service is kept
          connected and all the other previously connected services are
          disconnected. With this setting it does not matter whether the
          previously connected services are in ’online’ or ’ready’
          states, the newly connected service is the only one that will
          be kept connected. A service connected by the user will be
          used until going out of network coverage. With this setting
          enabled applications will notice more network breaks than
          normal. Note this options can’t be used with VPNs. Default
          value is ‘#f’.

     ‘tethering-technologies’ (Typ: Vielleicht-Liste)
          List of technologies that are allowed to enable tethering. The
          default value is ‘"wifi"’, ‘"bluetooth"’, ‘"gadget"’. Only
          those technologies listed here are used for tethering. If one
          wants to tether ethernet, then add ‘"ethernet"’ in the list.
          Note that if ethernet tethering is enabled, then a DHCP server
          is started on all ethernet interfaces. Tethered ethernet
          should never be connected to corporate or home network as it
          will disrupt normal operation of these networks. Due to this
          ethernet is not tethered by default. Do not activate ethernet
          tethering unless you really know what you are doing.

     ‘persistent-tethering-mode?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Restore earlier tethering status when returning from offline
          mode, re-enabling a technology, and after restarts and
          reboots. Default value is ‘#f’.

     ‘enable-6to4?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Automatically enable anycast 6to4 if possible. This is not
          recommended, as the use of 6to4 will generally lead to a
          severe degradation of connection quality. See RFC6343. Default
          value is ‘#f’ (as recommended by RFC6343 section 4.1).

     ‘vendor-class-id’ (Typ: Vielleicht-Zeichenkette)
          Set DHCP option 60 (Vendor Class ID) to the given string. This
          option can be used by DHCP servers to identify specific
          clients without having to rely on MAC address ranges, etc.

     ‘enable-online-check?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Enable or disable use of HTTP GET as an online status check.
          When a service is in a READY state, and is selected as
          default, ConnMan will issue an HTTP GET request to verify that
          end-to-end connectivity is successful. Only then the service
          will be transitioned to ONLINE state. If this setting is
          false, the default service will remain in READY state. Default
          value is ‘#t’.

     ‘online-check-ipv4-url’ (Typ: Vielleicht-Zeichenkette)
          IPv4 URL used during the online status check. Please refer to
          the README for more detailed information. Default value is
          <http://ipv4.connman.net/online/status.html>.

     ‘online-check-ipv6-url’ (Typ: Vielleicht-Zeichenkette)
          IPv6 URL used during the online status check. Please refer to
          the README for more detailed information. Default value is
          <http://ipv6.connman.net/online/status.html>.

     ‘online-check-initial-interval’ (Typ: Vielleicht-Zahl)
          Range of intervals between two online check requests. Please
          refer to the README for more detailed information. Default
          value is ‘1’.

     ‘online-check-max-interval’ (Typ: Vielleicht-Zahl)
          Range of intervals between two online check requests. Please
          refer to the README for more detailed information. Default
          value is ‘1’.

     ‘enable-online-to-ready-transition?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          WARNING: This is an experimental feature. In addition to
          ‘enable-online-check’ setting, enable or disable use of HTTP
          GET to detect the loss of end-to-end connectivity. If this
          setting is ‘#f’, when the default service transitions to
          ONLINE state, the HTTP GET request is no more called until
          next cycle, initiated by a transition of the default service
          to DISCONNECT state. If this setting is ‘#t’, the HTTP GET
          request keeps being called to guarantee that end-to-end
          connectivity is still successful. If not, the default service
          will transition to READY state, enabling another service to
          become the default one, in replacement. Default value is ‘#f’.

     ‘auto-connect-roaming-services?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Automatically connect roaming services. This is not
          recommended unless you know you won’t have any billing
          problem. Default value is ‘#f’.

     ‘address-conflict-detection?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Enable or disable the implementation of IPv4 address conflict
          detection according to RFC5227. ConnMan will send probe ARP
          packets to see if an IPv4 address is already in use before
          assigning the address to an interface. If an address conflict
          occurs for a statically configured address, an IPv4LL address
          will be chosen instead (according to RFC3927). If an address
          conflict occurs for an address offered via DHCP, ConnMan sends
          a DHCP DECLINE once and for the second conflict resorts to
          finding an IPv4LL address. Default value is ‘#f’.

     ‘localtime’ (Typ: Vielleicht-Zeichenkette)
          Path to localtime file. Defaults to ‘/etc/localtime’.

     ‘regulatory-domain-follows-timezone?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Enable regulatory domain to be changed along timezone changes.
          With this option set to true each time the timezone changes
          the first present ISO3166 country code is read from
          ‘/usr/share/zoneinfo/zone1970.tab’ and set as regulatory
          domain value. Default value is ‘#f’.

     ‘resolv-conf’ (Typ: Vielleicht-Zeichenkette)
          Path to resolv.conf file. If the file does not exist, but
          intermediate directories exist, it will be created. If this
          option is not set, it tries to write into
          ‘/var/run/connman/resolv.conf’ if it fails (‘/var/run/connman’
          does not exist or is not writeable). If you do not want to
          update resolv.conf, you can set ‘/dev/null’.

 -- Variable: wpa-supplicant-service-type
     Dies ist der Diensttyp, um WPA Supplicant
     (https://w1.fi/wpa_supplicant/) auszuführen. Dabei handelt es sich
     um einen Authentisierungsdaemon, der notwendig ist, um sich
     gegenüber verschlüsselten WLAN- oder Ethernet-Netzwerken zu
     authentisieren.

 -- Datentyp: wpa-supplicant-configuration
     Repräsentiert die Konfiguration des WPA-Supplikanten.

     Sie hat folgende Parameter:

     ‘wpa-supplicant’ (Vorgabe: ‘wpa-supplicant’)
          Das WPA-Supplicant-Paket, was benutzt werden soll.

     ‘shepherd-requirement’ (default: ‘(user-processes loopback syslogd)’
          Die Liste der Dienste, die vor dem WPA-Supplikanten bereits
          gestartet sein sollen.

     ‘shepherd-provision’ (default: ‘(wpa-supplicant wireless-daemon)’) (type: list-of-symbols)
          The name(s) of the service.

     ‘dbus?’ (Vorgabe: ‘#t’)
          Ob auf Anfragen auf D-Bus gelauscht werden soll.

     ‘pid-file’ (Vorgabe: ‘"/var/run/wpa_supplicant.pid"’)
          Wo die PID-Datei abgelegt wird.

     ‘interface’ (Vorgabe: ‘#f’)
          Wenn dieses Feld gesetzt ist, muss es den Namen einer
          Netzwerkschnittstelle angeben, die von WPA Supplicant
          verwaltet werden soll.

     ‘config-file’ (Vorgabe: ‘#f’)
          Optionale Konfigurationsdatei.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Liste zusätzlicher Befehlszeilenoptionen, die an den Daemon
          übergeben werden.

 -- Variable: iwd-service-type
     Dies ist der Diensttyp, um iwd, den iNet Wireless Daemon
     (https://iwd.wiki.kernel.org/), auszuführen. Dabei handelt es sich
     um einen Daemon, der notwendig ist, um sich gegenüber
     verschlüsselten WLAN-Netzwerken zu authentisieren.

     Warnung: By default ‘iwd’ removes and re-creates interfaces it
     manages. It doesn’t play nicely with ‘dhcp-client-service-type’
     that enumerates wireless interfaces before starting the Shepherd
     service. Use either ‘dhcpcd-service-type’ or the ‘iwd’’s built-in
     DHCP client (see ‘enable-network-configuration’ option below).

     Warnung: ‘iwd-service-type’ conflicts with
     ‘wpa-supplicant-service-type’. Make sure only one is configured.

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

     ‘iwd’ (default: ‘iwd’) (type: file-like)
          The IWD package to use.

     ‘interfaces’ (default: ‘()’) (type: list-of-strings)
          If this is set, it must specify “glob patterns” matching
          network interfaces that IWD will control.

     ‘ignored-interfaces’ (default: ‘()’) (type: list-of-strings)
          If this is set, it must specify “glob patterns” matching
          network interfaces that IWD will not manage.

     ‘phys’ (default: ‘()’) (type: list-of-strings)
          If this is set, it must specify “glob patterns” matching
          network PHYs names that IWD will control.

     ‘ignored-phys’ (default: ‘()’) (type: list-of-strings)
          If this is set, it must specify “glob patterns” matching
          network PHYs names that IWD will not manage.

     ‘shepherd-requirement’ (default: ‘()’) (type: list-of-symbols)
          Shepherd requirements the service should depend on.

     ‘shepherd-provision’ (default: ‘(iwd wireless-daemon)’) (type: list-of-symbols)
          The name(s) of the service.

     ‘config’ (type: iwd-settings)
          Configuration settings.

 -- Data Type: iwd-settings
     Available ‘iwd-settings’ fields are:

     ‘general’ (type: iwd-general-settings)
          General settings.

     ‘network’ (default: ‘(iwd-network-settings)’) (type: maybe-iwd-network-settings)
          Network settings.

     ‘scan’ (type: maybe-iwd-scan-settings)
          Scan settings.

     ‘extra-config’ (default: ‘()’) (type: list-of-strings)
          Extra configuration values to append to the IWD configuration
          file.

 -- Data Type: iwd-general-settings
     Available ‘iwd-general-settings’ fields are:

     ‘enable-network-configuration?’ (default: ‘#f’) (type: boolean)
          Setting this option to true enables ‘iwd’ to configure the
          network interfaces with the IP addresses.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the General settings group.

 -- Data Type: iwd-network-settings
     Available ‘iwd-network-settings’ fields are:

     ‘enable-ipv6?’ (default: ‘#t’) (type: boolean)
          Sets the global default that tells ‘iwd’ whether it should
          configure IPv6 addresses and routes

     ‘name-resolving-service’ (default: ‘none’) (type: resolving-service)
          Configures a DNS resolution method used by the system.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the Network settings group.

 -- Data Type: iwd-scan-settings
     Available ‘iwd-scan-settings’ fields are:

     ‘disable-periodic-scan?’ (default: ‘#f’) (type: boolean)
          Setting this option to ‘#t’ will prevent ‘iwd’ from issuing
          the periodic scans for the available networks while
          disconnected.

     ‘initial-periodic-scan-interval’ (default: ‘10’) (type: number)
          The initial periodic scan interval upon disconnect (in
          seconds).

     ‘maximum-periodic-scan-interval’ (default: ‘300’) (type: number)
          The maximum periodic scan interval (in seconds).

     ‘disable-roaming-scan?’ (default: ‘#f’) (type: boolean)
          Setting this option to ‘#t’ will prevent ‘iwd’ from trying to
          scan when roaming decisions are activated.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the Scan settings group.

   Manche Netzwerkgeräte wie Modems brauchen eine besondere Behandlung,
worauf die folgenden Dienste abzielen.

 -- Variable: modem-manager-service-type
     Dies ist der Diensttyp für den ModemManager-Dienst
     (https://wiki.gnome.org/Projects/ModemManager). Der Wert dieses
     Diensttyps ist ein ‘modem-manager-configuration’-Verbundsobjekt.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: modem-manager-configuration
     Repräsentiert die Konfiguration vom ModemManager.

     ‘modem-manager’ (Vorgabe: ‘modem-manager’)
          Das ModemManager-Paket, was benutzt werden soll.

 -- Variable: usb-modeswitch-service-type
     Dies ist der Diensttyp für den USB_ModeSwitch-Dienst
     (https://www.draisberghof.de/usb_modeswitch/). Der Wert dieses
     Diensttyps ist ein ‘usb-modeswitch-configuration’-Verbundsobjekt.

     Wenn sie eingesteckt werden, geben sich manche USB-Modems (und
     andere USB-Geräte) zunächst als Nur-Lese-Speichermedien und nicht
     als Modem aus. Sie müssen erst einem Moduswechsel („Modeswitching“)
     unterzogen werden, bevor sie benutzt werden können. Der
     USB_ModeSwitch-Diensttyp installiert udev-Regeln, um bei diesen
     Geräten automatisch ein Modeswitching durchzuführen, wenn sie
     eingesteckt werden.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: usb-modeswitch-configuration
     Der Datentyp, der die Konfiguration von USB_ModeSwitch
     repräsentiert.

     ‘usb-modeswitch’ (Vorgabe: ‘usb-modeswitch’)
          Das USB_ModeSwitch-Paket, das die Programmdateien für das
          Modeswitching enthält.

     ‘usb-modeswitch-data’ (Vorgabe: ‘usb-modeswitch-data’)
          Das Paket, in dem die Gerätedaten und die udev-Regeldatei
          stehen, die USB_ModeSwitch benutzt.

     ‘config-file’ (Vorgabe: ‘#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")’)
          Welche Konfigurationsdatei das USB_ModeSwitch-Aufrufprogramm
          („Dispatcher“) benutzt. Nach Vorgabe wird die mit
          USB_ModeSwitch ausgelieferte Konfigurationsdatei benutzt, die
          neben anderen Voreinstellungen die Protokollierung nach
          ‘/var/log’ abschaltet. Wenn ‘#f’ festgelegt wird, wird keine
          Konfigurationsdatei benutzt.


File: guix.de.info,  Node: Netzwerkdienste,  Next: Unbeaufsichtigte Aktualisierungen,  Prev: Netzwerkeinrichtung,  Up: Dienste

11.10.5 Netzwerkdienste
-----------------------

Das im vorherigen Abschnitt besprochene Modul ‘(gnu services
networking)’ stellt auch Dienste für fortgeschrittene
Netzwerkeinrichtungen zur Verfügung, etwa um einen DHCP-Dienst für
andere anzubieten, Pakete mit iptables oder nftables zu filtern, einen
WLAN-Zugangspunkt mit ‘hostapd’ verfügbar zu machen, den „Superdaemon“
‘inetd’ auszuführen und noch mehr. In diesem Abschnitt werden sie
beschrieben.

 -- Variable: dhcpd-service-type
     Dieser Diensttyp definiert einen Dienst, der einen DHCP-Daemon
     ausführt. Um einen Dienst zu diesem Typ anzugeben, müssen Sie eine
     ‘<dhcpd-configuration>’ bereitstellen. Zum Beispiel so:

          (service dhcpd-service-type
                   (dhcpd-configuration
                    (config-file (local-file "my-dhcpd.conf"))
                    (interfaces '("enp0s25"))))

 -- Datentyp: dhcpd-configuration
     ‘package’ (Vorgabe: ‘isc-dhcp’)
          Das Paket, das den DHCP-Daemon zur Verfügung stellt. Von
          diesem Paket wird erwartet, dass es den Daemon unter dem Pfad
          ‘sbin/dhcpd’ relativ zum Verzeichnis der Paketausgabe
          bereitstellt. Das vorgegebene Paket ist der DHCP-Server vom
          ISC (https://www.isc.org/dhcp/).
     ‘config-file’ (Vorgabe: ‘#f’)
          Die Konfigurationsdatei, die benutzt werden soll. Sie _muss_
          angegeben werden und wird an ‘dhcpd’ mittels seiner
          Befehlszeilenoption ‘-cf’ übergeben. Ein beliebiges
          „dateiartiges“ Objekt kann dafür angegeben werden (siehe *note
          dateiartige Objekte: G-Ausdrücke.). Siehe ‘man dhcpd.conf’ für
          Details, welcher Syntax die Konfigurationsdatei genügen muss.
     ‘version’ (Vorgabe: ‘"4"’)
          Die DHCP-Version, die benutzt werden soll. Der ISC-DHCP-Server
          unterstützt die Werte „4“, „6“ und „4o6“. Das Feld entspricht
          den Befehlszeilenoptionen ‘-4’, ‘-6’ und ‘-4o6’ von ‘dhcpd’.
          Siehe ‘man dhcpd’ für Details.
     ‘run-directory’ (Vorgabe: ‘"/run/dhcpd"’)
          Das zu benutzende Laufzeit-Verzeichnis („run“-Verzeichnis).
          Wenn der Dienst aktiviert wird, wird dieses Verzeichnis
          erzeugt, wenn es noch nicht existiert.
     ‘pid-file’ (Vorgabe: ‘"/run/dhcpd/dhcpd.pid"’)
          Die zu benutzende PID-Datei. Dieses Feld entspricht der
          Befehlszeilenoption ‘-pf’ von ‘dhcpd’. Siehe ‘man dhcpd’ für
          Details.
     ‘interfaces’ (Vorgabe: ‘'()’)
          Die Namen der Netzwerkschnittstelle, auf der dhcpd auf
          Broadcast-Nachrichten lauscht. Wenn diese Liste nicht leer
          ist, werden ihre Elemente (diese müssen Zeichenketten sein) an
          den ‘dhcpd’-Aufruf beim Starten des Daemons angehängt. Es ist
          unter Umständen _nicht_ nötig, hier Schnittstellen
          ausdrücklich anzugeben; siehe ‘man dhcpd’ für Details.

 -- Variable: hostapd-service-type
     Dies ist der Diensttyp für den hostapd-Daemon
     (https://w1.fi/hostapd/), mit dem ein WLAN-Zugangspunkt (ein
     „Access Point“ gemäß IEEE 802.11) und Authentifizierungsserver
     eingerichtet werden kann. Sein zugewiesener Wert muss eine
     ‘hostapd-configuration’ sein wie im folgenden Beispiel:

          ;; Mit wlan1 den Zugangspunkt für "Mein Netzwerk" betreiben.
          (service hostapd-service-type
                   (hostapd-configuration
                    (interface "wlan1")
                    (ssid "Mein Netzwerk")
                    (channel 12)))

 -- Datentyp: hostapd-configuration
     Dieser Datentyp repräsentiert die Konfiguration des
     hostapd-Dienstes. Er hat folgende Felder:

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

     ‘interface’ (Vorgabe: ‘"wlan0"’)
          Die Netzwerkschnittstelle, auf der der WLAN-Zugangspunkt
          betrieben wird.

     ‘ssid’
          Die SSID (“Service Set Identifier”), eine das Netzwerk
          identifizierende Zeichenkette.

     ‘broadcast-ssid?’ (Vorgabe: ‘#t’)
          Ob diese SSID allgemein sichtbar sein soll.

     ‘channel’ (Vorgabe: ‘1’)
          Der zu verwendende WLAN-Kanal.

     ‘driver’ (Vorgabe: ‘"nl80211"’)
          Über welchen Schnittstellentyp der Treiber angesprochen wird.
          ‘"nl80211"’ wird von allen Linux-mac80211-Treibern benutzt.
          Schreiben Sie ‘"none"’, wenn hostapd für einen eigenständigen
          RADIUS-Server erstellt wird, der keine Draht- oder
          Drahtlosverbindung steuert.

     ‘extra-settings’ (Vorgabe: ‘""’)
          Weitere Einstellungen, die wie sie sind an die
          Konfigurationsdatei von hostapd angehängt werden. Siehe
          <https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf> für
          eine Referenz der Konfigurationsdatei.

 -- Variable: simulated-wifi-service-type
     Dies ist der Diensttyp für einen Dienst, um ein WLAN-Netzwerk zu
     simulieren. Das kann auf virtuellen Maschinen zu Testzwecken
     eingesetzt werden. Der Dienst lädt das ‘mac80211_hwsim’-Modul
     (https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html)
     in den Linux-Kernel und startet hostapd, um ein
     Pseudo-WLAN-Netzwerk vorzutäuschen, das nach Vorgabe als ‘wlan0’
     sichtbar ist.

     Der Wert des Dienstes ist ein
     ‘hostapd-configuration’-Verbundsobjekt.

 -- Variable: iptables-service-type
     Mit diesem Diensttyp wird eine iptables-Konfiguration eingerichtet.
     iptables ist ein Rahmen für Netzwerkpaketfilter, der vom
     Linux-Kernel unterstützt wird. Der Dienst unterstützt die
     Konfiguration von iptables für sowohl IPv4 als auch IPv6. Eine
     einfache Beispielkonfiguration, die alle eingehenden Verbindungen
     verweigert, die nicht an den SSH-Port 22 gehen, können Sie hier
     sehen:

          (service iptables-service-type
                   (iptables-configuration
                    (ipv4-rules (plain-file "iptables.rules" "*filter
          :INPUT ACCEPT
          :FORWARD ACCEPT
          :OUTPUT ACCEPT
          -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
          -A INPUT -p tcp --dport 22 -j ACCEPT
          -A INPUT -j REJECT --reject-with icmp-port-unreachable
          COMMIT
          "))
                    (ipv6-rules (plain-file "ip6tables.rules" "*filter
          :INPUT ACCEPT
          :FORWARD ACCEPT
          :OUTPUT ACCEPT
          -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
          -A INPUT -p tcp --dport 22 -j ACCEPT
          -A INPUT -j REJECT --reject-with icmp6-port-unreachable
          COMMIT
          "))))

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

     ‘iptables’ (Vorgabe: ‘iptables’)
          Das zu benutzende iptables-Paket, das ‘iptables-restore’ und
          ‘ip6tables-restore’ zur Verfügung stellt.
     ‘ipv4-rules’ (Vorgabe: ‘%iptables-accept-all-rules’)
          Die zu benutzenden iptables-Regeln. Diese werden an
          ‘iptables-restore’ übergeben. Als Regeln kann jedes
          „dateiartige“ Objekt angegeben werden (siehe *note dateiartige
          Objekte: G-Ausdrücke.).
     ‘ipv6-rules’ (Vorgabe: ‘%iptables-accept-all-rules’)
          Die zu benutzenden ip6tables-Regeln. Diese werden an
          ‘ip6tables-restore’ übergeben. Als Regeln kann jedes
          „dateiartige“ Objekt angegeben werden (siehe *note dateiartige
          Objekte: G-Ausdrücke.).

 -- Variable: nftables-service-type
     Mit diesem Diensttyp richten Sie eine Konfiguration von nftables
     ein. nftables ist als Projekt ein Teil von Netfilter mit dem Ziel,
     den Aufbau aus iptables, ip6tables, arptables und ebtables zu
     ersetzen. Es stellt einen neuen Rahmen für Netzwerkpaketfilter
     bereit sowie ein neues Werkzeug ‘nft’ auf Anwendungsebene und eine
     Kompatibilitätsschicht für iptables. Dieser Dienst wird zusammen
     mit ‘%default-nftables-ruleset’ ausgeliefert, einem vorgegebenen
     Satz von Regeln, der alle eingehenden Verbindungen außer auf dem
     SSH-Port 22 (TCP) ablehnt. Um ihn zu benutzen, schreiben Sie
     einfach:

          (service nftables-service-type)

 -- Datentyp: nftables-configuration
     Available ‘nftables-configuration’ fields are:

     ‘package’ (default: ‘nftables’) (type: file-like)
          The ‘nftables’ package to use.

     ‘debug-levels’ (type: maybe-list-of-debug-levels)
          A list of debug levels, for enabling debugging output. Valid
          debug level values are the ‘scanner’, ‘parser’, ‘eval’,
          ‘netlink’, ‘mnl’, ‘proto-ctx’, ‘segtree’ or ‘all’ symbols.

     ‘ruleset’ (type: file-like)
          A file-like object containing the complete nftables ruleset.
          The default ruleset rejects all incoming connections except
          those to TCP port 22, with connections from the loopback
          interface are allowed.

 -- Variable: ntp-service-type
     Dies ist der Typ des Dienstes, der den ‘ntpd’-Daemon für das
     Network Time Protocol (https://www.ntp.org), kurz NTP, ausführt.
     Mit diesem Daemon wird die Systemuhr mit der Uhr auf den
     angegebenen NTP-Servern synchronisiert.

     Der Wert dieses Dienstes ist ein ‘ntpd-configuration’-Objekt, wie
     im Folgenden beschrieben.

 -- Datentyp: ntp-configuration
     Der Datentyp für die Dienstkonfiguration des NTP-Dienstes.

     ‘servers’ (Vorgabe: ‘%ntp-servers’)
          Dies ist die Liste der Server
          (‘<ntp-server>’-Verbundsobjekte), mit denen ‘ntpd’
          synchronisiert wird. Siehe die Definition des
          ‘ntp-server’-Datentyps weiter unten.

     ‘allow-large-adjustment?’ (Vorgabe: ‘#t’)
          Hiermit wird festgelegt, ob ‘ntpd’ die Uhr beim ersten
          Umstellen um mehr als 1.000 Sekunden ändern darf.

     ‘ntp’ (Vorgabe: ‘ntp’)
          Das NTP-Paket, was benutzt werden soll.

 -- Variable: %ntp-servers
     Liste der Rechnernamen („Host“-Namen), die als vorgegebene
     NTP-Server benutzt werden. Dabei handelt es sich um die Server des
     NTP Pool Project (https://www.ntppool.org/en/).

 -- Datentyp: ntp-server
     Der Datentyp, der die Konfiguration eines NTP-Servers
     repräsentiert.

     ‘type’ (Vorgabe: ‘'server’)
          Die Art des NTP-Servers als Symbol, entweder ‘'pool’,
          ‘'server’, ‘'peer’, ‘'broadcast’ oder ‘'manycastclient’.

     ‘address’
          Die Adresse des Servers als Zeichenkette.

     ‘options’
          NTPD-Optionen, die für diesen bestimmten Server gelten sollen,
          angegeben als Liste von Optionsnamen und/oder Tupeln aus je
          Optionsname und -wert. Im folgenden Beispiel wird ein Server
          definiert, der die Optionen ‘iburst’ und ‘prefer’ sowie
          ‘version’ 3 und eine ‘maxpoll’-Zeit von 16 Sekunden benutzen
          soll.

               (ntp-server
                (type 'server)
                (address "ein.ntp.server.org")
                (options `(iburst (version 3) (maxpoll 16) prefer))))

 -- Variable: openntpd-service-type
     Hiermit wird ‘ntpd’, der Network-Time-Protocol-Daemon (NTP-Daemon),
     ausgeführt, in seiner OpenNTPD-Implementierung
     (http://www.openntpd.org). Der Daemon sorgt dafür, dass die
     Systemuhr mit den Uhren der eingestellten Server synchron bleibt.

          (service
           openntpd-service-type
           (openntpd-configuration
            (listen-on '("127.0.0.1" "::1"))
            (sensor '("udcf0 correction 70000"))
            (constraint-from '("www.gnu.org"))
            (constraints-from '("https://www.google.com/"))))


 -- Variable: %openntpd-servers
     Diese Variable bezeichnet eine Liste von Serveradressen, die in
     ‘%ntp-servers’ definiert sind.

 -- Datentyp: openntpd-configuration
     ‘openntpd’ (Vorgabe: ‘openntpd’)
          Das zu benutzende openntpd-Paket.
     ‘listen-on’ (Vorgabe: ‘'("127.0.0.1" "::1")’)
          Eine Liste von lokalen IP-Adressen oder Rechnernamen
          („Host“-Namen), auf denen der ntpd-Daemon lauschen soll.
     ‘query-from’ (Vorgabe: ‘'()’)
          Eine Liste von lokalen IP-Adressen, die der ntpd-Daemon für
          ausgehende Anfragen benutzen soll.
     ‘sensor’ (Vorgabe: ‘'()’)
          Hiermit geben Sie eine Liste von Zeitdifferenz-Sensorgeräten
          an, die ntpd benutzen soll. ‘ntpd’ wird auf jeden Sensor
          lauschen, der auch tatsächlich existiert, und solche, die
          nicht existieren, ignorieren. Siehe die Dokumentation beim
          Anbieter (https://man.openbsd.org/ntpd.conf) für weitere
          Informationen.
     ‘server’ (Vorgabe: ‘'()’)
          Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen
          von NTP-Servern an, mit denen synchronisiert werden soll.
     ‘servers’ (Vorgabe: ‘%openntp-servers’)
          Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen
          von NTP-Pools an, mit denen synchronisiert werden soll.
     ‘constraint-from’ (Vorgabe: ‘'()’)
          ‘ntpd’ kann so eingestellt werden, dass es das Datum aus der
          „Date“-Kopfzeile bei mit TLS übermittelten Anfragen an
          HTTPS-Server, denen vertraut wird, ausliest. Diese
          Zeitinformation wird nicht für Genauigkeit benutzt, sondern um
          mit authentifizierten Informationen die Auswirkungen eines
          Man-in-the-Middle-Angriffs auf unauthentifizierte
          NTP-Kommunikation einzuschränken. Geben Sie hierzu eine Liste
          von URLs, IP-Adressen oder Rechnernamen („Host“-Namen) von
          HTTPS-Servern an, um eine solche Beschränkung („Constraint“)
          einzurichten.
     ‘constraints-from’ (Vorgabe: ‘'()’)
          Wie bei ‘constraint-from’ geben Sie auch hier eine Liste von
          URLs, IP-Adressen oder Rechnernamen von HTTPS-Servern an, um
          eine Beschränkung einzurichten. Falls der Rechnername zu
          mehreren IP-Adressen aufgelöst wird, berechnet ‘ntpd’ den
          Median von allen als Beschränkung.

 -- Variable: inetd-service-type
     Dieser Dienst führt den ‘inetd’-Daemon aus (siehe *note
     (inetutils)inetd invocation::). ‘inetd’ lauscht auf Verbindungen
     mit Internet-Sockets und startet bei Bedarf das entsprechende
     Server-Programm, sobald eine Verbindung mit einem dieser Sockets
     hergestellt wird.

     Der Wert dieses Dienstes ist ein ‘inetd-configuration’-Objekt. Im
     folgenden Beispiel wird der ‘inetd’-Daemon konfiguriert, um den
     eingebauten ‘echo’-Dienst sowie einen SMTP-Dienst anzubieten, wobei
     letzterer SMTP-Kommunikation über SSH an einen Server ‘smtp-server’
     über einen vom ‘rechnername’n bezeichneten Zugang („Gateway“)
     weiterleitet:

          (service
           inetd-service-type
           (inetd-configuration
            (entries (list
                      (inetd-entry
                       (name "echo")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root"))
                      (inetd-entry
                       (node "127.0.0.1")
                       (name "smtp")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root")
                       (program (file-append openssh "/bin/ssh"))
                       (arguments
                        '("ssh" "-qT" "-i" "/pfad/zum/ssh_schlüssel"
                          "-W" "smtp-server:25" "benutzer@rechnername")))))))

     Siehe unten für mehr Details über ‘inetd-configuration’.

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

     ‘program’ (Vorgabe: ‘(file-append inetutils "/libexec/inetd")’)
          Das ‘inetd’-Programm, das benutzt werden soll.

     ‘entries’ (Vorgabe: ‘'()’)
          Eine Liste von ‘inetd’-Diensteinträgen. Jeder Eintrag sollte
          von einem ‘inetd-entry’-Konstruktor erzeugt werden.

 -- Datentyp: inetd-entry
     Datentyp, der einen Eintrag in der ‘inetd’-Konfiguration
     repräsentiert. Jeder Eintrag entspricht einem Socket, auf dem
     ‘inetd’ auf Anfragen lauscht.

     ‘node’ (Vorgabe: ‘#f’)
          Optional sollte hier als Zeichenkette eine kommagetrennte
          Liste lokaler Adressen angegeben werden, die ‘inetd’ benutzen
          soll, wenn er stellvertretend für den angegebenen Dienst
          lauscht. Siehe *note (inetutils)Configuration file:: für eine
          vollständige Beschreibung aller Optionen.
     ‘name’
          Eine Zeichenkette. Dieser Name muss einem Eintrag in
          ‘/etc/services’ entsprechen.
     ‘socket-type’
          Entweder ‘'stream’, ‘'dgram’, ‘'raw’, ‘'rdm’ oder
          ‘'seqpacket’.
     ‘protocol’
          Eine Zeichenkette, die einem Eintrag in ‘/etc/protocols’
          entsprechen muss.
     ‘wait?’ (Vorgabe: ‘#t’)
          Ob ‘inetd’ warten soll, bis der Server beendet ist, bevor es
          wieder auf neue Anfragen an den Dienst lauscht.
     ‘user’
          Eine Zeichenkette mit dem Benutzernamen (und optional dem
          Gruppennamen) des Benutzers, als der dieser Server ausgeführt
          werden soll. Der Gruppenname kann als Suffix angegeben werden,
          getrennt durch einen Doppelpunkt oder Punkt, d.h.
          ‘"benutzer"’, ‘"benutzer:gruppe"’ oder ‘"benutzer.gruppe"’.
     ‘program’ (Vorgabe: ‘"internal"’)
          Das Serverprogramm, das die Anfragen bedienen soll, oder
          ‘"internal"’, wenn ‘inetd’ einen eingebauten Dienst verwenden
          soll.
     ‘arguments’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder dateiartigen Objekten, die
          dem Serverprogramm als Argumente übergeben werden, angefangen
          mit dem nullten Argument, d.h. dem Namen selbigen
          Serverprogramms. Bei in ‘inetd’ eingebauten Diensten muss
          dieser Eintrag auf ‘'()’ oder ‘'("internal")’ gesetzt sein.

     Siehe *note (inetutils)Configuration file:: für eine mehr ins
     Detail gehende Erörterung jedes Konfigurationsfeldes.

 -- Variable: opendht-service-type
     Dieser Diensttyp dient dazu, einen OpenDHT-Knoten
     (https://opendht.net), ‘dhtnode’, zu betreiben. Mit dem Daemon kann
     ein eigener Proxy-Dienst für die verteilte Hashtabelle (Distributed
     Hash Table, DHT) angeboten werden, den man in Jami und anderen
     Anwendungen angeben kann, damit sie sich darüber verbinden.

          Wichtig: Wenn Sie den OpenDHT-Proxy-Server nutzen, sollten die
          für ihn „sichtbaren“ IP-Adressen der Clients auch anderen
          Netzwerkteilnehmern gegenüber erreichbar sein. In der Praxis
          ist es am besten, den Proxy-Server auf einem Rechner mit
          öffentlich zugänglicher IP-Adresse außerhalb Ihres privaten
          Netzwerks zu betreiben. Wenn Sie den Proxy-Server zum Beispiel
          im privaten lokalen Netzwerk mit IPv4 zugänglich machen würden
          und dann mittels Portweiterleitung für die Außenwelt
          zugänglich machten, funktioniert das vielleicht bei externen
          Netzwerkteilnehmern, aber für die Geräte im lokalen Netzwerk
          des Proxys würde anderen OpenDHT-Knoten nur deren private
          Adresse mitgeteilt, womit sie keine Verbindung aufbauen
          können.

     Der Wert dieses Dienstes ist ein ‘opendht-configuration’-Objekt,
     wie im Folgenden beschrieben.

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

     ‘opendht’ (Vorgabe: ‘opendht’) (Typ: dateiartig)
          Zu benutzendes ‘opendht’-Paket.

     ‘peer-discovery?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob sich der Knoten am Multicast-Mechanismus zum Finden lokaler
          Netzwerkteilnehmer beteiligen soll.

     ‘enable-logging?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Protokollnachrichten über syslog geschrieben werden sollen.
          Weil es so ausführlich ist, ist es nach Vorgabe deaktiviert.

     ‘debug?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Protokollnachrichten der Fehlersuch-Ausführlichkeitsstufe
          aktiviert werden sollen. Diese Option wirkt sich _nicht_ aus,
          wenn Protokollierung ganz abgeschaltet ist.

     ‘bootstrap-host’ (Vorgabe: ‘"bootstrap.jami.net:4222"’) (Typ: Vielleicht-Zeichenkette)
          Der Rechnername des Knotens, über den eine erste Verbindung
          ins OpenDHT-Netzwerk aufgebaut wird. Es kann eine bestimmte
          Portnummer angegeben werden, indem als Suffix ‘:PORT’
          angehängt wird. Vorgegeben ist, den Bootstrap-Knoten von Jami
          zu benutzen, aber man kann jeden Rechnernamen eines Knotens
          angeben. Es ist auch möglich, Bootstrapping zu deaktivieren,
          indem man dies ausdrücklich auf den Wert ‘%unset-value’
          festlegt.

     ‘port’ (Vorgabe: ‘4222’) (Typ: Vielleicht-Zahl)
          An welchen UDP-Port sich der OpenDHT-Knoten binden soll. Wird
          er _nicht_ angegeben, wird ein verfügbarer Port automatisch
          ausgewählt.

     ‘proxy-server-port’ (Typ: Vielleicht-Zahl)
          Einen Proxy-Server auf dem angegebenen Port lauschen lassen.

     ‘proxy-server-port-tls’ (Typ: Vielleicht-Zahl)
          Einen Proxy-Server auf dem angegebenen Port auf
          TLS-Verbindungen lauschen lassen.

 -- Variable: tor-service-type
     Diensttyp für den Dienst, der den Tor-Daemon
     (https://torproject.org) für anonyme Netzwerkrouten ausführt. Der
     Dienst benutzt für seine Konfiguration ein
     ‘<tor-configuration>’-Verbundsobjekt. Vorgegeben ist, dass der
     Tor-Daemon als „unprivilegierter“ Nutzer ‘tor’ ausgeführt wird,
     einem Mitglied der ‘tor’-Benutzergruppe ohne besondere
     Berechtigungen.

     Dienste diesen Typs können von anderen Diensten erweitert werden,
     um “Onion-Dienste” festzulegen (zusätzlich zu denen, die bereits in
     ‘tor-configuration’ festgelegt wurden). Ein Beispiel:

          (simple-service 'my-extra-onion-service tor-service-type
                          (list (tor-onion-service-configuration
                                  (name "extra-onion-service")
                                  (mapping '((80 "127.0.0.1:8080"))))))

 -- Datentyp: tor-configuration
     ‘tor’ (Vorgabe: ‘tor’)
          Das Paket, das den Tor-Daemon zur Verfügung stellt. Von diesem
          Paket wird erwartet, dass es den Daemon unter dem Pfad
          ‘bin/tor’ relativ zum Ausgabeverzeichnis verfügbar macht. Das
          vorgegebene Paket ist die Implementierung des Tor-Projekts
          (https://www.torproject.org).

     ‘config-file’ (Vorgabe: ‘(plain-file "empty" "")’)
          Die Konfigurationsdatei, die benutzt werden soll. Sie wird an
          eine vorgegebene Konfigurationsdatei angehängt und die sich
          daraus ergebende Konfigurationsdatei wird dann an ‘tor’ über
          dessen Befehlszeilenoption ‘-f’ übergeben. Hier kann jedes
          „dateiartige“ Objekt (siehe *note dateiartige Objekte:
          G-Ausdrücke.) angegeben werden. Siehe ‘man tor’ für Details
          zur Syntax der Konfigurationsdatei.

     ‘hidden-services’ (Vorgabe: ‘'()’)
          Die Liste der zu benutzenden „Onion-Dienste“ als
          ‘<tor-onion-service-configuration>’-Verbundsobjekte. Für jeden
          Onion-Dienst, den Sie in dieser Liste eintragen, werden
          automatisch entsprechende Einstellungen zur vorgefertigten
          Konfigurationsdatei hinzugefügt.

     ‘socks-socket-type’ (Vorgabe: ‘'tcp’)
          Welche Art von Socket Tor für seinen SOCKS-Socket in der
          Voreinstellung benutzen soll. Dafür muss entweder ‘'tcp’ oder
          ‘'unix’ angegeben werden. Für ‘'tcp’ wird Tor nach
          Voreinstellung auf dem TCP-Port 9050 auf der
          loopback-Schnittstelle (d.h. localhost) lauschen. Für ‘'unix’
          wird Tor auf dem UNIX-Socket ‘/var/run/tor/socks-sock’
          lauschen, auf den Mitglieder der ‘tor’-Benutzergruppe
          Schreibberechtigung erhalten.

          Wenn Sie detailliertere Anpassungen am SOCKS-Socket vornehmen
          wollen, belassen Sie ‘socks-socket-type’ bei seinem
          vorgegebenen Wert ‘'tcp’ und benutzen Sie ‘config-file’, um
          diese Voreinstellung mit Ihrer eigenen ‘SocksPort’-Option zu
          überspielen.

     ‘control-socket?’ (Vorgabe: ‘#f’)
          Ob ein „Steuerungs-Socket“ bereitgestellt werden soll, über
          den Tor angesteuert werden kann, um zum Beispiel Onion-Dienste
          zur Laufzeit zu instanziieren. Wird hier ‘#t’ angegeben, nimmt
          Tor Steuerungsbefehle auf dem Unix-Socket
          ‘/var/run/tor/control-sock’ entgegen, auf den Mitglieder der
          ‘tor’-Benutzergruppe Schreibzugriff bekommen.

     ‘transport-plugins’ (default: ‘'()’)
          The list of ‘<tor-transport-plugin>’ records to use. For any
          transport plugin you include in this list, appropriate
          configuration line to enable transport plugin will be
          automatically added to the default configuration file.

     ‘auto-start?’ (Vorgabe: ‘#t’)
          Whether or not to start the Tor daemon on boot.

 -- Datentyp: tor-onion-service-configuration
     Datentyp, der die Konfiguration eines “Onion-Dienstes” von Tor
     repräsentiert. Siehe die Dokumentation des Tor-Projekts
     (https://community.torproject.org/onion-services/) für weitere
     Informationen. Verfügbare ‘tor-onion-service-configuration’-Felder
     sind:

     ‘name’ (Typ: Zeichenkette)
          Ein Name für diesen Onion-Dienst. Dadurch wird ein Verzeichnis
          ‘/var/lib/tor/hidden-services/NAME’ erstellt, worin sich in
          der Datei ‘hostname’ der ‘.onion’-Rechnername („Host“-Name)
          des Onion-Dienstes befindet.

     ‘mapping’ (Typ: Assoziative-Liste)
          Eine assoziative Liste, wie Ports zu Adressen zugeordnet
          werden. Mit diesem Beispiel:
               '((22 "127.0.0.1:22")
                 (80 "127.0.0.1:8080"))
          werden Ports 22 und 80 des Onion-Dienstes den lokalen Ports 22
          und 8080 zugeordnet.

 -- Data Type: tor-transport-plugin
     Data type representing a Tor pluggable transport plugin in
     ‘tor-configuration’. Plugguble transports are programs that
     disguise Tor traffic, which can be useful in case Tor is censored.
     See the the Tor project’s documentation
     (https://tb-manual.torproject.org/circumvention/) and specification
     (https://spec.torproject.org/pt-spec/index.html) for more
     information.

     Each transport plugin corresponds either to ‘ClientTransportPlugin
     ...’ or to ‘ServerTransportPlugin ...’ line in the default
     configuration file, see ‘man tor’. Available ‘tor-transport-plugin’
     fields are:

     ‘role’ (default: ‘'client’)
          This must be either ‘'client’ or ‘'server’. Otherwise, an
          error is raised. Set the ‘'server’ value if you want to run a
          bridge to help censored users connect to the Tor network, see
          the Tor project’s bridge guide
          (https://community.torproject.org/relay/setup/bridge/). Set
          the ‘'client’ value if you want to connect to somebody else’s
          bridge, see the Tor project’s “Get Bridges” page
          (https://bridges.torproject.org/). In both cases the required
          additional configuration should be provided via
          ‘#:config-file’ option of ‘tor-configuration’.
     ‘protocol’ (default: ‘"obfs4"’)
          A string that specifies a pluggable transport protocol.
     ‘program’
          This must be a “file-like” object or a string pointing to the
          pluggable transport plugin executable. This option allows the
          Tor daemon run inside the container to access the executable
          and all the references (e.g. package dependencies) attached to
          it.

     Suppose you would like Tor daemon to use obfs4 type obfuscation and
     to connect to Tor network via obfs4 bridge (a nonpublic Tor relay
     with support for obfs4 type obfuscation). Then you may go to
     https://bridges.torproject.org/ (https://bridges.torproject.org/)
     and get there a couple of bridge lines (each starts with ‘obfs4
     ...’) and use these lines in tor-service-type configuration as
     follows:
          (service tor-service-type
          	 (tor-configuration
          	  (config-file (plain-file "torrc"
          				   "\
          UseBridges 1
          Bridge obfs4 ...
          Bridge obfs4 ..."))
          	  (transport-plugins
          	   (list (tor-transport-plugin
          		  (program (file-append lyrebird "/bin/lyrebird")))))))

   Das Modul ‘(gnu services rsync)’ bietet die folgenden Dienste an:

   Sie könnten einen rsync-Daemon einsetzen wollen, um Dateien verfügbar
zu machen, damit jeder (oder nur Sie) bestehende Dateien herunterladen
oder neue Dateien hochladen kann.

 -- Variable: rsync-service-type
     Dies ist der Diensttyp für den rsync-Daemon
     (https://rsync.samba.org), er benutzt ein
     ‘rsync-configuration’-Verbundsobjekt wie in diesem Beispiel:

          ;; Zwei Verzeichnisse über rsync exportieren.  Wie vorgegeben
          ;; lauscht rsync auf allen Netzwerkschnittstellen.
          (service rsync-service-type
                   (rsync-configuration
                     (modules (list (rsync-module
                                      (name "musik")
                                      (file-name "/srv/zik")
                                      (read-only? #f))
                                    (rsync-module
                                      (name "filme")
                                      (file-name "/home/charlie/filme"))))))

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

 -- Datentyp: rsync-configuration
     Datentyp, der die Konfiguration für den ‘rsync-service’
     repräsentiert.

     ‘package’ (Vorgabe: RSYNC)
          Zu benutzendes ‘rsync’-Paket.

     ‘address’ (Vorgabe: ‘#f’)
          Auf welcher IP-Adresse ‘rsync’ auf eingehende Verbindungen
          lauscht. Wird nichts angegeben, wird auf allen verfügbaren
          Adressen gelauscht.

     ‘port-number’ (Vorgabe: ‘873’)
          Der TCP-Port, auf dem ‘rsync’ auf eingehende Verbindungen
          lauscht. Wenn die Portnummer kleiner als ‘1024’ ist, muss
          ‘rsync’ als Administratornutzer ‘root’ und auch mit dieser
          Benutzergruppe gestartet werden.

     ‘pid-file’ (Vorgabe: ‘"/var/run/rsyncd/rsyncd.pid"’)
          Der Name der Datei, in die ‘rsync’ seine PID schreibt.

     ‘lock-file’ (Vorgabe: ‘"/var/run/rsyncd/rsyncd.lock"’)
          Der Name der Datei, die ‘rsync’ als seine Sperrdatei
          verwendet.

     ‘log-file’ (Vorgabe: ‘"/var/log/rsyncd.log"’)
          Der Name der Datei, in die ‘rsync’ seine Protokolle schreibt.

     ‘user’ (Vorgabe: ‘"root"’)
          Das Benutzerkonto, dem der ‘rsync’-Prozess gehören soll.

     ‘group’ (Vorgabe: ‘"root"’)
          Die Benutzergruppe des ‘rsync’-Prozesses.

     ‘uid’ (Vorgabe: ‘"rsyncd"’)
          Der Benutzername oder der Benutzeridentifikator (d.h. die
          „User-ID“), mit dem Dateiübertragungen zum und vom Modul
          stattfinden sollen, wenn der Daemon als Administratornutzer
          ‘root’ läuft.

     ‘gid’ (Vorgabe: ‘"rsyncd"’)
          Benutzergruppenname oder Gruppenidentifikator („Group-ID“),
          mit dem auf das Modul zugegriffen wird.

     ‘modules’ (Vorgabe: ‘%default-modules’)
          Liste von „Modulen“ – d.h. Verzeichnissen, die mit rsync
          exportiert werden. Jedes Element muss ein
          ‘rsync-module’-Verbund sein, wie nun beschrieben wird.

 -- Datentyp: rsync-module
     Dies ist der Datentyp für rsync-„Module“. Ein Modul ist ein
     Verzeichnis, das über das rsync-Protokoll exportiert wird. Die
     verfügbaren Felder sind wie folgt:

     ‘name’
          Der Modulname. Dieser ist der Name, der in URLs benutzt wird.
          Zum Beispiel, wenn das Modul ‘musik’ heißt, wird die
          entsprechende URL ‘rsync://host.example.org/musik’ sein.

     ‘file-name’
          Der Name des Verzeichnisses, das exportiert wird.

     ‘comment’ (Vorgabe: ‘""’)
          Kommentar, der mit dem Modul verbunden ist.
          Clientbenutzerschnittstellen dürfen das anzeigen, wenn sie die
          Liste der verfügbaren Module bekommen.

     ‘read-only?’ (Vorgabe: ‘#t’)
          Ob der Client Dateien hochladen können soll. Wenn dies falsch
          ist, wird das Hochladen autorisiert werden, wenn die
          Berechtigungen dort, wo der Daemon läuft, es erlauben.

     ‘chroot?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr steht, wechselt der rsync-Daemon das
          Wurzelverzeichnis in das Verzeichnis des Moduls, bevor er
          Dateiübertragungen mit dem Client unternimmt. Das ist besser
          für die Sicherheit, aber es geht nur, wenn rsync als
          Administratornutzer root läuft.

     ‘timeout’ (Vorgabe: ‘300’)
          Wie viele Sekunden ein Prozess untätig bleiben darf, bis eine
          Verbindung zum Client getrennt wird.

   Das Modul ‘(gnu services syncthing)’ bietet die folgenden Dienste an:

   Sie könnten einen Syncthing-Daemon benutzen wollen, wenn Sie Dateien
auf zwei oder mehr Rechnern haben und diese in Echtzeit synchronisieren
wollen, geschützt vor neugierigen Blicken.

 -- Variable: syncthing-service-type
     Dies ist der Diensttyp für den syncthing-Daemon
     (https://syncthing.net/), er benutzt ein
     ‘syncthing-configuration’-Verbundsobjekt wie in diesem Beispiel:

          (service syncthing-service-type
                   (syncthing-configuration (user "alice")))

          Anmerkung: Dieser Dienst ist auch mit Guix Home erhältlich, wo
          er einfach mit Ihren Benutzerrechten ausgeführt wird (siehe
          *note ‘home-syncthing-service-type’: Persönliche
          Netzwerkdienste.).

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

 -- Datentyp: syncthing-configuration
     Datentyp, der die Konfiguration für den ‘syncthing-service-type’
     repräsentiert.

     ‘syncthing’ (Vorgabe: SYNCTHING)
          Zu benutzendes ‘syncthing’-Paket.

     ‘arguments’ (Vorgabe: ’())
          Liste der Befehlszeilenoptionen, die an das
          ‘syncthing’-Programm übergeben werden.

     ‘logflags’ (Vorgabe: 0)
          Die Summe aus den Protokollierungsoptionen, siehe die
          Dokumentation von Syncthing zu logflags
          (https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags).

     ‘user’ (Vorgabe: #F)
          Das Benutzerkonto, mit dem der Syncthing-Dienst ausgeführt
          wird. Es wird vorausgesetzt, dass der angegebene Benutzer
          existiert.

     ‘group’ (Vorgabe: "USERS")
          Die Gruppe, mit der der Syncthing-Dienst ausgeführt wird. Es
          wird vorausgesetzt, dass die angegebene Gruppe existiert.

     ‘home’ (Vorgabe: #F)
          Sets the ‘HOME’ variable for the Syncthing daemon. The default
          is ‘$HOME’ of the specified Syncthing ‘user’.

     ‘config-file’ (default: #F)
          Either a file-like object that resolves to a Syncthing
          configuration XML file, or a ‘syncthing-config-file’ record
          (see below). If set to ‘#f’, Guix will not try to generate a
          config file, and Syncthing will generate a default
          configuration which will not be touched on reconfigure.
          Specifying this in a system service moves Syncthing’s common
          configuration and data directory (‘--home’ in
          <https://docs.syncthing.net/users/syncthing.html>) to
          ‘/var/lib/syncthing-<user>’.

          When used as a home service, syncthing configuration will be
          populated in ‘~/.local/state/syncthing/’. Old Syncthing
          installs may have files in ‘$XDG_CONFIG_HOME/syncthing/’
          (usually ‘~/.config/syncthing/’), which will override
          configuration in ‘~/.local/state/syncthing’ managed by this
          service. In such cases, you should move the contents of
          ‘$XDG_CONFIG_HOME/syncthing/’ into
          ‘~/.local/state/syncthing/’.

   This section documents a subset of the Syncthing configuration
options—specifically those related to Guix or those affecting how your
computer will connect to other computers over the network (such as
Syncthing relays or discovery servers). The configuration is fully
documented in the upstream Syncthing config documentation
(https://docs.syncthing.net/users/config.html); camelCase there is
converted to kebab-case here. If you are migrating from a
Syncthing-managed configuration to one managed by Guix, you can check
what changes were introduced by ‘diff’ing the respective ‘config.xml’
files. Note that you will need to add whitespace with 4-space
indentation to the file generated by Guix, using the ‘xmllint’ program
from the ‘libxml2’ package like so:

     XMLLINT_INDENT="    " xmllint --format /path/to/new/config.xml | diff /path/to/old/config.xml -

   When generating a configuration file through Guix, you can still
temporarily modify Syncthing from the GUI or through ‘introducer’ and
‘autoAcceptFolders’ mechanisms, but such changes will be reset on
reconfigure.

 -- Data Type: syncthing-config-file
     Data type representing the configuration file read by the Syncthing
     daemon.

     ‘folders’ (default: ‘(list (syncthing-folder (id "default") (label "Default Folder") (path "~/Sync")))’
          The default here is the same as Syncthing’s default. The value
          should be a list of ‘syncthing-folder’s.

     ‘devices’ (default: ‘'()’
          This should be a list of ‘syncthing-device’s. Guix will
          automatically add any devices specified in any ‘folders’ to
          this list. There are instances when you want to connect to a
          device despite not (initially) sharing any folders (such as a
          device with autoAcceptFolders). In such instances, you should
          specify those devices here. If multiple versions of the same
          device (as determined by comparing device ID) are discovered,
          the one in this list is prioritized. Otherwise, the first
          instance in the first folder is used.

     ‘gui-enabled?’ (default: ‘#t’)
          By default, any user on the computer can access the GUI and
          make changes to Syncthing. If you leave this enabled, you
          should probably set ‘gui-user’ and ‘gui-password’ (see below).

     ‘gui-tls?’ (default: ‘#f’)
     ‘gui-debugging?’ (default: ‘#f’)
     ‘gui-send-basic-authorization-prompt?’ (default: ‘#f’)
     ‘gui-address’ (default: ‘"127.0.0.1:8384"’)
     ‘gui-user’ (default: ‘#f’)
     ‘gui-password’ (default: ‘#f’)
          A bcrypt hash of the GUI password. Remember that this will be
          globally exposed in ‘/gnu/store’.

     ‘gui-apikey’ (default: ‘#f’)
          You must specify this to use the Syncthing REST interface.
          This key is kept in ‘/gnu/store’ and is accessible to all
          users of the system.

     ‘gui-theme’ (default: ‘"default"’)
     ‘ldap-enabled?’ (default: ‘#f’)
     ‘ldap-address’ (default: ‘""’)
     ‘ldap-bind-dn’ (default: ‘""’)
     ‘ldap-transport’ (default: ‘""’)
     ‘ldap-insecure-skip-verify’ (default: ‘""’)
     ‘ldap-search-base-dn’ (default: ‘""’)
     ‘ldap-search-filter’ (default: ‘""’)
     ‘listen-address’ (default: ‘"default"’)
     ‘global-announce-server’ (default: ‘"default"’)
     ‘global-announce-enabled?’ (default: ‘#t’)
          Global discovery servers can be used to help connect devices
          at unknown IP addresses by storing the last known IP address.

     ‘local-announce-enabled?’ (default: ‘#t’)
          This makes devices find each other very easily on the same
          LAN. Often, this will allow you to just plug an Ethernet
          between two devices, or connect one device to the other’s
          hotspot and start syncing.

     ‘local-announce-port’ (default: ‘21027’)
     ‘local-announce-mac-address’ (default: ‘"[ff12::8384]:21027"’)
     ‘max-send-kbps’ (default: ‘0’)
     ‘max-receive-kbps’ (default: ‘0’)
     ‘reconnection-interval-seconds’ (default: ‘60’)
     ‘relays-enabled?’ (default: ‘#t’)
          This option allows your Syncthing instance to use a global
          network of relays
          (https://docs.syncthing.net/users/relaying.html) to enable
          syncing between devices when all other methods fail. As
          always, Syncthing traffic is encrypted in transport and the
          relays are unable to decrypt it.

     ‘relay-reconnect-interval-minutes’ (default: ‘10’)
     ‘start-browser?’ (default: ‘#t’)
     ‘nat-enabled?’ (default: ‘#t’)
     ‘nat-lease-minutes’ (default: ‘60’)
     ‘nat-renewal-minutes’ (default: ‘30’)
     ‘nat-timeout-seconds’ (default: ‘10’)
     ‘usage-reporting-accepted’ (default: ‘0’)
          Options whose names begin with ‘usage-reporting-’ control
          usage reporting. Set to -1 to disable, or to a positive value
          to enable. The default (0) disables reporting, but causes a
          usage reporting consent prompt to be displayed in the
          Syncthing GUI.

     ‘usage-reporting-seen’ (default: ‘0’)
     ‘usage-reporting-unique-id’ (default: ‘""’)
     ‘usage-reporting-url’ (default: ‘"https://data.syncthing.net/newdata"’)
     ‘usage-reporting-post-insecurely?’ (default: ‘#f’)
     ‘usage-reporting-initial-delay-seconds’ (default: ‘1800’)
     ‘auto-upgrade-interval-hours’ (default: ‘12’)
     ‘upgrade-to-pre-releases?’ (default: ‘#f’)
     ‘keep-temporaries-hours’ (default: ‘24’)
     ‘cache-ignored-files?’ (default: ‘#f’)
     ‘progress-update-interval-seconds’ (default: ‘5’)
     ‘limit-bandwidth-in-lan?’ (default: ‘#f’)
     ‘min-home-disk-free-unit’ (default: ‘"%"’)
     ‘min-home-disk-free’ (default: ‘1’)
     ‘releases-url’ (default: ‘"https://upgrades.syncthing.net/meta.json"’)
     ‘overwrite-remote-device-names-on-connect?’ (default: ‘#f’)
     ‘temp-index-min-blocks’ (default: ‘10’)
     ‘unacked-notification-id’ (default: ‘"authenticationUserAndPassword"’)
     ‘traffic-class’ (default: ‘0’)
     ‘set-low-priority?’ (default: ‘#t’)
     ‘max-folder-concurrency’ (default: ‘0’)
     ‘crash-reporting-url’ (default: ‘"https://crash.syncthing.net/newcrash"’)
     ‘crash-reporting-enabled?’ (default: ‘#t’)
     ‘stun-keepalive-start-seconds’ (default: ‘180’)
     ‘stun-keepalive-min-seconds’ (default: ‘20’)
     ‘stun-server’ (default: ‘"default"’)
     ‘database-tuning’ (default: ‘"auto"’)
     ‘max-concurrent-incoming-request-kib’ (default: ‘0’)
     ‘announce-lan-addresses?’ (default: ‘#t’)
     ‘send-full-index-on-upgrade?’ (default: ‘#f’)
     ‘connection-limit-enough’ (default: ‘0’)
     ‘connection-limit-max’ (default: ‘0’)
     ‘insecure-allow-old-tls-versions?’ (default: ‘#f’)
     ‘connection-priority-tcp-lan’ (default: ‘10’)
     ‘connection-priority-quic-lan’ (default: ‘20’)
     ‘connection-priority-tcp-wan’ (default: ‘30’)
     ‘connection-priority-quic-wan’ (default: ‘40’)
     ‘connection-priority-relay’ (default: ‘50’)
     ‘connection-priority-upgrade-threshold’ (default: ‘0’)
     ‘default-folder’ (default: ‘(syncthing-folder (label ""))’)
     ‘default-device’ (default: ‘(syncthing-device (id ""))’)
     ‘default-ignores’ (default: ‘"")’)
          Options whose names begin with ‘default-’ above do not affect
          folders and devices added through the Guix configuration
          interface. They will, however, affect folders and devices that
          are added through the Syncthing GUI, by an ‘introducer’, or a
          device with ‘auto-accept-folders’.

 -- Data Type: syncthing-folder
     Data type representing a folder to be synchronized.

     ‘id’ (Vorgabe: ‘#f’)
          This ID cannot match the ID of any other folder on this
          device. If left unspecified, it will default to the label (see
          below).

     ‘label’
          A human readable label for the folder.

     ‘path’
          The path at which to store this folder.

     ‘type’ (default: ‘"sendreceive"’)
     ‘rescan-interval-seconds’ (default: ‘3600’)
     ‘file-system-watcher-enabled?’ (default: ‘#t’)
     ‘file-system-watcher-delay-seconds’ (default: ‘10’)
     ‘file-system-watcher-timeout-seconds’ (default: ‘0’)
     ‘ignore-permissions?’ (default: ‘#f’)
     ‘auto-normalize?’ (default: ‘#t’)
     ‘devices’ (default: ‘'()’)
          This should be a list of other Syncthing devices. You do not
          need to specify the current device. Each device can be listed
          as a a ‘syncthing-device’ record or a
          ‘syncthing-folder-device’ record if you want files to be
          encrypted on disk. See below.

     ‘filesystem-type’ (default: ‘"basic"’)
     ‘min-disk-free-unit’ (default: ‘"%"’)
     ‘min-disk-free’ (default: ‘1’)
     ‘versioning-type’ (default: ‘#f’)
     ‘versioning-file-system-path’ (default: ‘""’)
     ‘versioning-file-system-type’ (default: ‘"basic"’)
     ‘versioning-cleanup-interval-seconds’ (default: ‘3600’)
     ‘versioning-cleanout-days’ (default: ‘#f’)
     ‘versioning-keep’ (default: ‘#f’)
     ‘versioning-max-age’ (default: ‘#f’)
     ‘versioning-command’ (default: ‘#f’)
     ‘copiers’ (default: ‘0’)
     ‘puller-max-pending-kib’ (default: ‘0’)
     ‘hashers’ (default: ‘0’)
     ‘order’ (default: ‘"random"’)
     ‘ignore-delete?’ (default: ‘#f’)
     ‘scan-progress-interval-seconds’ (default: ‘0’)
     ‘puller-pause-seconds’ (default: ‘0’)
     ‘max-conflicts’ (default: ‘10’)
     ‘disable-sparse-files?’ (default: ‘#f’)
     ‘disable-temp-indexes?’ (default: ‘#f’)
     ‘paused?’ (default: ‘#f’)
     ‘weak-hash-threshold-percentage’ (default: ‘25’)
     ‘marker-name’ (default: ‘".stfolder"’)
     ‘copy-ownership-from-parent?’ (default: ‘#f’)
     ‘mod-time-window-seconds’ (default: ‘0’)
     ‘max-concurrent-writes’ (default: ‘2’)
     ‘disable-fsync?’ (default: ‘#f’)
     ‘block-pull-order’ (default: ‘"standard"’)
     ‘copy-range-method’ (default: ‘"standard"’)
     ‘case-sensitive-file-system?’ (default: ‘#f’)
     ‘junctions-as-dirs?’ (default: ‘#f’)
     ‘sync-ownership?’ (default: ‘#f’)
     ‘send-ownership?’ (default: ‘#f’)
     ‘sync-xattrs?’ (default: ‘#f’)
     ‘send-xattrs?’ (default: ‘#f’)
     ‘xattr-filter-max-single-entry-size’ (default: ‘1024’)
     ‘xattr-filter-max-total-size’ (default: ‘4096’)

 -- Data Type: syncthing-device
     Data type representing a device to synchronize folders with.

     ‘id’
          A long hash representing the keys generated by Syncthing on
          the first launch. You can obtain this from the Syncthing GUI
          or by inspecting an existing Syncthing configuration file.

     ‘name’ (default: ‘""’)
          A human readable device name for viewing in the GUI or in
          Scheme.

     ‘compression’ (default: ‘"metadata"’)
     ‘introducer?’ (default: ‘#f’)
     ‘skip-introduction-removals?’ (default: ‘#f’)
     ‘introduced-by’ (default: ‘""’)
     ‘addresses’ (default: ‘'("dynamic")’)
          List of addresses at which to search for this device. When the
          special value “dynamic” is included, Syncthing will search for
          the device locally as well as via the Syncthing project’s
          global discovery
          (https://docs.syncthing.net/users/security.html#global-discovery)
          servers.

     ‘paused?’ (default: ‘#f’)
     ‘auto-accept-folders?’ (default: ‘#f’)
     ‘max-send-kbps’ (default: ‘0’)
     ‘max-receive-kbps’ (default: ‘0’)
     ‘max-request-kib’ (default: ‘0’)
     ‘untrusted?’ (default: ‘#f’)
     ‘remote-gui-port’ (default: ‘0’)
     ‘num-connections’ (default: ‘0’)

 -- Data Type: syncthing-folder-device
     This data type offers two folder-specific device options:
     ‘introduced-by’ and ‘encryption-password’.

     ‘syncthing-folder-device’ corresponds to the ‘device’
     (https://docs.syncthing.net/users/config.html#config-option-folder.device)
     option in the upstream ‘folder’ element.

     If you don’t need to use these options, then you can just use
     ‘syncthing-device’ instead of ‘syncthing-folder-device’ in the
     ‘devices’ field of a ‘syncthing-folder’ instance.

     ‘device’
          The ‘syncthing-device’ for which this configuration applies.

     ‘introduced-by’ (default: ‘""’)
          The name of the device that "introduced" our device to the
          device sharing this folder. This is only used when
          "introduced" devices are removed by the introducer. See
          Syncthing introductions
          (https://docs.syncthing.net/users/introducer.html).

     ‘encryption-password’ (default: ‘""’)
          The password used to encrypt data that is synchronized to
          untrusted devices.

          Beware: specifying this field will include this password as
          plain text (not encrypted) and globally visible in
          ‘/gnu/store/’. If the encryption-password is non-empty, then
          it will be used as a password to encrypt file chunks as they
          are synchronized to untrusted devices. For more information on
          syncing to devices you don’t totally trust, see Syncthing’s
          documentation on Untrusted (Encrypted) Devices
          (https://docs.syncthing.net/users/untrusted.html). Note that
          data transfer is always encrypted while in transport
          ("end-to-end encryption"), regardless of this setting.

   Here is a more complex example configuration for illustrative
purposes:

     (service syncthing-service-type
              (let ((laptop (syncthing-device (id "VHOD2D6-...-7XRMDEN")))
                    (desktop (syncthing-device (id "64SAZ37-...-FZJ5GUA")
                                               (addresses '("tcp://example.com"))))
                    (bob-desktop (syncthing-device (id "KYIMEGO-...-FT77EAO"))))
                (syncthing-configuration
                 (user "alice")
                 (config-file
                  (syncthing-config-file
                    (folders (list (syncthing-folder
                                    (label "some-files")
                                    (path "~/data")
                                    (devices (list desktop laptop)))
                                   (syncthing-folder
                                    (label "critical-files")
                                    (path "~/secrets")
                                    (devices
                                     (list desktop
                                           laptop
                                           (syncthing-folder-device
                                            (device bob-desktop)
                                            (encryption-password "mypassword"))))))))))))

   Des Weiteren bietet das Modul ‘(gnu services ssh)’ die folgenden
Dienste an.
 -- Variable: openssh-service-type
     Dies ist der Diensttyp für den OpenSSH-Secure-Shell-Daemon
     (http://www.openssh.org), ‘sshd’. Sein Wert muss ein
     ‘openssh-configuration’-Verbundsobjekt wie in diesem Beispiel sein:

          (service openssh-service-type
                   (openssh-configuration
                     (x11-forwarding? #t)
                     (permit-root-login 'prohibit-password)
                     (authorized-keys
                       `(("alice" ,(local-file "alice.pub"))
                         ("bob" ,(local-file "bob.pub"))))))

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

     Dieser Dienst kann mit weiteren autorisierten Schlüsseln erweitert
     werden, wie in diesem Beispiel:

          (service-extension openssh-service-type
                             (const `(("charlie"
                                       ,(local-file "charlie.pub")))))

 -- Datentyp: openssh-configuration
     Dies ist der Verbundstyp für die Konfiguration von OpenSSHs ‘sshd’.

     ‘openssh’ (Vorgabe: OPENSSH)
          Das zu benutzende OpenSSH-Paket.

     ‘pid-file’ (Vorgabe: ‘"/var/run/sshd.pid"’)
          Der Name der Datei, in die ‘sshd’ seine PID schreibt.

     ‘port-number’ (Vorgabe: ‘22’)
          Der TCP-Port, auf dem ‘sshd’ auf eingehende Verbindungen
          lauscht.

     ‘max-connections’ (Vorgabe: ‘200’)
          Harte Grenze, wie viele Client-Verbindungen gleichzeitig
          möglich sind, durchgesetzt durch den im inetd-Stil startenden
          Shepherd-Dienst (siehe *note ‘make-inetd-constructor’:
          (shepherd)Service De- and Constructors.).

     ‘permit-root-login’ (Vorgabe: ‘#f’)
          Dieses Feld bestimmt, ob und wann Anmeldungen als
          Administratornutzer „root“ erlaubt sind. Wenn es ‘#f’ ist,
          sind Anmeldungen als Administrator gesperrt, bei ‘#t’ sind sie
          erlaubt. Wird hier das Symbol ‘'prohibit-password’ angegeben,
          dann sind Anmeldungen als Administrator erlaubt, aber nur,
          wenn keine passwortbasierte Authentifizierung verwendet wird.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, können sich Nutzer, deren
          Passwort leer ist, anmelden. Ist es falsch, können sie es
          nicht.

     ‘password-authentication?’ (Vorgabe: ‘#t’)
          Wenn dies wahr ist, können sich Benutzer mit ihrem Passwort
          anmelden. Wenn es falsch ist, müssen sie andere
          Authentisierungsmethoden benutzen.

     ‘public-key-authentication?’ (Vorgabe: ‘#t’)
          Wenn dies wahr ist, können Benutzer zur Anmeldung mit ihrem
          öffentlichen Schlüssel authentifiziert werden. Wenn es falsch
          ist, müssen sie andere Authentisierungsmethoden benutzen.

          Autorisierte öffentliche Schlüssel werden in
          ‘~/.ssh/authorized_keys’ gespeichert. Dies wird nur für
          Protokollversion 2 benutzt.

     ‘x11-forwarding?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, ist das Weiterleiten von
          Verbindungen an grafische X11-Clients erlaubt – mit anderen
          Worten funktionieren dann die ‘ssh’-Befehlszeilenoptionen ‘-X’
          und ‘-Y’.

     ‘allow-agent-forwarding?’ (Vorgabe: ‘#t’)
          Ob Weiterleitung an den SSH-Agenten zugelassen werden soll.

     ‘allow-tcp-forwarding?’ (Vorgabe: ‘#t’)
          Ob Weiterleitung von TCP-Kommunikation zugelassen werden soll.

     ‘gateway-ports?’ (Vorgabe: ‘#f’)
          Ob Ports als Zugang für eingehende Verbindungen
          („Gateway-Ports“) weitergeleitet werden dürfen.

     ‘challenge-response-authentication?’ (Vorgabe: ‘#f’)
          Gibt an, ob „Challenge-Response“-Authentifizierung zugelassen
          wird (z.B. über PAM).

     ‘use-pam?’ (Vorgabe: ‘#t’)
          Aktiviert die Pluggable-Authentication-Module-Schnittstelle.
          Wenn es auf ‘#t’ gesetzt ist, wird dadurch PAM-Authentisierung
          über ‘challenge-response-authentication?’ und
          ‘password-authentication?’ aktiviert, zusätzlich zur
          Verarbeitung von PAM-Konten und Sitzungsmodulen für alle
          Authentisierungsarten.

          Weil PAM-Challenge-Response-Authentisierung oft für dieselben
          Zwecke wie Passwortauthentisierung eingesetzt wird, sollten
          Sie entweder ‘challenge-response-authentication?’ oder
          ‘password-authentication?’ deaktivieren.

     ‘print-last-log?’ (Vorgabe: ‘#t’)
          Hiermit wird angegeben, ob ‘sshd’ Datum und Uhrzeit der
          letzten Anmeldung anzeigen soll, wenn sich ein Benutzer
          interaktiv anmeldet.

     ‘subsystems’ (Vorgabe: ‘'(("sftp" "internal-sftp"))’)
          Hiermit werden externe Subsysteme konfiguriert (z.B. ein
          Dateiübertragungsdaemon).

          Diese werden als Liste von zweielementigen Listen angegeben,
          von denen jede den Namen des Subsystems und einen Befehl (mit
          optionalen Befehlszeilenargumenten) benennt, der bei einer
          Anfrage an das Subsystem ausgeführt werden soll.

          Der Befehl ‘internal-sftp’ implementiert einen SFTP-Server im
          selben Prozess. Alternativ kann man den ‘sftp-server’-Befehl
          angeben:
               (service openssh-service-type
                        (openssh-configuration
                         (subsystems
                          `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))

     ‘accepted-environment’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten, die die Umgebungsvariablen
          benennen, die exportiert werden dürfen.

          Jede Zeichenkette wird zu einer eigenen Zeile in der
          Konfigurationsdatei. Siehe die Option ‘AcceptEnv’ in ‘man
          sshd_config’.

          Mit diesem Beispiel können SSH-Clients die Umgebungsvariable
          ‘COLORTERM’ exportieren. Sie wird von Terminal-Emulatoren
          gesetzt, die Farben unterstützen. Sie können Sie in der
          Ressourcendatei Ihrer Shell benutzen, um Farben in der
          Eingabeaufforderung und in Befehlen zu aktivieren, wenn diese
          Variable gesetzt ist.

               (service openssh-service-type
                        (openssh-configuration
                          (accepted-environment '("COLORTERM"))))

     ‘authorized-keys’ (Vorgabe: ‘'()’)
          Dies ist die Liste der autorisierten Schlüssel. Jedes Element
          der Liste ist ein Benutzername gefolgt von einem oder mehr
          dateiartigen Objekten, die öffentliche SSH-Schlüssel
          repräsentieren. Zum Beispiel werden mit

               (openssh-configuration
                 (authorized-keys
                   `(("rekado" ,(local-file "rekado.pub"))
                     ("chris" ,(local-file "chris.pub"))
                     ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))

          die angegebenen öffentlichen Schlüssel für die Benutzerkonten
          ‘rekado’, ‘chris’ und ‘root’ registriert.

          Weitere autorisierte Schlüssel können als ‘service-extension’
          hinzugefügt werden.

          Beachten Sie, dass das hier neben ‘~/.ssh/authorized_keys’
          _ohne_ sich zu stören benutzt werden kann.

     ‘generate-host-keys?’ (Vorgabe: ‘#t’)
          Ob Schlüsselpaare für den Rechner mit ‘ssh-keygen -A’ unter
          ‘/etc/ssh’ erzeugt werden sollen, wenn es noch keine gibt.

          Das Erzeugen von Schlüsselpaaren dauert nur ein paar Sekunden,
          wenn genug Entropie vorrätig ist, und findet nur einmal statt.
          Wenn Sie es z.B. auf einer virtuellen Maschine _nicht_
          brauchen, etwa weil Sie die Rechnerschlüssel schon von
          anderswo bekommen und die zusätzliche Zeit beim Systemstart
          ein Problem ist, schalten Sie es vielleicht lieber aus.

     ‘log-level’ (Vorgabe: ‘'info’)
          Dieses Symbol gibt die Stufe der Protokollierung an: ‘quiet’
          (schweigsam), ‘fatal’, ‘error’, ‘info’, ‘verbose’
          (ausführlich), ‘debug’ (Fehlersuche) etc. Siehe die
          Handbuchseite für ‘sshd_config’ für die vollständige Liste der
          Stufenbezeichnungen.

     ‘extra-content’ (Vorgabe: ‘""’)
          Dieses Feld kann benutzt werden, um beliebigen Text an die
          Konfigurationsdatei anzuhängen. Es ist besonders bei
          ausgeklügelten Konfigurationen nützlich, die anders nicht
          ausgedrückt werden können. Zum Beispiel würden mit dieser
          Konfiguration Anmeldungen als Administratornutzer „root“
          grundsätzlich untersagt, lediglich für eine bestimmte
          IP-Adresse wären sie zugelassen:

               (openssh-configuration
                 (extra-content "\
               Match Address 192.168.0.1
                 PermitRootLogin yes"))

 -- Variable: dropbear-service-type
     Diensttyp des Dienstes, um den Dropbear-SSH-Daemon
     (https://matt.ucc.asn.au/dropbear/dropbear.html) auszuführen. Sein
     Wert ist ein ‘<dropbear-configuration>’-Objekt.

     Wenn Sie zum Beispiel einen Dropbear-Dienst angeben möchten, der
     auf Port 1234 lauscht:

          (service dropbear-service-type (dropbear-configuration
                                           (port-number 1234)))

 -- Datentyp: dropbear-configuration
     Dieser Datentyp repräsentiert die Konfiguration eines
     Dropbear-SSH-Daemons.

     ‘dropbear’ (Vorgabe: DROPBEAR)
          Das zu benutzende Dropbear-Paket.

     ‘port-number’ (Vorgabe: 22)
          Die Portnummer des TCP-Ports, auf dem der Daemon auf
          eingehende Verbindungen wartet.

     ‘syslog-output?’ (Vorgabe: ‘#t’)
          Ob eine Ausgabe für Syslog aktiviert sein soll.

     ‘pid-file’ (Vorgabe: ‘"/var/run/dropbear.pid"’)
          Der Dateiname der PID-Datei des Daemons.

     ‘root-login?’ (Vorgabe: ‘#f’)
          Ob Anmeldungen als Administratornutzer ‘root’ möglich sein
          sollen.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’)
          Ob leere Passwörter zugelassen sein sollen.

     ‘password-authentication?’ (Vorgabe: ‘#t’)
          Ob passwortbasierte Authentisierung zugelassen sein soll.

 -- Variable: autossh-service-type
     Dies ist der Diensttyp für das AutoSSH-Programm
     (https://www.harding.motd.ca/autossh), das eine Kopie von ‘ssh’
     ausführt und diese überwacht. Bei Bedarf wird sie neugestartet, für
     den Fall, dass sie abstürzt oder keine Kommunikation mehr
     verarbeitet. AutoSSH kann von Hand aus der Befehlszeile heraus
     aufgerufen werden, indem man Argumente an die Binärdatei ‘autossh’
     aus dem Paket ‘autossh’ übergibt, aber es kann auch als ein
     Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

     AutoSSH kann benutzt werden, um an den lokalen Rechner gerichtete
     Kommunikation an eine entfernte Maschine über einen SSH-Tunnel
     weiterzuleiten. Dabei gilt die ‘~/.ssh/config’-Datei des AutoSSH
     ausführenden Benutzers.

     Um zum Beispiel einen Dienst anzugeben, der autossh mit dem
     Benutzerkonto ‘pino’ ausführt und alle lokalen Verbindungen auf
     Port ‘8081’ an ‘entfernt:8081’ über einen SSH-Tunnel
     durchzureichen, fügen Sie folgenden Aufruf in das ‘services’-Feld
     des Betriebssystems ein:

          (service autossh-service-type
                   (autossh-configuration
                    (user "pino")
                    (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "entfernt.net"))))

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

     ‘user’ (Vorgabe: ‘"autossh"’)
          Das Benutzerkonto, mit dem der AutoSSH-Dienst ausgeführt wird.
          Es wird vorausgesetzt, dass der angegebene Benutzer existiert.

     ‘poll’ (Vorgabe: ‘600’)
          Gibt an, wie oft die Verbindung geprüft wird („Poll Time“), in
          Sekunden.

     ‘first-poll’ (Vorgabe: ‘#f’)
          Gibt an, wie viele Sekunden AutoSSH vor der ersten
          Verbindungsprüfung abwartet. Nach dieser ersten Prüfung werden
          weitere Prüfungen mit der in ‘poll’ angegebenen Regelmäßigkeit
          durchgeführt. Wenn dies auf ‘#f’ gesetzt ist, erfährt die
          erste Verbindungsprüfung keine Sonderbehandlung, sondern
          benutzt die gleichen Zeitabstände, die auch mit ‘poll’
          festgelegt wurden.

     ‘gate-time’ (Vorgabe: ‘30’)
          Gibt an, wie viele Sekunden lang eine SSH-Verbindung aktiv
          sein muss, bis sie als erfolgreich angesehen wird.

     ‘log-level’ (Vorgabe: ‘1’)
          Die Protokollierungsstufe. Sie entspricht den bei Syslog
          verwendeten Stufen, d.h. ‘0’ verschweigt die meisten Ausgaben,
          während ‘7’ die gesprächigste Stufe ist.

     ‘max-start’ (Vorgabe: ‘#f’)
          Wie oft SSH (neu) gestartet werden darf, bevor AutoSSH aufgibt
          und sich beendet. Steht dies auf ‘#f’, gibt es keine
          Begrenzung und AutoSSH kann endlos neu starten.

     ‘message’ (Vorgabe: ‘""’)
          Welche Nachricht beim Prüfen von Verbindungen an die
          zurückkommende Echo-Nachricht angehängt werden soll.

     ‘port’ (Vorgabe: ‘"0"’)
          Welche Ports zum Überprüfen der Verbindung benutzt werden.
          Steht dies auf ‘"0"’, werden keine Überprüfungen durchgeführt.
          Steht es auf ‘"N"’ für eine positive ganze Zahl N, werden die
          Ports N und N+1 zum Überwachen der Verbindung eingesetzt,
          wobei auf Port N Daten dafür gesendet werden und Port ‘n+1’
          deren Echo empfangen soll. Steht es auf ‘"N:M"’ für positive
          ganze Zahlen N und M, werden Ports N und M zur Überprüfung
          eingesetzt, wozu Port N zum Senden der Prüfdaten eingesetzt
          wird und Port M das Echo empfängt.

     ‘ssh-options’ (Vorgabe: ‘'()’)
          Die Liste der Befehlszeilenargumente, die an ‘ssh’
          weitergegeben werden sollen, wenn es ausgeführt wird. Die
          Befehlszeilenoptionen ‘-f’ und ‘-M’ sind AutoSSH vorbehalten;
          sie anzugeben, führt zu undefiniertem Verhalten.

 -- Variable: webssh-service-type
     Dies ist der Diensttyp für das Programm WebSSH
     (https://webssh.huashengdun.org/), das einen webbasierten
     SSH-Client ausführt. WebSSH kann von Hand aus der Befehlszeile
     heraus aufgerufen werden, indem man Argumente an die Binärdatei
     ‘wssh’ aus dem Paket ‘webssh’ übergibt, aber es kann auch als ein
     Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

     Um zum Beispiel einen Dienst anzugeben, der WebSSH an der
     Loopback-Schnittstelle auf Port ‘8888’ ausführt, wobei die
     Richtlinie ist, dass Verbindungen abgelehnt werden außer zu einer
     Liste von erlaubten Rechnern, und eine auf HTTPS-Verbindungen
     lauschende NGINX als inversen Proxy dafür fungieren zu lassen,
     fügen Sie folgende Aufrufe in das ‘services’-Feld des
     Betriebssystems ein:

          (service webssh-service-type
            (webssh-configuration (address "127.0.0.1")
                                  (port 8888)
                                  (policy 'reject)
                                  (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
                                                 "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))

          (service nginx-service-type
                   (nginx-configuration
                    (server-blocks
                     (list
                      (nginx-server-configuration
                       (inherit %webssh-configuration-nginx)
                       (server-name '("webssh.example.com"))
                       (listen '("443 ssl"))
                       (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
                       (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
                       (locations
                        (cons (nginx-location-configuration
                               (uri "/.well-known")
                               (body '("root /var/www;")))
                              (nginx-server-configuration-locations %webssh-configuration-nginx))))))))

 -- Datentyp: webssh-configuration
     Repräsentiert die Konfiguration für den Dienst ‘webssh-service’.

     ‘package’ (Vorgabe: ‘webssh’)
          Zu benutzendes ‘webssh’-Paket.

     ‘user-name’ (Vorgabe: ‘"webssh"’)
          Der Benutzername oder der Benutzeridentifikator (d.h. die
          „User-ID“), mit dem Dateiübertragungen zum und vom Modul
          stattfinden sollen.

     ‘group-name’ (Vorgabe: ‘"webssh"’)
          Benutzergruppenname oder Gruppenidentifikator („Group-ID“),
          mit dem auf das Modul zugegriffen wird.

     ‘address’ (Vorgabe: ‘#f’)
          Die IP-Adresse, auf der ‘webssh’ auf eingehende Verbindungen
          lauscht.

     ‘port’ (Vorgabe: ‘8888’)
          Der TCP-Port, auf dem ‘webssh’ auf eingehende Verbindungen
          lauscht.

     ‘policy’ (Vorgabe: ‘#f’)
          Die Verbindungsrichtlinie ‘reject’ setzt voraus, dass erlaubte
          Rechner in KNOWN-HOSTS eingetragen werden.

     ‘known-hosts’ (Vorgabe: ‘'()’)
          Eine Liste der Rechner, die für eine SSH-Verbindung aus
          ‘webssh’ zugelassen sind.

     ‘log-file’ (Vorgabe: ‘"/var/log/webssh.log"’)
          Der Name der Datei, in die ‘webssh’ seine Protokolle schreibt.

     ‘log-level’ (Vorgabe: ‘#f’)
          Das Protokollierungsniveau.

 -- Variable: block-facebook-hosts-service-type
     Dieser Dienst fügt eine Liste bekannter Facebook-Rechner in die
     Datei ‘/etc/hosts’ ein (siehe *note (libc)Host Names::). Jede Zeile
     enthält einen Eintrag, der einen bekannten Servernamen des
     Facebook-Online-Dienstes – z.B. ‘www.facebook.com’ – zu IPv4- und
     IPv6-Adressen umdeutet, die nirgendwohin geroutet werden können.

     Dieser Mechanismus kann verhindern, dass lokal laufende Programme,
     wie z.B. Web-Browser, auf Facebook zugreifen.

   Das Modul ‘(gnu services avahi)’ stellt die folgende Definition zur
Verfügung.

 -- Variable: avahi-service-type
     Dieser Dienst führt den ‘avahi-daemon’ aus, einen systemweiten
     mDNS-/DNS-SD-Anbieter, mit dem im lokalen Netzwerk befindliche
     Geräte erkannt werden können („Service Discovery“) und Rechnernamen
     selbstständig aufgelöst werden können („Zero-Configuration“) (siehe
     <https://avahi.org/>). Sein Wert muss ein
     ‘avahi-configuration’-Verbundsobjekt sein – siehe unten.

     Dieser Dienst erweitert den Name Service Cache Daemon (nscd), damit
     er ‘.local’-Rechnernamen mit nss-mdns
     (https://0pointer.de/lennart/projects/nss-mdns/) auflösen kann.
     Siehe *note Name Service Switch:: für Informationen zur Auflösung
     von Rechnernamen.

     Des Weiteren wird das AVAHI-Paket zum Systemprofil hinzugefügt,
     damit Befehle wie ‘avahi-browse’ einfach benutzt werden können.

 -- Datentyp: avahi-configuration
     Dieser Datentyp repräsentiert die Konfiguration von Avahi.

     ‘host-name’ (Vorgabe: ‘#f’)
          Wenn dies auf etwas anderes als ‘#f’ gesetzt ist, wird es
          anderen als Rechnername für diese Maschine mitgeteilt,
          andernfalls wird der tatsächliche Rechnername anderen
          mitgeteilt.

     ‘publish?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr gesetzt ist, dürfen Rechnernamen und
          Avahi-Dienste über das Netzwerk mitgeteilt werden (als
          Broadcast).

     ‘publish-workstation?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr gesetzt ist, teilt ‘avahi-daemon’ den
          Rechnernamen dieser Maschine und die IP-Adresse über mDNS auf
          dem lokalen Netzwerk öffentlich mit. Um die auf Ihrem lokalen
          Netzwerk mitgeteilten Rechnernamen zu sehen, können Sie das
          hier ausführen:

               avahi-browse _workstation._tcp

     ‘wide-area?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, ist DNS-SD über „Unicast DNS“
          aktiviert.

     ‘ipv4?’ (Vorgabe: ‘#t’)
     ‘ipv6?’ (Vorgabe: ‘#t’)
          Mit diesen Feldern wird festgelegt, ob IPv4-/IPv6-Sockets
          verwendet werden.

     ‘domains-to-browse’ (Vorgabe: ‘'()’)
          Dies ist eine Liste von Domänen, die durchsucht werden.

 -- Variable: openvswitch-service-type
     Dies ist der Diensttyp des Open-vSwitch-Dienstes
     (https://www.openvswitch.org), der als Wert ein
     ‘openvswitch-configuration’-Objekt hat.

 -- Datentyp: openvswitch-configuration
     Der Datentyp, der die Konfiguration von Open vSwitch repräsentiert,
     einem auf mehreren Schichten arbeitenden („multilayer“) virtuellen
     Switch, der für massenhafte Netzwerkautomatisierung durch
     programmatische Erweiterungen eingesetzt werden kann.

     ‘package’ (Vorgabe: OPENVSWITCH)
          Das Paketobjekt vom Open vSwitch.

 -- Variable: pagekite-service-type
     Dies ist der Diensttyp für den PageKite-Dienst
     (https://memcached.org/), einem Angebot zur getunnelten
     Netzwerkumleitung, womit bloß auf localhost lauschende Server
     öffentlich erreichbar gemacht werden können. Mit PageKite werden
     die Server für andere erreichbar, selbst wenn Ihre Maschine nur
     über eine restriktive Firewall oder eine Netzwerkadressübersetzung
     („Network Address Translation“, NAT) ohne Portweiterleitung mit dem
     Internet verbunden ist. Der Wert dieses Dienstes ist ein
     ‘pagekite-configuration’-Verbundsobjekt.

     Hier ist ein Beispiel, wodurch die lokal laufenden HTTP- und
     SSH-Daemons zugänglich gemacht werden:

          (service pagekite-service-type
                   (pagekite-configuration
                     (kites '("http:@kitename:localhost:80:@kitesecret"
                              "raw/22:@kitename:localhost:22:@kitesecret"))
                     (extra-file "/etc/pagekite.rc")))

 -- Datentyp: pagekite-configuration
     Der Datentyp, der die Konfiguration von PageKite repräsentiert.

     ‘package’ (Vorgabe: PAGEKITE)
          Paketobjekt von PageKite.

     ‘kitename’ (Vorgabe: ‘#f’)
          PageKite-Name, um sich gegenüber dem Vordergrundserver zu
          authentisieren.

     ‘kitesecret’ (Vorgabe: ‘#f’)
          Das gemeinsame Geheimnis, das eine Authentisierung gegenüber
          dem Vordergrundserver ermöglicht. Wahrscheinlich sollten Sie
          es besser als Teil von ‘extra-file’ angeben.

     ‘frontend’ (Vorgabe: ‘#f’)
          Eine Verbindung zum angegebenen PageKite-Vordergrundserver
          herstellen statt zu dem Dienst von pagekite.net.

     ‘kites’ (Vorgabe: ‘'("http:@kitename:localhost:80:@kitesecret")’)
          Die Liste der zu benutzenden „Kites“ für Dienste. Nach Vorgabe
          wird der HTTP-Server auf Port 80 nach außen hin zugänglich
          gemacht. Dienste sind im Format
          ‘protokoll:kitename:rechnername:port:geheimnis’ anzugeben.

     ‘extra-file’ (Vorgabe: ‘#f’)
          Eine Konfigurationsdatei, die zusätzlich eingelesen werden
          soll. Es wird erwartet, dass Sie diese manuell erstellen.
          Benutzen Sie sie, wenn Sie zusätzliche Optionen angeben
          möchten und um gemeinsame Geheimnisse abseits von Guix’
          Zuständigkeitsbereich zu verwalten.

 -- Variable: yggdrasil-service-type
     Der Diensttyp, um eine Verbindung mit dem Yggdrasil-Netzwerk
     (https://yggdrasil-network.github.io/) herzustellen, einer frühen
     Implementierungsstufe eines völlig Ende-zu-Ende-verschlüsselten
     IPv6-Netzwerks.

          Die Wegfindung im Yggdrasil-Netzwerk verläuft unabhängig vom
          Namen der Netzwerkknoten („Name-independent Routing“) und
          verwendet kryptografisch erzeugte Adressen. Durch die
          statische Adressierung können Sie dieselbe Adresse so lange
          weiterbenutzen, wie Sie möchten, selbst wenn Sie sich an einem
          anderen Ort befinden als vorher, und Sie können auch, wann
          immer Sie möchten, eine neue Adresse erzeugen (durch Erzeugung
          neuer Schlüssel). Siehe
          <https://yggdrasil-network.github.io/2018/07/28/addressing.html>

     Übergeben Sie einen Wert vom Typ ‘yggdrasil-configuration’, um ihn
     eine Verbindung zu öffentlichen und/oder lokalen
     Netzwerkteilnehmern („Peers“) herstellen zu lassen.

     Hier ist ein Beispiel für die Nutzung mit öffentlichen Peers und
     einer statischen Adresse. Die statischen Schlüssel zum Signieren
     und Verschlüsseln werden in ‘/etc/yggdrasil-private.conf’ definiert
     (dies ist die Vorgabe für ‘config-file’).

          ;; Teil des operating-system in der Betriebssystemdeklaration
          (service yggdrasil-service-type
                        (yggdrasil-configuration
                         (autoconf? #f) ;nur öffentliche Peers benutzen
                         (json-config
                         ;; nehmen Sie eine von
                         ;; https://github.com/yggdrasil-network/public-peers
                          '((peers . #("tcp://1.2.3.4:1337"))))
                         ;; /etc/yggdrasil-private.conf ist der Vorgabewert von config-file
                         ))
          # Beispielinhalt für /etc/yggdrasil-private.conf
          {
            # Ihr privater Signierschlüssel. Geben Sie ihn NICHT weiter!
            PrivateKey: 5c750…
          }

 -- Datentyp: yggdrasil-configuration
     Repräsentiert die Konfiguration von Yggdrasil.

     ‘package’ (Vorgabe: ‘yggdrasil’)
          Paketobjekt von Yggdrasil.

     ‘json-config’ (Vorgabe: ‘'()’)
          Der Inhalt von ‘/etc/yggdrasil.conf’. Er wird mit
          ‘/etc/yggdrasil-private.conf’ zusammengelegt. Beachten Sie,
          dass diese Einstellungen im Guix-Store gespeichert werden, auf
          den alle Nutzer Zugriff haben. *Speichern Sie dort nicht Ihre
          privaten Schlüssel*. Siehe die Ausgabe von ‘yggdrasil
          -genconf’ für eine kurze Übersicht über gültige Schlüssel und
          ihre Vorgabewerte.

     ‘autoconf?’ (Vorgabe: ‘#f’)
          Ob der automatische Modus benutzt werden soll. Ihn zu
          aktivieren, bedeutet, dass Yggdrasil eine dynamische
          IP-Adresse benutzt und sich mit IPv6-Nachbarn verbindet.

     ‘log-level’ (Vorgabe: ‘'info’)
          Wie detailliert die Protokolle sein sollen. Schreiben Sie
          ‘'debug’ für einen höheren Detailgrad.

     ‘log-to’ (Vorgabe: ‘'stdout’)
          Wohin Protokolle geschickt werden. Die Vorgabe ist, dass der
          Dienst ein Protokoll seiner Standardausgabe in
          ‘/var/log/yggdrasil.log’ schreibt. Die Alternative ist
          ‘'syslog’, wodurch die Ausgabe an den laufenden syslog-Dienst
          geschickt wird.

     ‘config-file’ (Vorgabe: ‘"/etc/yggdrasil-private.conf"’)
          Wo die HJSON-Datei liegt, aus der sensible Daten geladen
          werden. Hier sollten private Schlüssel gespeichert werden,
          wodurch nicht nach jedem Neustart eine zufällige Adresse
          benutzt wird. Verwenden Sie ‘#f’ zum Deaktivieren. In dieser
          Datei festgelegte Optionen haben Vorrang vor ‘json-config’.
          Tragen Sie anfangs die Ausgabe von ‘yggdrasil -genconf’ ein.
          Um eine statische Adresse zu benutzen, löschen Sie alles außer
          der Option PrivateKey.

 -- Variable: ipfs-service-type
     Der Diensttyp, um sich mit dem IPFS-Netzwerk (https://ipfs.io) zu
     verbinden, einem weltweiten, versionierten, von einem
     Netzwerkteilnehmer zum anderen („peer-to-peer“) verteilten
     Dateisystem. Geben Sie ein ‘ipfs-configuration’-Verbundsobjekt an,
     um die für den Netzwerkzugang (Gateway) und die
     Anwendungsschnittstelle (API) verwendeten Ports zu ändern.

     Hier ist eine Beispielkonfiguration, um nicht standardmäßige Ports
     einzusetzen:

          (service ipfs-service-type
                   (ipfs-configuration
                    (gateway "/ip4/127.0.0.1/tcp/8880")
                    (api "/ip4/127.0.0.1/tcp/8881")))

 -- Datentyp: ipfs-configuration
     Repräsentiert die Konfiguration des IPFS.

     ‘package’ (Vorgabe: ‘go-ipfs’)
          Paketobjekt von IPFS.

     ‘gateway’ (Vorgabe: ‘"/ip4/127.0.0.1/tcp/8082"’)
          Die Adresse des Netzwerkzugangs im Format einer Multiadresse
          („multiaddress“).

     ‘api’ (Vorgabe: ‘"/ip4/127.0.0.1/tcp/5001"’)
          Die Adresse des API-Endpunkts im Format einer Multiadresse
          („multiaddress“).

 -- Variable: keepalived-service-type
     Dies ist der Diensttyp für die Software Keepalived
     (https://www.keepalived.org/) für virtuelle Router, ‘keepalived’.
     Sein Wert muss ein ‘keepalived-configuration’-Verbundsobjekt sein,
     wie in diesem Beispiel für die Maschine erster Wahl (Master):

          (service keepalived-service-type
                   (keepalived-configuration
                     (config-file (local-file "keepalived-master.conf"))))

     Dabei enthält ‘keepalived-master.conf’:

          vrrp_instance meine-gruppe {
            state MASTER
            interface enp9s0
            virtual_router_id 100
            priority 100
            unicast_peer { 10.0.0.2 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }

     Für die Ersatzmaschine (Backup):

          (service keepalived-service-type
                   (keepalived-configuration
                    (config-file (local-file "keepalived-backup.conf"))))

     Dort enthält ‘keepalived-backup.conf’:

          vrrp_instance meine-gruppe {
            state BACKUP
            interface enp9s0
            virtual_router_id 100
            priority 99
            unicast_peer { 10.0.0.3 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }


File: guix.de.info,  Node: Unbeaufsichtigte Aktualisierungen,  Next: X Window,  Prev: Netzwerkdienste,  Up: Dienste

11.10.6 Unbeaufsichtigte Aktualisierungen
-----------------------------------------

Das Modul ‘(gnu services admin)’ stellt einen Dienst zum Durchführen
_unbeaufsichtigter Aktualisierungen_ zur Verfügung: Das System
rekonfiguriert sich selbst in regelmäßigen Abständen mit der neuesten
Version von Guix. Guix System verfügt über mehrere Eigenschaften, durch
die unbeaufsichtigtes Aktualisieren zu einer sicheren Angelegenheit
wird:

   • Aktualisierungen sind transaktionell: Entweder ist die
     Aktualisierung erfolgreich oder sie schlägt fehl, aber Sie können
     sich nicht in einem Systemzustand „dazwischen“ wiederfinden.
   • Ein Protokoll über die Aktualisierungen liegt vor – Sie können es
     mit ‘guix system list-generations’ einsehen – und Rücksetzungen auf
     vorherige Generationen sind möglich, für den Fall, dass das System
     nach der Aktualisierung nicht mehr funktioniert oder sich nicht wie
     gewollt verhält.
   • Der Code für Kanäle wird authentifiziert, wodurch Sie sich sicher
     sein können, dass Sie nur unverfälschten Code ausführen (siehe
     *note Kanäle::).
   • ‘guix system reconfigure’ verweigert ein Herabstufen auf alte
     Versionen; das macht “Herabstufungsangriffe” („Downgrade Attacks“)
     unmöglich.

   Um unbeaufsichtigte Aktualisierungen einzurichten, fügen Sie eine
Instanz des Diensttyps ‘unattended-upgrade-service-type’ wie im
folgenden Beispiel zur Liste Ihrer Betriebssystemdienste hinzu:

     (service unattended-upgrade-service-type)

   Durch die Vorgabeeinstellungen hat dies wöchentliche Aktualisierungen
zur Folge, jeden Sonntag um Mitternacht. Sie müssen keine
Betriebssystemkonfigurationsdatei angeben:
‘/run/current-system/configuration.scm’ wird benutzt, wodurch immer Ihre
letzte Konfiguration weiter verwendet wird – siehe den *note
provenance-service-type:: für mehr Informationen über diese Datei.

   Mehrere Dinge können konfiguriert werden, insbesondere die
Zeitabstände zwischen Aktualisierungen und die Dienste (also die
Daemons), die nach Abschluss neu gestartet werden sollen. Wenn die
Aktualisierung erfolgreich ist, dann stellt das System sicher, dass
Systemgenerationen mit einem Alter größer als ein festgelegter
Schwellwert gelöscht werden, wie bei ‘guix system delete-generations’.
Siehe die folgende Referenz der Konfigurationsmöglichkeiten für Näheres.

   Um sicherzugehen, dass unbeaufsichtigte Aktualisierungen auch
tatsächlich durchgeführt werden, können Sie ‘guix system describe’
ausführen. Um Fehlschläge zu untersuchen, schauen Sie in die
Protokolldatei für unbeaufsichtigte Aktualisierungen (siehe unten).

 -- Variable: unattended-upgrade-service-type
     Dies ist der Diensttyp für unbeaufsichtigte Aktualisierungen. Damit
     wird ein Shepherd-Timer eingerichtet (siehe *note Geplante
     Auftragsausführung::), der ‘guix system reconfigure’ mit der
     neuesten Version der angegebenen Kanäle ausführt.

     Sein Wert muss ein
     ‘unattended-upgrade-configuration’-Verbundsobjekt sein (siehe
     unten).

 -- Datentyp: unattended-upgrade-configuration
     Dieser Datentyp repräsentiert die Konfiguration des Dienstes für
     unbeaufsichtigte Aktualisierungen. Folgende Felder stehen zur
     Verfügung:

     ‘schedule’ (Vorgabe: ‘"30 01 * * 0"’)
          This is the schedule of upgrades, expressed as a string in
          traditional cron syntax or as a gexp evaluating to a Shepherd
          calendar event (*note (shepherd)Timers::).

     ‘channels’ (Vorgabe: ‘#~%default-channels’)
          Dieser G-Ausdruck gibt an, welche Kanäle für die
          Aktualisierung benutzt werden sollen (siehe *note Kanäle::).
          Nach Vorgabe wird die Spitze des offiziellen ‘guix’-Kanals
          benutzt.

     ‘operating-system-file’ (Vorgabe: ‘"/run/current-system/configuration.scm"’)
          Dieses Feld gibt an, welche Betriebssystemkonfigurationsdatei
          verwendet werden soll. Nach Vorgabe wird die
          Konfigurationsdatei der aktuellen Konfiguration
          wiederverwendet.

          Es gibt jedoch Fälle, wo es nicht ausreicht, auf
          ‘/run/current-system/configuration.scm’ zu verweisen, zum
          Beispiel weil sich diese mit ‘local-file’ oder Ähnlichem auf
          weitere Dateien wie öffentliche SSH-Schlüssel, andere
          Konfigurationsdateien usw. bezieht. Dann empfehlen wir, etwas
          wie hier zu schreiben:

               (unattended-upgrade-configuration
                 (operating-system-file
                   (file-append (local-file "." "config-dir" #:recursive? #t)
                                "/config.scm")))

          Das bewirkt, dass das ganze aktuelle Verzeichnis in den Store
          importiert wird und Bezug auf die ‘config.scm’ darin genommen
          wird. So funktioniert die Nutzung von ‘local-file’ in
          ‘config.scm’ wie erwartet. Siehe *note G-Ausdrücke:: für
          Informationen zu ‘local-file’ und ‘file-append’.

     ‘operating-system-expression’ (Vorgabe: ‘#f’)
          In diesem Feld können Sie einen Ausdruck angeben, der zu dem
          Betriebssystem auswertet, auf das aktualisiert werden soll.
          Wenn hier kein Wert angegeben wird, wird der Wert des Feldes
          ‘operating-system-file’ benutzt.

               (unattended-upgrade-configuration
                 (operating-system-expression
                   #~(@ (guix system install) installation-os)))

     ‘reboot?’ (default: ‘#f’)
          This field specifies whether the system should reboot after
          completing an unattended upgrade.

          When ‘reboot?’ is ‘#t’, services are not restarted before
          rebooting. This means that the value for ‘services-to-restart’
          is ignored. The updated services will be started after the
          system reboots.

     ‘services-to-restart’ (default: ‘'(unattended-upgrade)’)
          Dieses Feld gibt die Shepherd-Dienste an, die nach Abschluss
          der Aktualisierung neu gestartet werden sollen.

          Die Dienste werden direkt nach Abschluss neu gestartet, so wie
          es ‘herd restart’ tun würde. Dadurch wird sichergestellt, dass
          die neueste Version läuft – bedenken Sie, dass ‘guix system
          reconfigure’ nach Vorgabe nur diejenigen Dienste neu startet,
          die zurzeit nicht laufen, was einem konservativen Verhalten
          entspricht: Störungen werden minimiert, aber veraltete Dienste
          laufen weiter.

          Führen Sie ‘herd status’ aus, um herauszufinden, welche
          Dienste Sie neu starten lassen können. Siehe *note Dienste::
          für allgemeine Informationen über Dienste. Oft würde man
          Dienste wie unter anderem ‘ntpd’ und ‘ssh-daemon’ neu starten
          lassen.

          Nach Vorgabe wird der ‘unattended-upgrade’-Dienst neu
          gestartet. Dadurch wird beim nächsten Mal sicherlich die
          neueste Version des Auftrags für unbeaufsichtigte
          Aktualisierungen benutzt.

     ‘system-expiration’ (Vorgabe: ‘(* 3 30 24 3600)’)
          Nach wie vielen Sekunden Systemgenerationen auslaufen.
          Systemgenerationen, die dieses Alter überschritten haben,
          werden über ‘guix system delete-generations’ gelöscht, nachdem
          eine Aktualisierung abgeschlossen wurde.

               Anmerkung: Der Dienst für unbeaufsichtigte
               Aktualisierungen lässt jedoch den Müllsammler nicht
               laufen. Sie möchten wahrscheinlich Ihren eigenen
               mcron-Auftrag einrichten, der regelmäßig ‘guix gc’
               ausführt.

     ‘maximum-duration’ (Vorgabe: ‘3600’)
          Wie viele Sekunden eine Aktualisierung höchstens dauern darf.
          Nach dieser Zeit wird die Aktualisierung abgebrochen.

          Diese Begrenzung dient vor allem dazu, zu verhindern, dass
          „die ganze Welt“ neu erstellt oder neu heruntergeladen wird.

     ‘log-file’ (Vorgabe: ‘"/var/log/unattended-upgrade.log"’)
          Die Datei, in die über unbeaufsichtigte Aktualisierungen
          Protokoll geführt wird.


File: guix.de.info,  Node: X Window,  Next: Druckdienste,  Prev: Unbeaufsichtigte Aktualisierungen,  Up: Dienste

11.10.7 X Window
----------------

Unterstützung für das grafische Anzeigesystem X Window – insbesondere
Xorg – wird vom Modul ‘(gnu services xorg)’ zur Verfügung gestellt.
Beachten Sie, dass es _keine_ ‘xorg-service’-Prozedur gibt, sondern der
X-Server durch eine Software zur “Anmeldeverwaltung” gestartet wird (ein
„Login Manager“). Vorgegeben ist, dass zur Anzeigenverwaltung der GNOME
Display Manager (GDM) benutzt wird.

   GDM ermöglicht es seinen Nutzern natürlich auch, sich bei anderen
Fensterverwaltungssystemen und Arbeitsumgebungen als GNOME anzumelden.
Wer GNOME benutzt, kann Funktionalitäten wie eine automatische
Bildschirmsperre nur verwenden, wenn die Anmeldung über GDM läuft.

   Um X11 zu benutzen, müssen Sie ein Programme zur “Fensterverwaltung”
(„Window-Manager“) oder mehrere davon installieren – zum Beispiel die
Pakete ‘windowmaker’ oder ‘openbox’ –, vorzugsweise indem Sie sie in das
‘packages’-Feld Ihrer Betriebssystemdefinition eintragen (siehe *note
global sichtbare Pakete: „operating-system“-Referenz.).

   GDM hat auch Unterstützung für Wayland: Es kann selbst als
Wayland-Client statt mit X11 gestartet werden und Wayland-Sitzungen
starten. Die Vorgabe ist, dass Wayland unterstützt wird. Um die
Wayland-Unterstützung zu deaktivieren, setzen Sie ‘wayland?’ auf ‘#f’ in
der ‘gdm-configuration’.

 -- Variable: gdm-service-type
     Dies ist der Diensttyp für den GNOME Desktop Manager
     (https://wiki.gnome.org/Projects/GDM/), GDM, ein Programm zur
     Verwaltung grafischer Anzeigeserver, das grafische
     Benutzeranmeldungen durchführt. Sein Wert muss eine
     ‘gdm-configuration’ sein (siehe unten).

     GDM liest die in den ‘.desktop’-Dateien in
     ‘/run/current-system/profile/share/xsessions’ (bei X11-Sitzungen)
     und nach ‘/run/current-system/profile/share/wayland-sessions’ (bei
     Wayland-Sitzungen) befindlichen “Sitzungstypen” ein und stellt
     diese seinen Nutzern zur Auswahl auf dem Anmeldebildschirm. Pakete
     wie ‘gnome’, ‘xfce’, ‘i3’ und ‘sway’ stellen ‘.desktop’-Dateien
     bereit; wenn diese Pakete zu den systemweit verfügbaren Paketen
     hinzugefügt werden, werden diese automatisch auf dem
     Anmeldebildschirm angezeigt.

     Des Weiteren werden ‘~/.xsession’-Dateien berücksichtigt. Wenn es
     vorhanden ist, muss ‘~/.xsession’ eine ausführbare Datei sein, die
     ein Programm zur Fensterverwaltung und/oder andere X-Clients
     startet.

 -- Datentyp: gdm-configuration
     ‘auto-login?’ (Vorgabe: ‘#f’)
     ‘default-user’ (Vorgabe: ‘#f’)
          Wenn ‘auto-login?’ falsch ist, zeigt GDM einen
          Anmeldebildschirm an.

          Wenn ‘auto-login?’ wahr ist, meldet GDM automatisch den in
          ‘default-user’ angegebenen voreingestellten Benutzer an.

     ‘auto-suspend?’ (Vorgabe: ‘#t’)
          Wenn es wahr ist, wird GDM automatisch das System in den
          Bereitschaftsmodus schalten, bis wieder jemand persönlich
          anwesend ist und es aus dem Arbeitsspeicher (RAM) wieder
          aufwecken kann. Wenn geplant ist, die Maschine für entfernte
          Sitzungen oder SSH zu benutzen, sollte es auf falsch gesetzt
          werden, damit GDM nicht entfernte Sitzungen unterbricht oder
          die Verfügbarkeit der Maschine stört.

     ‘debug?’ (Vorgabe: ‘#f’)
          Wenn es wahr ist, schreibt GDM Informationen zur Fehlersuche
          in sein Protokoll.

     ‘gnome-shell-assets’ (Vorgabe: …)
          Liste der GNOME-Shell-„Assets“, die GDM benötigt, d.h.
          Symbolthema, Schriftarten etc.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘x-session’ (Vorgabe: ‘(xinitrc)’)
          Das Skript, das vor dem Starten einer X-Sitzung ausgeführt
          werden soll.

     ‘xdmcp?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, wird das X Display Manager
          Control Protocol (XDMCP) aktiviert. Sie sollten es nur in
          vertrauenswürdigen Umgebungen aktivieren, denn das Protokoll
          ist _nicht_ sicher. Wenn es aktiviert ist, lauscht GDM auf
          XDMCP-Anfragen auf UDP-Port 177.

     ‘dbus-daemon’ (Vorgabe: ‘dbus-daemon-wrapper’)
          Der Dateiname der ausführbaren Datei des
          ‘dbus-daemon’-Programms.

     ‘gdm’ (Vorgabe: ‘gdm’)
          Das GDM-Paket, was benutzt werden soll.

     ‘wayland?’ (Vorgabe: ‘#t’)
          Wenn es wahr ist, wird Wayland in GDM aktiviert. Das ist
          nötig, um Wayland-Sitzungen zu benutzen.

     ‘wayland-session’ (Vorgabe: ‘gdm-wayland-session-wrapper’)
          Das Wrapper-Skript für Wayland-Sitzungen, was benutzt werden
          soll. Es ist notwendig, um die Umgebung zu starten.

 -- Variable: slim-service-type
     Dies ist der Diensttyp für die schlanke grafische
     Anmeldungsverwaltung SLiM für X11.

     Wie GDM liest SLiM die in ‘.desktop’-Dateien beschriebenen
     Sitzungstypen aus und ermöglicht es Nutzern, eine Sitzung darunter
     im Anmeldebildschirm durch Drücken von ‘F1’ auszuwählen. Auch
     ‘~/.xsession’-Dateien können benutzt werden.

     Anders als GDM wird durch SLiM die Benutzersitzung nicht auf einem
     anderen virtuellen Terminal gestartet, nachdem man sich anmeldet.
     Die Folge davon ist, dass man nur eine einzige grafische Sitzung
     starten kann. Wenn Sie mehrere, gleichzeitig laufende grafische
     Sitzungen starten können möchten, müssen Sie mehrere SLiM-Dienste
     zu ihren Systemdiensten hinzufügen. Das folgende Beispiel zeigt,
     wie Sie den vorgegebenen GDM-Dienst durch zwei SLiM-Dienste auf
     tty7 und tty8 ersetzen.

          (use-modules (gnu services)
                       (gnu services desktop)
                       (gnu services xorg))

          (operating-system
            ;; …
            (services (cons* (service slim-service-type (slim-configuration
                                                         (display ":0")
                                                         (vt "vt7")))
                             (service slim-service-type (slim-configuration
                                                         (display ":1")
                                                         (vt "vt8")))
                             (modify-services %desktop-services
                               (delete gdm-service-type)))))

 -- Datentyp: slim-configuration
     Datentyp, der die Konfiguration des ‘slim-service-type’
     repräsentiert.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#t’)
          Ob Anmeldungen mit leeren Passwörtern möglich sein sollen.

     ‘gnupg?’ (Vorgabe: ‘#f’)
          Wenn dies aktiviert ist, wird durch ‘pam-gnupg’ automatisch
          versucht, die GPG-Schlüssel des Nutzers über ‘gpg-agent’ mit
          dem Anmeldepasswort zu entsperren. Für jeden Schlüssel, der
          entsperrt werden soll, müssen Sie den Keygrip, der den
          Schlüssel bezeichnet, in ‘~/.pam-gnupg’ schreiben; er kann mit
          ‘gpg -K --with-keygrip’ erfragt werden. Damit das
          funktioniert, müssen Sie Presetting von Passphrasen
          aktivieren, indem Sie ‘allow-preset-passphrase’ in
          ‘~/.gnupg/gpg-agent.conf’ hinzufügen.

     ‘auto-login?’ (Vorgabe: ‘#f’)
     ‘default-user’ (Vorgabe: ‘""’)
          Wenn ‘auto-login?’ falsch ist, zeigt SLiM einen
          Anmeldebildschirm an.

          Wenn ‘auto-login?’ wahr ist, meldet SLiM automatisch den in
          ‘default-user’ angegebenen voreingestellten Benutzer an.

     ‘theme’ (Vorgabe: ‘%default-slim-theme’)
     ‘theme-name’ (Vorgabe: ‘%default-slim-theme-name’)
          Das grafische Thema, was benutzt werden soll, mit seinem
          Namen.

     ‘auto-login-session’ (Vorgabe: ‘#f’)
          Wenn es wahr ist, muss es den Namen der ausführbaren Datei
          angeben, die als voreingestellte Sitzung gestartet werden
          soll – z.B. ‘(file-append windowmaker "/bin/windowmaker")’.

          Wenn es falsch ist, wird eine von einer der ‘.desktop’-Dateien
          in ‘/run/current-system/profile’ und ‘~/.guix-profile’
          beschriebenen Sitzungen benutzt.

               Anmerkung: Sie müssen mindestens ein
               Fensterverwaltungsprogramm in das Systemprofil oder Ihr
               Benutzerprofil installieren, ansonsten können Sie sich,
               sofern ‘auto-login-session’ falsch ist, nicht anmelden.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘display’ (Vorgabe: ‘":0"’)
          Die Anzeige, auf welcher der Xorg-Server für grafische
          Oberflächen gestartet werden soll.

     ‘vt’ (Vorgabe: ‘"vt7"’)
          Das virtuelle Terminal, auf dem der Xorg-Server für grafische
          Oberflächen gestartet werden soll.

     ‘xauth’ (Vorgabe: ‘xauth’)
          Das XAuth-Paket, das benutzt werden soll.

     ‘shepherd’ (Vorgabe: ‘shepherd’)
          Das Shepherd-Paket, das benutzt wird, wenn ‘halt’ und ‘reboot’
          aufgerufen werden.

     ‘sessreg’ (Vorgabe: ‘sessreg’)
          Das sessreg-Paket, das zum Registrieren der Sitzung benutzt
          werden soll.

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

 -- Variable: %default-theme
 -- Variable: %default-theme-name
     Das vorgegebene Thema für das Aussehen von SLiM mit seinem Namen.

 -- Variable: sddm-service-type
     Dies ist der Typ des Dienstes, mit dem die SDDM-Anzeigenverwaltung
     (https://github.com/sddm/sddm) gestartet wird. Sein Wert muss ein
     ‘sddm-configuration’-Verbundsobjekt sein (siehe unten).

     Hier ist ein Beispiel für seine Verwendung:

          (service sddm-service-type
                   (sddm-configuration
                     (auto-login-user "alice")
                     (auto-login-session "xfce.desktop")))

 -- Datentyp: sddm-configuration
     Dieser Datentyp repräsentiert die Konfiguration der
     SDDM-Anmeldeverwaltung. Die verfügbaren Felder sind:

     ‘sddm’ (Vorgabe: ‘sddm’)
          Das SDDM-Paket, was benutzt werden soll.

               Anmerkung: In SDDM die Version Qt6 vorgegeben. Wenn Sie
               weiterhin ein Qt5-Thema benutzen möchten, müssen Sie dies
               auf ‘sddm-qt5’ setzen.

     ‘display-server’ (Vorgabe: "x11")
          Einen Anzeigeserver auswählen, der für den Anmeldebildschirm
          verwendet werden soll. Zulässige Werte sind ‘"x11"’ oder
          ‘"wayland"’.

     ‘numlock’ (Vorgabe: "on")
          Gültige Werte sind ‘"on"’, ‘"off"’ oder ‘"none"’.

     ‘halt-command’ (Vorgabe: ‘#~(string-append #$shepherd "/sbin/halt")’)
          Der Befehl, der zum Anhalten des Systems ausgeführt wird.

     ‘reboot-command’ (Vorgabe: ‘#~(string-append #$shepherd "/sbin/reboot")’)
          Der Befehl, der zum Neustarten des Systems ausgeführt wird.

     ‘theme’ (Vorgabe: "maldives")
          Welches Thema für das Aussehen benutzt werden soll. Mit SDDM
          mitgelieferte Themen sind ‘"elarun"’, ‘"maldives"’ und
          ‘"maya"’.

     ‘themes-directory’ (Vorgabe: "/run/current-system/profile/share/sddm/themes")
          Verzeichnis, wo Themen gefunden werden können.

     ‘faces-directory’ (Vorgabe: "/run/current-system/profile/share/sddm/faces")
          Verzeichnis, wo Avatarbilder gefunden werden können.<

     ‘default-path’ (Vorgabe: "/run/current-system/profile/bin")
          Welcher PATH voreingestellt sein soll.

     ‘minimum-uid’ (Vorgabe: 1000)
          Der kleinste Benutzeridentifikator (UID), mit dem Benutzer in
          SDDM angezeigt werden und sich anmelden können.

     ‘maximum-uid’ (Vorgabe: 2000)
          Der größte Benutzeridentifikator (UID), mit dem Benutzer in
          SDDM angezeigt werden.<

     ‘remember-last-user?’ (Vorgabe: #t)
          Den zuletzt ausgewählten Benutzer voreinstellen.

     ‘remember-last-session?’ (Vorgabe: #t)
          Die zuletzt ausgewählte Sitzung voreinstellen.

     ‘hide-users’ (Vorgabe: "")
          Benutzernamen, die in SDDM _nicht_ sichtbar sein sollen.

     ‘hide-shells’ (Vorgabe: ‘#~(string-append #$shadow "/sbin/nologin")’)
          Benutzerkonten, für die als Shell eine davon eingestellt ist,
          wird SDDM _nicht_ anzeigen.

     ‘session-command’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/wayland-session")’)
          Das Skript, das vor dem Starten einer Wayland-Sitzung
          ausgeführt werden soll.

     ‘sessions-directory’ (Vorgabe: "/run/current-system/profile/share/wayland-sessions")
          Verzeichnis, das nach .desktop-Dateien zum Starten von
          Wayland-Sitzungen durchsucht wird.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘xauth-path’ (Vorgabe: ‘#~(string-append #$xauth "/bin/xauth")’)
          Pfad von xauth.

     ‘xephyr-path’ (Vorgabe: ‘#~(string-append #$xorg-server "/bin/Xephyr")’)
          Pfad von Xephyr.

     ‘xdisplay-start’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/Xsetup")’)
          Skript, das nach dem Starten vom Xorg-Server ausgeführt wird.

     ‘xdisplay-stop’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/Xstop")’)
          Skript, das vor dem Stoppen vom Xorg-Server ausgeführt wird.

     ‘xsession-command’ (Vorgabe: ‘xinitrc’)
          Das Skript, das vor dem Starten einer X-Sitzung ausgeführt
          werden soll.

     ‘xsessions-directory’ (Vorgabe: "/run/current-system/profile/share/xsessions")
          Verzeichnis, das nach .desktop-Dateien zum Starten von
          X-Sitzungen durchsucht wird.<

     ‘minimum-vt’ (Vorgabe: 7)
          Das kleinste virtuelle Terminal, das benutzt werden darf.

     ‘auto-login-user’ (Vorgabe: "")
          Das Benutzerkonto, mit dem man automatisch angemeldet wird.
          Wenn es leer ist, gibt es keine automatische Anmeldung.

     ‘auto-login-session’ (Vorgabe: "")
          Gibt den Namen der ‘.desktop’-Datei an, die bei automatischer
          Anmeldung für die Sitzung verwendet wird, oder eine leere
          Zeichenkette.

     ‘relogin?’ (Vorgabe: #f)
          Ob nach dem Abmelden neu angemeldet werden soll.

 -- Variable: lightdm-service-type
     Dies ist der Typ des Dienstes, mit dem die
     LightDM-Anzeigenverwaltung (https://github.com/canonical/lightdm)
     ausgeführt wird. Sein Wert muss ein
     ‘lightdm-configuration’-Verbundsobjekt sein. Dieses wird weiter
     unten beschrieben. LightDM zeichnet sich dadurch aus, dass er mit
     TigerVNC integriert ist und man so leichten Fernzugriff über das
     XDMCP-Protokoll einrichten kann, so dass man von außen mit einem
     entfernten Rechner eine Sitzung anmelden kann.

     Für die Grundeinstellung geben Sie einfach an:

          (service lightdm-service-type)

     Ein zielgerichteteres Beispiel wäre etwa, die VNC-Fähigkeit und
     weitere Funktionalitäten zusammen mit ausführlicher Protokollierung
     zu aktivieren. Das ginge so:

          (service lightdm-service-type
                   (lightdm-configuration
                    (allow-empty-passwords? #t)
                    (xdmcp? #t)
                    (vnc-server? #t)
                    (vnc-server-command
                     (file-append tigervnc-server "/bin/Xvnc"
                                  "  -SecurityTypes None"))
                    (seats
                     (list (lightdm-seat-configuration
                            (name "*")
                            (user-session "ratpoison"))))))

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

     ‘lightdm’ (Vorgabe: ‘lightdm’) (Typ: dateiartig)
          Das zu benutzende lightdm-Paket.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob man sich auch bei Benutzerkonten, die ein leeres Passwort
          haben, anmelden kann.

     ‘debug?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ausführliche Ausgaben schreiben.

     ‘xorg-configuration’ (Typ: xorg-configuration)
          Eine Konfiguration des Xorg-Servers, aus der das Start-Skript
          für den Xorg-Server erzeugt wird. Sie können für jeden Seat
          mit dem Feld ‘xserver-command’ des
          ‘<lightdm-seat-configuration>’-Verbunds genauere Einstellungen
          vornehmen, wenn Sie möchten.

     ‘greeters’ (Typ: Liste-von-„greeter-configuration“)
          Die LightDM-Greeter-Konfigurationen, welche die zu benutzenden
          Greeter festlegen.

     ‘seats’ (Typ: Liste-von-„seat-configuration“)
          Die Konfigurationen der „Seats“. Ein Seat in LightDM
          entspricht ungefähr einem Benutzer.

     ‘xdmcp?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob ein XDMCP-Server auf UDP-Port 177 lauschen soll.

     ‘xdmcp-listen-address’ (Typ: Vielleicht-Zeichenkette)
          Der Rechnername oder die IP-Adresse, wofür der XDMCP-Server
          auf eingehende Verbindungen lauscht. Wird nichts angegeben,
          wird auf allen verfügbaren Rechnernamen bzw. IP-Adressen
          gelauscht.

     ‘vnc-server?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob ein VNC-Server gestartet werden soll.

     ‘vnc-server-command’ (Typ: dateiartig)
          Welcher Xvnc-Befehl für den VNC-Server benutzt werden soll. So
          können zusätzliche, anderweitig unerreichbare Optionen dem
          Befehl mitgegeben werden. Zum Beispiel können Sie dessen
          Sicherheitsmaßnahmen abschalten:

               (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
                                                " -SecurityTypes None" ))

          Oder Sie können eine Passwortdatei für den klassischen
          (unsicheren) Authentifizierungsmechanismus VncAuth festlegen:

               (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
                                                " -PasswordFile /var/lib/lightdm/.vnc/passwd"))

          Die Passwortdatei sollte man manuell erzeugen mit dem Befehl
          ‘vncpasswd’. Beachten Sie, dass LightDM neue Sitzungen für
          VNC-Nutzer anlegt, deshalb müssen sich diese genauso
          authentisieren wie lokale Benutzer.

     ‘vnc-server-listen-address’ (Typ: Vielleicht-Zeichenkette)
          Auf welchem Rechnernamen oder welcher IP-Adresse der
          VNC-Server auf eingehende Verbindungen lauscht. Wird nichts
          angegeben, wird auf allen Rechnernamen und Adressen gelauscht.

     ‘vnc-server-port’ (Vorgabe: ‘5900’) (Typ: Zahl)
          Die TCP-Portnummer, auf der der VNC-Server lauschen soll.

     ‘extra-config’ (Vorgabe: ‘'()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an LightDMs
          Konfigurationsdatei angehängt werden.

 -- Datentyp: lightdm-gtk-greeter-configuration
     Verfügbare ‘lightdm-gtk-greeter-configuration’-Felder sind:

     ‘lightdm-gtk-greeter’ (Vorgabe: ‘lightdm-gtk-greeter’) (Typ: dateiartig)
          Das „lightdm-gtk-greeter“-Paket, was benutzt werden soll.

     ‘assets’ (Vorgabe: ‘(adwaita-icon-theme gnome-themes-extra hicolor-icon-theme)’) (Typ: Liste-von-Dateiartigen)
          Die Liste von Paketen, die zum Greeter dazugehören, z.B.
          Pakete mit Symbolthemen, die deren Aussehen bestimmen.

     ‘theme-name’ (Vorgabe: ‘"Adwaita"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Themas.

     ‘icon-theme-name’ (Vorgabe: ‘\"Adwaita\"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Symbolthemas.

     ‘cursor-theme-name’ (Vorgabe: ‘\"Adwaita\"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Zeigerthemas.

     ‘cursor-theme-size’ (Vorgabe: ‘16’) (Typ: Zahl)
          Die Größe, die für das Zeigerthema benutzt wird.

     ‘allow-debugging?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Setzen Sie es auf #t, wenn Sie die
          Fehlersuch-Ausführlichkeitsstufe aktivieren möchten.

     ‘background’ (Typ: dateiartig)
          Welches Hintergrundbild benutzt werden soll.

     ‘at-spi-enabled?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Funktionen zur Barrierefreiheit aktivieren. Dazu wird AT-SPI
          bereitgestellt, eine Schnittstelle für Assistenzprogramme
          (Assistive Technology Service Provider Interface).

     ‘a11y-states’ (Vorgabe: ‘(contrast font keyboard reader)’) (Typ: Liste-von-Barrierefreiheiten
          Welche Funktionen zur Barrierefreiheit aktiviert sein sollen.
          Erwartet wird eine Liste von Symbolen.

     ‘reader’ (Typ: Vielleicht-dateiartig)
          Der Befehl, um einen Bildschirmleser zu starten.

     ‘extra-config’ (Vorgabe: ‘'()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an die
          Konfigurationsdatei des LightDM GTK Greeter angehängt werden.

 -- Datentyp: lightdm-seat-configuration
     Verfügbare ‘lightdm-seat-configuration’-Felder sind:

     ‘name’ (Typ: Seat-Name)
          Der Name des Seats. Wenn ein Sternchen (*) im Namen des Seats
          angegeben wird, wirkt sich die Seat-Konfiguration auf alle
          passenden Seat-Namen aus.

     ‘user-session’ (Typ: Vielleicht-Zeichenkette)
          Welche Sitzung voreingestellt wird. Der Name der Sitzung muss
          eine in Kleinbuchstaben geschriebene Zeichenkette sein wie
          ‘"gnome"’, ‘"ratpoison"’ und so weiter.

     ‘type’ (Vorgabe: ‘local’) (Typ: Seat-Typ)
          Um welchen Typ von Seat es sich handelt, entweder lokal
          (‘local’) oder als Fernverbindung (‘xremote’).

     ‘autologin-user’ (Typ: Vielleicht-Zeichenkette)
          Der Name des Benutzers, als der man automatisch angemeldet
          wird.

     ‘greeter-session’ (Vorgabe: ‘lightdm-gtk-greeter’) (Typ: Greeter-Sitzung)
          Welche Greeter-Sitzung geöffnet werden soll, angegeben als
          Symbol. Derzeit wird nur ‘lightdm-gtk-greeter’ unterstützt.

     ‘xserver-command’ (Typ: Vielleicht-dateiartig)
          Welcher Xorg-Server-Befehl ausgeführt wird.

     ‘session-wrapper’ (Typ: dateiartig)
          Der xinitrc-Wrapper für die Sitzung.

     ‘extra-config’ (Vorgabe: ‘'()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an den Abschnitt zur
          Konfiguration des Seats angehängt werden.

 -- Datentyp: xorg-configuration
     Dieser Datentyp repräsentiert die Konfiguration des grafischen
     Anzeigeservers Xorg. Beachten Sie, dass es keinen Xorg-Dienst gibt,
     sondern der X-Server von einer „Anzeigenverwaltung“ wie GDM, SDDM,
     LightDM oder SLiM gestartet wird. Deswegen wird aus der
     Konfiguration dieser Anzeigenverwaltungen ein
     ‘xorg-configuration’-Verbundsobjekt konstruiert.

     ‘modules’ (Vorgabe: ‘%default-xorg-modules’)
          Dies ist eine Liste von “Modulpaketen”, die vom Xorg-Server
          geladen werden – z.B. ‘xf86-video-vesa’, ‘xf86-input-libinput’
          und so weiter.

     ‘fonts’ (Vorgabe: ‘%default-xorg-fonts’)
          Dies ist eine Liste von Verzeichnissen mit Schriftarten, die
          zum Schriftartensuchpfad („Font Path“) des Servers hinzugefügt
          werden.

     ‘drivers’ (Vorgabe: ‘'()’)
          Dies muss entweder die leere Liste sein – in diesem Fall wird
          durch Xorg automatisch ein Grafiktreiber ausgewählt – oder
          eine Liste von Treibernamen, die in dieser Reihenfolge
          durchprobiert werden – z.B. ‘'("modesetting" "vesa")’.

     ‘resolutions’ (Vorgabe: ‘'()’)
          Wenn ‘resolutions’ die leere Liste ist, wird automatisch durch
          Xorg eine passende Bildschirmauflösung gewählt. Andernfalls
          muss hier eine Liste von Bildschirmauflösungen angegeben
          werden – z.B. ‘'((1024 768) (640 480))’.

     ‘keyboard-layout’ (Vorgabe: ‘#f’)
          Wenn es auf ‘#f’ gesetzt ist, benutzt Xorg die voreingestellte
          Tastaturbelegung, also normalerweise US English („QWERTY“) für
          eine PC-Tastatur mit 105 Tasten.

          Andernfalls muss hier ein ‘keyboard-layout’-Objekt stehen, das
          angibt, welche Tastaturbelegung aktiv sein soll, während Xorg
          läuft. Siehe *note Tastaturbelegung:: für mehr Informationen,
          wie die Tastaturbelegung angegeben werden kann.

     ‘extra-config’ (Vorgabe: ‘'()’)
          Dies ist eine Liste von Zeichenketten oder Objekten, die an
          die Konfigurationsdatei angehängt werden. Mit ihnen wird
          zusätzlicher Text wortwörtlich zur Konfigurationsdatei
          hinzugefügt.

     ‘server’ (Vorgabe: ‘xorg-server’)
          Dieses Paket stellt den Xorg-Server zur Verfügung.

     ‘server-arguments’ (Vorgabe: ‘%default-xorg-server-arguments’)
          Dies ist die Liste der Befehlszeilenargumente, die an den
          X-Server übergeben werden. Die Vorgabe ist ‘-nolisten tcp’.

 -- Prozedur: set-xorg-configuration Konfiguration
          [login-manager-service-type]
     Benennt, welche KONFIGURATION die Anmeldeverwaltung (vom Typ
     LOGIN-MANAGER-SERVICE-TYPE) benutzen soll, als ein
     ‘<xorg-configuration>’-Verbundsobjekt.

     Da die Xorg-Konfiguration in die Konfiguration der
     Anmeldeverwaltung eingebettet ist – z.B. in einer
     ‘gdm-configuration’ –, bietet diese Prozedur eine Kurzschreibweise
     zum Ändern der Xorg-Konfiguration.

 -- Prozedur: xorg-start-command [Konfiguration]
     Hier wird ein ‘startx’-Skript geliefert, in welchem die Module,
     Schriftarten usw. verfügbar sind, die in der KONFIGURATION
     angegeben wurden. Das Ergebnis soll anstelle von ‘startx’ benutzt
     werden.

     Normalerweise wird der X-Server von der Anmeldeverwaltung
     gestartet.

 -- Prozedur: xorg-start-command-xinit [Konfiguration]
     Hier wird ein ‘startx’-Skript geliefert, in welchem die Module,
     Schriftarten usw. verfügbar sind, die in der KONFIGURATION
     angegeben wurden. Das Ergebnis soll anstelle von ‘startx’ benutzt
     werden und kann durch den Benutzer in einem TTY aufgerufen werden,
     nachdem er sich angemeldet hat. Im Gegensatz zu
     ‘xorg-start-command’ ruft dieses Skript xinit auf. Deshalb kann man
     es gut aus einem TTY aufrufen. Dieses Skript kann mit Hilfe von
     ‘startx-command-service-type’ oder
     ‘home-startx-command-service-type’ als ‘startx’ verfügbar gemacht
     werden. Wenn Sie eine Arbeitsumgebung eingerichtet haben, ist diese
     Prozedur vermutlich unnötig.

 -- Variable: screen-locker-service-type
     Diensttyp für einen Dienst, der ein Paket mit einem Programm zum
     Sperren des Bildschirms oder einem Bildschirmschoner zur Menge der
     privilegierten Programme hinzufügt und/oder einen PAM-Eintrag dafür
     hinzufügt. Der Wert dieses Diensttyps ist ein
     ‘<screen-locker-configuration>’-Objekt.

     Vorgegeben ist hier zwar, das Programm sowohl zu einem
     privilegierten Programm zu machen als auch einen PAM-Eintrag
     anzulegen, aber diese beiden Methoden sind redundant. Einige
     Bildschirmsperrprogramme können sogar nicht ausgeführt werden, wenn
     PAM eingerichtet und ‘setuid’ auf der Anwendung gesetzt ist. In
     diesem Fall können Sie ‘using-setuid?’ auf ‘#f’ setzen.

     Zum Beispiel macht

          (service screen-locker-service-type
                   (screen-locker-configuration
                     (name "xlock")
                     (program (file-append xlockmore "/bin/xlock"))))

     das gute alte XlockMore benutzbar.

     Swaylock zum Beispiel kann nicht ausgeführt werden, wenn
     PAM-Unterstützung einkompiliert und setuid an ist. Deaktivieren Sie
     also setuid:

          (service screen-locker-service-type
                   (screen-locker-configuration
                     (name "swaylock")
                     (program (file-append swaylock "/bin/swaylock"))
                     (using-pam? #t)
                     (using-setuid? #f)))

 -- Datentyp: screen-locker-configuration
     Verfügbare ‘screen-locker-configuration’-Felder sind:

     ‘name’ (Typ: Zeichenkette)
          Der Name des Programms zum Sperren des Bildschirms.

     ‘program’ (Typ: dateiartig)
          An welchem Pfad sich die ausführbare Datei befindet, die den
          Bildschirm sperrt. Anzugeben ist ein G-Ausdruck.

     ‘allow-empty-password?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob leere Passwörter zugelassen sein sollen.

     ‘using-pam?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Ob ein PAM-Eintrag hinzugefügt werden soll.

     ‘using-setuid?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Ob das Programm als setuid-Programm eingerichtet werden soll.

 -- Variable: startx-command-service-type
     Fügt ‘startx’ zum Systemprofil hinzu, wodurch es in ‘PATH’
     eingetragen wird.

     Der Wert dieses Dienstes ist ein ‘<xorg-configuration>’-Objekt. das
     an die Prozedur ‘xorg-start-command-xinit’ übergeben wird, welche
     das benutzte ‘startx’ erzeugt. Der Vorgabewert ist
     ‘(xorg-configuration)’.

