This is guix.fr.info, produced by makeinfo version 6.8 from
guix.fr.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

   Vous avez la permission de copier, distribuer ou modifier ce document
sous les termes de la Licence GNU Free Documentation, version 1.3 ou
toute version ultérieure publiée par la Free Software Foundation ; sans
section invariante, texte de couverture et sans texte de quatrième de
couverture. Une copie de la licence est incluse dans la section
intitulée « GNU Free Documentation License ».
INFO-DIR-SECTION Administration système
START-INFO-DIR-ENTRY
* Guix.fr: (guix.fr).        Gérer les logiciels installés et la
                               configuration du système.
* guix package: (guix.fr)Invoquer guix package.  Installer, supprimer et
                                                   mettre à jour des paquets.
* guix gc: (guix.fr)Invoquer guix gc.  Récupérer de l’espace disque
                                         inutilisé.
* guix pull: (guix.fr)Invoquer guix pull.  Mettre à jour la liste des
                                             paquets disponibles.
* guix system: (guix.fr)Invoquer guix system.  Gérer la configuration du
                                                 système d’exploitation.
* guix deploy: (guix.fr)Invoquer guix deploy.  Gérer la configuration du
                                                 système d’exploitation
                                                 d’hôtes distants.
END-INFO-DIR-ENTRY

INFO-DIR-SECTION Développement logiciel
START-INFO-DIR-ENTRY
* guix shell: (guix.fr)Invoquer guix shell.  Créer des environnements
                                               logiciels.
* guix environment: (guix.fr)Invoquer guix environment.  Construire des
                                                           environnements de
                                                           construction avec
                                                           Guix.
* guix build: (guix.fr)Invoquer guix build.  Construire des paquets.
* guix pack: (guix.fr) Invoquer guix pack.  Créer des lots binaires.
END-INFO-DIR-ENTRY


File: guix.fr.info,  Node: Services Kerberos,  Next: Services LDAP,  Prev: Services de surveillance,  Up: Services

11.10.18 Services Kerberos
--------------------------

Le module ‘(gnu services kerberos)’ fournit des services liés au
protocole d’authentification “Kerberos”.

Service Krb5
............

Les programmes qui utilisent une bibliothèque cliente Kerberos
s’attendent à trouver un fichier de configuration dans ‘/etc/krb5.conf’.
Ce service génère un tel fichier à partir d’une définition fournie par
la déclaration de système d’exploitation. Il ne démarre aucun démon.

   Aucun fichier « keytab » n’est fourni par ce service — vous devez les
créer explicitement. Ce service est connu pour fonctionner avec la
bibliothèque cliente MIT, ‘mit-krb5’. Les autres implémentations n’ont
pas été testées.

 -- Variable : krb5-service-type
     Un type de service pour les clients Kerberos 5.

Voici un exemple d’utilisation :
     (service krb5-service-type
              (krb5-configuration
               (default-realm "EXAMPLE.COM")
               (allow-weak-crypto? #t)
               (realms (list
                        (krb5-realm
                         (name "EXAMPLE.COM")
                         (admin-server "groucho.example.com")
                         (kdc "karl.example.com"))
                        (krb5-realm
                         (name "ARGRX.EDU")
                         (admin-server "kerb-admin.argrx.edu")
                         (kdc "keys.argrx.edu"))))))

Cet exemple fournit une configuration cliente Kerberos 5 qui :
   • Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous
     deux aillant des serveurs d’administration et des centres de
     distribution de clefs distincts ;
   • Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n’est
     pas spécifié explicitement par les clients ;
   • Acceptera les services qui ne supportent que des types de
     chiffrements connus pour être faibles.

   Les types ‘krb5-realm’ et ‘krb5-configuration’ ont de nombreux
champs. Seuls les plus communs sont décrits ici. Pour une liste
complète, et plus de détails sur chacun d’entre eux, voir la
documentation de MIT krb5.conf.

 -- Type de données : krb5-realm
     ‘name’
          Ce champ est une chaîne identifiant le nom d’un domaine. Une
          convention courante est d’utiliser le nom pleinement qualifié
          de votre organisation, converti en majuscule.

     ‘admin-server’
          Ce champ est une chaîne identifiant l’hôte où le serveur
          d’administration tourne.

     ‘kdc’
          Ce champ est une chaîne identifiant le centre de distribution
          de clefs pour ce domaine.

 -- Type de données : krb5-configuration

     ‘allow-weak-crypto?’ (par défaut : ‘#f’)
          Si ce drapeau est ‘#t’ les services qui n’offrent que des
          algorithmes de chiffrement faibles seront acceptés.

     ‘default-realm’ (par défaut : ‘#f’)
          Ce champ devrait être une chaîne identifiant le domaine
          Kerberos par défaut pour le client. Vous devriez mettre le nom
          de votre domaine Kerberos dans ce champ. Si cette valeur est
          ‘#f’ alors un domaine doit être spécifié pour chaque principal
          Kerberos à l’invocation des programmes comme ‘kinit’.

     ‘realms’
          Cela doit être une liste non-vide d’objets ‘krb5-realm’,
          auxquels les clients peuvent accéder. Normalement, l’un
          d’entre eux aura un champ ‘name’ qui correspond au champ
          ‘default-realm’.

Service PAM krb5
................

Le service ‘pam-krb5’ permet la connexion et la gestion des mots de
passe par Kerberos. Vous aurez besoin de ce service si vous voulez que
les applications qui utilisent PAM puissent authentifier automatiquement
les utilisateurs avec Kerberos.

 -- Variable : pam-krb5-service-type
     Un type de service pour le module PAM Kerberos 5.

 -- Type de données : pam-krb5-configuration
     Type de données représentant la configuration du module PAM
     Kerberos 5. Ce type a les paramètres suivants :
     ‘pam-krb5’ (par défaut : ‘pam-krb5’)
          Le paquet pam-krb5 à utiliser.

     ‘minimum-uid’ (par défaut : ‘1000’)
          Le plus petite ID utilisateur pour lequel les
          authentifications Kerberos devraient être tentées. Les comptes
          locaux avec une valeur plus petite échoueront silencieusement
          leur authentification Kerberos.


File: guix.fr.info,  Node: Services LDAP,  Next: Services web,  Prev: Services Kerberos,  Up: Services

11.10.19 Services LDAP
----------------------

Authentification LDAP avec nslcd
................................

Le module ‘(gnu services authentication)’ fournit le type de service
‘nslcd-service-type’, qui peut être utilisé pour l’authentification par
LDAP. En plus de configurer le service lui-même, vous pouvez ajouter
‘ldap’ comme service de noms au Name Service Switch. *Note Name Service
Switch:: pour des informations détaillées.

   Voici une déclaration de système d’exploitation simple avec une
configuration par défaut pour ‘nslcd-service-type’ et une configuration
du Name Service Switch qui consulte le service de noms ‘ldap’ en dernier
:

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

   Les champs de ‘nslcd-configuration’ disponibles sont :

 -- paramètre de nslcd-configuration : package nss-pam-ldapd
     Le paquet ‘nss-pam-ldapd’ à utiliser.

 -- paramètre de nslcd-configuration : peut-être-nombre threads
     Le nombre de threads à démarrer qui peuvent gérer les requête et
     effectuer des requêtes LDAP. Chaque thread ouvre une connexion
     séparée au serveur LDAP. La valeur par défaut est de 5 threads.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : string uid
     Cela spécifie l’id de l’utilisateur sous lequel le démon devrait
     tourner.

     La valeur par défaut est ‘"nslcd"’.

 -- paramètre de nslcd-configuration : string gid
     Cela spécifie l’id du groupe sous lequel le démon devrait tourner.

     La valeur par défaut est ‘"nslcd"’.

 -- paramètre de nslcd-configuration : log-option log
     Cette option contrôle la journalisation via une liste contenant le
     schéma et le niveau. Le schéma peut être soit un symbole ‘none’,
     ‘syslog’, soit un nom de fichier absolu. Le niveau est facultatif
     et spécifie le niveau de journalisation. Le niveau de
     journalisation peut être l’un des symboles suivants :‘crit’,
     ‘error’, ‘warning’, ‘notice’, ‘info’ ou ‘debug’. Tous les messages
     avec le niveau spécifié ou supérieurs sont enregistrés.

     La valeur par défaut est ‘'("/var/log/nslcd" info)’.

 -- paramètre de nslcd-configuration : list uri
     La liste des URI des serveurs LDAP. Normalement, seul le premier
     serveur sera utilisé avec les serveurs suivants comme secours.

     La valeur par défaut est ‘'("ldap://localhost:389/")’.

 -- paramètre de nslcd-configuration : peut-être-chaine ldap-version
     La version du protocole LDAP à utiliser. La valeur par défaut est
     d’utiliser la version maximum supportée par la bibliothèque LDAP.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine binddn
     Spécifie le nom distingué avec lequel se lier au serveur de
     répertoire pour les recherches. La valeur par défaut est de se lier
     anonymement.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine bindpw
     Spécifie le mot de passe avec lequel se lier. Cette option n’est
     valable que lorsqu’elle est utilisée avec binddn.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine rootpwmoddn
     Spécifie le nom distingué à utiliser lorsque l’utilisateur root
     essaye de modifier le mot de passe d’un utilisateur avec le module
     PAM.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine rootpwmodpw
     Spécifie le mot de passe à utiliser pour se lier si l’utilisateur
     root essaye de modifier un mot de passe utilisateur. Cette option
     n’est valable que si elle est utilisée avec rootpwmoddn

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine sasl-mech
     Spécifie le mécanisme SASL à utiliser lors de l’authentification
     SASL.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine sasl-realm
     Spécifie le royaume SASL à utiliser pour effectuer une
     authentification SASL.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine sasl-authcid
     Spécifie l’identité d’authentification à utiliser pour effectuer
     une authentification SASL.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine sasl-authzid
     Spécifie l’identité d’autorisation à utiliser lors d’une
     authentification SASL.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen
          sasl-canonicalize?
     Détermine si le nom d’hôte du serveur LDAP devrait être canonalisé.
     Si c’est activé la bibliothèque LDAP effectuera une recherche de
     nom d’hôte inversée. Par défaut, il est laissé à la bibliothèque
     LDAP le soin de savoir si la vérification doit être effectuée ou
     non.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine krb5-ccname
     Indique le nom du cache d’informations de connexion de GSS-API
     Kerberos.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : string base
     La base de recherche de répertoires.

     La valeur par défaut est ‘"dc=example,dc=com"’.

 -- paramètre de nslcd-configuration : scope-option scope
     Spécifie la portée de la recherche (subtree, onelevel, base ou
     children). La portée par défaut est subtree ; la portée base n’est
     presque jamais utile pour les recherches de service de noms ; la
     portée children n’est pas prise en charge par tous les serveurs.

     La valeur par défaut est ‘'(subtree)’.

 -- paramètre de nslcd-configuration : peut-être-deref-option deref
     Spécifie la politique de déréférencement des alias. La politique
     par défaut est de ne jamais déréférencer d’alias.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen referrals
     Spécifie s’il faut activer le suivi de référence. Le comportement
     par défaut est de suivre les références.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : list-of-map-entries maps
     Cette option permet d’ajouter des attributs personnalisés à
     rechercher à la place des attributs par défaut de la RFC 2307.
     C’est une liste de correspondances, consistant chacune en un nom,
     en l’attribut RFC 2307 à utiliser et l’expression de la requête
     pour l’attribut tel qu’il sera disponible dans le répertoire.

     La valeur par défaut est ‘'()’.

 -- paramètre de nslcd-configuration : list-of-filter-entries filters
     Une liste de filtres consistant en le nom d’une correspondance à
     laquelle applique le filtre et en une expression de filtre de
     recherche LDAP.

     La valeur par défaut est ‘'()’.

 -- paramètre de nslcd-configuration : peut-être-nombre bind-timelimit
     Spécifie la limite de temps en seconds à utiliser lors de la
     connexion au serveur de répertoire. La valeur par défaut est de 10
     secondes.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre timelimit
     Spécifie la limite de temps (en secondes) à attendre une réponse
     d’un serveur LDAP. La valeur de zéro, par défaut, permet d’attendre
     indéfiniment la fin des recherches.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre idle-timelimit
     Spécifie la période d’inactivité (en seconde) après laquelle la
     connexion au serveur LDAP sera fermée. La valeur par défaut est de
     ne jamais la fermer.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre
          reconnect-sleeptime
     Spécifie le nombre de secondes pendant laquelle attendre lorsque la
     connexion à tous les serveurs LDAP a échouée. Par défaut, il y a
     une seconde d’attente entre le premier échec et la tentative
     suivante.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre
          reconnect-retrytime
     Spécifie la durée après laquelle le serveur LDAP est considéré
     comme définitivement inatteignable. Une fois cette durée atteinte,
     les tentatives de connexions n’auront plus lieu qu’une fois par cet
     intervalle de temps. La valeur par défaut est de 10 secondes.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-ssl-option ssl
     Spécifie s’il faut utiliser SSL/TLS ou non (la valeur par défaut
     est non). Si ’start-tls est spécifié alors StartTLS est utilisé à
     la place de LDAP sur SSL.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-tls-reqcert-option
          tls-reqcert
     Spécifie quelles vérifications effectuer sur les certificats donnés
     par les serveurs. La signification des valeurs est décrite dans la
     page de manuel de ldap.conf(5).

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-cacertdir
     Spécifie le répertoire contenant les certificats X.509 pour
     l’authentification des pairs. Ce paramètre est ignoré quand il est
     utilisé avec GnuTLS.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-cacertfile
     Spécifie le chemin des certificats X.509 pour l’authentification
     des pairs.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-randfile
     Spécifie le chemin d’une source d’entropie. Ce paramètre est ignoré
     quand il est utilisé avec GnuTLS.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-ciphers
     Spécifie les suites de chiffrements à utiliser pour TLS en tant que
     chaîne de caractères.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-cert
     Spécifie le chemin vers le fichier contenant le certificat local
     pour l’authentification TLS du client.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine tls-key
     Spécifie le chemin du fichier contenant la clef privée pour
     l’authentification TLS du client.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre pagesize
     Indiquez un nombre plus grand que 0 pour demander des résultats
     paginés au serveur LDAP en accord avec la RFC 2696. La valeur par
     défaut (0) est de ne pas demander de pagination des résultats.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-ignore-users-option
          nss-initgroups-ignoreusers
     Cette option évite les recherches d’appartenance au groupe à
     travers le LDAP pour les utilisateurs spécifiés. Autrement, la
     valeur ’all-local peut être utilisée. Avec cette valeur nslcd
     construit une liste complète des utilisateurs non-LDAP au
     démarrage.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre nss-min-uid
     Cette option s’assure que les utilisateurs LDAP avec un id
     utilisateur numérique plus petit que la valeur spécifiée sont
     ignorés.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre nss-uid-offset
     Cette option spécifie un décalage à ajouter à tous les id
     utilisateurs numériques LDAP. Cela peut être utile pour éviter des
     collisions d’id utilisateurs avec des utilisateurs locaux.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-nombre nss-gid-offset
     Cette option spécifie un décalage à ajouter à tous les id de groupe
     numériques LDAP. Cela peut être utile pour éviter des collisions
     d’id utilisateurs avec des groupes locaux.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen
          nss-nested-groups
     Si cette option est indiquée, l’attribut de membre de groupe peut
     pointer vers un autre groupe. Les membres de groupes imbriqués sont
     aussi renvoyés dans le groupe de haut-niveau et les groupes parents
     sont renvoyés lorsqu’on recherche un utilisateur spécifique. La
     valeur par défaut est de ne pas effectuer de recherche
     supplémentaire sur les groupes imbriqués.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen
          nss-getgrent-skipmembers
     Si cette option est indiqée, la liste de membres du groupe n’est
     pas récupérée lorsqu’on cherche un groupe. Les recherches pour
     trouver les groupes auxquels un utilisateur appartient resteront
     fonctionnelles donc l’utilisateur obtiendra probablement les bons
     groupes à la connexion.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen
          nss-disable-enumeration
     Si cette option est indiquée, les fonctions qui causent le
     chargement de toutes les entrées d’utilisateur et de groupe depuis
     le répertoire ne pourront pas le faire. Cela peut grandement
     diminuer la charge du serveur LDAP dans des situations où il y a
     beaucoup d’utilisateurs et de groupes. Cette option n’est pas
     recommandées pour la plupart des configurations.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine validnames
     Cette option peut être utilisée pour spécifier comment les noms
     d’utilisateurs et de groupes sont vérifiés sur le système. Ce motif
     est utilisé pour vérifier tous les noms d’utilisateurs et de
     groupes qui sont demandés et renvoyés par le LDAP.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen ignorecase
     Cela spécifie s’il faut ou non effectuer des recherches avec une
     correspondance sensible à la casse. Activer cela pourrait mener à
     des vulnérabilités de type contournement d’authentification sur le
     système et introduire des vulnérabilité d’empoisonnement de cache
     nscd qui permettent un déni de service.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-booléen
          pam-authc-ppolicy
     Cette option spécifie si des contrôles de la politique de mots de
     passe sont demandés et gérés par le serveur LDAP à
     l’authentification de l’utilisateur.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine pam-authc-search
     Par défaut nslcd effectue une recherche LDAP avec le mot de passe
     de l’utilisateur après BIND (authentification) pour s’assurer que
     l’opération BIND a bien réussi. La recherche par défaut est une
     simple vérification que le DN de l’utilisateur existe. Un filtre de
     recherche peut être spécifié pour l’utiliser à la place. Il devrait
     renvoyer au moins une entrée.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine pam-authz-search
     Cette option permet la configuration fine et flexible de la
     vérification d’autorisation qui devrait être effectuée. Le filtre
     de recherche est exécuté et si une entrée correspond, l’accès est
     autorisé, sinon il est refusé.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : peut-être-chaine
          pam-password-prohibit-message
     Si cette option est indiquée, la modification de mot de passe par
     pam_ldap sera refusée et le message spécifié sera présenté à
     l’utilisateur à la place. Le message peut être utilisé pour
     rediriger les utilisateurs vers une autre méthode pour changer leur
     mot de passe.

     La valeur par défaut est ‘disabled’.

 -- paramètre de nslcd-configuration : list pam-services
     Liste de noms de service pam pour lesquels l’authentification LDAP
     devrait suffire.

     La valeur par défaut est ‘'()’.

Serveur de répertoire LDAP
..........................

Le module ‘(gnu services ldap)’ fournit le
‘directory-server-service-type’, qui peut être utilisé pour créer et
lancer une instance du serveur LDAP.

   Voici un exemple de configuration du ‘directory-server-service-type’
:

     (use-service-modules ldap)

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

   Le mot de passe root devrait être généré avec l’utilitaire ‘pwdhash’
fourni par le paquet ‘389-ds-base’.

   Remarquez que les changements de configuration du serveur de
répertoire ne seront pas appliqués aux instances existantes. Vous devrez
sauvegarder et restaurer les données du serveur manuellement. Seules les
nouvelles instances du serveur de répertoire seront créées à la
reconfiguration du système.

 -- Type de données : directory-server-instance-configuration
     Les champs de ‘directory-server-configuration’ disponibles sont :

     ‘package’ (par défaut : ‘389-ds-base’) (type : simili-fichier)
          Le paquet ‘389-ds-base’.

     ‘config-version’ (par défaut : ‘2’) (type : entier)
          Indique la version du format du fichier de configuration. Pour
          utiliser le fichier INF avec ‘dscreate’, ce paramètre doit
          être 2.

     ‘full-machine-name’ (par défaut : ‘"localhost"’) (type : chaine)
          Indique le nom d’hôte pleinement qualifié (FQDN) de ce
          système.

     ‘selinux’ (par défaut : ‘#false’) (type : booléen)
          Active la détection et l’intégration de SELinux pendant
          l’installation de cette instance. Si la valeur est ‘#true’,
          ‘dscreate’ détecte automatiquement si SELinux est activé.

     ‘strict-host-checking’ (par défaut : ‘#true’) (type : booléen)
          Indique si le serveur doit vérifier le champ DNS avant et
          inverse dans le paramètre ‘full-machine-name’. Lorsque vous
          installez cette instance avec l’authentification GSSAPI
          derrière un répartiteur de charge, indiquez ‘#false’.

     ‘systemd’ (par défaut : ‘#false’) (type : booléen)
          Active les fonctionnalité de la plateforme systemd. Si la
          valeur est ‘#true’, ‘dscreate’ détecte automatiquement si
          systemd est installé.

     ‘slapd’ (type : slapd-configuration)
          Configuration de slapd.

           -- Type de données : slapd-configuration
               Les champs de ‘slapd-configuration’ disponibles sont :

               ‘instance-name’ (par défaut : ‘"localhost"’) (type : chaine)
                    Indique le nom de cette instance. Vous pouvez
                    utiliser cette valeur dans d’autres paramètres de ce
                    fichier INF avec la variable ‘{instance_name}’.
                    Remarquez que ce nom ne peut pas être changé après
                    l’installation !

               ‘user’ (par défaut : ‘"dirsrv"’) (type : chaine)
                    Indique le nom d’utilisateur que le processus
                    ns-slapd utilisera après le démarrage du service.

               ‘group’ (par défaut : ‘"dirsrv"’) (type : chaine)
                    Indique le nom de groupe que le processus ns-slapd
                    utilisera après le démarrage du service.

               ‘port’ (par défaut : ‘389’) (type : nombre)
                    Indique le port TCP que l’instance doit utiliser
                    pour les connexions LDAP.

               ‘secure-port’ (par défaut : ‘636’) (type : entier)
                    Indique le port TCP que l’instance doit utiliser
                    pour les connexions LDAP sécurisés par TLS (LDAPS).

               ‘root-dn’ (par défaut : ‘"cn=Directory Manager"’) (type : chaine)
                    Indique le “nom distingué” (DN) du compte
                    administratif de cette instance.

               ‘root-password’ (par défaut : ‘"{invalid}YOU-SHOULD-CHANGE-THIS"’) (type : chaine)
                    Indique le mot de passe du compte spécifié dans le
                    paramètre ‘root-dn’. Vous pouvez soit utiliser un
                    mot de passe en texte clair que ‘dscreate’ hash
                    pendant l’installation ou une chaine de « hash »
                    générée par l’utilitaire ‘pwdhash’ pour ce
                    paramètre. Remarquez qu’utiliser un mot de passe en
                    clair peut présenter un risque de sécurité si les
                    utilisateurs et utilisatrices peuvent lire ce
                    fichier INF !

               ‘self-sign-cert’ (par défaut : ‘#true’) (type : booléen)
                    Indique si l’installation doit créer un certificat
                    auto-signé et activer le chiffrement TLS pendant
                    l’installation. Ce n’est pas convenable pour la
                    production, mais cela vous permet d’utiliser TLS
                    directement après l’installation. Vous pouvez
                    remplacer le certificat auto-signé par un certificat
                    fournit par une autorité de certification.

               ‘self-sign-cert-valid-months’ (par défaut : ‘24’) (type : nombre)
                    Indique le nombre de mois pour lequel le certificat
                    auto-signé généré sera valide.

               ‘backup-dir’ (par défaut : ‘"/var/lib/dirsrv/slapd-{instance_name}/bak"’) (type : chaine)
                    Indique le répertoire de sauvegarde de cette
                    instance.

               ‘cert-dir’ (par défaut : ‘"/etc/dirsrv/slapd-{instance_name}"’) (type : chaine)
                    Indique le répertoire de la base de données Network
                    Security Services (NSS) de cette instance.

               ‘config-dir’ (par défaut : ‘"/etc/dirsrv/slapd-{instance_name}"’) (type : chaine)
                    Indique le répertoire de configuration de
                    l’instance.

               ‘db-dir’ (par défaut : ‘"/var/lib/dirsrv/slapd-{instance_name}/db"’) (type : chaine)
                    Indique le répertoire de la base de données de
                    l’instance.

               ‘initconfig-dir’ (par défaut : ‘"/etc/dirsrv/registry"’) (type : chaine)
                    Indique le répertoire contenant le répertoire de
                    configuration rc du système d’exploitation.

               ‘ldif-dir’ (par défaut : ‘"/var/lib/dirsrv/slapd-{instance_name}/ldif"’) (type : chaine)
                    Indique le répertoire d’export et d’import LDIF de
                    l’instance.

               ‘lock-dir’ (par défaut : ‘"/var/lock/dirsrv/slapd-{instance_name}"’) (type : chaine)
                    Indique le répertoire de verrouillage de l’instance.

               ‘log-dir’ (par défaut : ‘"/var/log/dirsrv/slapd-{instance_name}"’) (type : chaine)
                    Indique le répertoire de journalisation de
                    l’instance.

               ‘run-dir’ (par défaut : ‘"/run/dirsrv"’) (type : chaine)
                    Indique le répertoire pour le PID de l’instance.

               ‘schema-dir’ (par défaut : ‘"/etc/dirsrv/slapd-{instance_name}/schema"’) (type : chaine)
                    Indique le répertoire des schémas de l’instance.

               ‘tmp-dir’ (par défaut : ‘"/tmp"’) (type : chaine)
                    Indique le répertoire temporaire de l’instance.

     ‘backend-userroot’ (type : backend-userroot-configuration)
          Configuration du moteur userroot.

           -- Type de données : backend-userroot-configuration
               Les champs de ‘backend-userroot-configuration’
               disponibles sont :

               ‘create-suffix-entry?’ (par défaut : ‘#false’) (type : booléen)
                    utilisez la valeur ‘#true’ pour créer une entrée de
                    nœud racine générique pour le suffixe dans la base.

               ‘require-index?’ (par défaut : ‘#false’) (type : booléen)
                    Utilisez la valeur ‘#true’ pour refuser les
                    recherches non indexées dans cette base de données.

               ‘sumple-entries’ (par défaut : ‘"no"’) (type : chaine)
                    Utilisez la valeur ‘"yes"’ pour ajouter la dernière
                    version des entrées échantillonnées dans cette base
                    de données. Sinon, utilisez ‘"001003006"’ pour
                    utiliser la version 1.3.6 des entrées
                    échantillonées. Utilisez cette option par exemple
                    pour créer une base de données de test.

               ‘suffix’ (type : peut-être-chaine)
                    Indique le suffixe de la racine stocké dans cette
                    base. Si vous n’indiquez pas l’attribut de suffixe
                    le processus d’installation ne créera pas le
                    moteur/suffixe. Vous pouvez également créer
                    plusieurs moteurs/suffixes en dupliquant cette
                    section.


File: guix.fr.info,  Node: Services web,  Next: High Availability Services,  Prev: Services LDAP,  Up: Services

11.10.20 Services web
---------------------

Le module ‘(gnu services web)’ fournit le serveur Apache HTTP, le
serveur web nginx et aussi un démon fastcgi.

Serveur Apache HTTP
...................

 -- Variable : httpd-service-type
     Type de service pour le serveur Apache HTTP
     (https://httpd.apache.org/) (“httpd”). La valeur de ce type de
     service est un enregistrement ‘httpd-configuration’.

     Un exemple de configuration simple est donné ci-dessous.

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

     D’autres services peuvent aussi étendre ‘httpd-service-type’ pour
     être ajouté à la configuration.

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

   Les détails des types d’enregistrement ‘httpd-configuration’,
‘httpd-module’, ‘httpd-config-file’ et ‘httpd-virtualhost’ sont donnés
plus bas.

 -- Type de données : httpd-configuration
     Ce type de données représente la configuration du service httpd.

     ‘package’ (par défaut : ‘httpd’)
          Le paquet httpd à utiliser.

     ‘pid-file’ (par défaut : ‘"/var/run/httpd"’)
          Le fichier de pid utilisé par le service shepherd.

     ‘config’ (par défaut : ‘(httpd-config-file)’)
          Le fichier de configuration à utiliser avec le service httpd.
          La valeur par défaut est un enregistrement ‘httpd-config-file’
          mais cela peut aussi être un G-expression qui génère un
          fichier, par exemple un ‘plain-file’. Un fichier en dehors du
          dépôt peut aussi être spécifié avec une chaîne de caractères.

 -- Type de données : httpd-module
     Ce type de données représente un module pour le service httpd.

     ‘name’
          Le nom du module.

     ‘file’
          Le fichier pour le module. Cela peut être relatif au paquet
          httpd utilisé, l’emplacement absolu d’un fichier ou une
          G-expression pour un fichier dans le dépôt, par exemple
          ‘(file-append mod-wsgi "/modules/mod_wsgi.so")’.

 -- Variable : %default-httpd-modules
     Une liste par défaut des objets ‘httpd-module’.

 -- Type de données : httpd-config-file
     Ce type de données représente un fichier de configuration pour le
     service httpd.

     ‘modules’ (par défaut : ‘%default-httpd-modules’)
          Les modules à charger. Les modules supplémentaires peuvent
          être ajoutés ici ou chargés par des configuration
          supplémentaires.

          Par exemple, pour gérer les requêtes pour des fichiers PHP,
          vous pouvez utiliser le module ‘mod_proxy_fcgi’ d’Apache avec
          ‘php-fpm-service-type’ :

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

     ‘server-root’ (par défaut : ‘httpd’)
          Le ‘ServerRoot’ dans le fichier de configuration, par défaut
          le paquet httpd. Les directives comme ‘Include’ et
          ‘LoadModule’ sont prises relativement à la racine du serveur.

     ‘server-name’ (par défaut : ‘#f’)
          Le ‘ServerName’ dans le fichier de configuration, utilisé pour
          spécifier le schéma de requête, le nom d’hôte et le port que
          le serveur utilise pour s’identifier.

          Cela n’a pas besoin d’être dans la configuration du serveur,
          et peut être spécifié dans les hôtes virtuels. La valeur par
          défaut est ‘#f’ pour ne pas spécifier de ‘ServerName’.

     ‘document-root’ (par défaut : ‘"/srv/http"’)
          Le ‘DocumentRoot’ depuis lequel les fichiers seront servis.

     ‘listen’ (par défaut : ‘'("80")’)
          La liste des valeurs pour les directives ‘Listen’ dans le
          fichier de configuration. La valeur devrait être une liste de
          chaînes, où chacune spécifie le port sur lequel écouter et
          éventuellement une adresse IP et un protocole à utiliser.

     ‘pid-file’ (par défaut : ‘"/var/run/httpd"’)
          Le ‘PidFile’ à utiliser. Cela devrait correspondre à
          ‘pid-file’ indiqué dans ‘httpd-configuration’ pour que le
          service Shepherd soit correctement configuré.

     ‘error-log’ (par défaut : ‘"/var/log/httpd/error_log"’)
          Le ‘ErrorLog’ où le serveur écrit les journaux d’erreurs.

     ‘user’ (par défaut : ‘"httpd"’)
          Le ‘User’ en tant que lequel le serveur répondra aux requêtes.

     ‘group’ (par défaut : ‘"httpd"’)
          Le ‘Group’ que le serveur utilisera pour répondre aux
          requêtes.

     ‘extra-config’ (par défaut : ‘(list "TypesConfig etc/httpd/mime.types")’)
          Une liste plate de chaînes et de G-expressions qui seront
          ajoutées à la fin du fichier de configuration.

          N’importe quelle valeur avec laquelle le service est étendu
          sera ajouté à cette liste.

 -- Type de données : httpd-virtualhost
     Ce type de données représente la configuration d’un hôte virtuel
     pour le service httpd.

     Ils devraient être ajoutés à extra-config dans httpd-service.

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

     ‘addresses-and-ports’
          L’adresse et le port pour la directive ‘VirtualHost’.

     ‘contents’
          Le contenu de la directive ‘VirtualHost’, cela devrait être
          une liste de chaîne et de G-expressions.

NGINX
.....

 -- Variable : nginx-service-type
     Type de service pour le serveur web NGinx (https://nginx.org/). La
     valeur de ce service est un enregistrement ‘<nginx-configuration>’.

     Un exemple de configuration simple est donné ci-dessous.

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

     En plus d’ajouter des blocs de serveurs dans la configuration du
     service directement, ce service peut être étendu par d’autres
     services pour ajouter des blocs de serveurs, comme dans cet exemple
     :

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

   Au démarrage, ‘nginx’ n’a pas encore lu son fichier de configuration,
donc il utilise les fichiers par défaut pour les messages d’erreur. S’il
échoue à charger sa configuration, c’est là où les messages seront
enregistrés. Après la lecture du fichier de configuration, le fichier de
journal d’erreur par défaut change en fonction de celle-ci. Dans notre
cas, les messages d’erreur au démarrage se trouvent dans
‘/var/run/nginx/logs/error.log’ et après la configuration dans
‘/var/log/nginx/error.log’. Ce second emplacement peut être modifié avec
l’option de configuration LOG-DIRECTORY.

 -- Type de données : nginx-configuration
     Ce type de données représente la configuration de NGinx. Certaines
     configurations peuvent se faire ici et d’autres fournissent des
     types d’enregistrement ou éventuellement, on peut fournir un
     fichier de configuration.

     ‘nginx’ (par défaut : ‘nginx’)
          Le paquet nginx à utiliser.

     ‘rshepherd-equirement’ (par défaut : ‘'()’)
          C’est une liste de symboles nommant les services du Shepherd
          dont les services nginx dépendent.

          C’est utile si vous voulez que ‘nginx’ démarre après qu’un
          serveur web en arrière-plan ou qu’un service de journalisation
          comme Anonip a été démarré.

     ‘log-directory’ (par défaut : ‘"/var/log/nginx"’)
          Le répertoire dans lequel NGinx écrira ses fichiers journaux.

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

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

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

     ‘run-directory’ (par défaut : ‘"/var/run/nginx"’)
          Le répertoire dans lequel NGinx créera un fichier de pid et
          écrira des fichiers temporaires.

     ‘server-blocks’ (par défaut : ‘'()’)
          Une liste de “blocs serveur” à créer dans le fichier de
          configuration généré, dont les éléments sont de type
          ‘<nginx-server-configuration>’.

          L’exemple suivant paramètre NGinx pour servir
          ‘www.example.com’ depuis le répertoire
          ‘/srv/http/www.example.com’ sans utiliser HTTPS.
               (service nginx-service-type
                        (nginx-configuration
                          (server-blocks
                            (list (nginx-server-configuration
                                    (server-name '("www.example.com"))
                                    (root "/srv/http/www.example.com"))))))

     ‘upstream-blocks’ (par défaut : ‘'()’)
          Une liste de “blocs amont” à créer dans le fichier de
          configuration généré, dont les éléments sont de type
          ‘<nginx-upstream-configuration>’.

          Configurer les serveurs amont à travers les ‘upstream-blocks’
          peut être utile en combinaison avec ‘locations’ dans les
          enregistrements ‘<nginx-server-configuration>’. L’exemple
          suivant crée une configuration de serveur avec une
          configuration « location » qui sera mandataire pour une
          configuration amont, qui gérera les requêtes avec deux
          serveurs.

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

     ‘file’ (par défaut : ‘#f’)
          Si un fichier de configuration FILE est fourni, il sera
          utilisé au lieu de générer un fichier de configuration à
          partir des ‘log-directory’, ‘run-directory’, ‘server-blocks’
          et ‘upstream-blocks’ fournis. Pour un bon fonctionnement, ces
          arguments devraient correspondre à ce qui se trouve dans FILE
          pour s’assurer que les répertoires sont créé lorsque le
          service est activé.

          Cela peut être utile si vous avez déjà un fichier de
          configuration existant ou s’il n’est pas possible de faire ce
          dont vous avez besoin avec les autres parties de
          l’enregistrement nginx-configuration.

     ‘server-names-hash-bucket-size’ (par défaut : ‘#f’)
          Taille du seau pour les tables de hashage des noms de
          serveurs, par dauft ‘#f’ pour utilise la taille des lignes de
          cache du processeur.

     ‘server-names-hash-bucket-max-size’ (par défaut : ‘#f’)
          Taille maximum des seaux pour les tables de hashage des
          serveurs de noms.

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

     ‘modules’ (par défaut : ‘'()’)
          Liste de modules dynamiques de nginx à charger. Cela devrait
          être une liste de noms de fichiers de modules chargeables,
          comme dans cet exemple :

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

     ‘lua-package-path’ (par défaut : ‘'()’)
          Liste des paquets lua à charger. Cela devrait être une liste
          de noms de paquets de modules lua chargeables, comme dans cet
          exemple :

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

     ‘lua-package-cpath’ (par défaut : ‘'()’)
          Liste de paquets lua C à charger. cela devrait être une liste
          de noms de paquets de modules lua C, comme dans cet exemple :

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

     ‘global-directives’ (par défaut : ‘'((events . ()))’)
          Liste d’association des directives globales pour le plus haut
          niveau de la configuration de nginx. Les valeurs peuvent
          elles-mêmes être des listes d’association.

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

     ‘extra-content’ (par défaut : ‘""’)
          Additional content to be appended to the ‘http’ block. Can
          either be a value that can be lowered into a string or a list
          of such values. In the former case, it is inserted directly.
          In the latter, it is prefixed with indentation and suffixed
          with a newline. Nested lists are flattened into one line.

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

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

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

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

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

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

 -- Type de données : nginx-server-configuration
     Type de données représentant la configuration d’un bloc serveur de
     nginx. Ce type a les paramètres suivants :

     ‘listen’ (par défaut : ‘'("80" "443 ssl")’)
          Chaque directive ‘listen’ indique l’adresse et le port pour le
          protocole IP ou le chemin d’un socket UNIX-domain sur lequel
          le serveur acceptera les connexions. On peut spécifier
          l’adresse et le port, ou juste l’adresse ou juste le port. Une
          adresse peut aussi être un nom d’hôte, par exemple :

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

     ‘server-name’ (par défaut : ‘(list 'default)’)
          Une liste de noms de serveurs que ce serveur représente.
          ‘'default’ représente le serveur par défaut pour les
          connexions qui ne correspondent à aucun autre serveur.

     ‘root’ (par défaut : ‘"/srv/http"’)
          Racine du site web que sert nginx.

     ‘locations’ (par défaut : ‘'()’)
          Une liste d’enregistrements “nginx-location-configuration” ou
          “nginx-named-location-configuration” à utiliser dans ce bloc
          serveur.

     ‘index’ (par défaut : ‘(list "index.html")’)
          Fichiers d’index à chercher lorsque les clients demandent un
          répertoire. S’il ne peut pas être trouvé, Nginx enverra la
          liste des fichiers dans le répertoire.

     ‘try-files’ (par défaut : ‘'()’)
          Une liste de fichiers dont l’existence doit être vérifiée dans
          l’ordre spécifié. ‘nginx’ utilisera le premier fichier trouvé
          pour satisfaire la requête.

     ‘ssl-certificate’ (par défaut : ‘#f’)
          Où trouver les certificats pour les connexions sécurisées.
          Indiquez ‘#f’ si vous n’avez pas de certificats et que vous ne
          voulez pas utiliser HTTPS.

     ‘ssl-certificate-key’ (par défaut : ‘#f’)
          Où trouver la clef privée pour les connexions sécurisées.
          Indiquez ‘#f’ si vous n’avez pas de clef et que vous ne voulez
          pas utiliser HTTPS.

     ‘server-tokens?’ (par défaut : ‘#f’)
          Indique si le serveur devrait ajouter sa configuration dans
          les réponses.

     ‘raw-content’ (par défaut : ‘'()’)
          A list of strings or file-like objects to be appended to the
          server block. Each item is prefixed with indentation and
          suffixed with a new line. Nested lists are flattened.

 -- Type de données : nginx-upstream-configuration
     Type de données représentant la configuration d’un bloc ‘upstream’
     nginx. Ce type a les paramètres suivants :

     ‘name’
          Nome de ces groupe de serveurs.

     ‘servers’
          Spécifie les adresses des serveurs dans le groupe. L’adresse
          peut être spécifié avec une adresse IP (p. ex. ‘127.0.0.1’),
          un nom de domaine (p. ex. ‘backend1.example.com’) ou un chemin
          vers un socket UNIX avec le préfixe ‘unix:’. Pour les adresse
          utilisant une adresse IP ou un nom de domaine, le port par
          défaut est 80 et un port différent peut être spécifié
          explicitement.

     ‘extra-content’
          Additional content to be appended to the upstream block. Can
          be a string or file-like object or list of thereof. In case of
          list, each item is prefixed with indentation and suffixed with
          a new line. Nested lists are flattened.

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

 -- Type de données : nginx-location-configuration
     Type de données représentant la configuration d’un bloc ‘location’
     nginx. Ce type a les paramètres suivants :

     ‘uri’
          URI qui correspond à ce bloc.

     ‘body’
          Body of the location block, specified as a list of strings or
          file-like objects. Each item is prefixed with indentation and
          suffixed with a new line. Nested lists are flattened.

          Par exemple, pour passer des requêtes à un groupe de serveurs
          amont définis dans un bloc ‘nginx-upstream-configuration’, la
          directive suivante peut être spécifiée dans le corps : ‘(list
          "proxy_pass http://upstream-name;")’.

 -- Type de données : nginx-named-location-configuration
     Type de données représentant la configuration d’un bloc location
     nginx nommé. Les blocs location nommés sont utilisé les
     redirections de requêtes et pas pour le traitement des requêtes
     normales. Ce type a les paramètres suivants :

     ‘name’
          Nom pour identifier ce bloc location.

     ‘body’
          *Note nginx-location-configuration body::, comme le corps d’un
          bloc location nommé peut être utilisé de la même manière que
          ‘nginx-location-configuration body’. Une restriction est que
          le corps d’un bloc location nommé ne peut pas contenir de bloc
          location.

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

     ‘upstream-blocks’ (par défaut : ‘'()’)
          Une liste de blocs amont à créer dans le fichier de
          configuration généré, dont les éléments sont de type
          ‘<nginx-upstream-configuration>’.

     ‘server-blocks’ (par défaut : ‘'()’)
          Une liste de blocs serveur à créer dans le fichier de
          configuration généré, dont les éléments sont de type
          ‘<nginx-server-configuration>’.

     ‘extra-content’ (default: ‘'()’)
          Additional content to be appended to the ‘stream’ block. Can
          either be a value that can be lowered into a string or a list
          of such values. In the former case, it is inserted directly.
          In the latter, it is prefixed with indentation and suffixed
          with a newline. Nested lists are flattened into one line.

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

Varnish est un serveur de cache rapide qui se trouve entre les
applications web et les utilisateurs. Il sert de serveur mandataire pour
les requêtes des clients et met les URL accédées en cache pour que
plusieurs requêtes à la même ressource ne crée qu’une requête au moteur.

 -- Variable : varnish-service-type
     Type de service pour le démon Varnish.

 -- Type de données : varnish-configuration
     Type de données représentant la configuration du service ‘varnish’.
     Ce type a les paramètres suivants :

     ‘package’ (par défaut : ‘varnish’)
          Le paquet Varnish à utiliser.

     ‘name’ (par défaut : ‘"default"’)
          Un nom pour cet instance de Varnish. Varnish va créer un
          répertoire dans ‘/var/varnish/’ avec ce nom et gardera des
          fichiers temporaires à cet endroit. Si le nom commence par une
          barre oblique, il est interprété comme un nom de répertoire
          absolu.

          Passez l’argument ‘-n’ aux autres programmes Varnish pour vous
          connecter à l’instance nommée, p. ex. ‘varnishncsa -n
          default’.

     ‘backend’ (par défaut : ‘"localhost:8080"’)
          Le moteur à utiliser. Cette option n’a pas d’effet si ‘vcl’
          est vrai.

     ‘vcl’ (par défaut : #f)
          Le programme “VCL” (Varnish Configuration Language) à lancer.
          Si la valeur est ‘#f’, Varnsh servira de mandataire pour
          ‘backend’ avec la configuration par défaut. Sinon, ce doit
          être un objet simili-fichier avec une syntaxe VCL valide.

          Par exemple, pour créer un miroir de www.gnu.org
          (https://www.gnu.org) avec VCL vous pouvez faire quelque chose
          comme cela :

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

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

          On peut inspecter la configuration d’une instance Varnish
          actuellement lancée en utilisant le programme ‘varnishadm’.

          Consultez le guide utilisateur de varnish
          (https://varnish-cache.org/docs/) et le livre varnish
          (https://book.varnish-software.com/4.0/) pour une
          documentation complète sur Varnish et son langage de
          configuration.

     ‘listen’ (par défaut : ‘'("localhost:80")’)
          Liste des adresses sur lesquelles écoute Varnish.

     ‘storage’ (par défaut : ‘'("malloc,128m")’)
          Liste de moteurs de stockage qui seront disponibles en VCL.

     ‘parameters’ (par défaut : ‘'()’)
          Liste des paramètres à l’exécution de la forme ‘'(("parameter"
          . "value"))’.

     ‘extra-options’ (par défaut : ‘'()’)
          Arguments supplémentaires à passer au processus ‘varnishd’.

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

Whoogle Search (https://github.com/benbusby/whoogle-search) is a
self-hosted, ad-free, privacy-respecting meta search engine that
collects and displays Google search results. By default, you can
configure it by adding this line to the ‘services’ field of your
operating system declaration:

     (service whoogle-service-type)

   As a result, Whoogle Search runs as local Web server, which you can
access by opening ‘http://localhost:5000’ in your browser. The
configuration reference is given below.

 -- Variable : whoogle-service-type
     Service type for Whoogle Search. Its value must be a
     ‘whoogle-configuration’ record—see below.

 -- Data Type : whoogle-configuration
     Data type representing Whoogle Search service configuration.

     ‘package’ (default: ‘whoogle-search’)
          The Whoogle Search package to use.

     ‘host’ (par défaut : ‘"127.0.0.1"’)
          The host address to run Whoogle on.

     ‘port’ (par défaut : ‘5000’)
          The port where Whoogle will be exposed.

     ‘environment-variables’ (par défaut : ‘'()’)
          A list of strings with the environment variables to configure
          Whoogle. You can consult its environment variables template
          (https://github.com/benbusby/whoogle-search/blob/main/whoogle.template.env)
          for the list of available options.

Patchwork
.........

Patchwork est un système de suivi de correctifs. Il peut récupérer des
correctifs envoyés à une liste de diffusion, et les afficher sur une
interface web.

 -- Variable : patchwork-service-type
     Type de service pour Patchwork.

   L’exemple suivant est un exemple de service Patchwork minimal, pour
le domaine ‘patchwork.example.com’.

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


   Il y a trois enregistrements pour configurer le service Patchwork. Le
‘<patchwork-configuration>’ correspond à la configuration de Patchwork
dans le service HTTPD.

   Le champ ‘settings-module’ dans l’enregistrement
‘<patchwork-configuration>’ peut être rempli avec l’enregistrement
‘<patchwork-settings-modules>’, qui décrit un module de paramètres
généré dans le dépôt de Guix.

   Pour le champ ‘database-configuration’ dans
‘<patchwork-settings-module>’, il faut utiliser un
‘<patchwork-dataase-configuration>’.

 -- Type de données : patchwork-configuration
     Type de données représentant la configuration du service Patchwork.
     Ce type a les paramètres suivants :

     ‘patchwork’ (par défaut : ‘patchwork’)
          Le paquet Patchwork à utiliser.

     ‘domain’
          Le domaine à utiliser pour Patchwork, utilisé comme hôte
          virtuel dans le service HTTPD.

     ‘settings-module’
          Le module de paramètres à utiliser pour Patchwork. En tant
          qu’application Django, Patchwork est configuré avec un module
          Python contenant les paramètres. Il peut s’agir d’une instance
          de l’enregistrement ‘<patchwork-settings-module>’, de
          n’importe quel enregistrement qui représente les paramètres
          dans le dépôt, ou un répertoire en dehors du dépôt.

     ‘static-path’ (par défaut : ‘"/static/"’)
          Le chemin dans lequel le service HTTPD devrait servir les
          fichiers statiques.

     ‘getmail-retriever-config’
          La valeur d’enregistrement getmail-retriever-configuration à
          utiliser avec Patchwork. getmail sera configuré avec cette
          valeur, les messages seront livrés à Patchwork.

 -- Type de données : patchwork-settings-module
     Type de données représentant le module de paramètres de Patchwork.
     Certains de ces paramètres sont liés à Patchwork, mais d’autres
     sont liés à Django, le cadriciel web utilisé par Patchwork, ou la
     bibliothèque Django Rest Framework. Ce type a les paramètres
     suivants :

     ‘database-configuration’ (par défaut : ‘(patchwork-database-configuration)’)
          Les paramètres de connexion à la base de données à utiliser
          pour Patchwork. Voir le type d’enregistrement
          ‘<patchwork-database-configuration>’ pour plus d’information.

     ‘secret-key-file’ (par défaut : ‘"/etc/patchwork/django-secret-key"’)
          Patchwork, en tant qu’application web Django, utilise une clé
          secrète pour signer des valeurs avec de la cryptographie. Ce
          fichier devrait contenir une valeur unique imprévisible.

          Si ce fichier n’existe pas, il sera créé avec une valeur
          aléatoire par le service patchwork-setup.

          Ce paramètre est lié à Django.

     ‘allowed-hosts’
          Une liste des hôtes valides pour ce service Patchwork. Cela
          doit au minimum inclure le domaine spécifié dans
          l’enregistrement ‘<patchwork-configuration>’.

          C’est un paramètre pour Django.

     ‘default-from-email’
          L’adresse de courriel sur laquelle Patchwork devrait envoyer
          les courriels par défaut.

          C’est un paramètre de Patchwork.

     ‘static-url’ (par défaut : ‘#f’)
          L’URL à utiliser pour servir les ressources statiques. Cela
          peut être un bout d’URL ou une URL complète, mais doit finir
          par ‘/’.

          Si la valeur par défaut est utilisée, la valeur ‘static-path’
          de ‘<patchwork-configuration>’ sera utilisée.

          C’est un paramètre pour Django.

     ‘admins’ (par défaut : ‘'()’)
          Adresses de courriel auxquelles envoyer le détails des erreurs
          s’il y en a. Chaque valeur de la liste contient deux éléments,
          le nom et l’adresse de courriel.

          C’est un paramètre pour Django.

     ‘debug?’ (par défaut : ‘#f’)
          Indique s’il faut lancer Patchwork en mode de débogage. Si la
          valeur est ‘#t’, les messages d’erreur détaillés seront
          affichés.

          C’est un paramètre pour Django.

     ‘enable-rest-api?’ (par défaut : ‘#t’)
          Indique s’il faut activer l’API REST de Patchwork.

          C’est un paramètre de Patchwork.

     ‘enable-xmlrpc?’ (par défaut : ‘#t’)
          Indique s’il faut active l’API RPC en XML.

          C’est un paramètre de Patchwork.

     ‘force-https-links?’ (par défaut : ‘#t’)
          Indique s’il faut utiliser des liens HTTPS sur les pages de
          Patchwork.

          C’est un paramètre de Patchwork.

     ‘extra-settings’ (par défaut : ‘""’)
          Code supplémentaire à placer à la fin du module de paramètres
          de Patchwork.

 -- Type de données : patchwork-database-configuration
     Type de données représentant la configuration de la base de données
     de Patchwork.

     ‘engine’ (par défaut : ‘"django.db.backends.postgresql_psycopg2"’)
          Le moteur de base de données à utiliser.

     ‘name’ (par défaut : ‘"patchwork"’)
          Le nom de la base de données à utiliser.

     ‘user’ (par défaut : ‘"httpd"’)
          L’utilisateur à utiliser pour se connecter à la base de
          données.

     ‘password’ (par défaut : ‘""’)
          Le mot de passe à utiliser lors de la connexion à la base de
          données.

     ‘host’ (par défaut : ‘""’)
          L’hôte sur lequel se connecter à la base de données.

     ‘port’ (par défaut : ‘""’)
          Le port sur lequel se connecter à la base de données.

Mumi
....

Mumi (https://codeberg.org/guix/mumi) est une interface Web pour le
logiciel de suivi de bogues Debbugs, par défaut pour l’instance de GNU
(https://bugs.gnu.org). Mumi est un serveur Web, mais il récupère et
indexe aussi les courriels provenant de Debbugs.

 -- Variable : mumi-service-type
     Le type de service pour Mumi.

 -- Type de données : mumi-configuration
     Type de données représentant la configuration du service Mumi. Ce
     type a les champs suivants :

     ‘mumi’ (par défaut : ‘mumi’)
          Le paquet Mumi à utiliser.

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

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

     ‘rsync-flags’ (default: ‘'()’)
          Additional flags to pass to ‘rsync’.

     ‘mailer?’ (par défaut : ‘#true’)
          Indique s’il faut activer le composant d’envoie de courriels.

     ‘sender’
          L’adresse de courriel utilisée comme expéditeur pour les
          commentaires.

     ‘smtp’
          Une URI pour configurer les paramètres SMTP pour Mailutils.
          Cela peut être quelque chose comme
          ‘sendmail:///path/to/bin/msmtp’ ou toute autre URI prise en
          charge par Mailutils. *Note SMTP Mailboxes: (mailutils)SMTP
          Mailboxes.

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

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

     ‘name’
          Name of the package.

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

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

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

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

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

FastCGI
.......

FastCGI est une interface entre le frontal et le moteur d’un service
web. C’est un dispositif quelque peu désuet ; les nouveaux services
devraient généralement juste parler HTTP entre le frontal et le moteur.
Cependant il y a un certain nombre de services de moteurs comme PHP ou
l’accès aux dépôts Git optimisé en HTTP qui utilisent FastCGI, donc nous
le supportons dans Guix.

   Pour utiliser FastCGI, vous configurez le serveur web frontal (p. ex.
nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi,
qui écoute sur un socket UNIX ou TCP local. Il y a un programme
‘fcgiwrap’ intermédiaire qui se trouve entre le processus du moteur et
le serveur web. Le frontal indique quel moteur lancer, en passant cette
information au processus ‘fcgiwrap’.

 -- Variable : fcgiwrap-service-type
     Un type de service pour le mandataire FastCGI ‘fcgiwrap’.

 -- Type de données : fcgiwrap-configuration
     Type de données représentant la configuration du service
     ‘fcgiwrap’. Ce type a les paramètres suivants :
     ‘package’ (par défaut : ‘fcgiwrap’)
          Le paquet fcgiwrap à utiliser.

     ‘socket’ (par défaut : ‘tcp:127.0.0.1:9000’)
          Le socket sur lequel le processus ‘fcgiwrap’ écoute, en tant
          que chaîne de caractères. Les valeurs valides de SOCKET sont
          ‘unix:/PATH/TO/UNIX/SOCKET’, ‘tcp:DOT.TED.QU.AD:PORT’ et
          ‘tcp6:[IPV6_ADDR]:port’.

     ‘user’ (par défaut : ‘fcgiwrap’)
     ‘group’ (par défaut : ‘fcgiwrap’)
          Les noms de l’utilisateur et du groupe, en tant que chaînes de
          caractères, sous lesquels lancer le processus ‘fcgiwrap’. Le
          service ‘fastcgi’ s’assurera que si l’utilisateur demande les
          noms d’utilisateurs et de groupes ‘fcgiwrap’ l’utilisateur et
          le groupe correspondant seront présents sur le système.

          Il est possible de configurer un service web soutenu par
          FastCGI pour passer les informations d’authentification HTTP
          depuis le frontal jusqu’au moteur, et de permettre à
          ‘fcgiwrap’ dans lancer le processus de moteur avec
          l’utilisateur local correspondant. Pour activer cette
          fonctionnalité sur le moteur, lancez ‘fcgiwrap’ en tant
          qu’utilisateur et groupe ‘root’. Remarquez que cette
          fonctionnalité doit aussi être configurée sur le frontal.

PHP-FPM
.......

PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
alternative avec quelques fonctionnalités supplémentaires utiles pour
les sites de toutes tailles.

   Ces fonctionnalités comprennent :
   • La création de processus adaptative
   • Des statistiques de base (comme le mod_status d’Apache)
   • La gestion des processus avancée avec arrêt et démarrage sans
     heurts
   • La possibilité de démarrer des processus de travail avec différents
     uid/gid/chroot/environnement et différents php.ini (à la place de
     safe_mode)
   • L’enregistrement des journaux sur stdout et stderr
   • Le redémarrage d’urgence dans le cas de la destruction accidentelle
     du cache des opcodes
   • Le support des téléversements accélérés
   • Le support de « showlog »
   • Des améliorations à FastCGI, comme fastcgi_finish_request() - une
     fonction spéciale pour terminer la requête et nettoyer toutes les
     données tout en continuant à faire d’autres choses qui prennent du
     temps (conversion vidéo, gestion des stats, etc.).
   … et bien plus.

 -- Variable : php-fpm-service-type
     Un type de service pour ‘php-fpm’.

 -- Type de données : php-fpm-configuration
     Type de données pour la configuration du service php-fpm.
     ‘php’ (par défaut : ‘php’)
          Le paquet php à utiliser.
     ‘socket’ (par défaut : ‘(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")’)
          L’adresse sur laquelle accepter les requêtes FastCGI. Les
          syntaxes valides sont :
          ‘"ip.add.re.ss:port"’
               Écoute sur un socket TCP sur l’adresse spécifiée sur un
               port spécifié.
          ‘"port"’
               Écoute sur un socket TCP sur toutes les adresse sur un
               port spécifique.
          ‘"/path/to/unix/socket"’
               Écoute sur un socket unix.

     ‘user’ (par défaut : ‘php-fpm’)
          Utilisateur à qui appartiendra le processus de travail de php.
     ‘group’ (par défaut : ‘php-fpm’)
          Groupe du processus de travail.
     ‘socket-user’ (par défaut : ‘php-fpm’)
          Utilisateur qui peut parler au socket php-fpm.
     ‘socket-group’ (par défaut : ‘nginx’)
          Groupe qui peut parler au socket php-fpm.
     ‘pid-file’ (par défaut : ‘(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")’)
          Le pid de php-fpm est écrit dans ce fichier une fois que le
          service a démarré.
     ‘log-file’ (par défaut : ‘(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")’)
          Fichier de journal pour le processus maître de php-fpm.
     ‘process-manager’ (par défaut : ‘(php-fpm-dynamic-process-manager-configuration)’)
          Configuration détaillée pour le gestionnaire de processus de
          php-fpm. Il doit s’agir soit de :
          ‘<php-fpm-dynamic-process-manager-configuration>’
          ‘<php-fpm-static-process-manager-configuration> ou’
          ‘<php-fpm-on-demand-process-manager-configuration>’
     ‘display-errors’ (par défaut : ‘#f’)
          Détermine si les erreurs et les avertissements php doivent
          être envoyés aux clients et affichés dans leur navigateur.
          Cela est utile pour un développement php local, mais un risque
          pour la sécurité pour les sites publics, comme les messages
          d’erreur peuvent révéler des mots de passes et des données
          personnelles.
     ‘timezone’ (par défaut : ‘#f’)
          Spécifie le paramètre ‘php_admin_value[date.timezone]’.
     ‘workers-logfile’ (par défaut : ‘(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")’)
          Ce fichier enregistrera la sortie ‘stderr’ des processus de
          travail de php. On peut indiquer ‘#f’ pour désactiver la
          journalisation.
     ‘file’ (par défaut : ‘#f’)
          Une version alternative de la configuration complète. Vous
          pouvez utiliser la fonction ‘mixed-text-file’ ou un chemin de
          fichier absolu.
     ‘php-ini-file’ (par défaut : ‘#f’)
          Une version alternative de la configuration de php par défaut.
          Il peut s’agir de n’importe quel objet « simili-fichier »
          (*note file-like objects: G-Expressions.). Vous pouvez
          utiliser la fonction ‘mixed-text-file’ ou un chemin de fichier
          absolu.

          Pour le développement local il est utile d’indiquer un long
          délai d’attente et une limite mémoire plus importante pour les
          processus php créés. Cela se fait avec les bouts de
          configuration systèmes suivants :
               (define %local-php-ini
                 (plain-file "php.ini"
                             "memory_limit = 2G
               max_execution_time = 1800"))

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

          Consultez les principales directives de php.ini
          (https://www.php.net/manual/en/ini.core.php) pour une
          documentation complète sur les directives ‘php.ini’ possibles.

 -- Type de données : php-fpm-dynamic-process-manager-configuration
     Type de données pour le gestionnaire de processus ‘dynamic’ de
     php-fpm. Avec le gestionnaire de processus ‘dynamic’, des processus
     de travail de secours sont gardés en fonction des limites
     configurées.
     ‘max-children’ (par défaut : ‘5’)
          Nombre maximum de processus de travail.
     ‘start-servers’ (par défaut : ‘2’)
          Nombre de processus de travail au démarrage.
     ‘min-spare-servers’ (par défaut : ‘1’)
          Nombre de processus de travail de secours minimum qui doivent
          rester à disposition.
     ‘max-spare-servers’ (par défaut : ‘3’)
          Nombre maximum de processus de travail de secours qui peuvent
          rester à disposition.

 -- Type de données : php-fpm-static-process-manager-configuration
     Type de données pour le gestionnaire de processus ‘static’ de
     php-fpm. Avec le gestionnaire de processus ‘static’, un nombre
     constant de processus de travail est créé.
     ‘max-children’ (par défaut : ‘5’)
          Nombre maximum de processus de travail.

 -- Type de données : php-fpm-on-demand-process-manager-configuration
     Type de données pour le gestionnaire de processus ‘on-demand’ de
     php-fpm. Avec le gestionnaire de processus ‘on-demand’, les
     processus de travail ne sont créés que lorsque les requêtes
     arrivent.
     ‘max-children’ (par défaut : ‘5’)
          Nombre maximum de processus de travail.
     ‘process-idle-timeout’ (par défaut : ‘10’)
          La durée en secondes après laquelle un processus sans requête
          sera tué.

 -- Procédure : nginx-php-location [#:nginx-package nginx] [socket
          (string-append "/var/run/php" (version-major (package-version
          php)) "-fpm.sock")]
     Une fonction d’aide pour ajouter rapidement php à un
     ‘nginx-server-configuration’.

   Une configuration simple de services pour php ressemble à ceci :
     (services (cons* (service dhcp-client-service-type)
                      (service php-fpm-service-type)
                      (service nginx-service-type
                               (nginx-server-configuration
                                (server-name '("example.com"))
                                (root "/srv/http/")
                                (locations
                                 (list (nginx-php-location)))
                                (listen '("80"))
                                (ssl-certificate #f)
                                (ssl-certificate-key #f)))
                      %base-services))

   Le générateur d’avatar de chat est un simple service pour démontrer
l’utilisation de php-fpm dans ‘Nginx’. Il permet de générer des avatars
de chats à partir d’une graine, par exemple le hash de l’adresse de
courriel d’un utilisateur.

 -- Procédure : cat-avatar-generator-service [#:cache-dir
          "/var/cache/cat-avatar-generator"] [#:package
          cat-avatar-generator] [#:configuration
          (nginx-server-configuration)]
     Renvoie un nginx-server-configuration qui hérite de
     ‘configuration’. Il étend la configuration nginx pour ajouter un
     bloc de serveur qui sert ‘package’, une version de
     cat-avatar-generator. Pendant l’exécution, cat-avatar-generator
     pourra utiliser ‘cache-dir’ comme répertoire de cache.

   Une configuration simple de cat-avatar-generator ressemble à ceci :
     (services (cons* (cat-avatar-generator-service
                       #:configuration
                       (nginx-server-configuration
                         (server-name '("example.com"))))
                      ...
                      %base-services))

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

Le programme hpcguix-web (https://github.com/UMCUGenetics/hpcguix-web/)
est une interface web personnalisable pour naviguer dans les paquets
Guix, initialement conçue pour les utilisateurs des grappes de calcul de
haute performance (HPC).

 -- Variable : hpcguix-web-service-type
     Le type de service pour ‘hpcguix-web’.

 -- Type de données : hpcguix-web-configuration
     Type de données pour la configuration du service hpcguix-web.

     ‘specs’ (par défaut : ‘#f’)
          Soit ‘#f’, soit une gexp (*note G-Expressions::) qui spécifie
          la configuration du service hpcguix-web en tant
          qu’enregistrement ‘hpcguix-web-configuration’. Les principaux
          champs de ce type d’enregistrement sont :

          ‘title-prefix’ (par défaut : ‘"hpcguix | "’)
               Le préfixe du titre des pages.

          ‘guix-command’ (par défaut : ‘"guix"’)
               La commande ‘guix’ à utiliser dans les exemples qui
               apparaissent sur les pages HTML.

          ‘package-filter-proc’ (par défaut : ‘(const #t)’)
               Une procédure qui spécifie comment filtrer les paquets
               qui seront affichés.

          ‘package-page-extension-proc’ (par défaut : ‘(const '())’)
               Paquet d’extensions pour ‘hpcguix-web’.

          ‘menu’ (par défaut : ‘'()’)
               Entrée supplémentaire dans la page ‘menu’.

          ‘channels’ (par défaut : ‘%default-channels’)
               Liste des canaux depuis lesquels la liste des paquets est
               construite (*note Canaux::).

          ‘package-list-expiration’ (par défaut : ‘(* 12 3600)’)
               Le temps d’expiration, en secondes, après lequel la liste
               des paquets est reconstruite depuis les dernières
               instance des canaux donnés.

          Voir le dépôt hpcguix-web pour un exemple complet
          (https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm).

     ‘package’ (par défaut : ‘hpcguix-web’)
          Le paquet hpcguix-web à utiliser.

     ‘address’ (par défaut : ‘"127.0.0.1"’)
          L’adresse IP sur laquelle écouter.

     ‘port’ (par défaut : ‘5000’)
          Le numéro de port sur lequel écouter.

   Une déclaration de service hpcguix-web typique ressemble à cela :

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

     Remarque : Le service hpcguix-web met régulièrement à jour la liste
     des paquets qu’il publie en récupérant les canaux depuis Git. Pour
     cela, il doit accéder aux certificats X.509 pour qu’il puisse
     authentifier les serveurs Git quand il communique en HTTPS, et il
     suppose que ‘/etc/ssl/certs’ contient ces certificats.

     A certificate package, ‘nss-certs’, is provided by default as part
     of ‘%base-packages’. *note Certificats X.509::, for more
     information on X.509 certificates.

gmnisrv
.......

Le programme gmnisrv (https://git.sr.ht/~sircmpwn/gmnisrv) est un
serveur simple pour le protocole Gemini
(https://gemini.circumlunar.space/).

 -- Variable : gmnisrv-service-type
     C’est le type du service gmnisrv, dont la valeur devrait être un
     objet ‘gmnisrv-configuration’ comme dans cet exemple :

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

 -- Type de données : gmnisrv-configuration
     Type données qui représente la configuration de gmnisrv.

     ‘package’ (par défaut : GMNISRV)
          Objet de paquet du serveur gmnisrv.

     ‘config-file’ (par défaut : ‘%default-gmnisrv-config-file’)
          Objet simili-fichier du fichier de configuration de gmnisrv à
          utiliser. La configuration par défaut écoute sur le port 1965
          et sert les fichiers de ‘/srv/gemini’. Les certificats sont
          stockés dans ‘/var/lib/gemini/certs’. Pour plus
          d’informations, lancez ‘man gmnisrv’ et ‘man gmnisrv.ini’.

Agate
.....

Le programme Agate (gemini://qwertqwefsday.eu/agate.gmi) (page GitHub
sur HTTPS (https://github.com/mbrubeck/agate)) est un serveur simple
pour le protocole Gemini (https://gemini.circumlunar.space/) écrit en
Rust.

 -- Variable : agate-service-type
     C’est le type du service agate, dont la valeur devrait être un
     objet ‘agate-service-type’ comme dans cet exemple :

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

     The example above represents the minimal tweaking necessary to get
     Agate up and running. Specifying the path to the certificate and
     key directory is always necessary, as the Gemini protocol requires
     TLS by default.

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

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

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

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

 -- Type de données : agate-configuration
     Type de données représentant la configuration d’Agate.

     ‘package’ (par défaut : ‘agate’)
          Objet de paquet du serveur Agate.

     ‘content’ (par défaut : ‘"/srv/gemini"’)
          Le répertoire à partir duquel Agate servira ses fichiers.

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

     ‘addresses’ (default: ‘'("[::]:1965" "0.0.0.0:1965")’)
          Une liste des adresses sur lesquelles écouter.

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

     ‘languages’ (default: ‘#f’)
          Codes de langues RFC 4646 pour les documents text/gemini.
          Facultatif.

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

     ‘serve-secret?’ (par défaut : ‘#f’)
          Indiquez ‘#t’ pour servir des fichiers secrets (des fichiers
          et répertoires commençant par un point).

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

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

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

     ‘log-ip?’ (par défaut : ‘#t’)
          Indique si l’adresse IP de sortie doit être journalisée.

     ‘user’ (par défaut : ‘"agate"’)
          Propriétaire du processus ‘agate’.

     ‘group’ (par défaut : ‘"agate"’)
          Groupe du propriétaire du processus ‘agate’.

     ‘log-file’ (par défaut : ‘"/var/log/agate.log"’)
          Le fichier qui devrait contenir la sortie de journal d’Agate.

Miniflux
........

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


File: guix.fr.info,  Node: High Availability Services,  Next: Services de certificats,  Prev: Services web,  Up: Services

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

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

RabbitMQ
........

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

     Un exemple de configuration simple est donné ci-dessous.

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

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

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

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

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

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

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

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


File: guix.fr.info,  Node: Services de certificats,  Next: Services DNS,  Prev: High Availability Services,  Up: Services

11.10.22 Services de certificats
--------------------------------

Le module ‘(gnu services certbot)’ fournit un service qui récupère
automatiquement un certificat TLS valide de l’autorité de certification
Let’s Encrypt. Ces certificats peuvent ensuite être utilisés pour servir
du contenu de manière sécurisée sur HTTPS et d’autres protocoles basés
sur TLS, en sachant que le client sera capable de vérifier
l’authenticité du serveur.

   Let’s Encrypt (https://letsencrypt.org/) fournit l’outil ‘certbot’
pour automatiser le processus de certification. Cet outil génère d’abord
un clef sur le serveur de manière sécurisée. Ensuite il demande à
l’autorité de certification Let’s Encrypt de signer la clef. La CA
vérifie que la requête provient de l’hôte en question en utilisant un
protocole de défi-réponse, ce qui requiert que le serveur fournisse sa
réponse par HTTP. Si ce protocole se passe sans encombre, la CA signe la
clef et on obtient un certificat. Ce certificat est valide pour une
durée limitée et donc, pour continuer à fournir des services en TLS, le
serveur doit régulièrement demander à la CA de renouveler sa signature.

   Le service certbot automatise ce processus : la génération initiale
de la clef, la demande de certification initiale au service Let’s
Encrypt, l’intégration du protocole de défi/réponse dans le serveur web,
l’écriture du certificat sur le disque, les renouvellements périodiques
et les tâches de déploiement avec le renouvellement (p. ex. recharger
les services, copier les clefs avec d’autres permissions).

   Certbot est lancé deux fois par jour, à une minute aléatoire dans
l’heure. Il ne fera rien sauf si vos certificats doivent être renouvelés
ou sont révoqués, mais le lancer régulièrement permettra à vos services
de rester en ligne si Let’s Encrypt décide de révoquer votre certificat.

   En utilisant ce service, vous acceptez le document « ACME Subscriber
Agreement », qu’on peut trouver ici :
<https://acme-v02.api.letsencrypt.org/directory>.

 -- Variable : certbot-service-type
     Un type de service pour le client Let’s Encrypt ‘certbot’. Sa
     valeur doit être un enregistrement ‘certbot-configuration’ comme
     dans cet exemple :

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

     Voir plus bas pour des détails sur ‘certbot-configuration’.

 -- Type de données : certbot-configuration
     Type données représentant la configuration du service ‘certbot’. Ce
     type a les paramètres suivants :

     ‘package’ (par défaut : ‘certbot’)
          Le paquet certbot à utiliser.

     ‘webroot’ (par défaut : ‘/var/www’)
          Le répertoire depuis lequel servir les fichiers du
          défi/réponse de Let’s Encrypt.

     ‘certificates’ (par défaut : ‘'()’)
          Une liste de ‘certificates-configuration’ pour lesquels
          générer des certificats et demander des signatures. Chaque
          certificat a un ‘name’ et plusieurs ‘domains’.

     ‘email’ (par défaut : ‘#f’)
          Adresse de courriel facultative pour la création de compte et
          le contact de récupération de compte. Il est recommandé de
          l’indiquer car cela vous permet de recevoir des notifications
          importantes à propos de votre compte et des certificats créés.

     ‘server’ (par défaut : ‘#f’)
          URL facultative d’un serveur ACME. Indiquer ce paramètre
          remplace la valeur de certbot par défaut, qui est le serveur
          de Let’s Encrypt.

     ‘rsa-key-size’ (par défaut : ‘2048’)
          Taille de la clef RSA.

     ‘default-location’ (par défaut : voir plus bas)
          Le ‘nginx-location-configuration’ par défaut. Comme ‘certbot’
          doit pouvoir servir les défis et les réponses, il doit être
          capable de lancer un serveur web. Cela se fait en étendant le
          service web ‘nginx’ avec un ‘nginx-server-configuration’ qui
          écoute sur les DOMAINS sur le port 80 et qui a un
          ‘nginx-location-configuration’ pour le chemin ‘/.well-known/’
          utilisé par Let’s Encrypt. *Note Services web:: pour plus
          d’information sur les types de données de la configuration de
          nginx.

          Les requêtes vers d’autres URL correspondra à
          ‘default-location’, qui, s’il est présent, sera ajout é à tous
          les ‘nginx-server-configuration’.

          Par défaut, le ‘default-location’ sera une redirection de
          ‘http://DOMAIN/…’ vers ‘https://DOMAIN/…’, en vous laissant
          définir ce que vous voulez servir sur votre site en ‘https’.

          Passez ‘#f’ pour ne pas utiliser de location par défaut.

 -- Type de données : certificate-configuration
     Type de données représentant la configuration d’un certificat. Ce
     type a les paramètres suivants :

     ‘name’ (par défaut : voir plus bas)
          Ce nom est utilisé par Certbot pour ses tâches quotidiennes et
          dans les chemins de fichiers ; il n’affecte pas le contenu des
          certificats eux-mêmes. Pour voir les noms des certificats,
          lancez ‘certbot certificates’.

          Sa valeur par défaut est le premier domaine spécifié.

     ‘domains’ (par défaut : ‘'()’)
          Le premier domaine spécifié sera le CN du sujet du certificat,
          et tous les domaines seront les noms alternatifs du sujet dans
          le certificat.

     ‘challenge’ (par défaut : ‘#f’)
          Le type de défi à utiliser avec certbot. Si ‘#f’ est spécifié,
          le défi HTTP par défaut sera utilisé. Si une valeur est
          spécifiée, le greffon manuel sera utilisé par défaut (voir
          ‘authentication-hook’, ‘cleanup-hook’ et la documentation sur
          <https://certbot.eff.org/docs/using.html#hooks>), et donne à
          Let’s Encrypt la permission d’enregistrer l’adresse IP
          publique de la machine qui a fait la demande.

     ‘csr’ (par défaut : ‘#f’)
          Nom de fichier d’une Demande de Signature de Certificat (CSR)
          au format DER ou PEM. Si ‘#f’ est spécifié, cet argument ne
          sera pas passé à ‘certbot’. Si une valeur est spécifiée,
          ‘certbot’ l’utilisera pour obtenir un certificat, au lieu
          d’utiliser une CSR auto-signée. Le(s) nom(s) de domaine
          mentionné(s) dans ‘domains’ doivent être en cohérence avec
          ceux mentionné(s) dans le fichier CSR.

     ‘authentication-hook’ (par défaut : ‘#t’)
          Commande à lancer dans un shell une fois par défi de
          certificat auquel répondre. Pour cette commande, la variable
          shell ‘$CERTBOT_DOMAIN’ contiendra le domaine à authentifier,
          ‘$CERTBOT_VALIDATION’ contiendra la chaîne de validation et
          ‘$CERTBOT_TOKEN’ contiendra le nom de fichier de la ressource
          demandée pour le défi HTTP-01.

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

     ‘deploy-hook’ (par défaut : ‘#f’)
          Commande à lancer dans un shell une fois par certificat
          récupéré avec succès. Pour cette commande, la variable
          ‘$RENEWED_LINEAGE’ pointera sur le sous-répertoire live (par
          exemple, ‘"/etc/letsencrypt/live/example.com"’) contenant le
          nouveau certificat et la clef ; la variable ‘$RENEWED_DOMAINS’
          contiendra les noms de domaines séparés par des espaces (par
          exemple ‘"example.com www.example.com"’).

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

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

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

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

     ‘start-self-signed?’ (default: ‘#t’)
          Whether to generate an initial self-signed certificate during
          system activation. This option is particularly useful to allow
          ‘nginx’ to start before ‘certbot’ has run, because ‘certbot’
          relies on ‘nginx’ running to perform HTTP challenges.

   Pour chaque ‘certificate-configuration’, le certificat est sauvegardé
dans ‘/etc/certs/NAME/fullchain.pem’ et la clef est sauvegardée dans
‘/etc/certs/NAME/privkey.pem’.


File: guix.fr.info,  Node: Services DNS,  Next: Services VNC,  Prev: Services de certificats,  Up: Services

11.10.23 Services DNS
---------------------

Le module ‘(gnu services dns)’ fournit des services liés au “système de
noms de domaines” (DNS). Il fournit un service de serveur pour héberger
un serveur DNS _faisant autorité_ pour plusieurs zones, en esclave ou en
maître. Ce service utilise Knot DNS (https://www.knot-dns.cz/). Il
fournit aussi un service de cache et de renvoie DNS pour le LAN, qui
utilise dnsmasq (http://www.thekelleys.org.uk/dnsmasq/doc.html).

Service Knot
............

Voici un exemple de configuration pour un serveur faisant autorité sur
deux zone, un maître et un esclave :

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

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

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

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

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

 -- Variable : knot-service-type
     C’est le type pour le serveur DNS Knot.

     Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu’il
     peut servir plusieurs zones, c’est-à-dire des noms de domaines que
     vous achetez à un registrar. Ce serveur n’est pas un résolveur, ce
     qui signifie qu’il ne peut pas résoudre les noms pour lesquels il
     ne fait pas autorité. Ce serveur peut être configuré pour servir
     des zones comme un serveur maître ou comme un serveur esclave, en
     fonction des zones. Les zones esclaves récupèrent leurs données des
     maîtres, et seront servies comme faisant autorité. Du point de vue
     d’un résolveur, il n’y a pas de différence entre un maître et un
     esclave(1).

     Les types de données suivants sont utilisés pour configurer le
     serveur DNS Knot :

 -- Type de données : knot-key-configuration
     Type de données représentant une clef. Ce type a les paramètres
     suivants :

     ‘id’ (par défaut : ‘""’)
          Un identifiant pour d’autres champs de configuration qui se
          réfèrent à cette clef. Les ID doivent être uniques et non
          vides.

     ‘algorithm’ (par défaut : ‘#f’)
          L’algorithme à utiliser. Choisissez entre ‘#f’, ‘'hmac-md5’,
          ‘'hmac-sha1’, ‘'hmac-sha224’, ‘'hmac-sha256’, ‘'hmac-sha384’
          et ‘'hmac-sha512’.

     ‘secret’ (par défaut : ‘""’)
          La clef secrète elle-même.

 -- Type de données : knot-acl-configuration
     Type de données représentant une configuration de liste de contrôle
     d’accès (ACL). Ce type a les paramètres suivants :

     ‘id’ (par défaut : ‘""’)
          Un identifiant pour d’autres champs de configuration qui se
          réfèrent à cette clef. Les ID doivent être uniques et non
          vides.

     ‘address’ (par défaut : ‘'()’)
          Une liste ordonnée d’adresses IP, de sous-réseaux ou
          d’intervalles de réseaux représentés par des chaînes de
          caractères. La requête doit correspondre à l’une d’entre
          elles. La valeur vide signifie que l’adresse n’a pas besoin de
          correspondre.

     ‘key’ (par défaut : ‘'()’)
          Une liste ordonnées de références à des clefs représentés par
          des chaînes. La chaîne doit correspondre à un ID définie dans
          un ‘knot-key-configuration’. Aucune clef signifie qu’une clef
          n’est pas nécessaire pour correspondre à l’ACL.

     ‘action’ (par défaut : ‘'()’)
          Une liste ordonnée d’actions permises ou interdites par cet
          ACL. Les valeurs possibles sont une liste de zéro ou plus
          d’éléments entre ‘'transfer’, ‘'notify’ et ‘'update’.

     ‘deny?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, l’ACL définie des restrictions.
          Les actions listées sont interdites. Lorsque la valeur est
          fausse, les actions listées sont autorisées.

 -- Type de données : zone-entry
     Type de données représentant une entrée dans un fichier de zone. Ce
     type a les paramètres suivants :

     ‘name’ (par défaut : ‘"@"’)
          Le nom de l’enregistrement. ‘"@"’ se réfère à l’origine de la
          zone. Les noms sont relatifs à l’origine de la zone. Par
          exemple, dans la zone ‘example.org’, ‘"ns.example.org"’ se
          réfère en fait à ‘ns.example.org.example.org’. Les noms qui
          finissent par un point sont absolus, ce qui signifie que
          ‘"ns.example.org."’ se réfère bien à ‘ns.example.org’.

     ‘ttl’ (par défaut : ‘""’)
          La durée de vie (TTL) de cet enregistrement. S’il n’est pas
          indiqué, le TTL par défaut est utilisé.

     ‘class’ (par défaut : ‘"IN"’)
          La classe de l’enregistrement. Knot ne supporte actuellement
          que ‘"IN"’ et partiellement ‘"CH"’.

     ‘type’ (par défaut : ‘"A"’)
          Le type d’enregistrement. Les types usuels sont A (une adresse
          IPv4), NS (serveur de nom) et MX (serveur de courriel). Bien
          d’autres types sont définis.

     ‘data’ (par défaut : ‘""’)
          Les données contenues dans l’enregistrement. Par exemple une
          adresse IP associée à un enregistrement A, ou un nom de
          domaine associé à un enregistrement NS. Rappelez-vous que les
          noms de domaines sont relatifs à l’origine à moins qu’ils ne
          finissent par un point.

 -- Type de données : zone-file
     Type données représentant le contenu d’un fichier de zone. Ce type
     a les paramètres suivants :

     ‘entries’ (par défaut : ‘'()’)
          La liste des entrées. On s’occupe de l’enregistrement SOA,
          donc vous n’avez pas besoin de l’ajouter dans la liste des
          entrées. Cette liste devrait contenir une entrée pour votre
          serveur DNS primaire faisant autorité. En plus d’utiliser une
          liste des entrées directement, vous pouvez utiliser
          ‘define-zone-entries’ pour définir un objet contenant la liste
          des entrées plus facilement, que vous pouvez ensuite passer au
          champ ‘entries’ de ‘zone-file’.

     ‘origin’ (par défaut : ‘""’)
          Le nom de votre zone. Ce paramètre ne peut pas être vide.

     ‘ns’ (par défaut : ‘"ns"’)
          Le domaine de votre serveur DNS primaire faisant autorité. Le
          nom est relatif à l’origine, à moins qu’il finisse par un
          point. Il est nécessaire que ce serveur DNS primaire
          corresponde à un enregistrement NS dans la zone et qu’il soit
          associé à une adresse IP dans la liste des entrées.

     ‘mail’ (par défaut : ‘"hostmaster"’)
          Une adresse de courriel pour vous contacter en tant que
          propriétaire de la zone. Cela se transforme en
          ‘<mail>@<origin>’.

     ‘serial’ (par défaut : ‘1’)
          Le numéro de série de la zone. Comme c’est utilisé pour
          vérifier les changements à la fois par les esclaves et par les
          résolveurs, il est nécessaire qu’il ne décroisse _jamais_.
          Incrémentez-le toujours quand vous faites un changement sur
          votre zone.

     ‘refresh’ (par défaut : ‘(* 2 24 3600)’)
          La fréquence à laquelle les esclaves demanderont un transfert
          de zone. Cette valeur est un nombre de secondes. On peut le
          calculer avec des multiplications ou avec
          ‘(string->duration)’.

     ‘retry’ (par défaut : ‘(* 15 60)’)
          La période après laquelle un esclave essaiera de contacter son
          maître lorsqu’il échoue à le faire la première fois.

     ‘expiry’ (par défaut : ‘(* 14 24 3600)’)
          TTL par défaut des enregistrements. Les enregistrements
          existants sont considérés corrects pour au moins cette durée.
          Après cette période, les résolveurs invalideront leur cache et
          vérifieront de nouveau qu’ils existent toujours.

     ‘nx’ (par défaut : ‘3600’)
          TTL par défaut des enregistrement inexistants. Ce TTL est
          habituellement court parce que vous voulez que vous nouveaux
          domaines soient disponibles pour tout le monde le plus
          rapidement possible.

 -- Type de données : knot-remote-configuration
     Type de données représentant une configuration de serveurs
     distants. Ce type a les paramètres suivants :

     ‘id’ (par défaut : ‘""’)
          Un identifiant pour que les autres champs de configuration se
          réfèrent à ce serveur distant. les ID doivent être uniques et
          non vides.

     ‘address’ (par défaut : ‘'()’)
          Une liste ordonnée d’adresses IP de destination. Ces adresses
          sont essayées en séquence. Un port facultatif peut être donné
          avec le séparateur @. Par exemple ‘(list "1.2.3.4"
          "2.3.4.5@53")’. Le port par défaut est le 53.

     ‘via’ (par défaut : ‘'()’)
          Une liste ordonnée d’adresses IP sources. Une liste vide fera
          choisir une IP source appropriée à Knot. Un port facultatif
          peut être donné avec le séparateur @. La valeur par défaut est
          de choisir aléatoirement.

     ‘key’ (par défaut : ‘#f’)
          Une référence à une clef, c’est-à-dire une chaîne contenant
          l’identifiant d’une clef définie dans un champ
          ‘knot-key-configuration’.

 -- Type de données : knot-keystore-configuration
     Type de données représentant une base de clefs pour garder les
     clefs dnssec. Ce type a les paramètres suivants :

     ‘id’ (par défaut : ‘""’)
          L’id de cette base de clefs. Il ne doit pas être vide.

     ‘backend’ (par défaut : ‘'pem’)
          Le moteur de stockage des clefs. Cela peut être ‘'pem’ ou
          ‘'pkcs11’.

     ‘config’ (par défaut : ‘"/var/lib/knot/keys/keys"’)
          La chaine de configuration du moteur. Voici un exemple pour
          PKCS#11 : ‘"pkcs11:token=knot;pin-value=1234
          /gnu/store/.../lib/pkcs11/libsofthsm2.so"’. Pour le moteur
          pem, la chaine représente un chemin dans le système de
          fichiers.

 -- Type de données : knot-policy-configuration
     Type de données représentant une politique dnssec. Knot DNS est
     capable de signer automatiquement vos zones. Il peut soit générer
     et gérer vos clefs automatiquement ou utiliser des clefs que vous
     générez.

     Dnssec est habituellement implémenté avec deux clefs : une KSK (key
     signing key) qui est utilisé pour signer une seconde, la ZSK (zone
     signing key) qui est utilisée pour signer la zone. Pour pouvoir
     être de confiance, la KSK doit être présente dans la zone parente
     (normalement un domaine de haut niveau). Si votre registrar
     supporte dnssec, vous devrez leur envoyer le hash de votre KSK pour
     qu’il puisse ajouter un enregistrement DS dans la zone parente. Ce
     n’est pas automatique et vous devrez le faire à chaque fois que
     vous changerez votre KSK.

     La politique définie aussi la durée de vie des clefs.
     Habituellement, la ZSK peut être changée facilement et utilise des
     fonctions cryptographiques plus faibles (avec un paramètre plus
     faible) pour signer les enregistrements rapidement, donc elles sont
     changées très régulièrement. La KSK en revanche requiert une
     interaction manuelle avec le registrar, donc elle change moins
     souvent et utilise des paramètres plus robustes puisqu’elle ne
     signe qu’un seul enregistrement.

     Ce type a les paramètres suivants :

     ‘id’ (par défaut : ‘""’)
          L’id de la politique. Il ne doit pas être vide.

     ‘keystore’ (par défaut : ‘"default"’)
          Une référence à une base de clefs, c’est-à-dire une chaîne
          contenant l’identifiant d’une base de clefs définie dans un
          champ ‘knot-keystore-configuration’. L’identifiant ‘"default"’
          signifie la base par défaut (une base de données kasp
          initialisée par ce service).

     ‘manual?’ (par défaut : ‘#f’)
          Indique si la clef est gérée manuellement ou automatiquement.

     ‘single-type-signing?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, utilise le schéma de signature
          Single-Type.

     ‘algorithm’ (par défaut : ‘"ecdsap256sha256"’)
          Un algorithme de clef de signature et de signatures.

     ‘ksk-size’ (par défaut : ‘256’)
          La longueur de la KSK. Remarquez que cette valeur est correcte
          pour l’algorithme par défaut, mais ne serait pas sécurisée
          pour d’autres algorithmes.

     ‘zsk-size’ (par défaut : ‘256’)
          La longueur de la ZSK. Remarquez que cette valeur est correcte
          pour l’algorithme par défaut, mais ne serait pas sécurisée
          pour d’autres algorithmes.

     ‘dnskey-ttl’ (par défaut : ‘'default’)
          La valeur du TTL pour les enregistrements DNSKEY ajoutés au
          sommet de la zone. La valeur spéciale ‘'default’ signifie la
          même valeur que le TTL du SOA de la zone.

     ‘zsk-lifetime’ (par défaut : ‘(* 30 24 3600)’)
          La période entre la publication d’une ZSK et l’initialisation
          d’un nouveau changement.

     ‘propagation-delay’ (par défaut : ‘(* 24 3600)’)
          Un délai supplémentaire pour chaque étape du changement. Cette
          valeur devrait être assez grande pour couvrir le temps de
          propagation des données entre le serveur primaire et tous les
          secondaires.

     ‘rrsig-lifetime’ (par défaut : ‘(* 14 24 3600)’)
          Une période de validité des nouvelles signatures.

     ‘rrsig-refresh’ (par défaut : ‘(* 7 24 3600)’)
          Une période qui indique combien de temps avant l’expiration
          d’une signature elle sera rafraîchie.

     ‘nsec3?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, on utilisera NSEC3 au lien de
          NSEC.

     ‘nsec3-iterations’ (par défaut : ‘5’)
          Le nombre de fois supplémentaires que le hash est effectué.

     ‘nsec3-salt-length’ (par défaut : ‘8’)
          La longueur du champ de sel en octets, ajouté au nom du
          propriétaire avant de hasher.

     ‘nsec3-salt-lifetime’ (par défaut : ‘(* 30 24 3600)’)
          La période de validité des nouveaux champs sel.

 -- Type de données : knot-zone-configuration
     Type de données représentant la zone servie par Knot. ce type a les
     paramètres suivants :

     ‘domain’ (par défaut : ‘""’)
          Le domaine servi par cette configuration. Il ne doit pas être
          vide.

     ‘file’ (par défaut : ‘""’)
          Le fichier où la zone est sauvegardée. Ce paramètre est ignoré
          pour les zones maîtres. La valeur vide signifie l’emplacement
          par défaut qui dépend du nom de domaine.

     ‘zone’ (par défaut : ‘(zone-file)’)
          Le contenu du fichier de zone. Ce paramètre est ignoré par les
          zones esclaves. Il doit contenir un enregistrement zone-file.

     ‘master’ (par défaut : ‘'()’)
          Une liste des serveurs distants maîtres. Lorsque la liste est
          vide, cette zone est un maître. Lorsque la valeur est
          indiquée, cette zone est un esclave. C’est al liste des
          identifiants des serveurs distants.

     ‘ddns-master’ (par défaut : ‘#f’)
          Le maître principal. Lorsque la valeur est vide, la valeur par
          défaut est le premier maître de la liste des maîtres.

     ‘notify’ (par défaut : ‘'()’)
          Une liste d’identifiants de groupe de serveurs esclaves.

     ‘acl’ (par défaut : ‘'()’)
          Une liste d’identifiants d’ACL.

     ‘semantic-checks?’ (par défaut : ‘#f’)
          Lorsque la valeur est indiquée, cela ajoute plus de
          vérifications sémantiques à la zone.

     ‘zonefile-sync’ (par défaut : ‘0’)
          Le délai entre une modification en mémoire et sur le disque. 0
          signifie une synchronisation immédiate.

     ‘zonefile-load’ (par défaut : ‘#f’)
          La manière dont le contenu du fichier de zone influe sur le
          chargement de la zone. Les valeurs possibles sont :

             • ‘#f’ pour utilise la valeur par défaut de Knot,
             • ‘'none’ pour ne pas utiliser le fichier de zone du tout,
             • ‘'difference’ pour calculer les différences entre le
               contenu déjà disponible et le contenu du fichier de zone
               et les appliquer au contenu actuel de la zone,
             • ‘'difference-no-serial’ pour la même chose que
               ‘'difference’, mais en ignorant le serial du SOA du
               fichier de zone, pour que le serveur s’en charge
               automatiquement.
             • ‘'whole’ pour charger le contenu de la zone depuis le
               fichier de zone.

     ‘journal-content’ (par défaut : ‘#f’)
          La manière dont le journal est utilisé pour stocker la zone et
          ses changements. Les valeurs possibles sont ‘'none’ pour ne
          pas l’utiliser du tout, ‘'changes’ pour stocker les
          changements et ‘'all’ pour stocker le contenu. ‘#f’ ne met pas
          en place cette option et la valeur par défaut de Knot est
          utilisée.

     ‘max-journal-usage’ (par défaut : ‘#f’)
          La taille maximale du journal sur le disque. ‘#f’ ne met pas
          en place cette option et la valeur par défaut de Knot est
          utilisée.

     ‘max-journal-depth’ (par défaut : ‘#f’)
          La taille maximale de l’historique. ‘#f’ ne met pas en place
          cette option et la valeur par défaut de Knot est utilisée.

     ‘max-zone-size’ (par défaut : ‘#f’)
          La taille maximale du fichier de zone. Cette limite est prise
          en charge pour les transferts entrants et les mises à jour.
          ‘#f’ ne met pas en place cette option et la valeur par défaut
          de Knot est utilisée.

     ‘dnssec-policy’ (par défaut : ‘#f’)
          Une référence à un enregistrement ‘knot-policy-configuration’,
          ou le nom spécial ‘"default"’. Si la valeur est ‘#f’, cette
          zone n’est pas signée.

     ‘serial-policy’ (par défaut : ‘'increment’)
          Une politique entre ‘'increment’ et ‘'unixtime’.

 -- Type de données : knot-configuration
     Type de données représentant la configuration de Knot. Ce type a
     les paramètres suivants :

     ‘knot’ (par défaut : ‘knot’)
          Le paquet Knot.

     ‘run-directory’ (par défaut : ‘"/var/run/knot"’)
          Le répertoire de travail. Ce répertoire sera utilisé pour le
          fichier pid et les sockets.

     ‘includes’ (par défaut : ‘'()’)
          Une liste plate de chaînes ou d’objets simili-fichiers qui
          seront inclus en haut du fichier de configuration.

          Cela peut être utile pour gérer des secrets hors-bande. Par
          exemple, on peut stocker des clefs secrètes dans un fichier
          hors-bande qui n’est pas géré par Guix, et donc pas visible
          dans ‘/gnu/store’ — p. ex. vous pouvez stocker la
          configuration des clefs secrètes dans ‘/etc/knot/secrets.conf’
          et ajouter ce fichier à la lite ‘includes’.

          On peut générer une clé secrète tsig (pour nsupdate et les
          transferts de zones) avec la commande keymgr du paquet knot.
          Remarquez que le paquet n’est pas automatiquement installé par
          le service. L’exemple suivant montre comment générer une
          nouvelle clé tsig :

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

          Remarquez aussi que la clé générée sera nommée MYSECRET, donc
          c’est le nom qui est requis dans le champ KEY de
          l’enregistrement ‘knot-acl-configuration’ et aux autres
          endroits qui se réfèrent à cette clé.

          Cela peut aussi être utilisé pour ajouter des configurations
          qui ne sont pas prises en charge par cette interface.

     ‘listen-v4’ (par défaut : ‘"0.0.0.0"’)
          Une adresse IP sur laquelle écouter.

     ‘listen-v6’ (par défaut : ‘"::"’)
          Une adresse IP sur laquelle écouter.

     ‘listen-port’ (par défaut : ‘53’)
          Un port sur lequel écouter.

     ‘keys’ (par défaut : ‘'()’)
          La liste des knot-key-configuration utilisés par cette
          configuration.

     ‘acls’ (par défaut : ‘'()’)
          La liste des knot-acl-configuration utilisés par cette
          configuration.

     ‘remotes’ (par défaut : ‘'()’)
          La liste des knot-remote-configuration utilisés par cette
          configuration.

     ‘zones’ (par défaut : ‘'()’)
          La liste des knot-zone-configuration utilisés par cette
          configuration.

Service de résolveur Knot
.........................

 -- Variable : knot-resolver-service-type
     C’est le type du service de résolution de knot, dont la valeur
     devrait être un objet ‘knot-resolver-configuration’ comme dans cet
     exemple :

          (service knot-resolver-service-type
                   (knot-resolver-configuration
                     (kresd-config-file (plain-file "kresd.conf" "
          net.listen('192.168.0.1', 5353)
          user('knot-resolver', 'knot-resolver')
          modules = { 'hints > iterate', 'stats', 'predict' }
          cache.size = 100 * MB
          "))))

     Pour plus d’information, consultez son manuel
     (https://knot-resolver.readthedocs.iorg/en/stable/daemon.html#configurationconfig-overview.html).

 -- Type de données : knot-resolver-configuration
     Type de données représentant la configuration de knot-resolver.

     ‘package’ (par défaut : KNOT-RESOLVER)
          Objet de paquet du résolveur DNS knot.

     ‘kresd-config-file’ (par défaut : %kresd.conf)
          Objet simili-fichier du fichier de configuration de kresd à
          utiliser. Par défaut il écoutera sur ‘127.0.0.1’ et ‘::1’.

     ‘garbage-collection-interval’ (par défaut : 1000)
          Nombre de millisecondes correspondant à la périodicité avec
          laquelle ‘kres-cache-gc’ nettoie le cache.

Services Dnsmasq
................

 -- Variable : dnsmasq-service-type
     C’est le type du service dnsmasq, dont la valeur devrait être un
     objet ‘dnsmasq-configuration’ comme dans cet exemple :

          (service dnsmasq-service-type
                   (dnsmasq-configuration
                     (no-resolv? #t)
                     (servers '("192.168.1.1"))))

     ‘dnsmasq-service-type’ provides two actions:

     ‘reload’
          Send a ‘SIGHUP’ signal to ‘dnsmasq’ to clear cache and reload
          hosts files which triggers the following actions:

             • Clear the DNS cache
             • Reload ‘/etc/hosts’ and ‘/etc/ethers’
             • Reload files specified by ‘--dhcp-hostsfile’,
               ‘--dhcp-hostsdir’, ‘--dhcp-optsfile’, ‘--dhcp-optsdir’,
               ‘--addn-hosts’, or ‘--hostsdir’
             • Execute DHCP lease change scripts for all existing leases
             • Reread ‘/etc/resolv.conf’ (only if ‘--no-poll’ is
               configured).

               Remarque : The ‘SIGHUP’ signal does not trigger a reload
               of the main configuration file.

          Example usage:
               herd reload dnsmasq

     ‘stats’
          When ‘dnsmasq’ receives a ‘SIGUSR1’ signal, it writes
          statistics to the system log including:

             • Cache size and number of evicted entries
             • Cache hits, misses, and authoritative queries answered
             • For each upstream server: queries sent and errors
               received
             • TCP connection fork statistics.

          Example usage:
               herd stats dnsmasq

 -- Type de données : dnsmasq-configuration
     Type de données qui représente la configuration de dnsmasq.

     ‘package’ (par défaut : DNSMASQ)
          L’objet de paquet du serveur dnsmasq.

     ‘shepherd-provision’ (default: ‘'(dnsmasq)’)
     ‘shepherd-requirement’ (default: ‘'(user-processes networking)’)
          This option can be used to provide a list of Shepherd service
          names (symbols) provided by this service. You might want to
          change the default value if you intend to run several
          ‘dnsmasq’ instances.

          Likewise, ‘shepherd-requirement’ is a list of Shepherd service
          names (symbols) that this service will depend on.

     ‘pid-file’ (default: ‘"/run/dnsmasq.pid"’)
          Specify an alternate path for dnsmasq to record its process-id
          in.

     ‘no-hosts?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, ne pas lire les noms d’hôte dans
          /etc/hosts.

     ‘port’ (par défaut : ‘53’)
          Le port sur lequel écouter. Le mettre à zéro désactive
          complètement les réponses DNS, ce qui ne laisse que les
          fonctions DHCP et TFTP.

     ‘local-service?’ (par défaut : ‘#t’)
          Accepte les requêtes DNS seulement des hôtes dont les adresses
          sont sur le sous-réseau local, c.-à-d. sur un sous-réseau pour
          lequel une interface existe sur le serveur.

     ‘listen-addresses’ (par défaut : ‘'()’)
          Écoute sur le adresses IP données.

     ‘resolv-file’ (par défaut : ‘"/etc/resolv.conf"’)
          Le fichier où lire l’adresse IP des serveurs de noms en amont.

     ‘no-resolv?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, ne pas lire RESOLV-FILE.

     ‘forward-private-reverse-lookup?’ (par défaut : ‘#t’)
          Lorsque la valeur est fausse, toutes les requêtes inverses
          pour les intervalles d’IP privées reçoivent la réponse « le
          domaine n’existe pas » plutôt qu’être renvoyé en amont.

     ‘query-servers-in-order?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, dnsmasq demande aux serveurs dans
          le même ordre qu’ils apparaissent dans SERVERS.

     ‘servers’ (par défaut : ‘'()’)
          Spécifiez l’adresse IP des serveurs en amont directement.

     ‘servers-file’ (par défaut : ‘#f’)
          Specify file containing upstream servers. This file is re-read
          when dnsmasq receives SIGHUP. Could be either a string or a
          file-like object.

     ‘addresses’ (par défaut : ‘'()’)
          Pour chaque entrée, spécifie une adresse IP à renvoyer pour
          les hôtes des domaines donnés. Les requêtes dans les domaines
          ne sont jamais envoyés et la réponse sera toujours l’adresse
          IP spécifiée.

          C’est utile pour rediriger des hôtes localement, comme dans
          cet exemple :

               (service dnsmasq-service-type
                        (dnsmasq-configuration
                          (addresses
                            '(; Redirige vers un serveur web local.
                              "/example.org/127.0.0.1"
                              ; Redirige un sous-domaine vers une adresse IP spécifique.
                              "/subdomain.example.org/192.168.1.42"))))

          Remarquez que les règles dans ‘/etc/hosts’ prennent le pas sur
          celles-ci.

     ‘cache-size’ (par défaut : ‘150’)
          Indique la taille du cache de dnsmasq. Indiquer 0 désactive le
          cache.

     ‘negative-cache?’ (par défaut : ‘#t’)
          Lorsque la valeur est fausse, désactive le cache des réponses
          négatives.

     ‘cpe-id’ (par défaut : ‘#f’)
          Si une valeur est indiquée, ajoute un identifiant CPE
          (Customer-Premises Equipment) aux requêtes DNS qui sont
          renvoyées en amont.

     ‘tftp-enable?’ (par défaut : ‘#f’)
          Indique s’il faut activer le serveur TFTP inclus.

     ‘tftp-no-fail?’ (par défaut : ‘#f’)
          Si la valeur est vraie, dnsmasq n’échoue pas si le serveur
          TFTP ne peut pas démarrer.

     ‘tftp-single-port?’ (par défaut : ‘#f’)
          Indique s’il faut utiliser un seul port pour TFTP.

     ‘tftp-secure?’ (par défaut : ‘#f’)
          Si la valeur est vraie, seuls les fichiers appartenant à
          l’utilisateur sous lequel tourne dnsmasq sont accessibles.

          Si dnsmasq est lancé en root, des règles différentes
          s’appliquent : ‘tft-secure?’ n’a pas d’effet, mais seuls les
          fichiers qui ont le bit de lecture pour tout le monde sont
          accessibles.

     ‘tftp-max’ (par défaut : ‘#f’)
          Si une valeur est indiquée, indique le nombre maximal de
          connexions permises en parallèle.

     ‘tftp-mtu’ (par défaut : ‘#f’)
          Si une valeur est indiquée, indique le MTU pour les paquets
          TFTP.

     ‘tftp-no-blocksize?’ (par défaut : ‘#f’)
          Si la valeur est vraie, empêche que le serveur TFTP ne négocie
          la taille de bloc avec un client.

     ‘tftp-lowercase?’ (par défaut : ‘#f’)
          Indique s’il faut convertir tous les noms de fichiers dans les
          requêtes TFTP en minuscule.

     ‘tftp-port-range’ (par défaut : ‘#f’)
          Si une valeur est indiquée, fixe les ports dynamiques (un par
          client) à la zone données (‘"<début>,<fin>"’).

     ‘tftp-root’ (par défaut : ‘/var/empty,lo’)
          Cherche les fichiers à transférer avec TFTP relativement au
          répertoire donné. Lorsque la valeur est indiquée, les chemins
          TFTP qui contiennent ‘..’ sont rejeté, pour éviter que les
          client n’arrivent en dehors de la racine donnée. Les chemins
          absolus (commençant par ‘/’) sont permis, mais ils doivent
          être à l’intérieur de la racine de TFTP. Si un argument
          d’interface facultatif est donné, le répertoire n’est utilisé
          que pour les requêtes TFTP via cette interface.

     ‘tftp-unique-root’ (par défaut : ‘#f’)
          Si une valeur est indiquée, ajoute d’IP ou l’adresse
          matérielle du client TFTP en tant que composant du chemin à la
          fin de la racine TFTP. Valide uniquement si une racine TFTP
          est indiquée et que le répertoire existe. La valeur par défaut
          ajoute l’adresse IP (au format à trois points standard).

          Par exemple, si -‘-tftp-root’ est ‘/tftp’ et que le client
          ‘1.2.3.4’ demande le fichier ‘monfichier’ alors le chemin
          effectif sera ‘/tftp/1.2.3.4/monfichier’ si ‘/tftp/1.2.3.4’
          existe, ou ‘/tftp/monfichier’ sinon. Avec ‘=mac’, c’est
          l’adresse MAC qui sera ajoutée à la place, en utilisant des
          nombres en minuscule à taille fixe et séparés par des tirets,
          p. ex. : ‘01-02-03-04-aa-bb’. Remarquez que la résolution
          d’une adresse MAC n’est possible que si le client est sur le
          réseau local ou a obtenu un bail DHCP de dnsmasq.

     ‘conf-file’ (default: ‘'()’)
          File names of configuration files to use. Strings and
          file-like objects are accepted.

     ‘conf-dir’ (default: ‘#f’)
          Read all the files in the given directory as configuration
          files. Support for ‘dnsmasq’ field extensions is not
          implemented; users can use ‘computed-file’ to build a
          directory of files instead. The configuration files are loaded
          in alphabetical order of file name.

     ‘extra-options’ (par défaut : ‘'()’)
          Cette option fournit un « mécanisme de secours » pour que
          l’utilisateur·rice puisse ajouter des arguments arbitraires en
          ligne de commande à ‘dnsmasq’ comme une liste de chaînes de
          caractères.

Unbound Service
...............

 -- Variable : unbound-service-type
     This is the type of the service to run Unbound
     (https://www.unbound.net), a validating, recursive, and caching DNS
     resolver. Its value must be a ‘unbound-configuration’ object as in
     this example:

          (service unbound-service-type
                   (unbound-configuration
                    (forward-zone
                     (list
                      (unbound-zone
                       (name ".")
                       (forward-addr '("149.112.112.112#dns.quad9.net"
                                       "2620:fe::9#dns.quad9.net"))
                       (forward-tls-upstream #t))))))

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

     ‘server’ (type: unbound-server)
          General options for the Unbound server.

     ‘remote-control’ (type: unbound-remote)
          Remote control options for the daemon.

     ‘forward-zone’ (default: ‘()’) (type: list-of-unbound-zone)
          A zone for which queries should be forwarded to another
          resolver.

     ‘extra-content’ (type: maybe-string)
          Raw content to add to the configuration file.

 -- Data Type : unbound-server
     Available ‘unbound-server’ fields are:

     ‘interface’ (type: maybe-list-of-strings)
          Interfaces listened on for queries from clients.

     ‘hide-version’ (type: maybe-boolean)
          Refuse the version.server and version.bind queries.

     ‘hide-identity’ (type: maybe-boolean)
          Refuse the id.server and hostname.bind queries.

     ‘tls-cert-bundle’ (type: maybe-string)
          Certificate bundle file, used for DNS over TLS.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.

 -- Data Type : unbound-remote
     Available ‘unbound-remote’ fields are:

     ‘control-enable’ (type: maybe-boolean)
          Enable remote control.

     ‘control-interface’ (type: maybe-string)
          IP address or local socket path to listen on for remote
          control.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.

 -- Data Type : unbound-zone
     Available ‘unbound-zone’ fields are:

     ‘name’ (type : string)
          Zone name.

     ‘forward-addr’ (type: maybe-list-of-strings)
          IP address of server to forward to.

     ‘forward-tls-upstream’ (type: maybe-boolean)
          Whether the queries to this forwarder use TLS for transport.

     ‘extra-options’ (default: ‘()’) (type: alist)
          An association list of options to append.

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

   (1) NdT : Voir la conférence en Français de Stéphane Bortzmeyer pour
en apprendre plus sur le DNS :
<https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html>


File: guix.fr.info,  Node: Services VNC,  Next: Services VPN,  Prev: Services DNS,  Up: Services

11.10.24 Services VNC
---------------------

le module ‘(gnu services vnc)’ fournit les services liés à
“l’informatique virtuelle en réseau” (VNC), qui rend possible
l’utilisation locale d’applications Xorg graphiques qui tournent sur une
machine distante. Avec un gestionnaire graphique qui prend en charge le
“protocole de contrôle de gestion de l’affichage X”, comme GDM (*note
gdm::) ou LightDM (*note lightdm::), il est possible de rendre un bureau
à distance complet pour un environnement multi-utilisateur.

Xvnc
....

Xvnc est un serveur VNC qui démarre son propre serveur X. Cela signifie
qu’il peut lancer des serveurs sans affichage. Les implémentations de
Xvnc fournies par ‘tigervnc-server’ et ‘turbovnc’ se veulent rapides et
efficaces.

 -- Variable : xvnc-service-type

     The ‘xvnc-service-type’ service can be configured via the
     ‘xvnc-configuration’ record, documented below. A second virtual
     display could be made available on a remote machine via the
     following configuration:

     (service xvnc-service-type
              (xvnc-configuration (display-number 10)))

   Pour l’exemple, la commande ‘xclock’ peut ensuite être démarrée sur
la machine à distance sur l’affichage numéro 10, et elle peut être
affichée localement via la commande ‘vncviewer’ :
     # Démarre xclock sur la machine distante.
     ssh -L5910:localhost:5910 VOTRE-HÔTE -- guix shell xclock -- env DISPLAY=:10 xclock \
         --env DISPLAY=:10 xclock
     # On y accède via VNC.
     guix shell tigervnc-client -- vncviewer localhost:5910

   La configuration suivante combine XDMCP et Inetd pour permettre à
plusieurs utilisateurs ou utilisatrices d’utiliser le système à distance
et de se connecter via le gestionnaire d’affichage GDM en même temps :

     (operating-system
       [...]
       (services (cons*
                  [...]
                  (service xvnc-service-type (xvnc-configuration
                                              (display-number 5)
                                              (localhost? #f)
                                              (xdmcp? #t)
                                              (inetd? #t)))
                  (modify-services %desktop-services
                    (gdm-service-type config => (gdm-configuration
                                                 (inherit config)
                                                 (auto-suspend? #f)
                                                 (xdmcp? #t)))))))

   Vous pouvez ensuite vous connecter à distance en utilisant la
commande ‘vncviewer’ ou un client VNC compatible et démarrer une session
de bureau de votre choix :
     vncviewer hôte-distant:5905

     Attention : À moins que votre machine ne se trouve dans un
     environnement contrôlé, pour des raisons de sécurité, la
     configuration ‘localhost?’ de l’enregistrement ‘xvnc-configuration’
     devrait garder sa valeur par défaut ‘#t’ et être exposé par un
     moyen sécurisé comme la redirection de port SSH. Le port XDMCP, UDP
     177 devrait aussi être bloqué de l’extérieur par un pare-feu, car
     ce n’est pas un protocole sécurisé et peut exposer les identifiants
     en clair.

 -- Type de données : xvnc-configuration
     Les champs de ‘xvnc-configuration’ disponibles sont :

     ‘xvnc’ (par défaut : ‘tigervnc-server’) (type : simili-fichier)
          Le paquet qui fournit le binaire Xvnc.

     ‘display-number’ (par défaut : ‘0’) (type : nombre)
          Le numéro d’affichage utilisé par Xvnc. Vous devriez le
          paramétrer à un numéro non utilisé par un serveur Xorg.

     ‘geometry’ (par défaut : ‘"1024x768"’) (type : chaine)
          La taille du bureau à créer.

     ‘depth’ (par défaut : ‘24’) (type : color-depth)
          La profondeur de pixel en bits du bureau à créer . Les valeurs
          possibles sont 16, 24 et 32.

     ‘port’ (type : peut-être-port)
          Le port sur lequel écouter les connexions entrantes des
          visualiseurs. Si la valeur n’est pas spécifiée, écoute sur le
          port 5900 plus le numéro d’affichage par défaut.

     ‘ipv4?’ (par défaut : ‘#t’) (type : booléen)
          Utiliser IPv4 pour les connexions entrantes et sortantes.

     ‘ipv6?’ (par défaut : ‘#t’) (type : booléen)
          Utiliser IPv6 pour les connexions entrantes et sortantes.

     ‘password-file’ (type : peut-être-chaine)
          Le mot de passe à utiliser, si vous en voulez un. Consultez
          vncpasswd(1) pour apprendre à générer un tel fichier.

     ‘xdmcp?’ (par défaut : ‘#f’) (type : booléen)
          Demande une session au serveur XDMCP. Cela permet aux
          utilisateurs et aux utilisatrices de se connecter à une
          session de bureau depuis l’écran du gestionnaire de connexion.
          Pour un scénario à plusieurs utilisateurs et utilisatrices,
          vous devrez également activer l’option ‘inetd?’ pour que
          chaque connexion au serveur VNC soit gérée séparément, plutôt
          qu’elles soient partagées.

     ‘inetd?’ (par défaut : ‘#f’) (type : booléen)
          Utiliser un service de type Inetd, qui lance le serveur Xvnc à
          la demande.

     ‘frame-rate’ (par défaut : ‘60’) (type : entier)
          Le nombre maximum de mise à jour par seconde envoyées à chaque
          client.

     ‘security-types’ (par défaut : ‘'("None")’) (type : types-de-sécurité)
          Les schémas de sécurité autorisés à utiliser pour les
          connexions entrantes. La valeur par défaut est "None", ce qui
          est sûr étant donné que Xvnc est configuré pour authentifier
          les personnes via le gestionnaire d’affichage et seulement
          pour les connexions locales. Les valeurs acceptées sont les
          suivantes : ("None" "VncAuth" "Plain" "TLSNone" "TLSVnc"
          "TLSPlain" "X509None" "X509Vnc")

     ‘localhost?’ (par défaut : ‘#t’) (type : booléen)
          Ne permettre que les connexions de la même machine. La valeur
          est #true par défaut par sécurité, ce qui signifie que SSH ou
          d’autres manières sécurisées doivent être utilisés pour
          exposer le port distant.

     ‘log-level’ (par défaut : ‘30’) (type : niveau-de-journalisation)
          Le niveau de journalisation, un nombre entre 0 et 100, 100
          étant la sortie la plus verbeuse. Les messages de
          journalisation sont envoyés au syslog.

     ‘extra-options’ (par défaut : ‘'()’) (type : chaines)
          On peut utiliser cette option pour fournir des options Xvnc
          supplémentaires qui ne sont pas proposées par cet
          enregistrement <xvnc-configuration>.


File: guix.fr.info,  Node: Services VPN,  Next: Système de fichiers en réseau,  Prev: Services VNC,  Up: Services

11.10.25 Services VPN
---------------------

Le module ‘(gnu services vpn)’ fournit des services liés aux “réseaux
privés virtuels” (VPN).

Bitmask
.......

 -- Variable : bitmask-service-type
     Un type de service pour le client VPN Bitmask
     (https://bitmask.net). Il rend le client disponible dans le système
     et charge sa politique Polkit. Remarquez que le client attend un
     ‘polkit-agent’ actif, lancé soit par votre environnement de bureau
     soit par vous manuellement.

OpenVPN
.......

It provides a _client_ service for your machine to connect to a VPN, and
a _server_ service for your machine to host a VPN. Both
‘openvpn-client-service-type’ and ‘openvpn-server-service-type’ can be
run simultaneously.

 -- Variable : openvpn-client-service-type
     Type of the service that runs ‘openvpn’, a VPN daemon, as a client.

     The value for this service is a ‘<openvpn-client-configuration>’
     object.

 -- Variable : openvpn-server-service-type
     Type of the service that runs ‘openvpn’, a VPN daemon, as a server.

     The value for this service is a ‘<openvpn-server-configuration>’
     object.

 -- Type de données : openvpn-client-configuration
     Les champs de ‘openvpn-client-configuration’ disponibles sont :

     ‘openvpn’ (par défaut : ‘openvpn’) (type : simili-fichier)
          Le paquet OpenVPN.

     ‘pid-file’ (par défaut : ‘"/var/run/openvpn/openvpn.pid"’) (type : chaine)
          Le fichier de PID d’OpenVPN.

     ‘proto’ (par défaut : ‘udp’) (type : proto)
          Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre
          les clients et les serveurs.

     ‘dev’ (par défaut : ‘tun’) (type : dev)
          Le périphérique utilisé pour représenter la connexion VPN.

     ‘ca’ (par défaut : ‘"/etc/openvpn/ca.crt"’) (type : peut-être-chaine)
          L’autorité de certification qui sert à vérifier les
          connexions.

     ‘cert’ (par défaut : ‘"/etc/openvpn/client.crt"’) (type : peut-être-chaine)
          Le certificat de la machine sur laquelle tourne le démon. Il
          devrait être signé par l’autorité indiquée dans ‘ca’.

     ‘key’ (par défaut : ‘"/etc/openvpn/client.key"’) (type : peut-être-chaine)
          La clef de la machine sur laquelle tourne le démon. Elle doit
          être la clef dont le certificat est donné dans ‘cert’.

     ‘comp-lzo?’ (par défaut : ‘#t’) (type : booléen)
          Indique s’il faut utiliser l’algorithme de compression lzo.

     ‘persist-key?’ (par défaut : ‘#t’) (type : booléen)
          Ne pas relire les fichiers de clefs entre les SIGUSR1 et les
          –ping-restart.

     ‘persist-tun?’ (par défaut : ‘#t’) (type : booléen)
          Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer
          de scripts de démarrage/d’arrêt entre les SIGUSR1 et les
          –ping-restart.

     ‘fast-io?’ (par défaut : ‘#f’) (type : booléen)
          (Expérimental) Optimise les écritures TUN/TAP/UDP en évitant
          d’appeler poll/epoll/select avant l’opération d’écriture.

     ‘verbosity’ (par défaut : ‘3’) (type : entier)
          Niveau de verbosité.

     ‘tls-auth’ (par défaut : ‘#f’) (type : tls-auth-client)
          Ajoute une couche d’authentification HMAC supplémentaire au
          dessus du canal de contrôle TLS pour se protéger contre les
          attaques DoS.

     ‘auth-user-pass’ (type : peut-être-chaine)
          S’authentifie avec le serveur en utilisant le nom
          d’utilisateur et le mot de passe. L’option est un fichier
          contenant le nom d’utilisateur et le mot de passe sur deux
          lignes. N’utilisez pas un objet simili-fichier car il serait
          ajouté au dépôt et serait lisible pour n’importe quel
          utilisateur.

     ‘verify-key-usage?’ (par défaut : ‘#t’) (type : key-usage)
          Indique s’il faut vérifier que le certificat du serveur a
          l’extension d’utilisation.

     ‘bind?’ (par défaut : ‘#f’) (type : bind)
          Se lier à un port spécifique.

     ‘resolv-retry?’ (par défaut : ‘#t’) (type : resolv-retry)
          Réessayer de résoudre l’adresse du serveur.

     ‘remote’ (par défaut : ‘'()’) (type : liste-de-openvpn-remote)
          Une liste de serveurs distants sur lesquels se connecter.

           -- Type de données : openvpn-remote-configuration
               Les champs de ‘openvpn-remote-configuration’ disponibles
               sont :

               ‘name’ (par défaut : ‘"my-server"’) (type : chaine)
                    Nom du serveur.

               ‘port’ (par défaut : ‘1194’) (type : nombre)
                    Numéro de port sur lequel écoute le serveur.

 -- Type de données : openvpn-server-configuration
     Les champs de ‘openvpn-server-configuration’ disponibles sont :

     ‘openvpn’ (par défaut : ‘openvpn’) (type : simili-fichier)
          Le paquet OpenVPN.

     ‘pid-file’ (par défaut : ‘"/var/run/openvpn/openvpn.pid"’) (type : chaine)
          Le fichier de PID d’OpenVPN.

     ‘proto’ (par défaut : ‘udp’) (type : proto)
          Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre
          les clients et les serveurs.

     ‘dev’ (par défaut : ‘tun’) (type : dev)
          Le périphérique utilisé pour représenter la connexion VPN.

     ‘ca’ (par défaut : ‘"/etc/openvpn/ca.crt"’) (type : peut-être-chaine)
          L’autorité de certification qui sert à vérifier les
          connexions.

     ‘cert’ (par défaut : ‘"/etc/openvpn/client.crt"’) (type : peut-être-chaine)
          Le certificat de la machine sur laquelle tourne le démon. Il
          devrait être signé par l’autorité indiquée dans ‘ca’.

     ‘key’ (par défaut : ‘"/etc/openvpn/client.key"’) (type : peut-être-chaine)
          La clef de la machine sur laquelle tourne le démon. Elle doit
          être la clef dont le certificat est donné dans ‘cert’.

     ‘comp-lzo?’ (par défaut : ‘#t’) (type : booléen)
          Indique s’il faut utiliser l’algorithme de compression lzo.

     ‘persist-key?’ (par défaut : ‘#t’) (type : booléen)
          Ne pas relire les fichiers de clefs entre les SIGUSR1 et les
          –ping-restart.

     ‘persist-tun?’ (par défaut : ‘#t’) (type : booléen)
          Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer
          de scripts de démarrage/d’arrêt entre les SIGUSR1 et les
          –ping-restart.

     ‘fast-io?’ (par défaut : ‘#f’) (type : booléen)
          (Expérimental) Optimise les écritures TUN/TAP/UDP en évitant
          d’appeler poll/epoll/select avant l’opération d’écriture.

     ‘verbosity’ (par défaut : ‘3’) (type : entier)
          Niveau de verbosité.

     ‘tls-auth’ (par défaut : ‘#f’) (type : tls-auth-server)
          Ajoute une couche d’authentification HMAC supplémentaire au
          dessus du canal de contrôle TLS pour se protéger contre les
          attaques DoS.

     ‘port’ (par défaut : ‘1194’) (type : nombre)
          Spécifie le numéro de port sur lequel les serveurs écoutent.

     ‘server’ (par défaut : ‘"10.8.0.0 255.255.255.0"’) (type : ip-mask)
          Une ip et un masque de sous-réseau spécifiant le sous-réseau
          dans le réseau virtuel.

     ‘server-ipv6’ (par défaut : ‘#f’) (type : cidr6)
          Une notation CIDR pour spécifier le sous-réseau IPv6 dans le
          réseau virtuel.

     ‘dh’ (par défaut : ‘"/etc/openvpn/dh2048.pem"’) (type : chaine)
          Le fichier de paramètres Diffie-Hellman.

     ‘ifconfig-pool-persist’ (par défaut : ‘"/etc/openvpn/ipp.txt"’) (type : chaine)
          Le fichier qui enregistre les IP des clients.

     ‘redirect-gateway?’ (par défaut : ‘#f’) (type : gateway)
          Lorsque la valeur est vraie, le serveur agira comme une
          passerelle pour ses clients.

     ‘client-to-client?’ (par défaut : ‘#f’) (type : booléen)
          Lorsque la valeur est vraie, les clients sont autorisés à se
          parler entre eux dans le VPN.

     ‘keepalive’ (par défaut : ‘(10 120)’) (type : keepalive)
          Fait que des messages de ping sont envoyés régulièrement dans
          les deux sens pour que chaque côté sache quand l’autre n’est
          plus disponible. ‘keepalive’ a besoin d’une paire. Le premier
          élément est la période d’envoi du ping, et le second élément
          est le délai d’attente avant de considéré que l’autre côté
          n’est plus disponible.

     ‘max-clients’ (par défaut : ‘100’) (type : nombre)
          Le nombre maximum de clients.

     ‘status’ (par défaut : ‘"/var/run/openvpn/status"’) (type : chaine)
          Le fichier de statut. Ce fichier montre un court rapport sur
          les connexions actuelles. Il est tronqué et réécrit toutes les
          minutes.

     ‘client-config-dir’ (par défaut : ‘'()’) (type : liste-de-openvpn-ccd)
          La liste des configuration pour certains clients.

strongSwan
----------

Pour l’instant, le service ‘strongSwan’ fournit seulement une
configuration héritée des version précédentes avec des fichiers
‘ipsec.conf’ et ‘ipsec.secrets’.

 -- Variable : strongswan-service-type
     Un type de service pour configurer strongSwan pour un VPN (réseau
     privé virtuel) IPsec. Sa valeur doit être un enregistrement
     ‘strongswan-configuration’ comme dans cet exemple :

          (service strongswan-service-type
                   (strongswan-configuration
                    (ipsec-conf "/etc/ipsec.conf")
                    (ipsec-secrets "/etc/ipsec.secrets")))

 -- Type de données : strongswan-configuration
     Le type de données représentant la configuration du service
     StrongSwan.

     ‘strongswan’
          Le paquet strongSwan à utiliser pour ce service.

     ‘ipsec-conf’ (par défaut : ‘#f’)
          Le nom de fichier de votre ‘ipsec.conf’. Si différent de ‘#f’,
          alors cette valeur et ‘ipsec-secrets’ doivent toutes deux être
          des chaînes de caractères.

     ‘ipsec-secrets’ (par défaut : ‘#f’)
          Le nom de fichier de votre ‘ipsec.secrets’. Si différent de
          ‘#f’, alors cette valeur et ‘ipsec-conf’ doivent toutes deux
          être des chaînes de caractères.

Wireguard
.........

 -- Variable : wireguard-service-type
     Un type de service pour une interface de tunnel Wireguard. Sa
     valeur doit être un enregistrement ‘wireguard-configuration’ comme
     dans cet exemple :

          (service wireguard-service-type
                   (wireguard-configuration
                    (peers
                     (list
                      (wireguard-peer
                       (name "my-peer")
                       (endpoint "my.wireguard.com:51820")
                       (public-key "hzpKg9X1yqu1axN6iJp0mWf6BZGo8m1wteKwtTmDGF4=")
                       (allowed-ips '("10.0.0.2/32")))))))

 -- Type de données : wireguard-configuration
     Le type de données représentant la configuration du service
     Wireguard.

     ‘wireguard’
          Le paquet wireguard à utiliser pour ce service.

     ‘interface’ (par défaut : ‘"wg0"’)
          Le nom d’interface pour le VPN.

     ‘addresses’ (par défaut : ‘"10.0.01/32"’)
          List of strings or G-expressions which represent the IP
          addresses to be assigned to the above interface.

     ‘port’ (par défaut : ‘51820’)
          Le port sur lequel écouter les connexions entrantes.

     ‘dns’ (default: ‘'())’)
          List of strings or G-expressions which represent the DNS
          server(s) to announce to VPN clients via DHCP.

     ‘monitor-ips?’ (default: ‘#f’)
          Whether to monitor the resolved Internet addresses (IPs) of
          the endpoints of the configured peers, resetting the peer
          endpoints using an IP address that no longer correspond to
          their freshly resolved host name. Set this to ‘#t’ if one or
          more endpoints use host names provided by a dynamic DNS
          service to keep the sessions alive.

     ‘monitor-ips-interval’ (default: ‘"*/5 * * * *"’)
          This is the monitoring schedule, expressed as a string in
          traditional cron syntax or as a gexp evaluating to a Shepherd
          calendar event (*note (shepherd)Timers::).

     ‘private-key’ (par défaut : ‘"/etc/wireguard/private.key"’)
          The private key file for the interface. It is automatically
          generated if the file does not exist. If this field is ‘#f’, a
          private key is not automatically created and the path is not
          serialized to the configuration file.

     ‘bootstrap-private-key?’ (default: ‘#t’)
          Whether or not the private key should be generated
          automatically if it does not exist.

          Setting this to ‘#f’ allows one to set the private key using
          command substitution. One example shown in the ‘wg-quick(8)’
          manual is retrieving a private key using ‘password-store’.
          This can be achieved with the following code:

               (wireguard-configuration
                (private-key
                 #~(string-append "<("
                                  #$(file-append password-store "/bin/pass")
                                  ;; Wireguard replaces %i with the interface name.
                                  " WireGuard/private-keys/%i)")))

     ‘peers’ (par défaut : ‘'()’)
          Les pairs autorisés sur cette interface. C’est une liste
          d’enregistrements WIREGUARD-PEER.

     ‘pre-up’ (par défaut : ‘'()’)
          List of strings or G-expressions. These are script snippets
          which will be executed before setting up the interface.

     ‘post-up’ (par défaut : ‘'()’)
          List of strings or G-expressions. These are script snippets
          which will be executed after setting up the interface.

     ‘pre-down’ (par défaut : ‘'()’)
          List of strings or G-expressions. These are script snippets
          which will be executed before tearing down the interface.

     ‘post-down’ (par défaut : ‘'()’)
          List of strings or G-expressions. These are script snippets
          which will be executed after tearing down the interface.

     ‘shepherd-requirement’ (default: ‘'()’) (type: list-of-symbols)
          A list of symbols naming Shepherd services that this service
          will depend on.

     ‘table’ (par défaut : ‘"auto"’)
          La table de routage à laquelle les routes sont ajoutées, en
          tant que chaine. Il y a deux valeurs spéciales : ‘"off"’ qui
          désactive la création de route complètement, et ‘"auto"’ (par
          défaut) qui ajoute les routes à la table par défaut et active
          la gestion spéciale des routes par défaut.

     ‘auto-start?’ (default: ‘#t"’)
          Whether the Wireguard network should be started automatically
          by the Shepherd. If it is ‘#f’ the service has to be started
          manually with ‘herd start wireguard-$interface’ (for example:
          ‘herd start wireguard-wg0’).

 -- Type de données : wireguard-peer
     Type de données représentant un pair Wireguard attaché à une
     interface donnée.

     ‘name’
          Le nom du pair.

     ‘endpoint’ (par défaut : ‘#f’)
          Le point d’entrée facultatif du pair, comme
          ‘"demo.wireguard.com:51820"’.

     ‘public-key’
          La clé publique du pair, représentée par une chaîne en base64.

     ‘preshared-key’ (par défaut : ‘#f’)
          An optional pre-shared key file for this peer that can be
          either a string or a G-expression. The given file will not be
          autogenerated.

     ‘allowed-ips’
          Une liste d’adresses IP à partir desquelles le trafic entrant
          pour ce pair est autorisé et vers lesquelles le trafic à
          destination de ce pair est dirigé.

     ‘keep-alive’ (par défaut : ‘#f’)
          Une durée en seconde facultative. Un paquet sera régulièrement
          envoyé au serveur après cette durée. Cela aide à recevoir les
          connexions entrantes de ce pair si vous êtes derrière un NAT
          ou un pare-feu.


File: guix.fr.info,  Node: Système de fichiers en réseau,  Next: Services Samba,  Prev: Services VPN,  Up: Services

11.10.26 Système de fichiers en réseau
--------------------------------------

Le module ‘(gnu services nfs)’ fournit les services suivants, qui sont
tous utilisés pour monter et exporter des arborescences de répertoires
en “network file systems” (NFS).

   Bien qu’il soit possible d’utiliser des composants individuels qui
forment ensemble un service de système de fichiers en réseau, nous
recommandons de configurer un serveur NFS avec ‘nfs-service-type’.

Services NFS
............

Le service NFS s’occupe de paramétrer tous les services composant NFS,
les systèmes de fichiers de configuration du noyau et installe les
fichiers de configuration aux endroit attendus par NFS.

 -- Variable : nfs-service-type
     Un type de service pour un serveur NFS complet.

 -- Type de données : nfs-configuration
     Ce type de données représente la configuration d’un service NFS et
     de tous ses sous-systèmes.

     Il prend les paramètres suivants :
     ‘nfs-utils’ (par défaut : ‘nfs-utils’)
          Le paquet nfs-utils à utiliser.

     ‘nfs-versions’ (par défaut : ‘'("4.2" "4.1" "4.0")’)
          Si une liste de chaines est fournie, le démon ‘rpc.nfsd’ sera
          limité à la prise en charge des versions données du protocole
          NFS.

     ‘exports’ (par défaut : ‘'()’)
          C’est une liste de répertoires que le serveur NFS devrait
          exporter. Chaque entrée est une liste consistant en deux
          éléments : un nom de répertoire et une chaine de caractères
          contenant toutes les options. Voici un exemple dans lequel le
          répertoire ‘/export’ est servi à tous les clients en
          lecture-seule :

               (nfs-configuration
                (exports
                 '(("/export"
                    "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))

     ‘rpcmountd-port’ (par défaut : ‘#f’)
          Le port réseau que le démon ‘rpc.mountd’ devrait utiliser.

     ‘rpcstatd-port’ (par défaut : ‘#f’)
          Le port réseau que le démon ‘rpc.statd’ devrait utiliser.

     ‘rpcbind’ (par défaut : ‘rpcbind’)
          Le paquet rpcbind à utiliser.

     ‘idmap-domain’ (par défaut : ‘"localdomain"’)
          Le nom de domaine NFSv4 local.

     ‘nfsd-port’ (par défaut : ‘2049’)
          Le port réseau que le démon ‘nfsd’ devrait utiliser.

     ‘nfsd-threads’ (par défaut : ‘8’)
          Le nombre de thread à utiliser par le démon ‘nfsd’.

     ‘nfsd-tcp?’ (par défaut : ‘#t’)
          Indique si le démon ‘nfsd’ devrait écouter sur une socket TCP.

     ‘nfsd-udp?’ (par défaut : ‘#f’)
          Indique si le démon ‘nfsd’ devrait écouter sur une socket UDP.

     ‘pipefs-directory’ (par défaut : ‘"/var/lib/nfs/rpc_pipefs"’)
          Le répertoire où le système de fichier pipefs doit être monté.

     ‘debug’ (par défaut : ‘'()"’)
          Une liste des sous-systèmes pour lesquels la sortie de
          débogage est activée. C’est une liste de symboles. Ces
          symboles sont valides : ‘nfsd’, ‘nfs’, ‘rpc’, ‘idmap’, ‘statd’
          et ‘mountd’.

   Si vous n’avez pas besoin d’un service NFS complet ou préférez le
construire vous-même vous pouvez utiliser les composants individuels
décrit plus bas.

Service RPC Bind
................

Le service RPC Bind fournit un dispositif pour faire correspondre les
numéros de programmes à des adresses universelles. De nombreux services
liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
lorsqu’un service qui en dépend est démarré.

 -- Variable : rpcbind-service-type
     Un type de service pour le démon RPC portmapper.

 -- Type de données : rpcbind-configuration
     Type données représentant la configuration du service RPC Bind. Ce
     type a les paramètres suivants :
     ‘rpcbind’ (par défaut : ‘rpcbind’)
          Le paquet rpcbind à utiliser.

     ‘warm-start?’ (par défaut : ‘#t’)
          Si ce paramètre est ‘#t’, alors le démon lira un fichier
          d’état au démarrage ce qui lui fait recharger les informations
          d’états sauvegardés par une instance précédente.

Pseudo-système de fichiers Pipefs
.................................

Le système de fichiers pipefs est utilisé pour transférer des données
liées à NFS entre le noyau et les programmes en espace utilisateur.

 -- Variable : pipefs-service-type
     Un type de service pour le pseudo-système de fichiers pipefs.

 -- Type de données : pipefs-configuration
     Type de données représentant la configuration du service du
     pseudo-système de fichiers pipefs. Ce type a les paramètres
     suivants :
     ‘mount-point’ (par défaut : ‘"/var/lib/nfs/rpc_pipefs"’)
          Le répertoire dans lequel le système de fichiers est attaché.

Service de démon GSS
....................

Le démon du “système de sécurité global” (GSS) fournit une sécurité
forte pour les protocoles basés sur des RPC. Avant d’échanger des
requêtes RPC, un client RPC doit établir un contexte sécurisé.
Typiquement cela se fait avec la commande Kerberos ‘kinit’ ou
automatiquement à la connexion avec les services PAM (*note Services
Kerberos::).

 -- Variable : gss-service-type
     Un type de service pour le démon du système de sécurité global
     (GSS).

 -- Type de données : gss-configuration
     Type de données représentant la configuration du service du démon
     GSS. Ce type a les paramètres suivants :
     ‘nfs-utils’ (par défaut : ‘nfs-utils’)
          Le paquet dans lequel la commande ‘rpc.gssd’ se trouve.

     ‘pipefs-directory’ (par défaut : ‘"/var/lib/nfs/rpc_pipefs"’)
          Le répertoire où le système de fichier pipefs doit être monté.

Service de démon IDMAP
......................

Le service du démon idmap fournit une correspondance entre les ID
utilisateur et les noms d’utilisateurs. Typiquement, cela est requis
pour accéder aux systèmes de fichiers montés via NFSv4.

 -- Variable : idmap-service-type
     Un type de service pour le démon de correspondance d’identité
     (IDMAP).

 -- Type de données : idmap-configuration
     Type de données représentant la configuration du service du démon
     IDMAP. Ce type a les paramètres suivants :
     ‘nfs-utils’ (par défaut : ‘nfs-utils’)
          Le paquet dans lequel se trouve la commande ‘rpc.idmapd’.

     ‘pipefs-directory’ (par défaut : ‘"/var/lib/nfs/rpc_pipefs"’)
          Le répertoire où le système de fichier pipefs doit être monté.

     ‘domain’ (par défaut : ‘#f’)
          Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne
          de caractères ou ‘#f’. Si la valeur est ‘#f’ le démon
          utilisera le nom de domaine pleinement qualifié de l’hôte.

     ‘verbosity’ (par défaut : ‘0’)
          Le niveau de verbosité du démon.

Autofs Service
..............

The autofs service automatically mounts and unmounts filesystems. It can
mount both network and local storage, but is most often used to manage
NFS mounts.

   A typical configuration might look like:

     (operating-system
       (services
        (append
         (list
          (service nfs-service-type (nfs-configuration))
          (service autofs-service-type
                   (autofs-configuration
                    (mounts
                     (list
                      (autofs-indirect-map
                       (mount-point "/net/home")
                       (entries
                        (list
                         ;; Accessing /net/home/foo will mount
                         ;; big.network.server:/home/foo.
                         (autofs-map-entry
                          (type "nfs")
                          (device "big.network.server:/home/&")
                          (mount-point "*"))))))))))
         %base-services)))

 -- Data Type : autofs-indirect-map
     Available ‘autofs-indirect-map’ fields are:

     ‘mount-point’ (type: string)
          Where to mount the indirect map.

     ‘entries’ (default: ‘()’) (type: autofs-map-entries)
          Entries in this map.

 -- Data Type : autofs-map-entry
     Available ‘autofs-map-entry’ fields are:

     ‘type’ (default: ‘"auto"’) (type: string)
          The type of the filesystem.

     ‘device’ (type: string)
          Device or remote host to mount. May contain special character
          ‘&’, which can be referenced in the MOUNT-POINT field.

     ‘mount-point’ (type: string)
          Directory to mount this device on. Map entries come in two
          flavors: direct and indirect. Direct entries map a single
          device to a single mountpoint, while indirect entries can map
          multiple devices to multiple mountpoints. A direct entry has a
          MOUNT-POINT beginning with ‘/’, representing the absolute path
          of the directory to mount the device on. For example:

               (autofs-map-entry
                (type "ext4")
                (device "/dev/sdb1")
                (mount-point "/mnt/external-disk"))

          An indirect entry has a MOUNT-POINT not beginning with ‘/’,
          representing the subdirectory within the parent indirect map
          for this entry. Indirect maps may also use the special
          character ‘*’, which will be replaced with the value of
          special character ‘&’ in the DEVICE field of this entry. For
          example:

               (autofs-indirect-map
                (mount-point "/devices")
                (entries
                 (list
                  ;; Automount any block device r/o by ID.
                  (autofs-map-entry
                   (type "auto")
                   (mount-point "ro/uuid/*")
                   (device "/dev/disk/by-id/&")
                   (options '(ro)))
                  ;; Automount any block device by UUID.
                  (autofs-map-entry
                   (type "auto")
                   (mount-point "rw/uuid/*")
                   (device "/dev/disk/by-uuid/&")))))

     ‘options’ (default: ‘()’) (type: file-system-options)
          List of mount options. Some options are simple flags, such as
          ro, noexec, nosuid, etc. These may be expressed as strings or
          symbols. Other options also accept a value. These are
          expressed as pairs of ‘(option . value)’. ‘option’ may be a
          string or symbol, as with flags. ‘value’ may be a string,
          symbol, or number. Example: ‘(ro (errors . remount-ro)
          noexec)’

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

     ‘autofs’ (default: ‘autofs’) (type: package)
          The autofs package to use.

     ‘mounts’ (default: ‘()’) (type: autofs-mount-maps)
          Mount maps to manage. This is a list of either direct map
          entries or indirect mount maps.

     ‘timeout’ (default: ‘300’) (type: conf-integer)
          Sets the default mount timeout in seconds.

     ‘master-wait’ (default: ‘10’) (type: conf-integer)
          Sets the default maximum number of retries (actual iterations
          is half this, each is delayed by 2 seconds before retrying)
          waiting for the master map to become available if it cannot be
          read at program start. This can be longer if the map source
          itself waits for availability (such as sss).

     ‘negative-timeout’ (default: ‘60’) (type: conf-integer)
          Set the default timeout for caching failed key lookups.

     ‘mount-verbose?’ (default: ‘#f’) (type: conf-boolean)
          Use the verbose flag when spawning mount(8), and log some
          process info about the requestor and its parent.

     ‘mount-wait’ (default: ‘-1’) (type: conf-integer)
          Set the default time to wait for a response from a spawned
          mount(8) before sending it a SIGTERM. Note that we still need
          to wait for the RPC layer to timeout before the sub-process
          exits so this isn’t ideal but it is the best we can do. The
          default is to wait until mount(8) returns without
          intervention.

     ‘umount-wait’ (default: ‘12’) (type: conf-integer)
          Set the default time to wait for a response from a spawned
          umount(8) before sending it a SIGTERM. Note that we still need
          to wait for the RPC layer to timeout before the sub-process
          exits so this isn’t ideal but it is the best we can do.

     ‘browse-mode?’ (default: ‘#t’) (type: conf-boolean)
          Should maps be browsable by default?

     ‘mount-nfs-default-protocol’ (default: ‘3’) (type: conf-integer)
          Set the default protocol that mount.nfs(8) uses when
          performing a mount. Autofs needs to know the default NFS
          protocol that mount.nfs(8) uses so it can do special case
          handling for its availability probe for different NFS
          protocols. Since we can’t identify this default automatically
          we need to set it in the autofs configuration.

     ‘append-options?’ (default: ‘#t’) (type: conf-boolean)
          When #t, global options are appended to map entry options.
          When #f, map entry options replace the global options.

     ‘logging’ (type: conf-log-level)
          Default log level. May be #:none, #:verbose, or #:debug.

     ‘force-standard-program-map-env?’ (default: ‘#f’) (type: conf-boolean)
          Override the use of a prefix with standard environment
          variables when a program map is executed. Since program maps
          are run as the privileged user setting these standard
          environment variables opens automount(8) to potential user
          privilege escalation when the program map is written in a
          language that can load components from, for example, a user
          home directory.

     ‘map-hash-table-size’ (default: ‘1024’) (type: conf-integer)
          This configuration option may be used to change the number of
          hash table slots. This configuration option affects the
          overhead of searching the map entry cache for map entries when
          there are a large number of entries. It affects the number of
          entries that must be looked at to locate a map entry in the
          map entry cache. For example, the default of 1024 and a direct
          map with 8000 entries would result in each slot containing an
          average of 8 entries, which should be acceptable. However, if
          excessive CPU usage is observed during automount lookups
          increasing this option can reduce the CPU overhead
          considerably because it reduces the length of the search
          chains. Note that the number of entries in a map doesn’t
          necessarily relate to the number of entries used in the map
          entry cache. There are two distinct cases where the map hash
          table can make a significant difference, direct maps and
          indirect maps that use the "browse" option. For indirect maps
          that do not use the "browse" option entries are added to the
          map entry cache at lookup so the number of active cache
          entries, in this case, is usually much less than the number of
          entries in the map. In this last case it would be unusual for
          the map entry cache to grow large enough to warrant increasing
          the default before an event that cleans stale entries, a map
          re-read for example.

     ‘use-hostname-for-mounts?’ (default: ‘#f’) (type: conf-boolean)
          NFS mounts where the host name resolves to more than one IP
          address are probed for availability and to establish the order
          in which mounts to them should be tried. To ensure that mount
          attempts are made only to hosts that are responding and are
          tried in the order of hosts with the quickest response the IP
          address of the host needs to be used for the mount. If it is
          necessary to use the hostname given in the map entry for the
          mount regardless, then set this option to #t. Be aware that if
          this is done there is no defense against the host name
          resolving to one that isn’t responding and while the number of
          attempts at a successful mount will correspond to the number
          of addresses the host name resolves to the order will also not
          correspond to fastest responding hosts.

     ‘disable-not-found-message?’ (default: ‘#f’) (type: conf-boolean)
          The original request to add this log message needed it to be
          unconditional. That produces, IMHO, unnecessary noise in the
          log so a configuration option has been added to provide the
          ability to turn it off.

     ‘use-ignore-mount-option?’ (default: ‘#f’) (type: conf-boolean)
          An option to enable the use of autofs pseudo option "disable".
          This option is used as a hint to user space that the mount
          entry should be omitted from mount table listings. The default
          is #f to avoid unexpected changes in behaviour and so is an
          opt-in setting.

     ‘sss-master-map-wait’ (default: ‘0’) (type: conf-integer)
          Set the time to wait and retry if sssd is unable to read the
          master map at program start. Default is 0 (don’t wait) or 10
          if sss supports returning EHSTDOWN when the provider isn’t
          available. If the sss library upports returning EHOSTDOWN when
          the provider is down then this value is how long to wait
          between re‐ tries reading the master map. When reading
          dependent maps or looking up a map key this value is
          multiplied by the number of retries that would be used when
          reading the master map.

     ‘use-mount-request-log-id?’ (default: ‘#f’) (type: conf-boolean)
          Set whether to use a mount request log id so that log entries
          for specific mount requests can be easily identified in logs
          that have multiple concurrent requests.


File: guix.fr.info,  Node: Services Samba,  Next: Intégration continue,  Prev: Système de fichiers en réseau,  Up: Services

11.10.27 Services Samba
-----------------------

Le module ‘(gnu services samba)’ fournit des définitions de services
pour les services Samba ainsi que d’autres services utilitaires.
Actuellement il fournit les services suivants.

Samba
.....

Samba (https://www.samba.org) fournit des partages réseau pour les
répertoires et les imprimantes qui utilisent le protocole SMB/CIFS
souvent utilisé sous Windows. Il peut aussi se comporter comme un
contrôleur de domaine Active Directory (AD DC) pour les autres hôtes
dans un réseau hétérogène avec plusieurs types d’ordinateurs.

 -- Variable : samba-service-type

     Le type de service pour activer les services samba ‘samba’, ‘nmbd’,
     ‘smbd’ et ‘winbindd’. Par défaut ce type de service ne lance aucun
     démon Samba. Ils doivent être activés individuellement.

     voici un exemple de base qui configure un partage de fichiers Samba
     simple et anonyme (sans authentification) qui expose le répertoire
     ‘/public’.

          Astuce : Le répertoire ‘/public’ et sont contenu doivent être
          disponible en lecture-écriture pour le monde entier, donc vous
          devrez utiliser ‘chmod -R 777 /public’ dessus.

          Attention : Une telle configuration Samba ne devrait être
          utilisée que dans des environnements contrôlés et vous ne
          devriez pas partage des fichiers privés avec, car n’importe
          qui se connectant à votre réseau y aurait accès.

          (service samba-service-type (samba-configuration
                                       (enable-smbd? #t)
                                       (config-file (plain-file "smb.conf" "\
          [global]
          map to guest = Bad User
          logging = syslog@1

          [public]
          browsable = yes
          path = /public
          read only = no
          guest ok = yes
          guest only = yes\n"))))

 -- Data Type : samba-service-configuration
     Configuration record for the Samba suite.

     ‘package’ (par défaut : ‘samba’)
          Le paquet samba à utiliser.

     ‘config-file’ (par défaut : ‘#f’)
          Le fichier de configuration à utiliser. Pour comprendre sa
          syntaxe, lancez ‘man smb.conf’.

     ‘enable-samba?’ (par défaut : ‘#f’)
          Active le démon ‘samba’.

     ‘enable-smbd?’ (par défaut : ‘#f’)
          Active le démon ‘smbd’.

     ‘enable-nmbd?’ (par défaut : ‘#f’)
          Active le démon ‘nmbd’.

     ‘enable-winbindd?’ (par défaut : ‘#f’)
          Active le démon ‘winbindd’.

Démon de découverte des services web
....................................

Le WSDD (démon de découverte des services web) implémente le protocole
de découverte dynamique des services web
(http://docs.oasis-open.org/ws-dd/discovery/1.1/os/wsdd-discovery-1.1-spec-os.html)
qui permet des découvrir des hôtes sur le DNS multicast, de la même
manière que Avahi. C’est un remplaçant pour les hôtes SMB qui ont
désactivé leur SMBv1 pour des raisons de sécurité.

 -- Variable : wsdd-service-type
     Type pour le démon hôte WSD. La valeur de ce type de service est un
     enregistrement ‘wssd-configuration’. Les détails du type
     d’enregistrement ‘wsdd-configuration’ sont fournis plus bas.

 -- Type de données : wsdd-configuration
     Ce type de données représente la configuration du service wsdd.

     ‘package’ (par défaut : ‘wsdd’)
          Le paquet wsdd à utiliser.

     ‘ipv4only?’ (par défaut : ‘#f’)
          N’écoute que sur le adresses IPv4.

     ‘ipv6only’ (par défaut : ‘#f’)
          N’écoute que sur les adresses IPv6. Remarquez : activer les
          deux options n’est pas possible, car il n’y aurait aucune
          version d’IP sur laquelle écouter.

     ‘chroot’ (par défaut : ‘#f’)
          Entre dans un chroot dans un répertoire séparé pour empêcher
          l’accès à d’autres répertoires. Cela permet d’améliorer la
          sécurité en cas de vulnérabilité dans ‘wsdd’.

     ‘hop-limit’ (par défaut : ‘1’)
          Limite le niveau de sauts pour les paquets multicast. La
          valeur par défaut est 1, ce qui devrait éviter aux paquets de
          quitter le réseau local.

     ‘interface’ (par défaut : ‘'()’)
          Limite l’écoute aux interfaces listées. Par défaut wsdd
          écoutera sur toutes les interfaces. Sauf l’interface de
          rebouclage qui n’est jamais utilisée.

     ‘uuid-device’ (par défaut : ‘#f’)
          Le protocole WSD nécessite qu’un périphérique ait un UUID.
          Indiquez ce paramètre pour assigner manuellement un UUID au
          service.

     ‘domain’ (par défaut : ‘#f’)
          Notifie que cet hôte est membre d’un Active Directory.

     ‘host-name’ (par défaut : ‘#f’)
          Indique le nom d’hôte manuellement au lieu de laisser ‘wsdd’
          hériter du nom de cet hôte. Seul la partie du nom d’hôte d’un
          éventuel nom de domaine pleinement qualifié sera utilisé dans
          le cas par défaut.

     ‘preserve-case?’ (par défaut : ‘#f’)
          Par défaut ‘wsdd’ convertira le nom d’hôte dans le groupe de
          travail en majuscules. L’inverse est vrai pour les noms
          d’hôtes dans les domaines. Indiquer ce paramètre préservera la
          casse.

     ‘workgroup’ (par défaut : "WORKGROUP")
          Change le nom du groupe de travail. Par défaut ‘wsdd’ rapport
          cet hôte comme étant membre d’un groupe de travail.


File: guix.fr.info,  Node: Intégration continue,  Next: Services de gestion de l'énergie,  Prev: Services Samba,  Up: Services

11.10.28 Intégration continue
-----------------------------

Cuirass (https://guix.gnu.org/fr/cuirass/) est un outil d’intégration
continue pour Guix. On peut l’utiliser aussi bien pour le développement
que pour fournir des substituts à d’autres (*note Substituts::).

   Le module ‘(gnu services cuirass)’ fournit le service suivant.

 -- Procédure : cuirass-service-type
     Le type du service Cuirass. Sa valeur doit être un objet
     ‘cuirass-configuration’, décrit ci-dessous.

   Pour ajouter des travaux de construction, vous devez indiquer le
champ ‘specifications’ de la configuration. Par exemple, voici un
exemple qui construira tous les paquets fournis par le canal
‘my-channel’.

     (define %cuirass-specs
       #~(list (specification
                (name 'my-channel)
                (build '(channels my-channel))
                (channels
                 (cons (channel
                        (name 'my-channel)
                        (url "https://my-channel.git"))
                       %default-channels)))))

     (service cuirass-service-type
              (cuirass-configuration
               (specifications %cuirass-specs)))

   Pour construire le paquet ‘linux-libre’ défini par le canal Guix par
défaut, on peut utiliser la configuration suivante.

     (define %cuirass-specs
       #~(list (specification
                (name 'my-linux)
                (build '(packages "linux-libre")))))

     (service cuirass-service-type
              (cuirass-configuration
               (specifications %cuirass-specs)))

   Les autres possibilités de configuration, ainsi que l’enregistrement
de spécification lui-même sont décrits dans le manuel de Cuirass (*note
(cuirass)Specifications::).

   Tandis que les informations liés aux travaux de construction sont
directement dans les spécifications, les paramètres globaux pour le
processus ‘cuirass’ sont accessibles dans les autres champs de
‘cuirass-configuration’.

 -- Type de données : cuirass-configuration
     Type de données représentant la configuration de Cuirass.

     ‘cuirass’ (par défaut : ‘cuirass’)
          Le paquet Cuirass à utiliser.

     ‘log-file’ (par défaut : ‘"/var/log/cuirass.log"’)
          Emplacement du fichier de journal.

     ‘web-log-file’ (par défaut : ‘"/var/log/cuirass-web.log"’)
          Emplacement du fichier journal utilisé par l’interface web.

     ‘cache-directory’ (par défaut : ‘"/var/cache/cuirass"’)
          Emplacement du cache du dépôt.

     ‘user’ (par défaut : ‘"cuirass"’)
          Propriétaire du processus ‘cuirass’.

     ‘group’ (par défaut : ‘"cuirass"’)
          Groupe du propriétaire du processus ‘cuirass’.

     ‘interval’ (default: ‘300’)
          Number of seconds between the poll of the repositories
          followed by the Cuirass jobs, by default.

          Note that individual jobset specifications may override this
          in their ‘period’ field; the value specified here is only used
          for specifications that use the default ‘period’ value, which
          is zero.

     ‘parallel-evaluations’ (default: ‘#f’)
          Maximum number of jobset evaluations that may run
          concurrently. If ‘#f’, that number is determined based on a
          number of CPU cores, with an upper bound of 8.

     ‘ttl’ (default: ‘2592000’)
          Duration to keep build results’ GC roots alive, in seconds.

     ‘evaluation-ttl’ (default: 24 months)
          Number of seconds after which an evaluation may be deleted
          from the database.

     ‘build-expiry’ (default: 4 months)
          Duration in seconds after which pending builds are canceled.
          This helps ensure that the backlog does not grow indefinitely.

     ‘threads’ (default: ‘#f’)
     ‘web-threads’ (default: ‘#f’)
          Number of kernel threads to use for Cuirass (main process) and
          for the web interface (the ‘cuirass web’ program). The default
          value should be appropriate for most cases.

     ‘parameters’ (par défaut : ‘#f’)
          Lit les paramètres dans le fichier PARAMETERS. Les paramètres
          pris en charges sont décrits ici (*note
          (cuirass)Parameters::).

     ‘remote-server’ (par défaut : ‘#f’)
          Un enregistrement ‘cuirass-remote-server-configuration’ pour
          utiliser le mécanisme de construction distante ou ‘#f’ pour
          utiliser le mécanisme de construction par défaut.

     ‘database’ (par défaut : ‘"dbname=cuirass host=/var/run/postgresql"’)
          Utiliser DATABASE comme base de données contenant les travaux
          et les résultats des constructions passées. Comme Cuirass
          utilise PostgreSQL comme moteur de base de données, DATABASE
          doit être une chaîne de la même forme que ‘"dbname=cuirass
          host=localhost"’.

     ‘port’ (par défaut : ‘8081’)
          Numéro de port utilisé pour le serveur HTTP.

     ‘host’ (par défaut : ‘"localhost"’)
          Écoute sur l’interface réseau de HOST. La valeur par défaut
          est d’accepter les connexions depuis localhost.

     ‘specifications’ (par défaut : ‘#~'()’)
          Une gexp (*note G-Expressions::) qui s’évalue en une liste
          d’enregistrement de spécifications. L’enregistrement de
          spécification est décrit dans le manuel de Cuirass (*note
          (cuirass)Specifications::).

     ‘one-shot?’ (par défaut : ‘#f’)
          N’évaluer les spécification et construire les dérivations
          qu’une seule fois.

     ‘fallback?’ (par défaut : ‘#f’)
          Lorsque la substitution d’un binaire pré-construit échoue,
          revenir à la construction locale du paquet.

     ‘extra-options’ (par défaut : ‘'()’)
          Extra options to pass when running the ‘cuirass register’
          process.

     ‘web-extra-options’ (default: ‘'()’)
          Extra options to pass when running the ‘cuirass web’ process.

Cuirass, construction distante
..............................

Cuirass prend en charge deux mécanisme pour construire les dérivations.

   • Par le démon Guix local. C’est le mécanisme de construction par
     défaut. Une fois les constructions évaluées, elles sont envoyées au
     démon Guix local. Cuirass écoute ensuite la sortie du démon Guix
     pour détecter les divers événements de construction.

   • Par le mécanisme de construction distante. Les constructions ne
     sont pas soumises au démon Guix local. À la place, un serveur
     distant distribue les requêtes de construction aux serveurs
     connectés, en fonction des priorités de construction.

   Pour active ce mode de construction, vous devez passer un
enregistrement ‘cuirass-remote-server-configuration’ au champ
‘remote-server’ de l’enregistrement ‘cuirass-configuration’.
L’enregistrement ‘cuirass-remote-server-configuration’ est décrit plus
bas.

   Ce mode de construction passe mieux à l’échelle que celui par défaut.
C’est le mode de construction utilisé sur la ferme de construction de
GNU Guix <https://ci.guix.gnu.org>. Vous devriez l’utiliser si vous
utilisez Cuirass pour construire un grand nombre de paquets.

 -- Type de données : cuirass-remote-server-configuration
     Le type de données représentant la configuration des serveurs
     distants de Cuirass.

     ‘backend-port’ (par défaut : ‘5555’)
          Le port TCP pour communiquer avec les processus
          ‘remote-worker’ via ZMQ. Sa valeur par défaut est ‘5555’.

     ‘log-port’ (par défaut : ‘5556’)
          Le port TCP du serveur de journalisation. Sa valeur par défaut
          est ‘5556’.

     ‘publish-port’ (par défaut : ‘5557’)
          Le port TCP du serveur de publication. Sa valeur par défaut
          est ‘5557’.

     ‘log-file’ (par défaut : ‘"/var/log/cuirass-remote-server.log"’)
          Emplacement du fichier de journal.

     ‘cache’ (par défaut : ‘"/var/cache/cuirass/remote"’)
          Utiliser le répertoire CACHE pour mettre les journaux en
          cache.

     ‘log-expiry’ (default: 6 months)
          The duration in seconds after which build logs collected by
          ‘cuirass remote-worker’ may be deleted.

     ‘trigger-url’ (par défaut : ‘#f’)
          Lorsqu’un substitut a été correctement récupéré, cause la
          préparation d’un substitut sur TRIGGER-URL.

     ‘publish?’ (par défaut : ‘#t’)
          Si la valeur est fausse, ne démarre pas de serveur de
          publication et ignore l’argument ‘publish-port’. Ça peut être
          utile s’il y a déjà un serveur de publication indépendant qui
          se trouve à côté du serveur distant.

     ‘public-key’
     ‘private-key’
          Utilise les FICHIERs spécifiques comme pair de clefs utilisées
          pour signer les éléments avant de les publier.

   Au moins un serveur distant doit aussi être démarré sur une machine
du réseau local pour effectivement effectuer les constructions et
rapporter leur état.

 -- Type de données : cuirass-remote-worker-configuration
     Type de données représentant la configuration des serveurs distants
     de Cuirass.

     ‘cuirass’ (par défaut : ‘cuirass’)
          Le paquet Cuirass à utiliser.

     ‘workers’ (par défaut : ‘1’)
          Démarre WORKERS travailleurs en parallèle.

     ‘server’ (par défaut : ‘#f’)
          Ne pas utiliser Avahi pour découvrir des serveurs et se
          connecter à l’IP ‘server’ donnée à la place.

     ‘systems’ (par défaut : ‘(list (%current-system))’)
          Ne demander des constructions que pour les systèmes SYSTEMS
          donnés.

     ‘log-file’ (par défaut : ‘"/var/log/cuirass-remote-worker.log"’)
          Emplacement du fichier de journal.

     ‘publish-port’ (par défaut : ‘5558’)
          Le port TCP du serveur de publication. La valeur par défaut
          est ‘5558’.

     ‘substitute-urls’ (par défaut : ‘%default-substitute-urls’)
          La liste des URL où trouver des substituts par défaut.

     ‘public-key’
     ‘private-key’
          Utilise les FICHIERs spécifiques comme pair de clefs utilisées
          pour signer les éléments avant de les publier.

Laminar
.......

Laminar (https://laminar.ohwg.net/) est service d’intégration continue
léger et modulaire. Il n’a pas d’interface de configuration web et
utilise plutôt des fichiers de configuration et des scripts sous
contrôle de version.

   Laminar encourage l’utilisation d’outils existants comme bash et cron
au lieu de les réinventer.

 -- Variable : laminar-service-type
     Le type du service Laminar. Sa valeur doit être un objet
     ‘laminar-configuration’, décrit ci-dessous.

     Toutes les configurations ont des valeurs par défaut, une
     configuration minimale pour lancer Laminar se trouve plus bas. Par
     défaut, l’interface web est disponible sur le port 8080.

          (service laminar-service-type)

 -- Type de données : laminar-configuration
     Type données qui représente la configuration de Laminar.

     ‘laminar’ (par défaut : ‘laminar’)
          Le paquet Laminar à utiliser.

     ‘home-directory’ (par défaut : ‘"/var/lib/laminar"’)
          Le répertoire de la configuration des travaux et des
          répertoires d’exécution.

     ‘supplementary-groups’ (default: ‘()’)
          Supplementary groups for the Laminar user account.

     ‘bind-http’ (par défaut : ‘"*:8080"’)
          L’interface et le port ou la socket unix sur laquelle laminard
          écoutera les connexions entrantes sur l’interface web.

     ‘bind-rpc’ (par défaut : ‘"unix-abstract:laminar"’)
          L’interface et le port ou la socket unix sur laquelle laminard
          écoutera les commandes entrantes comme les requêtes de
          construction.

     ‘title’ (par défaut : ‘"Laminar"’)
          Le titre de la page à afficher sur l’interface web.

     ‘keep-rundirs’ (par défaut : ‘0’)
          Indiquez un entier indiquant le nombre de répertoire
          d’exécution garder par tâche. Les répertoires avec les numéros
          les plus petits seront supprimé. La valeur par défaut est 0,
          ce qui signifie que tous les répertoires d’exécution seront
          immédiatement supprimés.

     ‘archive-url’ (par défaut : ‘#f’)
          L’interface web servi par laminard utilisera cette URL pour
          former les liens vers les artefacts des travaux archivés.

     ‘base-url’ (par défaut : ‘#f’)
          URL de base à utiliser pour les liens vers laminar.

Forgejo Runner
..............

The ‘(gnu services ci)’ also provides a service for Forgejo Runner
(https://code.forgejo.org/forgejo/runner), a daemon that connects to an
instance of the Forgejo code collaboration tool (https://forgejo.org)
and runs jobs for continuous integration.

   A minimal configuration mostly with default values that can be added
to the ‘services’ field of your operating system looks like this:

     (service forgejo-runner-service-type
              (forgejo-runner-configuration
               (name "my-runner")
               (labels '("guix" "linux"))))

   This provides a ‘forgejo-runner’ Shepherd service. That service will
initially fail to start; you will have to manually “register” the runner
against the Forgejo server by running a command like:

     herd register forgejo-runner URL TOKEN

... where the arguments are as follows:

URL
     the URL of the Forgejo server—e.g., ‘https://codeberg.org’;
TOKEN
     an access token provided by the Forgejo server
     (https://forgejo.org/docs/latest/admin/runner-installation/#standard-registration).

   Once registration has succeeded, you can start the runner:

     herd enable forgejo-runner
     herd start forgejo-runner

   The runner then receives orders from the Forgejo server to execute
“actions”. Actions are commands and workflows specified by YAML files in
the ‘.forgejo/workflows’ directory of source code repositories—see the
Forgejo Action documentation
(https://forgejo.org/docs/v7.0/user/actions/) for more info.

   Note that at the moment ‘forgejo-runner-service-type’ lets you run
only one runner. Details about the configuration of this service follow.

 -- Variable : forgejo-runner-service-type
     This is the service type for Forgejo Runner. Its value must be a
     ‘forgejo-runner-configuration’ record, documented below.

 -- Data Type : forgejo-runner-configuration
     This data type represents the configuration of an instance of
     ‘forgejo-runner-service-type’. It contains the following fields:

     ‘package’ (default: ‘forgejo-runner’)
          The Forgejo Runner package to use.

     ‘name’ (default: ‘#~(gethostname)’)
          Name of the runner as will be shown in the runner management
          interface of Forgejo.

     ‘labels’ (default: ‘'("guix")’)
          List of labels
          (https://forgejo.org/docs/latest/admin/actions/#choosing-labels)
          representing the type of environment the runner provides and
          that actions may refer to.

     ‘capacity’ (default: ‘1’)
          Number of tasks to be executed concurrently.

     ‘timeout’ (default: ‘(* 3 3600)’)
          Maximum duration of a job, in seconds.

     ‘fetch-timeout’ (default: ‘5’)
          Maximum duration for fetching the job from the Forgejo server,
          in seconds.

     ‘fetch-interval’ (default: ‘2’)
          Interval (in seconds) for fetching the job from the Forgejo
          server.

     ‘report-interval’ (default: ‘1’)
          Interval (in seconds) for reporting the job status and log to
          the Forgejo server.

     ‘data-directory’ (default: ‘"/var/lib/forgejo-runner"’)
          Directory where ‘forgejo-runner’ will store persistent data
          such as its configuration and access token.

     ‘run-directory’ (default: ‘"/var/run/forgejo-runner"’)
          Directory where ‘forgejo-runner’ stores cached data.

     ‘log-file’ (default: ‘"/var/log/forgejo-runner.log"’)
          Name of the ‘forgejo-runner’ log file.


File: guix.fr.info,  Node: Services de gestion de l'énergie,  Next: Services audio,  Prev: Intégration continue,  Up: Services

11.10.29 Services de gestion de l’énergie
-----------------------------------------

Power Profiles Daemon
.....................

The ‘(gnu services pm)’ module provides a Guix service definition for
the Linux Power Profiles Daemon, which makes power profiles handling
available over D-Bus.

   The available profiles consist of the default ‘balanced’ mode, a
‘power-saver’ mode and on supported systems a ‘performance’ mode.

     Important : The ‘power-profiles-daemon’ conflicts with other power
     management tools like ‘tlp’. Using both together is not
     recommended.

 -- Variable : power-profiles-daemon-service-type
     This is the service type for the Power Profiles Daemon
     (https://gitlab.freedesktop.org/upower/power-profiles-daemon/). The
     value for this service is a ‘power-profiles-daemon-configuration’.

     To enable the Power Profiles Daemon with default configuration add
     this line to your services:

          (service power-profiles-daemon-service-type)

 -- Data Type : power-profiles-daemon-configuration
     Data type representing the configuration of
     ‘power-profiles-daemon-service-type’.

     ‘power-profiles-daemon’ (default: ‘power-profiles-daemon’) (type: file-like)
          Package object of power-profiles-daemon.

Démon TLP
.........

Le module ‘(gnu services pm)’ fournit une définition de service Guix
pour l’outil de gestion d’énergie Linux TLP.

   TLP active plusieurs modes un espace utilisateur et dans le noyau.
Contrairement à ‘upower-service’, ce n’est pas un outil passif de
surveillance, puisqu’il applique des paramètres personnalisés à chaque
fois qu’il détecte une nouvelle source d’énergie. Vous pouvez trouver
plus d’informations sur la page d’accueil de TLP
(https://linrunner.de/en/tlp/tlp.html).

 -- Variable : tlp-service-type
     Le type de service pour l’outil TLP. Les paramètres par défaut sont
     optimisés pour la durée de la batterie sur la plupart des systèmes,
     mais vous pouvez les modifier comme vous voulez en ajoutant un
     ‘tlp-configuration’ valide :
          (service tlp-service-type
                   (tlp-configuration
                    (cpu-scaling-governor-on-ac (list "performance"))
                    (sched-powersave-on-bat? #t)))

   Chaque définition de paramètre est précédée par son type ; par
exemple, ‘booléen toto’ indique que le paramètre ‘toto’ doit être
spécifié comme un booléen. Les types qui commencent par ‘peut-être-’
dénotent des paramètres qui n’apparaîtront pas dans la configuration de
TLP lorsque leur valeur est non spécifiée, ou est explicitement
initialisée à la valeur ‘%unset-value’.

   Les champs de ‘tlp-configuration’ disponibles sont :

 -- paramètre de tlp-configuration : package tlp
     Le paquet TLP.

 -- paramètre de tlp-configuration : boolean tlp-enable?
     Indiquez vrai si vous souhaitez activer TLP.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : string tlp-default-mode
     Mode par défaut lorsqu’aucune source d’énergie ne peut être
     détectée. Les possibilités sont AC et BAT.

     La valeur par défaut est ‘"AC"’.

 -- paramètre de tlp-configuration : entier-non-négatif
          disk-idle-secs-on-ac
     Nombre de secondes que le noyau Linux doit attendre après que les
     disques s’arrêtent pour se synchroniser quand il est sur secteur.

     La valeur par défaut est ‘0’.

 -- paramètre de tlp-configuration : entier-non-négatif
          disk-idle-secs-on-bat
     Comme ‘disk-idle-ac’ mais en mode batterie.

     La valeur par défaut est ‘2’.

 -- paramètre de tlp-configuration : entier-non-négatif
          max-lost-work-secs-on-ac
     Périodicité du nettoyage des pages invalidées, en secondes.

     La valeur par défaut est ‘15’.

 -- paramètre de tlp-configuration : entier-non-négatif
          max-lost-work-secs-on-bat
     Comme ‘max-lost-work-secs-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘60’.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          cpu-scaling-governor-on-ac
     Gouverneur de fréquence d’horloge sur secteur. Avec le pilote
     intel_pstate, les possibilités sont powersave et performance. Avec
     le pilote acpi-cpufreq, les possibilités sont ondemand, powersave,
     performance et conservative.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          cpu-scaling-governor-on-bat
     Comme ‘cpu-scaling-governor-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-scaling-min-freq-on-ac
     Indique la fréquence d’horloge minimale pour le gouverneur sur
     secteur.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-scaling-max-freq-on-ac
     Indique la fréquence d’horloge maximale pour le gouverneur sur
     secteur.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-scaling-min-freq-on-bat
     Indique la fréquence d’horloge minimale pour le gouverneur sur
     batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-scaling-max-freq-on-bat
     Indique la fréquence d’horloge maximale pour le gouverneur sur
     batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-min-perf-on-ac
     Limite le P-état minimum pour contrôler la dissipation de puissance
     dans le CPU, sur secteur. Les valeurs sont indiqués comme un
     pourcentage des performances disponibles.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-max-perf-on-ac
     Limite le P-état maximum pour contrôler la dissipation de puissance
     dans le CPU, sur secteur. Les valeurs sont indiqués comme un
     pourcentage des performances disponibles.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-min-perf-on-bat
     Comme ‘cpu-min-perf-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          cpu-max-perf-on-bat
     Comme ‘cpu-max-perf-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-booléen cpu-boost-on-ac?
     Active la fonctionnalité turbo boost du CPU sur secteur.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-booléen cpu-boost-on-bat?
     Comme ‘cpu-boost-on-ac?’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : boolean sched-powersave-on-ac?
     Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads
     CPU utilisés lorsque la charge est faible.

     La valeur par défaut est ‘#f’.

 -- paramètre de tlp-configuration : boolean sched-powersave-on-bat?
     Comme ‘sched-powersave-on-ac?’ mais en mode batterie.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : boolean nmi-watchdog?
     Active le chien de garde NMI du noyau Linux.

     La valeur par défaut est ‘#f’.

 -- paramètre de tlp-configuration : peut-être-chaine phc-controls
     Pour les noyaux Linux avec le correctif PHC, change le voltage du
     CPU. Une valeur serait par exemple ‘"F:V F:V F:V F:V"’.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : string energy-perf-policy-on-ac
     Indique le niveau de performance du CPU par rapport à la politique
     de gestion de l’énergie sur secteur. Les possibilités sont
     performance, normal et powersave.

     La valeur par défaut est ‘"performance"’.

 -- paramètre de tlp-configuration : string energy-perf-policy-on-bat
     Comme ‘energy-perf-policy-ac’ mais en mode batterie.

     La valeur par défaut est ‘"powersave"’.

 -- paramètre de tlp-configuration : space-separated-string-list
          disks-devices
     Périphériques de disque dur.

 -- paramètre de tlp-configuration : space-separated-string-list
          disk-apm-level-on-ac
     Niveau de gestion de l’énergie avancé des disques durs.

 -- paramètre de tlp-configuration : space-separated-string-list
          disk-apm-level-on-bat
     Comme ‘disk-apm-bat’ mais en mode batterie.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          disk-spindown-timeout-on-ac
     Délai d’attente pour arrêter de faire tourner les disques. Une
     valeur doit être spécifiée pour chaque disque dur déclaré.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          disk-spindown-timeout-on-bat
     Comme ‘disk-spindown-timeout-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          disk-iosched
     Sélectionne l’ordonnanceur d’entrées-sorties pour le disque. Une
     valeur doit être spécifiée pour chaque disque déclaré. Les
     possibilités sont par exemple cfq, deadline et noop.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : string sata-linkpwr-on-ac
     Niveau de gestion de l’énergie des lien SATA aggressive (ALPM). Les
     possibilités sont min_power, medium_power et max_performance.

     La valeur par défaut est ‘"max_performance"’.

 -- paramètre de tlp-configuration : string sata-linkpwr-on-bat
     Comme ‘sata-linkpwr-ac’ mais en mode batterie.

     La valeur par défaut est ‘"min_power"’.

 -- paramètre de tlp-configuration : peut-être-chaine
          sata-linkpwr-blacklist
     Exclu les périphériques SATA spécifiés de la gestion de l’énergie
     des liens.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-booléen-on-off
          ahci-runtime-pm-on-ac?
     Active la gestion de l’énergie à l’exécution pour les contrôleurs
     AHCI et les disques, sur secteur.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-booléen-on-off
          ahci-runtime-pm-on-bat?
     Comme ‘ahci-runtime-pm-on-ac’ mais en mode batterie.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : entier-non-négatif
          ahci-runtime-pm-timeout
     Secondes d’inactivités avant de suspendre les disques.

     La valeur par défaut est ‘15’.

 -- paramètre de tlp-configuration : string pcie-aspm-on-ac
     Niveau de gestion de l’énergie des états actifs de PCI Express. Les
     possibilités sont default, performance et powersave.

     La valeur par défaut est ‘"performance"’.

 -- paramètre de tlp-configuration : string pcie-aspm-on-bat
     Comme ‘pcie-aspm-ac’ mais en mode batterie.

     La valeur par défaut est ‘"powersave"’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          start-charge-thresh-bat0
     Pourcentage à partir duquel la batterie 0 doit commencer à charger.
     Seulement pris en charge sur les ordinateurs portables.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          stop-charge-thresh-bat0
     Pourcentage à partir duquel la batterie 0 devrait arrêter de
     charger. Seulement pris en charge sur les ordinateurs portables.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          start-charge-thresh-bat1
     Pourcentage à partir duquel la batterie 1 devrait commencer à
     charger. Seulement pris en charge sur les ordinateurs portables.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-entier-non-négatif
          stop-charge-thresh-bat1
     Pourcentage à partir duquel la batterie 1 devrait arrêter de
     charger. Seulement pris en charge sur les ordinateurs portables.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : string radeon-power-profile-on-ac
     Niveau de vitesse de l’horloge des cartes graphiques Radeon. Les
     possibilités sont low, mid, high, auto et default.

     La valeur par défaut est ‘"high"’.

 -- paramètre de tlp-configuration : string radeon-power-profile-on-bat
     Comme ‘radeon-power-ac’ mais en mode batterie.

     La valeur par défaut est ‘"low"’.

 -- paramètre de tlp-configuration : string radeon-dpm-state-on-ac
     Méthode de gestion de l’énergie dynamique de Radeon (DPM). Les
     possibilités sont battery et performance.

     La valeur par défaut est ‘"performance"’.

 -- paramètre de tlp-configuration : string radeon-dpm-state-on-bat
     Comme ‘radeon-dpm-state-ac’ mais en mode batterie.

     La valeur par défaut est ‘"battery"’.

 -- paramètre de tlp-configuration : string radeon-dpm-perf-level-on-ac
     Niveau de performance de DPM. Les possibilités sont auto, low et
     high.

     La valeur par défaut est ‘"auto"’.

 -- paramètre de tlp-configuration : string radeon-dpm-perf-level-on-bat
     Comme ‘radeon-dpm-perf-ac’ mais en mode batterie.

     La valeur par défaut est ‘"auto"’.

 -- paramètre de tlp-configuration : on-off-boolean wifi-pwr-on-ac?
     Mode de gestion de l’énergie wifi.

     La valeur par défaut est ‘#f’.

 -- paramètre de tlp-configuration : on-off-boolean wifi-pwr-on-bat?
     Comme ‘wifi-power-ac?’ mais en mode batterie.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : y-n-boolean wol-disable?
     Désactive wake on LAN.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : entier-non-négatif
          sound-power-save-on-ac
     Durée d’attente en secondes avant d’activer la gestion de l’énergie
     audio sur les périphériques Intel HDA et AC97. La valeur 0
     désactive la gestion de l’énergie.

     La valeur par défaut est ‘0’.

 -- paramètre de tlp-configuration : entier-non-négatif
          sound-power-save-on-bat
     Comme ‘sound-powersave-ac’ mais en mode batterie.

     La valeur par défaut est ‘1’.

 -- paramètre de tlp-configuration : y-n-boolean
          sound-power-save-controller?
     Désactive le contrôleur en mode de gestion de l’énergie sur les
     périphériques Intel HDA.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : boolean bay-poweroff-on-bat?
     Active le périphérique optique AltraBay/MediaBay en mode batterie.
     Le périphérique peut être de nouveau alimenté en lâchant (et en
     réinsérant) le levier d’éjection ou en appuyant sur le bouton
     d’éjection sur les modèles plus récents.

     La valeur par défaut est ‘#f’.

 -- paramètre de tlp-configuration : string bay-device
     Nom du périphérique optique à éteindre.

     La valeur par défaut est ‘"sr0"’.

 -- paramètre de tlp-configuration : string runtime-pm-on-ac
     Gestion de l’énergie à l’exécution sur les bus PCI(e). Les
     possibilités sont on et auto.

     La valeur par défaut est ‘"on"’.

 -- paramètre de tlp-configuration : string runtime-pm-on-bat
     Comme ‘runtime-pm-ac’ mais en mode batterie.

     La valeur par défaut est ‘"auto"’.

 -- paramètre de tlp-configuration : boolean runtime-pm-all?
     Gestion de l’énergie à l’exécution pour tous les bus PCI(e), sauf
     ceux en liste noire.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration :
          peut-être-liste-de-chaines-séparées-par-des-espaces
          runtime-pm-blacklist
     Exclue les adresses des périphériques PCI(e) spécifiés de la
     gestion de l’énergie à l’exécution.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : space-separated-string-list
          runtime-pm-driver-blacklist
     Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de
     la gestion de l’énergie à l’exécution.

 -- paramètre de tlp-configuration : boolean usb-autosuspend?
     Active la fonctionnalité de mise en veille automatique de l’USB.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : peut-être-chaine usb-blacklist
     Exclue les périphériques spécifiés de la mise en veille automatique
     de l’USB.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : boolean usb-blacklist-wwan?
     Exclue les périphériques WWAN de la mise en veille automatique de
     l’USB.

     La valeur par défaut est ‘#t’.

 -- paramètre de tlp-configuration : peut-être-chaine usb-whitelist
     Inclue les périphériques spécifiés dans la mise en veille
     automatique de l’USB, même s’ils sont déjà exclus par le pilote ou
     via ‘usb-blacklist-wwan?’.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : peut-être-booléen
          usb-autosuspend-disable-on-shutdown?
     Active la mise en veille de l’USB avant l’arrêt.

     La valeur par défaut est ‘disabled’.

 -- paramètre de tlp-configuration : boolean
          restore-device-state-on-startup?
     Restaure l’état des périphériques radio (bluetooth, wifi, wwan) du
     dernier arrêt au démarrage du système.

     La valeur par défaut est ‘#f’.

 -- tlp-configuration parameter : string cpu-energy-perf-policy-on-ac
     Set CPU energy/performance policy when on AC mode. Possible values,
     in order of increasing power saving, are performance,
     balance_performance, default, balance_power and power.

 -- tlp-configuration parameter : string cpu-energy-perf-policy-on-bat
     Set CPU energy/performance policy when on BAT mode. Possible
     values, in order of increasing power saving, are performance,
     balance_performance, default, balance_power and power.

Démon Thermald
..............

Le module ‘(gnu services pm)’ fournit une interface pour thermald, un
service de gestion de l’horloge CPU qui aide à éviter la surchauffe.

 -- Variable : thermald-service-type
     C’est le type de service pour thermald
     (https://01.org/linux-thermal-daemon/), le démon de température de
     Linux, responsable du contrôle de l’état thermique des processeurs
     et d’éviter la surchauffe.

 -- Type de données : thermald-configuration
     Type de données représentant la configuration de
     ‘thermald-service-type’.

     ‘adptative?’ (par défaut : ‘#f’)
          Utilise les tables adaptatives DPTF (Dynamic Power and Thermal
          Framework) si elles sont présentes.

     ‘ignore-cpuid-check?’ (par défaut : ‘#f’)
          Ignore la vérification des modèles CPU supportés avec cpuid.

     ‘thermald’ (par défaut : THERMALD)
          Objet du paquet de thermald.

          PowerTOP
          ........

          The ‘(gnu services pm)’ module also provides a service
          definition for PowerTOP (https://01.org/powertop/), a power
          consumption analysis and tuning tool. When started, it tunes
          Linux kernel settings to reduce power consumption.

           -- Variable : powertop-service-type
               The service type for PowerTOP. No configuration is
               necessary. When the service starts, it executes ‘powertop
               --auto-tune’.

                    (service powertop-service-type)

          Available ‘powertop-configuration’ fields are:

           -- powertop-configuration parameter : package powertop
               The PowerTOP package. Defaults to ‘powertop’ in the ‘(gnu
               packages linux)’ module

   The ‘(gnu services power)’ module provides a service definition for
apcupsd (http://www.apcupsd.org/), a utility to interact with APC (APC
by Schneider Electric or formerly American Power Conversion Corporation)
UPS (Uninterruptible Power Supply) devices. Apcupsd also works with some
OEM (Original Equipment Manufacturer)-branded products manufactured by
APC.

 -- Variable : apcupsd-service-type
     The service type for apcupsd. For USB UPSes no configuration is
     necessary, however tweaking some fields to better suit your needs
     might be desirable. The defaults are taken from the upstream
     configuration and they are not very conservative (for example, the
     default ‘battery-level’ of 5% may be considered too low by some).

     The default event handlers do send emails, read more in *note
     apcupsd-event-handlers::.

          (service apcupsd-service-type)

 -- Data Type : apcupsd-configuration

     Available ‘apcupsd-configuration’ fields are:

     ‘apcupsd’ (default: ‘apcupsd’) (type: package)
          The ‘apcupsd’ package to use.

     ‘shepherd-service-name’ (default: ‘apcupsd’) (type: symbol)
          The name of the shepherd service. You can add the service
          multiple times with different names to manage multiple UPSes.

     ‘auto-start?’ (default: ‘#t’) (type: boolean)
          Should the shepherd service auto-start?

     ‘pid-file’ (default: ‘"/var/run/apcupsd.pid"’) (type: string)
          The file name of the pid file.

     ‘debug-level’ (default: ‘0’) (type: integer)
          The logging verbosity. Bigger number means more logs. The
          source code uses up to ‘300’ as debug level value, so a value
          of ‘999’ seems reasonable to enable all the logs.

     ‘run-dir’ (default: ‘"/var/run/apcupsd"’) (type: string)
          The directory containing runtime information. You need to
          change this if you desire to run multiple instances of the
          daemon.

     ‘name’ (type: maybe-string)
          Use this to give your UPS a name in log files and such. This
          is particularly useful if you have multiple UPSes. This does
          not set the EEPROM. It should be 8 characters or less.

     ‘cable’ (default: ‘usb’) (type: enum-cable)
          The type of a cable connecting the UPS to your computer.
          Possible generic choices are ‘'simple’, ‘'smart’, ‘'ether’ and
          ‘'usb’.

          Alternatively, a specific cable model number may be used:
          ‘'940-0119A’, ‘'940-0127A’, ‘'940-0128A’, ‘'940-0020B’,
          ‘'940-0020C’, ‘'940-0023A’, ‘'940-0024B’, ‘'940-0024C’,
          ‘'940-1524C’, ‘'940-0024G’, ‘'940-0095A’, ‘'940-0095B’,
          ‘'940-0095C’, ‘'940-0625A’, ‘'M-04-02-2000’.

     ‘type’ (default: ‘usb’) (type: enum-type)
          The type of the UPS you have.

          ‘apcsmart’
               Newer serial character device, appropriate for SmartUPS
               models using a serial cable (not an USB).

          ‘usb’
               Most new UPSes are an USB.

          ‘net’
               Network link to a master apcupsd through apcupsd’s
               Network Information Server. This is used if the UPS
               powering your computer is connected to a different
               computer for monitoring.

          ‘snmp’
               SNMP network link to an SNMP-enabled UPS device.

          ‘netsnmp’
               Same as the SNMP above but requires use of the net-snmp
               library. Unless you have a specific need for this old
               driver, you should use the ‘'snmp’ instead.

          ‘dumb’
               An old serial character device for use with
               simple-signaling UPSes.

          ‘pcnet’
               A PowerChute Network Shutdown protocol which can be used
               as an alternative to an SNMP with the AP9617 family of
               smart slot cards.

          ‘modbus’
               A serial device for use with newest SmartUPS models
               supporting the MODBUS protocol.

     ‘device’ (default: ‘""’) (type: string)
          For USB UPSes, usually you want to set this to an empty string
          (the default). For other UPS types, you must specify an
          appropriate port or address.

          ‘apcsmart’
               Set to the appropriate ‘/dev/tty**’ device.

          ‘usb’
               A null string setting enables auto-detection, which is
               the best choice for most installations.

          ‘net’
               Set to ‘HOSTNAME:PORT’.

          ‘snmp’
               Set to ‘HOSTNAME:PORT:VENDOR:COMMUNITY’. The HOSTNAME is
               the ip address or hostname of the UPS on the network. The
               VENDOR can be can be "APC" or "APC_NOTRAP". "APC_NOTRAP"
               will disable SNMP trap catching; you usually want "APC".
               The PORT is usually 161. The COMMUNITY is usually
               "private".

          ‘netsnmp’
               Same as the ‘'snmp’.

          ‘dumb’
               Set to the appropriate ‘/dev/tty**’ device.

          ‘pcnet’
               Set to ‘IPADDR:USERNAME:PASSPHRASE:PORT’. The IPADDR is
               the IP address of the UPS management card. The USERNAME
               and the PASSPHRASE are the credentials for which the card
               has been configured. The PORT is the port number on which
               to listen for messages from the UPS, normally 3052. If
               this parameter is empty or missing, the default of 3052
               will be used.

          ‘modbus’
               Set to the appropriate ‘/dev/tty**’ device. You can also
               leave it empty for MODBUS over USB or set to the serial
               number of the UPS.

     ‘poll-time’ (default: ‘60’) (type: integer)
          The interval (in seconds) at which apcupsd polls the UPS for
          status. This setting applies both to directly-attached UPSes
          (apcsmart, usb, dumb) and networked UPSes (net, snmp).
          Lowering this setting will improve the apcupsd’s
          responsiveness to certain events at the cost of higher CPU
          utilization.

     ‘on-batery-delay’ (default: ‘6’) (type: integer)
          The time in seconds from when a power failure is detected
          until we react to it with an onbattery event. The ‘'powerout’
          event will be triggered immediately when a power failure is
          detected. However, the ‘'onbattery’ event will be trigger only
          after this delay.

     ‘battery-level’ (default: ‘5’) (type: integer)
          If during a power failure, the remaining battery percentage
          (as reported by the UPS) is below or equal to this value, the
          apcupsd will initiate a system shutdown.

               Remarque : ‘battery-level’, ‘remaining-minutes’, and
               ‘timeout’ work in a conjunction, so the first that occurs
               will cause the initiation of a shutdown.

     ‘remaining-minutes’ (default: ‘3’) (type: integer)
          If during a power failure, the remaining runtime in minutes
          (as calculated internally by the UPS) is below or equal to
          this value, apcupsd will initiate a system shutdown.

               Remarque : ‘battery-level’, ‘remaining-minutes’, and
               ‘timeout’ work in a conjunction, so the first that occurs
               will cause the initiation of a shutdown.

     ‘timeout’ (default: ‘0’) (type: integer)
          If during a power failure, the UPS has run on batteries for
          this many seconds or longer, apcupsd will initiate a system
          shutdown. The value of 0 disables this timer.

               Remarque : ‘battery-level’, ‘remaining-minutes’, and
               ‘timeout’ work in a conjunction, so the first that occurs
               will cause the initiation of a shutdown.

     ‘annoy-interval’ (default: ‘300’) (type: integer)
          The time in seconds between annoying users (via the ‘'annoyme’
          event) to sign off prior to system shutdown. 0 disables.

     ‘annoy-delay’ (default: ‘60’) (type: integer)
          The initial delay in seconds after a power failure before
          warning users to get off the system.

     ‘no-logon’ (default: ‘disable’) (type: enum-no-logon)
          The condition which determines when users are prevented from
          logging in during a power failure.

     ‘kill-delay’ (default: ‘0’) (type: integer)
          If this is non-zero, the apcupsd will continue running after a
          shutdown has been requested, and after the specified time in
          seconds attempt to kill the power. This is for use on systems
          where apcupsd cannot regain control after a shutdown.

     ‘net-server’ (default: ‘#f’) (type: boolean)
          If enabled, a network information server process will be
          started.

     ‘net-server-ip’ (default: ‘"127.0.0.1"’) (type: string)
          An IP address on which the NIS server will listen for incoming
          connections.

     ‘net-server-port’ (default: ‘3551’) (type: integer)
          An IP port on which the NIS server will listen for incoming
          connections.

     ‘net-server-events-file’ (type: maybe-string)
          If you want the last few EVENTS to be available over the
          network by the network information server, you must set this
          to a file name.

     ‘net-server-events-file-max-size’ (default: ‘10’) (type: integer)
          The maximum size of the events file in kilobytes.

     ‘class’ (default: ‘standalone’) (type: enum-class)
          Normally standalone unless you share an UPS using an APC
          ShareUPS card.

     ‘mode’ (default: ‘disable’) (type: enum-mode)
          Normally disable unless you share an UPS using an APC ShareUPS
          card.

     ‘stat-time’ (default: ‘0’) (type: integer)
          The time interval in seconds between writing the status file,
          0 disables.

     ‘log-stats’ (default: ‘#f’) (type: boolean)
          Also write the stats as a logs. This generates a lot of
          output.

     ‘data-time’ (default: ‘0’) (type: integer)
          The time interval in seconds between writing the data records
          to the log file, 0 disables.

     ‘facility’ (type: maybe-string)
          The logging facility for the syslog.

     ‘event-handlers’ (type: apcupsd-event-handlers)
          Handlers for events produced by apcupsd.

 -- Data Type : apcupsd-event-handlers

     For a description of the events please refer to ‘man 8 apccontrol’.

     Each handler shall be a gexp. It is spliced into the control script
     for the daemon. In addition to the standard Guile programming
     environment, the following procedures and variables are also
     available:

     ‘conf’
          Variable containing the file name of the configuration file.

     ‘powerfail-file’
          Variable containing the file name of the powerfail file.

     ‘cmd’
          The event currently being handled.

     ‘name’
          The name of the UPS as specified in the configuration file.

     ‘connected?’
          Is ‘#t’ if ‘apcupsd’ is connected to the UPS via a serial port
          (or a USB port). In most configurations, this will be the
          case. In the case of a Slave machine where apcupsd is not
          directly connected to the UPS, this value will be ‘#f’.

     ‘powered?’
          Is ‘#t’ if the computer on which ‘apcupsd’ is running is
          powered by the UPS and ‘#f’ if not. At the moment, this value
          is unimplemented and always ‘#f’.

     ‘(err FMT ARGS...)’
          Wrapper around ‘format’ outputting to ‘(current-error-port)’.

     ‘(wall FMT ARGS...)’
          Wrapper around ‘format’ outputting via ‘wall’.

     ‘(apcupsd ARGS...)’
          Call ‘apcupsd’ while passing the correct configuration file
          and all the arguments.

     ‘(mail-to-root SUBJECT BODY)’
          Send an email to the local administrator. This procedure
          assumes the ‘sendmail’ is located at
          ‘/run/privileged/bin/sendmail’ (as would be the case with
          ‘opensmtpd-service-type’).

     Available ‘apcupsd-event-handlers’ fields are:

     ‘modules’ (type: gexp)
          Additional modules to import into the generated handler
          script.

     ‘killpower’ (type: gexp)
          The handler for the killpower event.

     ‘commfailure’ (type: gexp)
          The handler for the commfailure event.

     ‘commok’ (type: gexp)
          The handler for the commfailure event.

     ‘powerout’ (type: gexp)
          The handler for the powerout event.

     ‘onbattery’ (type: gexp)
          The handler for the onbattery event.

     ‘offbattery’ (type: gexp)
          The handler for the offbattery event.

     ‘mainsback’ (type: gexp)
          The handler for the mainsback event.

     ‘failing’ (type: gexp)
          The handler for the failing event.

     ‘timeout’ (type: gexp)
          The handler for the timeout event.

     ‘loadlimit’ (type: gexp)
          The handler for the loadlimit event.

     ‘runlimit’ (type: gexp)
          The handler for the runlimit event.

     ‘doreboot’ (type: gexp)
          The handler for the doreboot event.

     ‘doshutdown’ (type: gexp)
          The handler for the doshutdown event.

     ‘annoyme’ (type: gexp)
          The handler for the annoyme event.

     ‘emergency’ (type: gexp)
          The handler for the emergency event.

     ‘changeme’ (type: gexp)
          The handler for the changeme event.

     ‘remotedown’ (type: gexp)
          The handler for the remotedown event.

     ‘startselftest’ (type: gexp)
          The handler for the startselftest event.

     ‘endselftest’ (type: gexp)
          The handler for the endselftest event.

     ‘battdetach’ (type: gexp)
          The handler for the battdetach event.

     ‘battattach’ (type: gexp)
          The handler for the battattach event.


File: guix.fr.info,  Node: Services audio,  Next: Services de virtualisation,  Prev: Services de gestion de l'énergie,  Up: Services

11.10.30 Services audio
-----------------------

Le module ‘(gnu services audio)’ fournit un service qui lance MPD (le
démon de lecture de musique).

Music Player Daemon
...................

Le démon de lecture de musique (MPD) est un service qui joue de la
musique tout en étant contrôlé depuis la machine locale ou à travers le
réseau par divers clients.

   The following example shows the simplest configuration to locally
expose, via PulseAudio, a music collection kept at ‘/srv/music’, with
‘mpd’ running as the default ‘mpd’ user. This user will spawn its own
PulseAudio daemon, which may compete for the sound card access with that
of your own user. In this configuration, you may have to stop the
playback of your user audio applications to hear MPD’s output and
vice-versa.

     (service mpd-service-type
              (mpd-configuration
               (music-directory "/srv/music")))

     Important : The music directory must be readable to the MPD user,
     by default, ‘mpd’. Permission problems will be reported via
     ‘Permission denied’ errors in the MPD logs, which appear in
     ‘/var/log/messages’ by default.

   Most MPD clients will trigger a database update upon connecting, but
you can also use the ‘update’ action do to so:

     herd update mpd

   All the MPD configuration fields are documented below, and a more
complex example follows.

 -- Variable : mpd-service-type
     Le type de service pour ‘mpd’

 -- Type de données : mpd-configuration
     Available ‘mpd-configuration’ fields are:

     ‘package’ (default: ‘mpd’) (type: file-like)
          The MPD package.

     ‘user’ (type: user-account)
          L’utilisateur qui lance mpd.

     ‘group’ (type: user-group)
          The group to run mpd as.

          The default ‘%mpd-group’ is a system group with name “mpd”.

     ‘shepherd-requirement’ (default: ‘'()’) (type: list-of-symbols)
          A list of symbols naming Shepherd services that this service
          will depend on.

     ‘environment-variables’ (default: ‘'("PULSE_CLIENTCONFIG=/etc/pulse/client.conf" "PULSE_CONFIG=/etc/pulse/daemon.conf")’) (type: list-of-strings)
          A list of strings specifying environment variables.

     ‘log-file’ (type: maybe-string)
          The location of the log file. Unless specified, logs are sent
          to the local syslog daemon. Alternatively, a log file name can
          be specified, for example ‘/var/log/mpd.log’.

     ‘log-level’ (type: maybe-string)
          Suppress any messages below this threshold. The available
          values, in decreasing order of verbosity, are: ‘verbose’,
          ‘info’, ‘notice’, ‘warning’ and ‘error’.

     ‘music-directory’ (type: maybe-string)
          Le répertoire à scanner pour trouver les fichiers de musique.

     ‘music-dir’ (type: maybe-string)
          Le répertoire à scanner pour trouver les fichiers de musique.

     ‘playlist-directory’ (type: maybe-string)
          Le répertoire où stocker les playlists.

     ‘playlist-dir’ (type: maybe-string)
          Le répertoire où stocker les playlists.

     ‘db-file’ (type: maybe-string)
          The location of the music database. When left unspecified,
          ‘~/.cache/db’ is used.

     ‘state-file’ (type: maybe-string)
          Emplacement du fichier qui stocke l’état actuel de MPD.

     ‘sticker-file’ (type: maybe-string)
          Emplacement de la base de données de stickers.

     ‘default-port’ (default: ‘6600’) (type: maybe-port)
          The default port to run mpd on.

     ‘endpoints’ (type: maybe-list-of-strings)
          The addresses that mpd will bind to. A port different from
          DEFAULT-PORT may be specified, e.g. ‘localhost:6602’ and IPv6
          addresses must be enclosed in square brackets when a different
          port is used. To use a Unix domain socket, an absolute path or
          a path starting with ‘~’ can be specified here.

     ‘address’ (type: maybe-string)
          L’adresse sur laquelle se lie mpd. Pour utiliser un socket
          Unix domain, un chemin absolu peut être spécifié ici.

     ‘database’ (type: maybe-mpd-plugin)
          MPD database plugin configuration.

     ‘partitions’ (default: ‘'()’) (type: list-of-mpd-partition)
          List of MPD "partitions".

     ‘neighbors’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD neighbor plugin configurations.

     ‘inputs’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD input plugin configurations.

     ‘archive-plugins’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD archive plugin configurations.

     ‘auto-update?’ (type: maybe-boolean)
          Whether to automatically update the music database when files
          are changed in the MUSIC-DIRECTORY.

     ‘input-cache-size’ (type: maybe-string)
          MPD input cache size.

     ‘decoders’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD decoder plugin configurations.

     ‘resampler’ (type: maybe-mpd-plugin)
          MPD resampler plugin configuration.

     ‘filters’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD filter plugin configurations.

     ‘outputs’ (type: list-of-mpd-plugin-or-output)
          Les sorties audio que MPD peut utiliser. Par défaut c’est une
          seule sortie audio utilisant pulseaudio.

     ‘playlist-plugins’ (default: ‘'()’) (type: list-of-mpd-plugin)
          List of MPD playlist plugin configurations.

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

 -- Data Type : mpd-plugin
     Data type representing a ‘mpd’ plugin.

     ‘plugin’ (type: maybe-string)
          Plugin name.

     ‘name’ (type: maybe-string)
          Name.

     ‘enabled?’ (type: maybe-boolean)
          Whether the plugin is enabled/disabled.

     ‘extra-options’ (default: ‘'()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the plugin configuration. See MPD plugin
          reference (https://mpd.readthedocs.io/en/latest/plugins.html)
          for available options.

 -- Data Type : mpd-partition
     Data type representing a ‘mpd’ partition.

     ‘name’ (type : string)
          Partition name.

     ‘extra-options’ (default: ‘'()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the partition configuration. See Configuring
          Partitions
          (https://mpd.readthedocs.io/en/latest/user.html#configuring-partitions)
          for available options.

 -- Type de données : mpd-output
     Available ‘mpd-output’ fields are:

     ‘name’ (default: ‘"MPD"’) (type: string)
          Le nom de la sortie audio.

     ‘type’ (default: ‘"pulse"’) (type: string)
          Le type de sortie audio.

     ‘enabled?’ (par défaut : ‘#t’) (type : booléen)
          Spécifie si cette sortie audio est activée au démarrage de
          MPD. Par défaut, toutes les sorties audio sont activées. C’est
          le paramètre par défaut s’il n’y a pas de fichier d’état ;
          avec un fichier d’état, l’état précédent est restauré.

     ‘format’ (type: maybe-string)
          Force a specific audio format on output. See Global Audio
          Format
          (https://mpd.readthedocs.io/en/latest/user.html#audio-output-format)
          for a more detailed description.

     ‘tags?’ (default: ‘#t’) (type: boolean)
          Si la valeur est ‘#f’, MPD n’enverra pas les tags à cette
          sortie. C’est utile uniquement pour les greffons de sortie qui
          peuvent recevoir les tags, comme le greffon de sortie ‘httpd’.

     ‘always-on?’ (default: ‘#f’) (type: boolean)
          If set to ‘#t’, then MPD attempts to keep this audio output
          always open. This may be useful for streaming servers, when
          you don’t want to disconnect all listeners even when playback
          is accidentally stopped.

     ‘mixer-type’ (type: maybe-string)
          This field accepts a string that specifies which mixer should
          be used for this audio output: the ‘hardware’ mixer, the
          ‘software’ mixer, the ‘null’ mixer (allows setting the volume,
          but with no effect; this can be used as a trick to implement
          an external mixer External Mixer) or no mixer (‘none’). When
          left unspecified, a ‘hardware’ mixer is used for devices that
          support it.

     ‘replay-gain-handler’ (type: maybe-string)
          This field accepts a string that specifies how Replay Gain
          (https://mpd.readthedocs.io/en/latest/user.html#replay-gain)
          is to be applied. ‘software’ uses an internal software volume
          control, ‘mixer’ uses the configured (hardware) mixer control
          and ‘none’ disables replay gain on this audio output.

     ‘extra-options’ (default: ‘'()’) (type: alist)
          An association list of option symbols/strings to string values
          to be appended to the audio output configuration.

   The following example shows a configuration of ‘mpd’ that configures
some of its plugins and provides a HTTP audio streaming output.

     (service mpd-service-type
              (mpd-configuration
                (outputs
                  (list (mpd-output
                          (name "streaming")
                          (type "httpd")
                          (mixer-type 'null)
                          (extra-options
                           `((encoder . "vorbis")
                             (port    . "8080"))))))
                (decoders
                  (list (mpd-plugin
                          (plugin "mikmod")
                          (enabled? #f))
                        (mpd-plugin
                          (plugin "openmpt")
                          (enabled? #t)
                          (extra-options `((repeat-count . -1)
                                           (interpolation-filter . 1))))))
                (resampler (mpd-plugin
                             (plugin "libsamplerate")
                             (extra-options `((type . 0)))))))

myMPD
.....

myMPD (https://jcorporation.github.io/myMPD/) is a web server frontend
for MPD that provides a mobile friendly web client for MPD.

   The following example shows a myMPD instance listening on port 80,
with album cover caching disabled.

     (service mympd-service-type
              (mympd-configuration
               (port 80)
               (covercache-ttl 0)))

 -- Variable : mympd-service-type
     The service type for ‘mympd’.

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

     ‘package’ (default: ‘mympd’) (type: file-like)
          The package object of the myMPD server.

     ‘shepherd-requirement’ (default: ‘'()’) (type: list-of-symbols)
          This is a list of symbols naming Shepherd services that this
          service will depend on.

     ‘user’ (default: ‘%mympd-user’) (type: user-account)
          Owner of the ‘mympd’ process.

          The default ‘%mympd-user’ is a system user with the name
          “mympd”, who is a part of the group GROUP (see below).

     ‘group’ (default: ‘%mympd-group’) (type: user-group)
          Owner group of the ‘mympd’ process.

          The default ‘%mympd-group’ is a system group with name
          “mympd”.
     ‘work-directory’ (default: ‘"/var/lib/mympd"’) (type: string)
          Where myMPD will store its data.

     ‘cache-directory’ (default: ‘"/var/cache/mympd"’) (type: string)
          Where myMPD will store its cache.

     ‘acl’ (type: maybe-mympd-ip-acl)
          ACL to access the myMPD webserver.

     ‘covercache-ttl’ (default: ‘31’) (type: maybe-integer)
          How long to keep cached covers, ‘0’ disables cover caching.

     ‘http?’ (default: ‘#t’) (type: boolean)
          HTTP support.

     ‘host’ (default: ‘"[::]"’) (type: string)
          Host name to listen on.

     ‘port’ (default: ‘80’) (type: maybe-port)
          HTTP port to listen on.

     ‘log-level’ (default: ‘5’) (type: integer)
          How much detail to include in logs, possible values: ‘0’ to
          ‘7’.

     ‘log-to’ (type: maybe-string)
          Where to send logs. Unless specified, the service logs to the
          local syslog service under the ‘daemon’ facility.
          Alternatively, a log file name can be specified, for example
          ‘/var/log/mympd.log’.

     ‘lualibs’ (default: ‘"all"’) (type: maybe-string)
          See
          <https://jcorporation.github.io/myMPD/scripting/#lua-standard-libraries>.

     ‘uri’ (type: maybe-string)
          Override URI to myMPD. See
          <https://github.com/jcorporation/myMPD/issues/950>.

     ‘script-acl’ (default: ‘(mympd-ip-acl (allow '("127.0.0.1")))’) (type: maybe-mympd-ip-acl)
          ACL to access the myMPD script backend.

     ‘ssl?’ (default: ‘#f’) (type: boolean)
          SSL/TLS support.

     ‘ssl-port’ (default: ‘443’) (type: maybe-port)
          Port to listen for HTTPS.

     ‘ssl-cert’ (type: maybe-string)
          Path to PEM encoded X.509 SSL/TLS certificate (public key).

     ‘ssl-key’ (type: maybe-string)
          Path to PEM encoded SSL/TLS private key.

     ‘pin-hash’ (type: maybe-string)
          SHA-256 hashed pin used by myMPD to control settings access by
          prompting a pin from the user.

     ‘save-caches?’ (type: maybe-boolean)
          Whether to preserve caches between service restarts.

 -- Data Type : mympd-ip-acl
     Available ‘mympd-ip-acl’ fields are:

     ‘allow’ (default: ‘'()’) (type: list-of-strings)
          Allowed IP addresses.

     ‘deny’ (default: ‘'()’) (type: list-of-strings)
          Disallowed IP addresses.


File: guix.fr.info,  Node: Services de virtualisation,  Next: Services de contrôle de version,  Prev: Services audio,  Up: Services

11.10.31 Services de virtualisation
-----------------------------------

Le module ‘(gnu services virtualization)’ fournit des services pour les
démons libvirt et virtlog, ainsi que d’autres services liés à la
virtualisation.

Démon libvirt
.............

‘libvirtd’ is the server side daemon component of the libvirt
virtualization management system. This daemon runs on host servers and
performs required management tasks for virtualized guests. To connect to
the libvirt daemon as an unprivileged user, it must be added to the
‘libvirt’ group, as shown in the example below.

 -- Variable : libvirt-service-type
     C’est le type du démon libvirt (https://libvirt.org). Sa valeur
     doit être un ‘libvirt-configuration’.

          (users (cons (user-account
                        (name "user")
                        (group "users")
                        (supplementary-groups '("libvirt"
                                                "audio" "video" "wheel")))
                       %base-user-accounts))
          (service libvirt-service-type
                   (libvirt-configuration
                    (tls-port "16555")))

 -- Data Type : libvirt-configuration
     Les champs de ‘libvirt-configuration’ disponibles sont :

     ‘libvirt’ (default: ‘libvirt’) (type: file-like)
          Paquet libvirt.

     ‘qemu’ (default: ‘qemu’) (type: file-like)
          Le paquet QEMU à utiliser.

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

     ‘requirement’ (default: ‘'()’) (type: list-of-symbols)
          Shepherd services dependencies to the provisioned Shepherd
          service.

     ‘firmwares’ (default: ‘(ovmf-x86-64)’) (type: list-of-file-likes)
          List of UEFI/BIOS firmware packages to make available. Each
          firmware package should contain a
          ‘share/qemu/firmware/NAME.json’ QEMU firmware metadata file.

     ‘listen-tls?’ (default: ‘#t’) (type: boolean)
          Indique s’il faut écouter des connexions TLS sécurisées sur le
          port TCP/IP public. Vous devez remplir le champ ‘listen’ pour
          que cela ait un effet. Il est nécessaire de mettre en place
          une CA et de créer un certificat serveur avant d’utiliser
          cette fonctionnalité.

     ‘listen-tcp?’ (default: ‘#f’) (type: boolean)
          Écoute des connexions non-chiffrées sur le port TCP/IP public.
          Vous devez remplir le champ ‘listen’ pour que cela ait un
          effet. L’utilisation des sockets TCP requiert une
          authentification SASL par défaut. Seuls les mécanismes SASL
          qui prennent en charge le chiffrement des données sont permis.
          Il s’agit de DIGEST_MD5 et GSSAPI (Kerberos5).

     ‘tls-port’ (default: ‘"16514"’) (type: string)
          Port pour accepter les connexions TLS sécurisées. Il peut
          s’agir d’un numéro de port ou d’un nom de service.

     ‘tcp-port’ (default: ‘"16509"’) (type: string)
          Port sur lequel accepter les connexions TCP non sécurisées.
          Cela peut être un numéro de port ou un nom de service.

     ‘listen-addr’ (default: ‘"0.0.0.0"’) (type: string)
          Adresse IP ou nom d’hôte utilisé pour les connexions des
          clients.

     ‘mdns-adv?’ (default: ‘#f’) (type: boolean)
          Indique s’il faut annoncer le service libvirt en mDNS.

     ‘mdns-name’ (default: ‘"Virtualization Host terra"’) (type: string)
          Nom annoncé par défaut sur mDNS. Cela doit être unique sur le
          réseau local.

     ‘unix-sock-group’ (default: ‘"libvirt"’) (type: string)
          Groupe propriétaire du socket Unix domain. Cela peut être
          utilisé pour permettre à un ensemble d’utilisateurs de
          confiance de gérer les fonctionnalités sans devenir root.

     ‘unix-sock-ro-perms’ (default: ‘"0777"’) (type: string)
          Permission Unix pour le socket en lecture seule. Il est
          utilisé pour surveiller le statut des VM uniquement.

     ‘unix-sock-rw-perms’ (default: ‘"0770"’) (type: string)
          Permission Unix pour le socket en lecture-écriture. La valeur
          par défaut n’autorise que root. Si PolicyKit est activé sur le
          socket, la valeur par défaut change et permet tout le monde
          (c.-à-d. ‘"0777"’).

     ‘unix-sock-admin-perms’ (default: ‘"0777"’) (type: string)
          Permissions Unix pour le socket d’administration. La valeur
          par défaut ne permet que le propriétaire (root), ne la changez
          pas à moins que vous ne soyez sûr de savoir à qui vous exposez
          cet accès.

     ‘unix-sock-dir’ (default: ‘"/var/run/libvirt"’) (type: string)
          Le répertoire dans lequel les sockets sont créés.

     ‘auth-unix-ro’ (default: ‘"polkit"’) (type: string)
          Schéma d’authentification pour les socket Unix en
          lecture-seule. Par défaut les permissions des socket
          permettent à n’importe qui de se connecter.

     ‘auth-unix-rw’ (default: ‘"polkit"’) (type: string)
          Schéma d’authentification pour les socket UNIX en
          lecture-écriture. Par défaut les permissions du socket ne
          permettent que root. Si le support de PolicyKit a été compilé
          dans libvirt, la valeur par défaut utilise l’authentification
          « polkit ».

     ‘auth-tcp’ (default: ‘"sasl"’) (type: string)
          Schéma d’authentification pour les sockets TCP. Si vous n’avez
          pas activé SASL, alors tout le trafic TCP est en clair. Ne le
          faites pas en dehors de scénario de développement ou de test.

     ‘auth-tls’ (default: ‘"none"’) (type: string)
          Schéma d’authentification pour les sockets TLS. Les sockets
          TLS sont déjà chiffrés par la couche TLS, et une
          authentification limitée est effectuée avec les certificats.
          Il est possible d’utiliser de n’importe quel mécanisme
          d’authentification SASL en utilisant ‘"sasl"’ pour cette
          option.

     ‘access-drivers’ (default: ‘()’) (type: optional-list)
          Schéma de contrôle d’accès à l’API. Par défaut un utilisateur
          authentifié peut accéder à toutes les API. Les pilotes d’accès
          peuvent placer des restrictions là-dessus.

     ‘key-file’ (default: ‘""’) (type: string)
          Chemin de fichier de la clef du serveur. Si la valeur est une
          chaîne vide, aucune clef privée n’est chargée.

     ‘cert-file’ (default: ‘""’) (type: string)
          Chemin de fichier de la clef du serveur. Si la chaîne est
          vide, aucun certificat n’est chargé.

     ‘ca-file’ (default: ‘""’) (type: string)
          Chemin de fichier de la clef du serveur. Si la chaîne est
          vide, aucun certificat de CA n’est chargé.

     ‘crl-file’ (default: ‘""’) (type: string)
          Chemin de la liste de révocation des certificats. Si la chaîne
          est vide, aucun CRL n’est chargé.

     ‘tls-no-sanity-cert’ (default: ‘#f’) (type: boolean)
          Désactive la vérification de nos propres certificats serveurs.
          Lorsque ‘libvirtd’ démarre il effectue des vérifications de
          routine sur ses propres certificats.

     ‘tls-no-verify-cert’ (default: ‘#f’) (type: boolean)
          Désactive la vérification des certificats clients. La
          vérification des certificats clients est le mécanisme
          d’authentification principal. Tout client qui ne présent pas
          de certificat signé par la CA sera rejeté.

     ‘tls-allowed-dn-list’ (default: ‘()’) (type: optional-list)
          Liste blanche des Distinguished Name x509 autorisés.

     ‘sasl-allowed-usernames’ (default: ‘()’) (type: optional-list)
          Liste blanche des noms d’utilisateur SASL permis. Le format
          des noms d’utilisateurs dépend du mécanisme d’authentification
          SASL.

     ‘tls-priority’ (default: ‘"NORMAL"’) (type: string)
          Modifie la chaine de priorité TLS par défaut fixée à la
          compilation. La valeur par défaut est typiquement ‘NORMAL’ à
          moins qu’elle n’ait été modifiée à la compilation. Ne
          l’indiquez que si vous voulez que libvirt agisse différemment
          des paramètres par défaut globaux.

     ‘max-clients’ (default: ‘5000’) (type: integer)
          Nombre maximum de connexions clientes en même temps sur tous
          les sockets.

     ‘max-queued-clients’ (default: ‘1000’) (type: integer)
          Longueur maximum de la queue de connexions en attente
          d’acceptation du démon. Remarquez que certains protocoles
          supportant la retransmission peuvent obéir à ce paramètre pour
          qu’une connexion ultérieure réussisse.

     ‘max-anonymous-clients’ (default: ‘20’) (type: integer)
          Longueur maximum de la queue des clients acceptés mais pas
          authentifiés. Indiquez zéro pour désactiver ce paramètre.

     ‘min-workers’ (default: ‘5’) (type: integer)
          Nombre de processus de travail démarrés initialement.

     ‘max-workers’ (default: ‘20’) (type: integer)
          Nombre maximum de threads de travail. Si le nombre de clients
          actifs dépasse ‘min-workers’, plus de threads seront démarrés,
          jusqu’à la limite de ‘max_workers’. Typiquement vous voulez
          que ‘max_workers’ soit égal au nombre maximum de clients
          permis.

     ‘prio-workers’ (default: ‘5’) (type: integer)
          Nombre de travailleurs prioritaires. Si tous les threads de
          travail du groupe ci-dessus sont bloqués, certains appels
          marqués comme prioritaires (notamment domainDestroy) peuvent
          être exécutés par ce groupe.

     ‘max-requests’ (default: ‘20’) (type: integer)
          Limite globale totale sur les appels RPC concurrents.

     ‘max-client-requests’ (default: ‘5’) (type: integer)
          Limite de requêtes concurrentes depuis une connexion cliente
          unique. Pour éviter qu’un client ne monopolise le serveur,
          vous devriez indiquer une petite partie des paramètres global
          max_requests et max_workers.

     ‘admin-min-workers’ (default: ‘1’) (type: integer)
          Comme ‘min-workers’ mais pour l’interface d’administration.

     ‘admin-max-workers’ (default: ‘5’) (type: integer)
          Comme ‘max-workers’ mais pour l’interface d’administration.

     ‘admin-max-clients’ (default: ‘5’) (type: integer)
          Comme ‘max-clients’ mais pour l’interface d’administration.

     ‘admin-max-queued-clients’ (default: ‘5’) (type: integer)
          Comme ‘max-queued-clients’ mais pour l’interface
          d’administration.

     ‘admin-max-client-requests’ (default: ‘5’) (type: integer)
          Comme ‘max-client-requests’ mais pour l’interface
          d’administration.

     ‘log-level’ (default: ‘3’) (type: integer)
          Semi-deprecated option for the logging level: using the
          ‘log-filters’ option instead is recommend, as it provides
          finer control. The log level can be set to ‘4’ for errors, ‘3’
          for warnings, ‘2’ for information or ‘1’ for debug. Note that
          since ‘log-filters’ and ‘log-outputs’ take precedence over
          this option, you will need to also adjust their logging levels
          to avoid filtering out messages.

     ‘log-filters’ (default: ‘"3:remote 4:event"’) (type: string)
          Logging filters. A filter allows selecting a different logging
          level for a given category of logs. The format for a filter is
          either ‘X:NAME’ or ‘X:+NAME’, where name is a string which is
          matched against the category given in the ‘VIR_LOG_INIT()’ at
          the top of each libvirt source file, e.g., ‘"remote"’,
          ‘"qemu"’, or ‘"util.json"’. NAME can be a substring of the
          full category name, in order to match multiple similar
          categories. The optional ‘+’ prefix tells libvirt to log stack
          traces for each message matching NAME. X is the log level
          value used to filter the associated message category. X can be
          set to ‘4’ for errors, ‘3’ for warnings, ‘2’ for information,
          or ‘1’ for debug. Multiple filters can be defined in a single
          filters statement, as space-separated values. Since
          ‘log-outputs’ also include a level filter, you may need to
          also adjust its value to see all the filtered messages.

     ‘log-outputs’ (default: ‘"3:syslog:libvirtd"’) (type: string)
          Logging outputs. An output is one of the places to save
          logging information. The format for an output has the form
          ‘"X:var{output}"’, where OUTPUT can be ‘stderr’,
          ‘syslog:NAME’, where NAME is the syslog ‘ident’ value to use,
          or ‘file:FILE_NAME’, where FILE_NAME is the file name of the
          file to output to. X is the minimal level, which acts as a
          filter. X can be set to X can be set to ‘4’ for errors, ‘3’
          for warnings, ‘2’ for information, or ‘1’ for debug. Multiple
          filters can be defined in a single filters statement, as
          space-separated values.

     ‘audit-level’ (default: ‘1’) (type: integer)
          Modify the behavior of the auditing subsystem. ‘0’ disables
          all auditing, samp{1} enables auditing only if enabled on
          thehost and ‘2’ enables auditing but exits if it is disabled
          on the host.

     ‘audit-logging’ (default: ‘#f’) (type: boolean)
          Envoie les messages d’audit via l’infrastructure de
          journalisation de libvirt.

     ‘host-uuid’ (default: ‘""’) (type: optional-string)
          UUID de l’hôte. L’UUID ne doit pas avoir tous ses nombres
          identiques.

     ‘host-uuid-source’ (default: ‘"smbios"’) (type: string)
          Source to read host UUID. Use ‘"smbios"’ to fetch the UUID via
          ‘dmidecode -s system-uuid’, or ‘"machine-id"’ to fetch the
          UUID from ‘/etc/machine-id’. If ‘dmidecode’ does not provide a
          valid UUID a temporary UUID will be generated.

     ‘keepalive-interval’ (default: ‘5’) (type: integer)
          A keepalive message is sent to a client after
          ‘keepalive_interval’ seconds of inactivity to check if the
          client is still responding. If set to ‘-1’, libvirtd won’t
          send keepalive requests; however clients can still send them
          and the daemon will send responses.

     ‘keepalive-count’ (default: ‘5’) (type: integer)
          Nombre maximum de messages keepalive qui peuvent être envoyés
          au client sans réponse avant que la connexion ne soit
          considérée comme cassée. En d’autres termes, la connexion est
          approximativement fermée après ‘keepalive_interval *
          (keepalive_count + 1)’ secondes après le dernier message reçu
          de la part du client. Lorsque ‘keepalive-count’ est à ‘0’, les
          connexions seront automatiquement fermées après
          ‘keepalive-interval’ secondes d’inactivité sans envoyer le
          moindre message keepalive.

     ‘admin-keepalive-interval’ (default: ‘5’) (type: integer)
          Comme précédemment, mais pour l’interface d’administration.

     ‘admin-keepalive-count’ (default: ‘5’) (type: integer)
          Comme précédemment, mais pour l’interface d’administration.

     ‘ovs-timeout’ (default: ‘5’) (type: integer)
          Délai d’attente pour les appels Open vSwitch. L’utilitaire
          ‘ovs-vsctl’ est utilisé pour la configuration et son option de
          délai d’attente est à 5 secondes pour éviter qu’une attente
          infinie ne bloque libvirt.

Démon Virrlog
.............

Le service virtlogd est un démon côté serveur qui fait partie de
libvirt, utilisé pour gérer les journaux des consoles des machines
virtuelles.

   Ce démon n’est pas utilisé directement par les clients libvirt, mais
il est appelé pour eux par ‘libvirtd’. En maintenant les journaux dans
un démon séparé, le démon ‘libvirtd’ principal peut être redémarré sans
risque de perte de journaux. Le démon ‘virtlogd’ a la possibilité de
ré-exécuter exec() sur lui-même quand il reçoit ‘SIGUSR1’, pour
permettre des mises à jour à chaud sans temps mort.

 -- Variable : virtlog-service-type
     Le type de service pour le démon virtlogd. Sa valeur doit être un
     ‘virtlog-configuration’.

          (service virtlog-service-type
                   (virtlog-configuration
                    (max-clients 1000)))

 -- paramètre de libvirt : package libvirt
     Paquet libvirt.

 -- paramètre de virtlog-configuration : integer log-level
     Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 :
     information, 1 : débogage.

     La valeur par défaut est ‘3’.

 -- paramètre de virtlog-configuration : string log-filters
     Filtres de journalisation.

     Un filtre qui permet de sélectionner plusieurs niveaux de
     journalisation pour une catégorie donnée. Le format d’un filtre est
     :

        • x:nom

        • x:+nom

     où ‘nom’ est une chaîne de caractères qui correspond à la catégorie
     donnée dans ‘VIR_LOG_INIT()’ au début de chaque fichier source de
     libvirt, p. ex. « remote », « qemu » ou « util.json » (le nom dans
     le filtre peut être une sous-chaîne du nom complet de la catégorie,
     pour pouvoir correspondre à plusieurs catégories similaires), le
     préfixe facultatif « + » dit à libvirt d’enregistrer les traces de
     piles pour chaque message qui correspond au nom, et ‘x’ est le
     niveau minimal des messages qui devraient être enregistrés :

        • 1 : DEBUG

        • 2 : INFO

        • 3 : WARNING

        • 4 : ERROR

     On peut définir plusieurs filtres dans une seule déclaration de
     filtres, ils doivent juste être séparés par des espaces.

     La valeur par défaut est ‘"3:remote 4:event"’.

 -- paramètre de virtlog-configuration : string log-outputs
     Sorties de débogage.

     Une sortie est l’un des endroits où les journaux sont enregistrés.
     Le format d’une sortie peut être :

     ‘x:stderr’
          la sortie va vers stderr

     ‘x:syslog:nom’
          utilise syslog comme sortie et utilise le nom donné comme
          identifiant

     ‘x:file:chemin_fichier’
          la sortie va vers un fichier, avec le chemin donné

     ‘x:journald’
          la sortie va vers le système de journalisation journald

     Dans tous les cas, le préfixe x est le niveau minimal, qui agit
     comme un filtre

        • 1 : DEBUG

        • 2 : INFO

        • 3 : WARNING

        • 4 : ERROR

     Plusieurs sorties peuvent être définies, elles doivent juste être
     séparées par des espaces.

     La valeur par défaut est ‘"3:stderr"’.

 -- paramètre de virtlog-configuration : integer max-clients
     Nombre maximum de connexions clientes en même temps sur tous les
     sockets.

     La valeur par défaut est ‘1024’.

 -- paramètre de virtlog-configuration : integer max-size
     Taille de fichier maximale avant roulement.

     La valeur par défaut est ‘2MB’

 -- paramètre de virtlog-configuration : integer max-backups
     Nombre maximal de fichiers de sauvegardes à garder.

     La valeur par défaut est ‘3’

Émulation transparente avec QEMU
................................

‘qemu-binfmt-service-type’ fournit le support de l’émulation
transparente de binaires construits pour des architectures différentes —
p. ex. il permet d’exécuter de manière transparente des programmes ARMv7
sur une machine x86_64. Cela se fait en combinant l’émulateur QEMU
(https://www.qemu.org) et la fonctionnalité ‘binfmt_misc’ du noyau
Linux. Cette fonctionnalité ne vous permet que d’émuler GNU/Linux sur
une architecture différente, mais regardez plus bas pour GNU/Hurd.

 -- Variable : qemu-binfmt-service-type
     Le type du service QEMU/binfmt pour l’émulation transparente. Sa
     valeur doit être un objet ‘qemu-binfmt-configuration’, qui spécifie
     le paquet QEMU à utiliser ainsi que l’architecture que vous voulez
     émuler :

          (service qemu-binfmt-service-type
                   (qemu-binfmt-configuration
                     (platforms (lookup-qemu-platforms "arm" "aarch64"))))

     Dans cet exemple, on active l’émulation transparente pour les
     plateformes ARM et aarch64. Lancer ‘herd stop qemu-binfmt’ l’éteint
     et lancer ‘herd start qemu-binfmt’ le rallume (*note the ‘herd’
     command: (shepherd)Invoking herd.).

 -- Type de données : qemu-binfmt-configuration
     La configuration du service ‘qemu-binfmt’.

     ‘platforms’ (par défaut : ‘'()’)
          La liste des plates-formes émulées par QEMU. Chaque élément
          doit être un objet “platform object” tel que renvoyé par
          ‘lookup-qemu-platforms’ (voir plus bas).

          Par exemple, supposons que vous soyez sur une machine x86_64
          et que vous avez ce services :

               (service qemu-binfmt-service-type
                        (qemu-binfmt-configuration
                          (platforms (lookup-qemu-platforms "arm"))))

          Vous pouvez lancer :

               guix build -s armhf-linux inkscape

          et cela construira Inkscape pour ARMv7 _comme s’il s’agissait
          d’une construction native_, de manière transparente avec QEMU
          pour émuler un CPU ARMv7. Plutôt pratique si vous voulez
          tester un paquet construit pour une architecture à laquelle
          vous n’avez pas accès !

     ‘qemu’ (par défaut : ‘qemu’)
          Le paquet QEMU à utiliser.

 -- Procédure : lookup-qemu-platforms platforms...
     Renvoie la liste des objets de plates-formes QEMU correspondant à
     PLATFORMS.... PLATFORMS doit être une liste de chaînes de
     caractères correspondant aux noms de plates-formes, comme ‘"arm"’,
     ‘"sparc"’, ‘"mips64el"’ etc.

 -- Procédure : qemu-platform? obj
     Renvoie vrai s iOBJ est un objet de plate-forme.

 -- Procédure : qemu-platform-name platform
     Renvoie le nom de PLATFORM — une chaîne comme ‘"arm"’.

Agent invité de QEMU
....................

L’agent invité de QEMU permet de contrôler le système émulé à partir de
l’hôte. Le service ‘qemu-guest-agent’ lance l’agent sur les invités
Guix. Pour contrôler l’agent à partir de l’hôte, ouvrez un socket en
invoquant QEMU avec les arguments suivants :

     qemu-system-x86_64 \
     	-chardev socket,path=/tmp/qga.sock,server=on,wait=off,id=qga0 \
     	-device virtio-serial \
     	-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
     	...

   Cela crée un socket dans ‘/tmp/qga.sock’ sur l’hôte. Une fois l’agent
invité lancé vos pouvez exécuter des commandes avec ‘socat’ :

     $ guix shell socat -- socat unix-connect:/tmp/qga.sock stdio
     {"execute": "guest-get-host-name"}
     {"return": {"host-name": "guix"}}

   Voir la documentation de l’agent invité de QEMU
(https://wiki.qemu.org/Features/GuestAgent) pour les options et les
commandes supplémentaires.

 -- Variable : qemu-guest-agent-service-type
     Type de service pour l’agent invité de QEMU.

 -- Type de données : qemu-guest-agent-configuration
     La configuration du service ‘qemu-guest-agent’.

     ‘qemu’ (par défaut : ‘qemu-minimal’)
          Le paquet QEMU à utiliser.

     ‘device’ (par défaut : ‘""’)
          Le nom de périphérique ou de socket que l’agent utilise pour
          communiquer avec l’hôte. Si le nom est vide, QEMU utilisera un
          nom de fichier par défaut.

Xen Guest Agent
...............

The Xen guest agent allows a Xen host to control the emulated system.
The ‘xe-guest-utilities’ service runs the agent on Guix guests.

   xe-guest-utilities (https://github.com/xenserver/xe-guest-utilities)
collects information about the running virtualized guest. This includes:
   • static information
        • The operating system running
        • The Linux kernel version

   • dynamic information
        • Network interfaces (devices) being added/removed
        • Network connections being unplugged/plugged-in
        • CPUs being added or removed
        • The guest migrating, being paused/resumed, etc.

   • ephemeral information
        • The amount of memory currently in-use and free
        • The amount of disk-space used

     Remarque : The default Linux-libre kernel that Guix ships already
     enables the necessary paravirtualization features for a guest.
     There is nothing you need to do for the guest to support Xen’s
     paravirtualization features.

     The guest utilities are used to have the guest report information
     _back_ to the virtualizing host and support tasks that require
     cooperation between host and guest, like CPU hotplugging.

 -- Variable : xe-guest-utilities-service-type
     Service type for the Xen guest utilities service.

 -- Data Type : xe-guest-utilities-configuration
     Configuration for the ‘xe-guest-utilities’ service.

     ‘package’ (default: ‘xe-guest-utilities’)
          The Xen guest utilities package to use.

     ‘pid-file’ (default: ‘"/var/run/xe-daemon.pid"’)
          Name of the file holding the PID of ‘xe-deamon’.

     ‘log-file’ (default: ‘"/var/log/xe-guest-utilities.log"’)
          Name of the ‘xe-guest-utilities’ log file.

   ‘xe-guest-utilities’ is the standard guest utilities used for Xen
guests. More recently the Xen Project has been working to develop
‘xen-guest-agent’, a modern drop-in replacement for
‘xe-guest-utilities’. While they nearly have feature-parity,
‘xen-guest-agent’ currently lacks some of the features of its
predecessor, namely disk metrics and “PV drivers version”.

 -- Variable : xen-guest-agent-service-type
     Service type for the Xen guest agent service.

 -- Data Type : xen-guest-agent-configuration
     Configuration for the ‘xen-guest-agent’ service.

     ‘package’ (default: ‘xen-guest-agent’)
          The Xen guest agent package to use.

     Attention : ‘xe-guest-utilities’ and ‘xen-guest-agent’ are mutually
     exclusive.

Virtual Build Machines
......................

“Virtual build machines” or “build VMs” let you offload builds to a
fully controlled environment. “How can it be more controlled than
regular builds? And why would it be useful?”, you ask. Good questions.

   Builds spawned by ‘guix-daemon’ indeed run in a controlled
environment; specifically the daemon spawns build processes in separate
namespaces and in a chroot, such as that build processes only see their
declared dependencies and a well-defined subset of the file system tree
(*note Réglages de l'environnement de construction::, for details). A
few aspects of the environments are not controlled though: the operating
system kernel, the CPU model, and the date. Most of the time, these
aspects have no impact on the build process: the level of isolation
‘guix-daemon’ provides is “good enough”.

   However, there are occasionally cases where those aspects _do_
influence the build process. A typical example is “time traps”: build
processes that stop working after a certain date(1). Another one is
software that optimizes for the CPU microarchitecture it is built on or,
worse, bugs that manifest only on specific CPUs.

   To address that, ‘virtual-build-machine-service-type’ lets you add a
virtual build machine on your system, as in this example:

     (use-modules (gnu services virtualization))

     (operating-system
       ;; ...
       (services (append (list (service virtual-build-machine-service-type))
                         %base-services)))

   By default, you have to explicitly start the build machine when you
need it, at which point builds may be offloaded to it (*note Réglages du
déchargement du démon::):

     herd start build-vm

   With the default setting shown above, the build VM runs with its
clock set to a date several years in the past, and on a CPU model that
corresponds to that date—a model possibly older than that of your
machine. This lets you rebuild today software from the past that would
otherwise fail to build due to a time trap or other issues in its build
process. You can view the VM’s config like this:

     herd configuration build-vm

   You can configure the build VM, as in this example:

     (service virtual-build-machine-service-type
              (virtual-build-machine
               (cpu "Westmere")
               (cpu-count 8)
               (memory-size (* 1 1024))
               (auto-start? #t)))

   The available options are shown below.

 -- Variable : virtual-build-machine-service-type
     This is the service type to run “virtual build machines”. Virtual
     build machines are configured so that builds are offloaded to them
     when they are running.

 -- Data Type : virtual-build-machine
     This is the data type specifying the configuration of a build
     machine. It contains the fields below:

     ‘name’ (default: ‘'build-vm’)
          The name of this build VM. It is used to construct the name of
          its Shepherd service.

     ‘image’
          The image of the virtual machine (*note Images systèmes::).
          This notably specifies the virtual disk size and the operating
          system running into it (*note référence de
          operating-system::). The default value is a minimal operating
          system image.

     ‘qemu’ (par défaut : ‘qemu-minimal’)
          The QEMU package to run the image.

     ‘cpu’
          The CPU model being emulated as a string denoting a model
          known to QEMU.

          The default value is a model that matches ‘date’ (see below).
          To see what CPU models are available, run, for example:

               qemu-system-x86_64 -cpu help

     ‘cpu-count’ (default: ‘4’)
          The number of CPUs emulated by the virtual machine.

     ‘memory-size’ (default: ‘2048’)
          Size in mebibytes (MiB) of the virtual machine’s main memory
          (RAM).

     ‘date’ (default: a few years ago)
          Date inside the virtual machine when it starts; this must be a
          SRFI-19 date object (*note (guile)SRFI-19 Date::).

     ‘port-forwardings’ (default: 11022 and 11004)
          TCP ports of the virtual machine forwarded to the host. By
          default, the SSH and secrets ports are forwarded into the
          host.

     ‘systems’ (par défaut : ‘(list (%current-system))’)
          List of system types supported by the build VM—e.g.,
          ‘"x86_64-linux"’.

     ‘auto-start?’ (default: ‘#f’)
          Whether to start the virtual machine when the system boots.

   In the next section, you’ll find a variant on this theme: GNU/Hurd
virtual machines!

Exécuter le Hurd dans une machine virtuelle
...........................................

Le service ‘hurd-vm’ permet de lancer GNU/Hurd dans une machine
virtuelle (VM), un “childhurd”. Ce service est conçu pour être utilisé
sur GNU/Linux et la configuration du système GNU/Hurd donné est compilée
de manière croisée. La machine virtuelle est un service Shepherd qui a
les noms ‘hurd-vm’ et ‘childhurd’ et qui peut être contrôlé avec les
commandes suivantes :

     herd start hurd-vm
     herd stop childhurd

   Lorsque le service est lancé, vous pouvez voir sa console en vous y
connectant avec un client VNC, par exemple avec :

     guix shell tigervnc-client -- vncviewer localhost:5900

   The default configuration (see ‘hurd-vm-configuration’ below) spawns
a secure shell (SSH) server in your GNU/Hurd system, which QEMU (the
virtual machine emulator) redirects to port 10022 on the host. By
default, the service enables “offloading” such that the host
‘guix-daemon’ automatically offloads GNU/Hurd builds to the childhurd
(*note Réglages du déchargement du démon::). This is what happens when
running a command like the following one, where ‘i586-gnu’ is the system
type of 32-bit GNU/Hurd:

     guix build emacs-minimal -s i586-gnu

   Le childhurd est volatile et sans état . il démarre avec un nouveau
système de fichier à chaque fois que vous le redémarrez. Par défaut
cependant, tous les fichiers sous ‘/etc/childhurd’ sur l’hôte sont
copiés tels quels sur le système de fichiers racine du childhurd à son
démarrage. Cela vous permet d’initialiser des « secrets » à l’intérieur
de la VM : les clés hôtes SSH, les clés de substituts autorisés, etc —
voir l’explication de ‘secret-root’ ci-dessous.

   You will probably find it useful to create an account for you in the
GNU/Hurd virtual machine and to authorize logins with your SSH key. To
do that, you can define the GNU/Hurd system in the usual way (*note
Utiliser le système de configuration::), and then pass that operating
system as the ‘os’ field of ‘hurd-vm-configuration’, as in this example:

     (define childhurd-os
       ;; Definition of my GNU/Hurd system, derived from the default one.
       (operating-system
         (inherit %hurd-vm-operating-system)

         ;; Add a user account.
         (users (cons (user-account
                       (name "charlie")
                       (comment "This is me!")
                       (group "users")
                       (supplementary-groups '("wheel"))) ;for 'sudo'
                      %base-user-accounts))

         (services
          ;; Modify the SSH configuration to allow login as "root"
          ;; and as "charlie" using public key authentication.
          (modify-services (operating-system-user-services
                            %hurd-vm-operating-system)
            (openssh-service-type
             config => (openssh-configuration
                        (inherit config)
                        (authorized-keys
                         `(("root"
                            ,(local-file
                              "/home/charlie/.ssh/id_rsa.pub"))
                           ("charlie"
                            ,(local-file
                              "/home/charlie/.ssh/id_rsa.pub"))))))))))

     (operating-system
       ;; ...
       (services
         ;; Add the 'hurd-vm' service, configured to use the
         ;; operating system configuration above.
         (append (list (service hurd-vm-service-type
                                (hurd-vm-configuration
                                  (os %childhurd-os))))
                 %base-services)))

   That’s it! The remainder of this section provides the reference of
the service configuration.

 -- Variable : hurd-vm-service-type
     C’est le type du service du Hurd dans une machine virtuelle. Sa
     valeur doit être un objet ‘hurd-vm-configuration’, qui spécifie le
     système d’exploitation (*note référence de operating-system::) et
     la taille de disque pour la machine virtuelle du Hurd, le paquet
     QEMU à utiliser ainsi que les options pour le lancer.

     Par exemple :

          (service hurd-vm-service-type
                   (hurd-vm-configuration
                    (disk-size (* 5000 (expt 2 20))) ;5G
                    (memory-size 1024)))             ;1024MiB

     créerait une image disque assez grande pour construire GNU Hello,
     avec une peu de place en plus.

 -- Type de données : hurd-vm-configuration
     Type de données représentant la configuration de
     ‘hurd-vm-service-type’.

     ‘os’ (par défaut : %HURD-VM-OPERATING-SYSTEM)
          Le système d’exploitation à instancier. La valeur par défaut
          est le système minimal avec un démon OpenSSH permissif en
          écoute sur le port 2222 (*note ‘openssh-service-type’:
          Services réseau.).

     ‘qemu’ (par défaut : ‘qemu-minimal’)
          Le paquet QEMU à utiliser.

     ‘type’ (default: ‘'hurd-qcow2’)
          The image type name. Use ‘'hurd-qcow2’ for a 32-bit image or
          ‘'hurd64-qcow2’ for a 64-bit image.

     ‘image’ (par défaut : HURD-VM-DISK-IMAGE)
          The image object representing the disk image of this virtual
          machine (*note Images systèmes::).

          Alternatively, this can be the file name (a string) of an
          image, which is useful if you want the image to persist across
          service restarts—see example below.

     ‘disk-size’ (par défaut : ‘'guess’)
          La taille de l’image disque.

     ‘memory-size’ (par défaut : ‘512’)
          La taille de mémoire de la machine virtuelle en mébioctets.

     ‘options’ (par défaut : ‘'("--snapshot")’)
          Options supplémentaires pour lancer QEMU.

     ‘id’ (par défaut : ‘#f’)
          Si l’option est indiquée, c’est un entier strictement positif
          utilisé créer plusieurs instances de childhurd. Il est ajouté
          au nom du service, p. ex. ‘childhurd1’.

     ‘net-options’ (par défaut : HURD-VM-NET-OPTIONS)
          La procédure utilisée pour produire une liste d’options réseau
          pour QEMU.

          Par défaut, elle produit

               '("--device" "rtl8139,netdev=net0"
                 "--netdev" (string-append
                             "user,id=net0,"
                             "hostfwd=tcp:127.0.0.1:SECRETS-PORT-:1004,"
                             "hostfwd=tcp:127.0.0.1:SSH-PORT-:2222,"
                             "hostfwd=tcp:127.0.0.1:VNC-PORT-:5900"))

          avec les ports renvoyés :

               SECRETS-PORT: (+ 11004 (* 1000 ID))
               SSH-PORT: (+ 10022 (* 1000 ID))
               VNC-PORT: (+ 15900 (* 1000 ID))

     ‘offloading?’ (default: ‘#t’)
          Whether to automatically set up offloading of builds to the
          childhurd.

          When enabled, this lets you run GNU/Hurd builds on the host
          and have them transparently offloaded to the VM, for instance
          when running a command like this:

               guix build coreutils -s i586-gnu

          This option automatically sets up offloading like so:

            1. Authorizing the childhurd’s key on the host so that the
               host accepts build results coming from the childhurd,
               which can be done like so (*note ‘guix archive
               --authorize’: Invoquer guix archive, for more on that).

            2. Creating a user account called ‘offloading’ dedicated to
               offloading in the childhurd.

            3. Creating an SSH key pair on the host and making it an
               authorized key of the ‘offloading’ account in the
               childhurd.

            4. Ajouter le childhurd à ‘/etc/guix/machines.scm’ (*note
               Réglages du déchargement du démon::).

     ‘secret-root’ (par défaut : ‘/etc/childhurd’)
          Le répertoire racine avec des secrets externes à installer
          dans le childhurd une fois lancé. Les childhurds sont
          volatile, ce qiu signifie qu’à chaque démarrage, les secrets
          comme les clés hôtes SSH et la clé de signature de Guix sont
          recréés.

          Si le répertoire ‘/etc/childhurd’ n’existe pas, le
          ‘secret-service’ qui tourne dans le Childhurd recevra une
          liste vide de secrets.

          Par défaut, le service rempli automatiquement ‘/etc/childhurd’
          avec les secrets non-volatiles suivants, à moins qu’ils
          existent déjà :

               /etc/childhurd/etc/guix/acl
               /etc/childhurd/etc/guix/signing-key.pub
               /etc/childhurd/etc/guix/signing-key.sec
               /etc/childhurd/etc/ssh/authorized_keys.d/offloading
               /etc/childhurd/etc/ssh/ssh_host_ed25519_key
               /etc/childhurd/etc/ssh/ssh_host_ecdsa_key
               /etc/childhurd/etc/ssh/ssh_host_ed25519_key.pub
               /etc/childhurd/etc/ssh/ssh_host_ecdsa_key.pub

   Note that by default the VM image is volatile—i.e., once the service
is stopped, the contents are lost. If you want a persistent image
instead, override the configuration’s ‘image’ and ‘options’ without the
‘--snapshot’ flag using something along these lines:

     (service hurd-vm-service-type
              (hurd-vm-configuration
               ;; Specify an out-of-store, persistent image.
               (image "/out/of/store/writable/hurd.img")
               (options '())))

Ganeti
......

     Remarque : Ce service est considéré comme étant expérimental. Les
     options de configuration peuvent changer de manière non compatible,
     et tous les paramètres n’ont pas été testés. Si vous utilisez ce
     service, nous vous encourageons à partager votre expérience avec
     <guix-devel@gnu.org>.

   Ganeti est un système de gestion de machines virtuelles. Il est conçu
pour faire tourner les machines virtuelles en continue sur une grappe de
serveurs même dans le cas d’une erreur matérielle, et pour rendre les
tâches de maintenance et de récupération faciles. Il consisste en
plusieurs services qui sont décrits plus loin dans cette section. En
plus du service Ganeti, vous aurez besoin du service OpenSSH (*note
‘openssh-service-type’: Services réseau.), et de mettre à jour le
fichier ‘/etc/hosts’ (*note ‘hosts-service-type’: Référence de service.)
avec le nom de la grappe et l’adresse (ou utiliser un serveur DNS).

   Tous les nœuds participant dans une grappe Ganeti devraient avec la
même configuration de Ganeti et ‘/etc/hosts’. voici un exemple de
configuration pour un nœud d’une grappe Ganeti qui prend en charge
plusieurs moteurs de stockage et installe les “fournisseurs de systèmes”
‘debbotstrap’ et ‘guix’ :

     (use-package-modules virtualization)
     (use-service-modules base ganeti networking ssh)
     (operating-system
       ;; ...
       (host-name "node1")

       ;; Installe QEMU pour pouvoir utiliser les instances KVM, ainsi que LVM, DRBD et Ceph
       ;; pour utiliser les moteurs de stockage « plain », « drbd » et « rbd ».
       (packages (append (map specification->package
                              '("qemu" "lvm2" "drbd-utils" "ceph"
                                ;; Add the debootstrap and guix OS providers.
                                "ganeti-instance-guix" "ganeti-instance-debootstrap"))
                         %base-packages))
       (services
        (append (list (service static-networking-service-type
                               (list (static-networking
                                      (addresses
                                       (list (network-address
                                              (device "eth0")
                                              (value "192.168.1.201/24"))))
                                      (routes
                                       (list (network-route
                                              (destination "default")
                                              (gateway "192.168.1.254"))))
                                      (name-servers '("192.168.1.252"
                                                      "192.168.1.253")))))

                      ;; Ganeti utilise SSH pour communiquer entre les nœuds.
                      (service openssh-service-type
                               (openssh-configuration
                                (permit-root-login 'prohibit-password)))

                      (simple-service 'ganeti-hosts-entries hosts-service-type
                                      (list
                                        (host "192.168.1.200" "ganeti.example.com")
                                        (host "192.168.1.201" "node1.example.com"
                                              '("node1"))
                                        (host "192.168.1.202" "node2.example.com"
                                              '("node2"))))

                      (service ganeti-service-type
                               (ganeti-configuration
                                ;; cette liste spécifie les chemins du système de fichiers autorisés
                                ;; pour le stockage des images de machines virtuelles.
                                (file-storage-paths '("/srv/ganeti/file-storage"))
                                ;; Cette variable configure une « variante » pour
                                ;; Debootstrap et Guix qui fonctionne avec KVM.
                                (os %default-ganeti-os))))
                %base-services)))

   Nous vous encourageons à lire le guide d’administration de Ganeti
(https://docs.ganeti.org/docs/ganeti/3.0/html/admin.html) pour apprendre
les diverse options de grappes et les opérations de base. Il y a aussi
un billet de blog
(https://guix.gnu.org/blog/2020/running-a-ganeti-cluster-on-guix/)
décrivant comment configurer et initialiser une petite grappe.

 -- Variable : ganeti-service-type
     C’est le type de service qui inclus tous les service dont les nœuds
     Ganeti ont besoin.

     Sa valeur est un objet ‘ganeti-configurtaion’ qui définie le paquet
     pour utiliser les opérations en ligne de commande, ainsi que pour
     les divers démons. Les chemins de stockage autorisés et les
     systèmes d’exploitation invités disponibles sont aussi configurés à
     travers ce type de données.

 -- Type de données : ganeti-configuration
     Le service ‘ganeti’ prend les options de configuration suivante :

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser. Il sera installé sur le profil
          du système et rendra ‘gnt-cluster’, ‘gnt-instance’, etc
          disponibles. Remarquez que la valeur spécifiée ici n’affecte
          pas les autres services auxquels se réfère le paquet ‘ganeti’
          (voir plus bas).

     ‘noded-configuration’ (par défaut : ‘(ganeti-noded-configuration)’)
     ‘confd-configuration’ (par défaut : ‘(ganeti-confd-configuration)’)
     ‘wconfd-configuration’ (par défaut : ‘(ganeti-wconfd-configuration)’)
     ‘luxid-configuration’ (par défaut : ‘(ganeti-luxid-configuration)’)
     ‘rapi-configuration’ (par défaut : ‘(ganeti-rapi-configuration)’)
     ‘kvmd-configuration’ (par défaut : ‘(ganeti-kvmd-configuration)’)
     ‘mond-configuration’ (par défaut : ‘(ganeti-mond-configuration)’)
     ‘metad-configuration’ (par défaut : ‘(ganeti-metad-configuration)’)
     ‘watcher-configuration’ (par défaut : ‘(ganeti-watcher-configuration)’)
     ‘cleaner-configuration’ (par défaut : ‘(ganeti-cleaner-configuration)’)

          Ces options contrôlent les divers démons et tâches cron
          distribués avec Ganeti. Les valeurs possibles sont détaillées
          plus bas. Pour changer un paramètre, vous devez utiliser le
          type de configuration pour ce service :

               (service ganeti-service-type
                        (ganeti-configuration
                         (rapi-configuration
                          (ganeti-rapi-configuration
                           (interface "eth1"))))
                         (watcher-configuration
                          (ganeti-watcher-configuration
                           (rapi-ip "10.0.0.1"))))

     ‘file-storage-paths’ (par défaut : ‘'()’)
          Liste des répertoire autorisés pour le moteur de stockage de
          fichiers.

     ‘hooks’ (par défaut : ‘#f’)
          Lorsqu’une valeur est indiquée, elle doit être un objet
          simili-fichier contenant un répertoire avec des crochets
          d’exécution de grappe
          (https://docs.ganeti.org/docs/ganeti/3.0/html/hooks.html).

     ‘os’ (par défaut : ‘%default-ganeti-os’)
          Liste des enregistrements ‘<ganeti-os>’.

     En résumé ‘ganeti-service-type’ est un raccourci pour la
     déclaration de chaque service individuel :

          (service ganeti-noded-service-type)
          (service ganeti-confd-service-type)
          (service ganeti-wconfd-service-type)
          (service ganeti-luxid-service-type)
          (service ganeti-kvmd-service-type)
          (service ganeti-mond-service-type)
          (service ganeti-metad-service-type)
          (service ganeti-watcher-service-type)
          (service ganeti-cleaner-service-type)

     Plus une extension de service pour ‘etc-service-type’ qui configure
     le moteur de stockage de fichiers et les variantes de systèmes.

 -- Type de données : ganeti-os
     Ce type de données peut être passé au paramètre ‘os’ de
     ‘ganeti-configuration’. Il prend les paramètres suivants :

     ‘name’
          Le nom du fournisseur de système. Il est seulement utilisé
          pour spécifier où la configuration se trouve. Indiquer «
          debootstrap » créera ‘/etc/ganeti/intance-debootstrap’.

     ‘extension’ (par défaut : ‘#f’)
          L’extension de fichier pour les variantes de ce type de
          système. Par exemple ‘.conf’ ou ‘.scm’. Elle sera ajoutée à la
          fin du nom de fichier si elle est indiquée.

     ‘variants’ (par défaut : ‘'()’)
          Il doit s’agir soit d’une liste d’objets ‘ganeti-os-variant’
          pour cet OS ou un objet « simili-fichier » (*note file-like
          objects: G-Expressions.) représentant le répertoire des
          variantes.

          Pour utiliser le fournisseur Guix OS avec les définitions des
          variantes dans un répertoire local au lieu de déclarer des
          variantes individuelles (voir GUIX-VARIANTS ci-dessous), vous
          pouvez utiliser :

               (ganeti-os
                (name "guix")
                (variants (local-file "ganeti-guix-variants"
                                      #:recursive? #true)))

          Remarquez que vous devrez maintenir le fichier ‘variants.list’
          (voir ‘ganeti-os-interface(7)
          (https://docs.ganeti.org/docs/ganeti/3.0/man/ganeti-os-interface.html)’)
          manuellement dans ce cas.

 -- Type de données : ganeti-os-variant
     Type de données représentant une variante de système Ganeti. Il
     prend les paramètres suivants :

     ‘name’
          Le nom de cette variante.

     ‘configuration’
          Un fichier de configuration pour cette variante.

 -- Variable : %default-debootstrap-hooks
     Cette variable contient les crochet pour configurer le réseau et le
     chargeur d’amorçage GRUB.

 -- Variable : %default-debootstrap-extra-pkgs
     Cette variable contient une liste de paquets requis pour un invité
     complètement virtualisé.

 -- Type de données : debootstrap-configuration

     Ce type de données crée des fichiers de configurations pour le
     fournisseur de système debootstrap.

     ‘hooks’ (par défaut : ‘%default-debootstrap-hooks’)
          Lorsque la valeur n’est pas ‘#f’, cela doit être une
          G-expression qui spécifie un répertoire avec les scripts qui
          seront lancés à l’installation du système. Elle peut aussi
          être une liste de pairs de ‘(nom, simili-fichier)’. Par
          exemple :

               `((99-hello-world . ,(plain-file "#!/bin/sh\necho Hello, World")))

          Cela va créer un répertoire avec un exécutable nommé
          ‘99-hello-world’ et le lancera à chaque fois que cette
          variante est installée. Si la valeur est ‘#f’, les crochets
          dans ‘/etc/ganeti/instance-debootstrap/hooks’ seront utilisés,
          s’ils existent.
     ‘proxy’ (par défaut : ‘#f’)
          Serveur mandataire HTTP facultatif à utiliser.
     ‘mirror’ (par défaut : ‘#f’)
          Le miroir Debian. Habituellement quelque chose comme
          ‘http://ftp.no.debian.org/debian’. La valeur par défaut dépend
          de la distribution.
     ‘arch’ (par défaut : ‘#f’)
          L’architecture pour dpkg. Indiquez ‘armhf’ pour debootstrap
          pour une instnace ARMv7 sur un hôte AArch64. La valeur par
          défaut est l’architecture système actuelle.
     ‘suite’ (par défaut : ‘"stable"’)
          Lorsqu’il est indiqué, ce paramètre doit être une distribution
          Debian comme ‘buster’ ou ‘focal’. Si la valeur est ‘#f’, la
          valeur par défaut du fournisseur de système est utilisée.
     ‘extra-pkgs’ (par défaut : ‘%default-debootstrap-extra-pkgs’)
          Liste des paquets supplémentaires qui seront installés par
          dpkg en plus du système minimal.
     ‘components’ (par défaut : ‘#f’)
          Lorsque la valeur est indiquée, doit être une liste de «
          composants » de répertoires Debian. Par exemple ‘'("main"
          "contrib")’.
     ‘generate-cache?’ (par défaut : ‘#t’)
          Indique s’il faut automatiquement mettre en cache l’archive
          debootstrap générée.
     ‘clean-cache’ (par défaut : ‘14’)
          Supprime le cache après ce nombre de jours. Utilisez ‘#f’ pour
          ne jamais vider le cache.
     ‘partition-style’ (par défaut : ‘'msdos’)
          Le type de partition à créer. Lorsqu’il est indiqué, ce
          paramètre doit être ‘'msdos’, ‘'none’ ou une chaine de
          caractères.
     ‘partition-alignment’ (par défaut : ‘2048’)
          Alignement des partitions en nombre de secteur.

 -- Procédure : debootstrap-variant nom configuration
     C’est une procédure auxiliaire qui crée un enregistrement
     ‘ganeti-os-variant’. Il prend deux paramètres . un nom et un objet
     ‘debootstrap-configuration’.

 -- Procédure : debootstrap-os variants...
     C’est une procédure auxiliaire qui crée un enregistrement
     ‘ganeti-os’. Elle prend une liste de variantes créé avec
     ‘debootstrap-variant’.

 -- Procédure : guix-variant nom configuration
     C’est une procédure auxiliaire qui crée un enregistrement
     ‘ganeti-os-variant’ à utiliser avec le fournisseur de système Guix.
     Il prend un nom et une G-expression qui renvoie un objet
     simili-fichier (*note file-like objects: G-Expressions.) contenant
     une configuration Guix System.

 -- Procédure : guix-os variants...
     C’est une procédure auxiliaire qui crée un enregistrement
     ‘ganeti-os’. Elle prend une liste de variantes produites par
     ‘guix-variant’.

 -- Variable : %default-debootstrap-variants
     C’est une variable pratique pour que le fournisseur debootstrap
     fonctionne directement sans avoir à déclarer des variantes
     manuellement. Elle contient une seule variante debootrstap avec la
     configuration par défaut :

          (list (debootstrap-variant
                 "default"
                 (debootstrap-configuration)))

 -- Variable : %default-guix-variants
     C’est une variable pratique pour que le fournisseur Guix fonctionne
     directement sans configuration supplémentaire. Elle crée une
     machine virtuelle qui a un serveur SSH, une console série et
     autorise les clés SSH des hôtes Ganeti.

          (list (guix-variant
                 "default"
                 (file-append ganeti-instance-guix
                              "/share/doc/ganeti-instance-guix/examples/dynamic.scm")))

   Les utilisateur·rices peuvent implémenter la prise en charge des
fournisseurs de systèmes inconnus de Guix en étendant les enregistrement
‘ganeti-os’ et ‘ganeti-os-variant’ comme il faut. Par exemple :

     (ganeti-os
      (name "custom")
      (extension ".conf")
      (variants
       (list (ganeti-os-variant
              (name "toto")
              (configuration (plain-file "titi" "this is fine"))))))

   Cela crée ‘/etc/ganeti/instance-custom/variants/toto.conf’ qui pointe
vers un fichier dans le dépôt qui contient ‘this is fine’. Cela crée
aussi ‘/etc/ganeti/instance-custom/variants/variants.list’ qui contient
‘toto’.

   Évidemment cela ne fonctionnera pas avec tous les fournisseurs d’OS
disponibles. Si vous trouvez que cette interface est trop limitée,
contactez-nous sur <guix-devel@gnu.org>.

   Le reste de cette section documente les divers services inclus par
‘ganeti-service-type’.

 -- Variable : ganeti-noded-service-type
     ‘ganeti-noded’ est le démon responsable des fonctions spécifiques
     au nœud dans le système Ganeti. La valeur de ce service doit être
     un objet ‘ganeti-noded-configuration’.

 -- Type de données : ganeti-noded-configuration
     La configuration du service ‘ganeti-noded’.

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘port’ (par défaut : ‘1811’)
          Port TCP sur lequel le démon de nœud écoute les requêtes
          réseaux.

     ‘address’ (par défaut : ‘"0.0.0.0"’)
          Adresse réseau sur laquelle le démon se lie. L’adresse par
          défaut signifie de se lier à toutes les adresse disponibles.

     ‘interface’ (par défaut : ‘#f’)
          Si une valeur est indiquée, elle doit être une interface
          réseau spécifique (p. ex. ‘eth0’) à laquelle le démon se
          liera.

     ‘max-clients’ (par défaut : ‘20’)
          Cela indique une limite du nombre de connexions clientes
          simultanées que le démon pourra prendre en charge. Les
          connexions au delà de ce nombre sont acceptées, mais aucune
          réponse ne sera envoyée avant que suffisamment de connexions
          ne soient fermées.

     ‘ssl?’ (par défaut : ‘#t’)
          Indique s’il faut utiliser SSL/TLS pour chiffrer les
          communications réseaux. Le certification est automatiquement
          intégré par la grappe et peut être modifié avec ‘gnt-cluster
          renew-crypto’.

     ‘ssl-key’ (par défaut : ‘"/var/lib/ganeti/server.pem"’)
          Cela peut être utilisé pour fournir une clé de chiffrement
          spécifique pour les communications TLS.

     ‘ssl-cert’ (par défaut : ‘"/var/lib/ganeti/server.pem"’)
          Cela peut être utilisé pour fournir un certification
          spécifique pour les communications TLS.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue plus de
          journalisation pour le débogage. Remarque que cela laissera
          fuiter des détails de chiffrement dans les journaux, utilisez
          cette option avec prudence.

 -- Variable : ganeti-confd-service-type
     ‘ganeti-confd’ répond aux requêtes liées à la configuration de la
     grappe Ganeti. Le but de ce démon est d’avoir une manière rapide et
     très disponible de demander les valeurs de configuration de la
     grappe. Il est automatiquement activé sur tous les “candidats
     maitres”. La valeur de ce service doit être un objet
     ‘ganeti-confd-configuration’.

 -- Type de données : ganeti-confd-configuration
     La configuration du service ‘ganeti-confd’.

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘port’ (par défaut : ‘1814’)
          Le port UDP sur lequel écouter les requêtes réseaux.

     ‘address’ (par défaut : ‘"0.0.0.0"’)
          L’adresse réseau sur laquelle le démon se liera.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-wconfd-service-type
     ‘ganeti-wconfd’ est le démon qui fait autorité sur la configuration
     de la grappe et est la seule entité qui peut y accepter des
     changements. Tous les travaux qui ont besoin de modifier la
     configuration le feront en envoyant les requêtes appropriées à ce
     démon. Il ne tourne que sur le “nœud maitre” et sera
     automatiquement désactivé sur les autres nœuds.

     La valeur de ce service est un objet ‘ganeti-wconfd-configuration’.

 -- Type de données : ganeti-wconfd-configuration
     La configuration du service ‘ganeti-wconfd’.

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘no-voting?’ (par défaut : ‘#f’)
          Le démon refusera de démarrer si la majorité des nœuds de la
          grappe ne sont pas d’accord pour dire qu’il est le nœud
          maitre. Indiquez ‘#t’ pour le démarre même si le quorum n’a
          pas été atteint (dangereux, utilisez avec prudence).

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-luxid-service-type
     ‘ganeti-luxid’ est un démon utilisé pour répondre aux requêtes
     liées à la configuration et à l’état actuel d’une grappe Ganeti. En
     plus, c’est le démon qui fait autorité pour la queue de travaux de
     Ganeti. les travaux peuvent être soumis via ce démon et il les
     programme et les démarre.

     Il prend un objet ‘ganeti-luxid-configuration’.

 -- Type de données : ganeti-luxid-configuration
     La configuration du service ‘ganeti-rapi’.

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘no-voting?’ (par défaut : ‘#f’)
          Le démon refusera de démarrer s’il ne peut pas vérifier que la
          majorité des nœuds de la grappe pensent qu’il est le nœud
          maitre. Indiquez ‘#t’ pour le démarre malgré tout (cela peut
          être dangereux).

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-rapi-service-type
     ‘ganeti-rapi’ fournit une API à distance pour les grappes Ganeti.
     Il est lancé sur le maitre et peut être utilisé pour effectuer des
     actions programmées sur la grappe via un protocole de RPC basé sur
     JSON.

     La plupart des opérations de requêtes sont permises sans
     authentification (à moins que REQUIRE-AUTHENTIFICATION? ne soit
     indiqué), alors que les opérations en écriture requièrent une
     autorisation explicite via le fichier /VAR/LIB/GANETI/RAPI/USERS.
     Voir la documentation de l’API distante de Ganeti
     (https://docs.ganeti.org/docs/ganeti/3.0/html/rapi.html) pour plus
     d’informations.

     La valeur de ce service doit être un objet
     ‘geneti-rapi-configuration’.

 -- Type de données : ganeti-rapi-configuration
     La configuration du service ‘ganeti-rapi’.

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘require-authentication?’ (par défaut : ‘#f’)
          Indique s’il faut demander une authentification même pour les
          opérations en lecture-seule.

     ‘port’ (par défaut : ‘5080’)
          Le port TCP sur lequel écouter les requêtes de l’API.

     ‘address’ (par défaut : ‘"0.0.0.0"’)
          L’adresse réseau sur laquelle le service de liera. Par défaut
          il écoute sur toutes les adresses.

     ‘interface’ (par défaut : ‘#f’)
          Si une valeur est indiquée, elle doit spécifier une interface
          réseau spécifique comme ‘eth0’ sur laquelle le démon se liera.

     ‘max-clients’ (par défaut : ‘20’)
          Le nombre maximum de requêtes clientes simultanées à prendre
          en charge. Les connexions supplémentaires sont permises, mais
          aucune réponse ne sera envoyée tant qu’il n’y aura pas assez
          de connexions fermées.

     ‘ssl?’ (par défaut : ‘#t’)
          Indique s’il faut utiliser le chiffrement SSL/TLS sur le port
          RAPI.

     ‘ssl-key’ (par défaut : ‘"/var/lib/ganeti/server.pem"’)
          Cela peut être utilisé pour fournir une clé de chiffrement
          spécifique pour les communications TLS.

     ‘ssl-cert’ (par défaut : ‘"/var/lib/ganeti/server.pem"’)
          Cela peut être utilisé pour fournir un certification
          spécifique pour les communications TLS.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue plus de
          journalisation pour le débogage. Remarque que cela laissera
          fuiter des détails de chiffrement dans les journaux, utilisez
          cette option avec prudence.

 -- Variable : ganeti-kvmd-service-type
     ‘ganeti-kvmd’ doit déterminer si une instance KVM donnée a été
     éteinte par un administrateur ou un utilisateur. Normalement Ganeti
     redémarre une instance qui a été arrêtée par Ganeti lui-même. Si
     l’option de grappe ‘user_shutdown’ est vraie, ce démon vérifie la
     socket ‘QMP’ fournie par QEMU et écoute les évènements
     d’extinction, et marque l’instance “USER down” au lieu de “ERROR
     down” lorsqu’elle s’éteint correctement par elle-même.

     Il prend un objet ‘ganeti-kvmd-configuration’.

 -- Type de données : ganeti-kvmd-configuration

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-mond-service-type
     ‘ganeti-mond’ est un démon facultatif qui propose des
     fonctionnalités de surveillance de Ganeti. Il est responsable des
     collecteurs de données et de la publication des informations
     récupérées sur une interface HTTP.

     Il prend un objet ‘ganeti-mond-configuration’.

 -- Type de données : ganeti-mond-configuration

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘port’ (par défaut : ‘1815’)
          Le port sur lequel le démon écoutera.

     ‘address’ (par défaut : ‘"0.0.0.0"’)
          L’adresse réseau sur laquelle le démon se liera. Par défaut,
          il se lie à toutes les interfaces disponibles.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-metad-service-type
     ‘ganeti-metad’ est un démon facultatif qui peut être utilisé pour
     fournir des informations sur la grappe aux instance ou aux scripts
     d’installation de systèmes.

     Il prend un objet ‘ganeti-metad-configuration’.

 -- Type de données : ganeti-metad-configuration

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘port’ (par défaut : ‘80’)
          Le port sur lequel le démon écoutera.

     ‘address’ (par défaut : ‘#f’)
          Si la valeur est indiquée, le démon se liera à cette adresse
          uniquement. Si la valeur n’est pas indiquée, le comportement
          dépend de la configuration de la grappe.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le démon effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-watcher-service-type
     ‘ganeti-watcher’ est un script conçu pour se lancer périodiquement
     et s’assurer de la santé de la grappe. Il redémarrera
     automatiquement les instances qui sont arrêtées sans le
     consentement de Ganeti, et réparera les liens DRBD au cas où un
     nœud a redémarré. Il archive aussi les anciennes tâche de la grappe
     et redémarre les démons Ganeti qui ne sont pas lancés. Si le
     paramètres de grappe ‘ensure_node_health’ est indiqué, le gardien
     éteindra aussi les instances et les périphériques DRBD si le nœud
     sur lequel il est lancé est déclaré hors-ligne par un candidat
     maitre.

     Il peut être mis en pause sur tous les nœuds avec ‘gnt-cluster
     watcher-pause’.

     Le service prend un objet ‘ganeti-watcher-configuration’.

 -- Type de données : ganeti-watcher-configuration

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour ce service.

     ‘schedule’ (default: ‘"*/5 * * * *"’)
          When to run the script, expressed either as a string in
          traditional cron syntax or as a gexp representing a Shepherd
          calendar event (*note (shepherd)Timers::). The default is
          every five minutes.

     ‘rapi-ip’ (par défaut : ‘#f’)
          Cette option doit être spécifiée seulement si le démon RAPI
          est configuré pour utiliser une interface ou une adresse
          particulière. Par défaut l’adresse de grappe est utilisée.

     ‘job-age’ (par défaut : ‘(* 6 3600)’)
          Archive les tâches de grappe plus vieilles que cela, en
          secondes. Par défaut c’est 6 heure. Cela permet de garder un
          ‘gnt-job list’ gérable.

     ‘verify-disks?’ (par défaut : ‘#t’)
          Si la valeur est ‘#f’, le gardien n’essaiera pas de réparer
          les liens DRBD cassés automatiquement. Les
          administrateur·rices devront utiliser ‘gnt-cluster
          verify-disks’ manuellement à la place.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, le script effectue des actions de
          journalisation supplémentaires pour le débogage.

 -- Variable : ganeti-cleaner-service-type
     ‘ganeti-cleaner’ est un script conçu pour être lancé périodiquement
     et supprimer les anciens fichiers de la grappe. Ce type de service
     contrôle deux “tâches cron” : l’une est conçue pour le nœud maitre
     et purge de manière permanente les ancienne tâches de la grappe, et
     l’autre est conçue pour tous les nœuds et supprime les certificats
     X509, les clés et les informations ‘ganeti-watcher’ périmées. Comme
     tous les services Ganeti, on peut l’ajouter même sur les nœuds
     non-maitres car il se désactive tout seul en cas de besoin.

     Il prend un objet ‘ganeti-cleaner-configuration’.

 -- Type de données : ganeti-cleaner-configuration

     ‘ganeti’ (par défaut : ‘ganeti’)
          Le paquet ‘ganeti’ à utiliser pour la commande ‘gnt-cleaner’.

     ‘master-schedule’ (par défaut : ‘"45 1 * * *"’)
          La périodicité à laquelle lancer la tâche de nettoyage maitre.
          Par défaut c’est une fois par jour, à 01:45:00.

     ‘node-schedule’ (par défaut : ‘"45 2 * * *"’)
          La périodicité à laquelle lancer la tâche de nettoyage des
          nœuds. Par défaut une fois par jour, à 02:45:00.

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

   (1) The most widespread example of time traps is test suites that
involve checking the expiration date of a certificate. Such tests exists
in TLS implementations such as OpenSSL and GnuTLS, but also in
high-level software such as Python.

