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

Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021
Ludovic Courtès
Copyright © 2013, 2014, 2016 Andreas Enge
Copyright © 2013 Nikita Karetnikov
Copyright © 2014, 2015, 2016 Alex Kost
Copyright © 2015, 2016 Mathieu Lirzin
Copyright © 2014 Pierre-Antoine Rault
Copyright © 2015 Taylan Ulrich Bayırlı/Kammer
Copyright © 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari
Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus
Copyright © 2016 Ben Woodcroft
Copyright © 2016, 2017, 2018, 2021 Chris Marusich
Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner
Copyright © 2016 John Darrington
Copyright © 2016, 2017 Nikita Gillmann
Copyright © 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen
Copyright © 2016, 2017, 2018, 2019, 2020 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 Mathieu Othacehe
Copyright © 2017 Federico Beffa
Copyright © 2017, 2018 Carlo Zancanaro
Copyright © 2017 Thomas Danckaert
Copyright © 2017 humanitiesNerd
Copyright © 2017, 2021 Christopher Lemmer Webber
Copyright © 2017, 2018, 2019, 2020 Marius Bakke
Copyright © 2017, 2019, 2020 Hartmut Goebel
Copyright © 2017, 2019, 2020, 2021 Maxim Cournoyer
Copyright © 2017, 2018, 2019, 2020, 2021 Tobias Geerinckx-Rice
Copyright © 2017 George Clemmer
Copyright © 2017 Andy Wingo
Copyright © 2017, 2018, 2019, 2020 Arun Isaac
Copyright © 2017 nee
Copyright © 2018 Rutger Helling
Copyright © 2018, 2021 Oleg Pykhalov
Copyright © 2018 Mike Gerwitz
Copyright © 2018 Pierre-Antoine Rouby
Copyright © 2018, 2019 Gábor Boskovits
Copyright © 2018, 2019, 2020 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 Guillaume Le Vaillant
Copyright © 2020 Leo Prikler
Copyright © 2019, 2020 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 Brice Waegeneire
Copyright © 2020 R Veera Kumar
Copyright © 2020 Pierre Langlois
Copyright © 2020 pinoaffe
Copyright © 2020 André Batista
Copyright © 2020, 2021 Alexandru-Sergiu Marton
Copyright © 2020 raingloom
Copyright © 2020 Daniel Brooks
Copyright © 2020 John Soo
Copyright © 2020 Jonathan Brielmaier
Copyright © 2020 Edgar Vincent
Copyright © 2021 Maxime Devos

   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: (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 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: Invoquer guix processes,  Prev: Invoquer guix weather,  Up: Utilitaires

9.15 Invoquer ‘guix processes’
==============================

La commande ‘guix processes’ peut être utile pour les développeur·euse·s
ou les personnes qui administrent des systèmes, surtout sur des machines
multi-utilisateur·rice et sur les fermes de construction : elle liste
les sessions actuelles (les connexions au démon), ainsi que des
informations sur les processus en question(1). Voici un exemple des
informations qu’elle renvoie :

     $ sudo guix processes
     SessionPID: 19002
     ClientPID: 19090
     ClientCommand: guix environment --ad-hoc python

     SessionPID: 19402
     ClientPID: 19367
     ClientCommand: guix publish -u guix-publish -p 3000 -C 9 ...

     SessionPID: 19444
     ClientPID: 19419
     ClientCommand: cuirass --cache-directory /var/cache/cuirass ...
     LockHeld: /gnu/store/...-perl-ipc-cmd-0.96.lock
     LockHeld: /gnu/store/...-python-six-bootstrap-1.11.0.lock
     LockHeld: /gnu/store/...-libjpeg-turbo-2.0.0.lock
     ChildPID: 20495
     ChildCommand: guix offload x86_64-linux 7200 1 28800
     ChildPID: 27733
     ChildCommand: guix offload x86_64-linux 7200 1 28800
     ChildPID: 27793
     ChildCommand: guix offload x86_64-linux 7200 1 28800

   Dans cet exemple, on voit que ‘guix-daemon’ a trois clients directs :
‘guix environment’, ‘guix publish’ et l’outil d’intégration continue
Cuirass ; leur identifiant de processus (PID) est donné par le champ
‘ClientPID’. Le champ ‘SessionPID’ fournit le PID du sous-processus
‘guix-daemon’ de cette session particulière.

   Le champs ‘LockHeld’ montre quels éléments du dépôt sont actuellement
verrouillés par cette session, ce qui correspond aux éléments du dépôt
qui sont en train d’être construits ou d’être substitués (le champ
‘LockHeld’ n’est pas montré si ‘guix processes’ n’est pas lancé en
root). Enfin, en regardant les champs ‘ChildPID’ et ‘ChildCommand’, on
comprend que ces trois constructions sont déchargées (*note Réglages du
délestage du démon::).

   La sortie est dans le format Recutils pour qu’on puisse utiliser la
commande ‘recsel’ pour sélectionner les sessions qui nous intéressent
(*note (recutils)Selection Expressions::). Par exemple, la commande
montre la ligne de commande et le PID du client qui effectue la
construction d’un paquet Perl :

     $ sudo guix processes | \
         recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
     ClientPID: 19419
     ClientCommand: cuirass --cache-directory /var/cache/cuirass ...

   Des options supplémentaires sont listées ci-dessous.

‘--format=FORMAT’
‘-f FORMAT’
     Produire la sortie dans le FORMAT donné, parmi :

     ‘recutils’
          L’option par défaut. Elle affiche un ensemble d’enregistrement
          Session recutils qui incluent chacun ‘ChildProcess’ comme
          champ.

     ‘normalized’
          Normalise les enregistrements de sortie en ensembles
          d’enregistrement (*note (recutils)Record Sets::). La
          normalisation en ensembles d’enregistrement permet de faire
          des jointures entre plusieurs types d’enregistrement.
          L’exemple ci-dessous liste le PID de chaque ‘ChildProcess’ et
          le PID associé pour ‘Session’ qui lance ‘ChildProcess’ où la
          ‘Session’ a été démarrée avec ‘guix build’.

               $ guix processes --format=normalized | \
                   recsel \
                   -j Session \
                   -t ChildProcess \
                   -p Session.PID,PID \
                   -e 'Session.ClientCommand ~ "guix build"'
               PID: 4435
               Session_PID: 4278

               PID: 4554
               Session_PID: 4278

               PID: 4646
               Session_PID: 4278

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

   (1) Les sessions distantes, lorsque ‘guix-daemon’ est démarré avec
‘--listen’ en spécifiant un point d’entrée TCP, ne sont _pas_ listées.


File: guix.fr.info,  Node: Configuration du système,  Next: Documentation,  Prev: Utilitaires,  Up: Top

10 Configuration du système
***************************

Guix System utilise un mécanisme de configuration du système cohérent.
On veut dire par là que tous les aspects de la configuration globale du
système — comme la disponibilité des services système, la configuration
des fuseaux horaires, des paramètres linguistiques et des comptes
utilisateurs — sont déclarés à un seul endroit. Une telle “configuration
système” peut être “instanciée”, c’est-à-dire entrer en vigueur.

   L’un des avantages de placer toute la configuration du système sous
le contrôle de Guix est de permettre les mises à jour transactionnelles
du système ce qui rend possible le fait de revenir en arrière à une
instanciation précédent du système, si quelque chose se passait mal avec
le nouveau (*note Fonctionnalités::). Un autre avantage est de rendre
facile la réplication de la même configuration sur plusieurs machines
différentes ou à différents moments dans le temps, sans avoir à recourir
à des outils d’administrations supplémentaires au-dessus des outils du
système.

   Cette section décrit ce mécanisme. Tout d’abord nous nous concentrons
sur le point de vue de l’administrateur système en expliquant comment le
système est configuré et instancié. Ensuite nous montrons comment ce
mécanisme peut être étendu, par exemple pour supporter de nouveaux
services systèmes.

* Menu:

* Utiliser le système de configuration::  Personnaliser votre système
                                             GNU.
* référence de système d'exploitation::  Détail sur la déclaration de
                                              système d’exploitation.
* Systèmes de fichiers::    Configurer les montages de systèmes de
                               fichiers.
* Périphériques mappés::  Gestion des périphériques de bloc.
* Comptes utilisateurs::     Spécifier des comptes utilisateurs.
* Disposition du clavier::   La manière dont le système interprète les
                               touches du clavier.
* Régionalisation::         Paramétrer la langue et les conventions
                               culturelles.
* Services::                 Spécifier les services du système.
* Programmes setuid::        Programmes tournant avec les privilèges root.
* Certificats X.509::        Authentifier les serveurs HTTPS.
* Name Service Switch::      Configurer le « name service switch » de la
                               libc.
* Disque de RAM initial::    Démarrage de Linux-Libre.
* Configuration du chargeur d'amorçage::  Configurer le chargeur
                                             d’amorçage.
* Invoquer guix system::     Instantier une configuration du système.
* Invoquer guix deploy::     Deployer une configuration du système sur un
                               hôte distant.
* Lancer Guix dans une VM::  Comment lancer Guix dans une machine virtuelle.
* Définir des services::    Ajouter de nouvelles définitions de services.


File: guix.fr.info,  Node: Utiliser le système de configuration,  Next: référence de système d'exploitation,  Up: Configuration du système

10.1 Utiliser le système de configuration
=========================================

Le système d’exploitation est configuré en fournissant une déclaration
‘operating-system’ dans un fichier qui peut être passé à la commande
‘guix system’ (*note Invoquer guix system::). Une configuration simple,
avec les services systèmes par défaut, le noyau Linux-Libre par défaut,
un disque de RAM initial et un chargeur d’amorçage ressemble à ceci :

     ;; This is an operating system configuration template
     ;; for a "bare bones" setup, with no X11 display server.

     (use-modules (gnu))
     (use-service-modules networking ssh)
     (use-package-modules screen ssh)

     (operating-system
       (host-name "komputilo")
       (timezone "Europe/Berlin")
       (locale "en_US.utf8")

       ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
       ;; target hard disk, and "my-root" is the label of the target
       ;; root file system.
       (bootloader (bootloader-configuration
                     (bootloader grub-bootloader)
                     (target "/dev/sdX")))
       (file-systems (cons (file-system
                             (device (file-system-label "my-root"))
                             (mount-point "/")
                             (type "ext4"))
                           %base-file-systems))

       ;; This is where user accounts are specified.  The "root"
       ;; account is implicit, and is initially created with the
       ;; empty password.
       (users (cons (user-account
                     (name "alice")
                     (comment "Bob's sister")
                     (group "users")

                     ;; Adding the account to the "wheel" group
                     ;; makes it a sudoer.  Adding it to "audio"
                     ;; and "video" allows the user to play sound
                     ;; and access the webcam.
                     (supplementary-groups '("wheel"
                                             "audio" "video")))
                    %base-user-accounts))

       ;; Globally-installed packages.
       (packages (cons screen %base-packages))

       ;; Add services to the baseline: a DHCP client and
       ;; an SSH server.
       (services (append (list (service dhcp-client-service-type)
                               (service openssh-service-type
                                        (openssh-configuration
                                         (openssh openssh-sans-x)
                                         (port-number 2222))))
                         %base-services)))

   Cet exemple devrait se comprendre de lui-même. Certains champs
définis ci-dessus, comme ‘host-name’ et ‘bootloader’ sont obligatoires.
D’autres comme ‘packages’ et ‘services’ peuvent être omis auquel cas ils
ont une valeur par défaut.

   Ci-dessous nous discutons des effets de certains des champs les plus
importants (*note référence de système d'exploitation::, pour des
détails sur tous les champs disponibles) et comment “instancier” le
système d’exploitation avec ‘guix system’.

Bootloader
----------

Le champ ‘bootloader’ décrit la méthode qui sera utilisée pour démarrer
votre système. Les machines basées sur les processeurs Intel peuvent
démarrer dans l’ancien mode BIOS, comme dans l’exemple au-dessus.
Cependant, les machines plus récentes s’appuient sur l’UEFI (“Unified
Extensible Firmware Interface”) pour démarrer. Dans ce cas, le champ
‘bootloader’ devrait contenir quelque chose comme cela :

     (bootloader-configuration
       (bootloader grub-efi-bootloader)
       (target "/boot/efi"))

   *Note Configuration du chargeur d'amorçage::, pour plus
d’informations sur les options de configuration disponibles.

Paquets visibles sur tout le système
------------------------------------

Le champ ‘packages’ liste les paquets qui seront visibles sur tout le
système, pour tous les comptes utilisateur·rice·s — c.-à-d. dans la
variable d’environnement ‘PATH’ de tous les utilisateur·rice·s — en plus
des profils utilisateur·rice·s (*note Invoquer guix package::). La
variable %BASE-PACKAGES fournit tous les outils qu’on pourrait attendre
pour les taches de base de l’administrateur·rice et de
l’utilisateur·rice — dont les GNU Core Utilities, les GNU Networking
Utilities, l’éditeur de texte léger GNU Zile, ‘find’, ‘grep’, etc.
L’exemple ci-dessus ajoute GNU Screen à ces paquets, récupéré depuis le
module ‘(gnu packages screen)’ (*note Modules de paquets::). Vous pouvez
utiliser la syntaxe ‘(list package output)’ pour ajouter une sortie
spécifique d’un paquet :

     (use-modules (gnu packages))
     (use-modules (gnu packages dns))

     (operating-system
       ;; ...
       (packages (cons (list bind "utils")
                       %base-packages)))

   Se référer aux paquets par le nom de leur variable, comme ‘bind’
ci-dessus, a l’avantage d’être sans ambiguïté ; cela permet aussi de se
rendre rapidement compte de coquilles quand on a des « variables non
liées ». L’inconvénient est qu’on a besoin de savoir dans quel module
est défini le paquet, et de modifier la ligne ‘use-package-modules’ en
conséquence. Pour éviter cela, on peut utiliser la procédure
‘specification->package’ du module ‘(gnu packages)’, qui renvoie le
meilleur paquet pour un nom donné ou un nom et une version :

     (use-modules (gnu packages))

     (operating-system
       ;; ...
       (packages (append (map specification->package
                              '("tcpdump" "htop" "gnupg@2.0"))
                         %base-packages)))

Services systèmes
-----------------

Le champ ‘services’ liste les “services système” à rendre disponible
lorsque le système démarre (*note Services::). La déclaration
‘operating-system’ au-dessus spécifie que, en plus des services de base,
on veut que le démon ssh OpenSSH écoute sur le port 2222 (*note
‘openssh-service-type’: Services réseau.). Sous le capot,
‘openssh-service-type’ s’arrange pour que ‘sshd’ soit lancé avec les
bonnes options de la ligne de commande, éventuellement en générant des
fichiers de configuration (*note Définir des services::).

   Parfois, plutôt que d’utiliser les services de base tels-quels, on
peut vouloir les personnaliser. Pour cela, utilisez ‘modify-services’
(*note ‘modify-services’: Référence de service.) pour modifier la liste.

   Par exemple, supposons que vous souhaitiez modifier ‘guix-daemon’ et
Mingetty (l’écran de connexion en console) dans la liste
‘%base-services’ (*note ‘%base-services’: Services de base.). Pour cela,
vous pouvez écrire ce qui suit dans votre déclaration de système
d’exploitation :

     (define %my-services
       ;; ma propre liste de services.
       (modify-services %base-services
         (guix-service-type config =>
                            (guix-configuration
                             (inherit config)
                             ;; Récupérer les substituts depuis example.org.
                             (substitute-urls
                               (list "https://example.org/guix"
                                     "https://ci.guix.gnu.org"))))
         (mingetty-service-type config =>
                                (mingetty-configuration
                                 (inherit config)
                                 ;; Connexion automatique en tant que « guest ».
                                 (auto-login "guest")))))

     (operating-system
       ;; ...
       (services %my-services))

   Cela modifie la configuration — c.-à-d. les paramètres du service —
de l’instance de ‘guix-service-type’, et de toutes les instances de
‘mingetty-service-type’ dans la liste ‘%base-services’. Remarquez
comment on fait cela : d’abord, on s’arrange pour que la configuration
de départ soit liée à l’identifiant ‘config’ dans BODY puis on écrit
BODY pour qu’il s’évalue en la configuration désirée. En particulier,
remarquez comment on utilise ‘inherit’ pour créer une nouvelle
configuration qui a les même valeurs que l’ancienne configuration, avec
seulement quelques modifications.

   La configuration pour une utilisation de « bureau » typique, avec une
partition racine chiffrée, le serveur d’affichage X11, GNOME et Xfce
(les utilisateurs peuvent choisir l’environnement de bureau sur l’écran
de connexion en appuyant sur ‘F1’), la gestion du réseau, la gestion de
l’énergie, et bien plus, ressemblerait à ceci :

     ;; This is an operating system configuration template
     ;; for a "desktop" setup with GNOME and Xfce where the
     ;; root partition is encrypted with LUKS.

     (use-modules (gnu) (gnu system nss))
     (use-service-modules desktop xorg)
     (use-package-modules certs gnome)

     (operating-system
       (host-name "antelope")
       (timezone "Europe/Paris")
       (locale "en_US.utf8")

       ;; Choose US English keyboard layout.  The "altgr-intl"
       ;; variant provides dead keys for accented characters.
       (keyboard-layout (keyboard-layout "us" "altgr-intl"))

       ;; Use the UEFI variant of GRUB with the EFI System
       ;; Partition mounted on /boot/efi.
       (bootloader (bootloader-configuration
                     (bootloader grub-efi-bootloader)
                     (target "/boot/efi")
                     (keyboard-layout keyboard-layout)))

       ;; Specify a mapped device for the encrypted root partition.
       ;; The UUID is that returned by 'cryptsetup luksUUID'.
       (mapped-devices
        (list (mapped-device
               (source (uuid "12345678-1234-1234-1234-123456789abc"))
               (target "my-root")
               (type luks-device-mapping))))

       (file-systems (append
                      (list (file-system
                              (device (file-system-label "my-root"))
                              (mount-point "/")
                              (type "ext4")
                              (dependencies mapped-devices))
                            (file-system
                              (device (uuid "1234-ABCD" 'fat))
                              (mount-point "/boot/efi")
                              (type "vfat")))
                      %base-file-systems))

       ;; Create user `bob' with `alice' as its initial password.
       (users (cons (user-account
                     (name "bob")
                     (comment "Alice's brother")
                     (password (crypt "alice" "$6$abc"))
                     (group "users")
                     (supplementary-groups '("wheel" "netdev"
                                             "audio" "video")))
                    %base-user-accounts))

       ;; This is where we specify system-wide packages.
       (packages (append (list
                          ;; for HTTPS access
                          nss-certs
                          ;; for user mounts
                          gvfs)
                         %base-packages))

       ;; Add GNOME and Xfce---we can choose at the log-in screen
       ;; by clicking the gear.  Use the "desktop" services, which
       ;; include the X11 log-in service, networking with
       ;; NetworkManager, and more.
       (services (append (list (service gnome-desktop-service-type)
                               (service xfce-desktop-service-type)
                               (set-xorg-configuration
                                (xorg-configuration
                                 (keyboard-layout keyboard-layout))))
                         %desktop-services))

       ;; Allow resolution of '.local' host names with mDNS.
       (name-service-switch %mdns-host-lookup-nss))

   Un système graphique avec un choix de gestionnaires de fenêtres
légers plutôt que des environnement de bureaux complets ressemblerait à
cela :

     ;; This is an operating system configuration template
     ;; for a "desktop" setup without full-blown desktop
     ;; environments.

     (use-modules (gnu) (gnu system nss))
     (use-service-modules desktop)
     (use-package-modules bootloaders certs emacs emacs-xyz ratpoison suckless wm
                          xorg)

     (operating-system
       (host-name "antelope")
       (timezone "Europe/Paris")
       (locale "en_US.utf8")

       ;; Use the UEFI variant of GRUB with the EFI System
       ;; Partition mounted on /boot/efi.
       (bootloader (bootloader-configuration
                     (bootloader grub-efi-bootloader)
                     (target "/boot/efi")))

       ;; Assume the target root file system is labelled "my-root",
       ;; and the EFI System Partition has UUID 1234-ABCD.
       (file-systems (append
                      (list (file-system
                              (device (file-system-label "my-root"))
                              (mount-point "/")
                              (type "ext4"))
                            (file-system
                              (device (uuid "1234-ABCD" 'fat))
                              (mount-point "/boot/efi")
                              (type "vfat")))
                      %base-file-systems))

       (users (cons (user-account
                     (name "alice")
                     (comment "Bob's sister")
                     (group "users")
                     (supplementary-groups '("wheel" "netdev"
                                             "audio" "video")))
                    %base-user-accounts))

       ;; Add a bunch of window managers; we can choose one at
       ;; the log-in screen with F1.
       (packages (append (list
                          ;; window managers
                          ratpoison i3-wm i3status dmenu
                          emacs emacs-exwm emacs-desktop-environment
                          ;; terminal emulator
                          xterm
                          ;; for HTTPS access
                          nss-certs)
                         %base-packages))

       ;; Use the "desktop" services, which include the X11
       ;; log-in service, networking with NetworkManager, and more.
       (services %desktop-services)

       ;; Allow resolution of '.local' host names with mDNS.
       (name-service-switch %mdns-host-lookup-nss))

   Cet exemple se réfère au système de fichier ‘/boot/efi’ par son UUID,
‘1234-ABCD’. Remplacez cet UUID par le bon UUID de votre système,
renvoyé par la commande ‘blkid’.

   *Note Services de bureaux::, pour la liste exacte des services
fournis par ‘%desktop-services’. *Note Certificats X.509::, pour des
informations sur le paquet ‘nss-certs’ utilisé ici.

   Encore une fois, ‘%desktop-services’ n’est qu’une liste d’objets
service. Si vous voulez enlever des services de là, vous pouvez le faire
avec des procédures pour les listes (*note (guile)SRFI-1 Filtering and
Partitioning::). Par exemple, l’expression suivante renvoie une liste
qui contient tous les services dans ‘%desktop-services’ sauf le service
Avahi :

     (remove (lambda (service)
               (eq? (service-kind service) avahi-service-type))
             %desktop-services)

   Autrement, la macro ‘modify-services’ peut être utilisée :

     (modify-services %desktop-services
       (delete avahi-service-type))

Instancier le système
---------------------

En supposant que la déclaration ‘operating-system’ est stockée dans le
fichier ‘my-system-config.scm’, la commande ‘guix system reconfigure
my-system-config.scm’ instancie cette configuration et en fait l’entrée
par défaut dans GRUB (*note Invoquer guix system::).

   Pour changer la configuration du système, on met normalement à jour
ce fichier et on relance ‘guix system reconfigure’. On ne devrait jamais
avoir à modifier de fichiers dans ‘/etc’ ou à lancer des commandes qui
modifient l’état du système comme ‘useradd’ ou ‘grub-install’. En fait,
vous devez les éviter parce que non seulement ça annulerait vos
garanties, mais ça empêcherait aussi de revenir à des versions
précédents du système, si vous en avez besoin.

   En parlant de revenir en arrière, à chaque fois que vous lancez ‘guix
system reconfigure’, une nouvelle “génération” du système est crée —
sans modifier ou supprimer les générations précédentes. Les anciennes
générations du système ont une entrée dans le menu du chargeur
d’amorçage, ce qui vous permet de démarrer dessus au cas où quelque
chose se serait mal passé avec la dernière génération. C’est rassurant,
non ? La commande ‘guix system list-generations’ liste les générations
du système disponibles sur le disque. Il est possible de revenir à une
ancienne génération via les commandes ‘guix system roll-back’ et ‘guix
system switch-generation’.

   Bien que la commande ‘guix system reconfigure’ ne modifiera pas les
générations précédentes, vous devez faire attention lorsque votre
génération actuelle n’est pas la dernière (p. ex. après avoir invoqué
‘guix system roll-back’), puisque l’opération pourrait remplacer une
génération suivante (*note Invoquer guix system::).

L’interface de programmation
----------------------------

Au niveau Scheme, la grosse déclaration ‘operating-system’ est
instanciée avec la procédure monadique suivante (*note La monade du
dépôt::) :

 -- Procédure monadique : operating-system-derivation os
     Renvoie une dérivation qui construit OS, un objet
     ‘operating-system’ (*note Dérivations::).

     La sortie de la dérivation est un répertoire qui se réfère à tous
     les paquets et d’autres fichiers supports requis pour instancier
     OS.

   Cette procédure est fournie par le module ‘(gnu system)’. Avec ‘(gnu
services)’ (*note Services::), ce module contient les entrailles du
système Guix. Ouvrez-le un jour !


File: guix.fr.info,  Node: référence de système d'exploitation,  Next: Systèmes de fichiers,  Prev: Utiliser le système de configuration,  Up: Configuration du système

10.2 Référence de ‘operating-system’
====================================

Cette section résume toutes les options disponibles dans les
déclarations ‘operating-system’ (*note Utiliser le système de
configuration::).

 -- Type de données : operating-system
     C’est le type de données représentant une configuration d’un
     système d’exploitation. On veut dire par là toute la configuration
     globale du système, mais pas la configuration par utilisateur
     (*note Utiliser le système de configuration::).

     ‘kernel’ (par défaut : ‘linux-libre’)
          L’objet du paquet du système d’exploitation à utiliser(1).

     ‘hurd’ (par défaut : ‘#f’)
          L’objet du paquet du hurd à être lancé par le noyau. Lorsque
          ce champ est défini, produire un système d’exploitation
          GNU/Hurd. Dans ce cas, ‘kernel’ doit également être défini sur
          le paquet ‘gnumach’ — le micro-noyau sur lequel tourne le
          Hurd.

               Attention : Cette fonction est expérimentale et seulement
               prise en charge pour les images de disques.

     ‘kernel-loadable-modules’ (par défault : ’())
          Une liste d’objets (généralement des paquets) pour collecter
          les modules de noyau chargeables depuis - par exemple ‘(liste
          ddcci-driver-linux)’.

     ‘server-arguments’ (par défaut : ‘%default-kernel-arguments’)
          Liste de chaînes ou de gexps représentant des arguments
          supplémentaires à passer sur la ligne de commande du noyau —
          p. ex. ‘("console=ttyS0")’.

     ‘bootloader’
          L’objet de configuration du chargeur d’amorçage. *Note
          Configuration du chargeur d'amorçage::.

     ‘label’
          C’est l’étiquette (une chaîne de caractères) comme elle
          apparaît dans l’entrée du menu du chargeur d’amorçage.
          L’étiquette par défaut inclus le nom du noyau et sa version.

     ‘keyboard-layout’ (par défaut : ‘#f’)
          Ce champ spécifie la disposition du clavier à utiliser dans la
          console. Il peut être soit ‘#f’, auquel cas la disposition par
          défaut est utilisée (habituellement anglais américain), ou un
          enregistrement ‘<keyboard-layout>’. *Note Disposition du
          clavier::, pour plus d’informations.

          Cette disposition du clavier est effective dès que le noyau
          démarre. Par exemple, c’est la disposition du clavier
          effective lorsque vous saisissez la phrase de passe de votre
          système de fichier racine sur une partition utilisant
          ‘luks-device-mapping’ (*note Périphériques mappés::).

               Remarque : Cela ne spécifie _pas_ la disposition clavier
               utilisée par le chargeur d’amorçage, ni celle utilisée
               par le serveur d’affichage graphique. *Note Configuration
               du chargeur d'amorçage::, pour plus d’information sur la
               manière de spécifier la disposition du clavier pour le
               chargeur d’amorçage. *Note Système de fenêtrage X::, pour
               plus d’informations sur la manière de spécifier la
               disposition du clavier utilisée par le système de
               fenêtrage X.

     ‘initrd-modules’ (par défaut : ‘%base-initrd-modules’)
          La liste des modules du noyau linux requis dans l’image disque
          de RAM initiale. *Note Disque de RAM initial::.

     ‘initrd’ (par défaut : ‘base-initrd’)
          Une procédure qui renvoie un disque de RAM initial pour le
          noyau Linux. Ce champ est fournit pour pouvoir personnaliser
          son système à bas-niveau et n’est que rarement utile dans le
          cas général. *Note Disque de RAM initial::.

     ‘firmware’ (par défaut : ‘%base-firmware’)
          Liste les paquets de microgiciels chargeables pour le noyau de
          système d’exploitation.

          La valeur par défaut contient les microgiciels requis pour les
          périphériques WiFi Atheros et Broadcom (modules ‘ath9k’ et
          ‘b43-open’ de Linux-libre, respectivement). *Note
          Considérations matérielles::, pour plus d’info sur les
          périphériques supportés.

     ‘host-name’
          Le nom d’hôte.

     ‘hosts-file’
          Un objet simili-fichier (*note file-like objects:
          G-Expressions.) à utiliser comme ‘/etc/hosts’ (*note
          (libc)Host Names::). La valeur par défaut est un fichier avec
          des entrées pour ‘localhost’ et HOST-NAME.

     ‘mapped-devices’ (par défaut : ‘'()’)
          Une liste de périphériques mappés. *Note Périphériques
          mappés::.

     ‘file-systems’
          Une liste de systèmes de fichiers. *Note Systèmes de
          fichiers::.

     ‘swap-devices’ (par défaut : ‘'()’)
          Une liste d’UUID, d’étiquettes de systèmes de fichiers, ou de
          chaines identifiant des périphériques ou des fichiers à
          utiliser comme « espace d’échange » (*note (libc)Memory
          Concepts::). Voici quelques exemples :

          ‘(list (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb"))’
               Utilise la partition de swap avec l’UUID donné. Vous
               pouvez voir l’UUID d’une partition de swap Linux en
               lançant ‘swaplabel DEVICE’, où DEVICE est le nom de
               fichier ‘/dev’ de cette partition.

          ‘(list (file-system-label "swap"))’
               Utilise la partition avec l’étiquette ‘swap’. De nouveau,
               la commande ‘swaplabel’ vous permet de voir et de changer
               l’étiquette d’une partition swap de Linux.

          ‘(list "/swapfile")’
               utilise le fichier ‘/swapfile’ comme espace d’échange.

          ‘(list "/dev/sda3" "/dev/sdb2")’
               Utilise les partitions ‘/dev/sda3’ et ‘/dev/sdb2’ comme
               espaces d’échange. Nous recommandons plutôt de vous
               référer aux périphériques d’échange par leur UUID ou
               étiquette comme montré plus haut.

          Il est possible de spécifier un fichier d’échange sur un
          périphérique mappé (sous ‘/dev/mapper’), tant que le
          périphérique nécessaire et le système de fichiers sont aussi
          spécifiés. *Note Périphériques mappés:: et *note Systèmes de
          fichiers::.

     ‘users’ (par défaut : ‘%base-user-accounts’)
     ‘groups’ (par défaut : ‘%base-groups’)
          Liste les comptes utilisateurs et les groupes. *Note Comptes
          utilisateurs::.

          Si la liste ‘users’ n’a pas de compte lié à l’UID 0, un compte
          « root » avec l’UID 0 est automatiquement ajouté.

     ‘skeletons’ (par défaut : ‘(default-skeletons)’)
          Une liste de « couples » de noms de fichiers cibles/objets de
          type fichier (*note objets de type fichier: G-Expressions.).
          Ce sont les fichiers squelettes qui seront ajoutés au
          répertoire d’accueil des comptes utilisatrice·eur·s
          nouvellement créés.

          Par exemple, un valeur valide ressemblerait à cela :

               `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
                 (".guile" ,(plain-file "guile"
                                        "(use-modules (ice-9 readline))
                                         (activate-readline)")))

     ‘issue’ (par défaut : ‘%default-issue’)
          Une chaîne qui dénote le contenu du fichier ‘/etc/issue’ qui
          est affiché lorsqu’un utilisateur se connecte sur la console.

     ‘packages’ (par défaut : ‘%base-packages’)
          Une liste de paquets à installer dans le profil global, qui
          est accessible à partir de ‘/run/current-system/profile’.
          Chaque élément est soit une variable de paquet, soit un tuple
          de paquet/sortie. Voici un exemple simple des deux :

               (cons* git                     ; la sortie "out" par défaut
                      (list git "send-email") ; une autre sortie de git
                      %base-packages)         ; l'ensemble par défaut

          L’ensemble par défaut contient les utilitaires de base et
          c’est une bonne pratique d’installer les utilitaires non
          essentiels dans les profils utilisateurs (*note Invoquer guix
          package::).

     ‘timezone’
          Une chaîne identifiant un fuseau horaire — p. ex.
          ‘"Europe/Paris"’.

          Vous pouvez lancer la commande ‘tzselect’ pour trouver le
          fuseau horaire correspondant à votre région. Si vous
          choisissez un nom de fuseau horaire invalide, ‘guix system’
          échouera.

     ‘locale’ (par défaut : ‘"en_US.utf8"’)
          Le nom du paramètre régional par défaut (*note (libc)Locale
          Names::). *Note Régionalisation::, pour plus d’informations.

     ‘locale-definitions’ (par défaut : ‘%default-locale-definitions’)
          La liste des définitions de locales à compiler et qui
          devraient être utilisées à l’exécution. *Note
          Régionalisation::.

     ‘locale-libcs’ (par défaut : ‘(list GLIBC)’)
          La liste des paquets GNU libc dont les données des paramètres
          linguistiques sont utilisées pour construire les définitions
          des paramètres linguistiques. *Note Régionalisation::, pour
          des considérations sur la compatibilité qui justifient cette
          option.

     ‘name-service-switch’ (par défaut : ‘%default-nss’)
          La configuration de NSS de la libc (name service switch) — un
          objet ‘<name-service-switch>’. *Note Name Service Switch::,
          pour des détails.

     ‘services’ (par défaut : ‘%base-services’)
          Une liste d’objets services qui dénotent les services du
          système. *Note Services::.

     ‘essential-services’ (par défaut : …)
          La liste des « services essentiels » — c.-à-d. les services
          comme des instance de ‘system-service-type’ et
          ‘host-name-service-type’ (*note Référence de service::), qui
          sont dérivés de la définition du système d’exploitation
          lui-même. En tant qu’utilisateur vous ne devriez _jamais_
          toucher à ce champ.

     ‘pam-services’ (par défaut : ‘(base-pam-services)’)
          Services PAM (“pluggable authentication module”) Linux.

     ‘setuid-programs’ (par défaut : ‘%setuid-programs’)
          Liste de G-expressions qui s’évaluent en chaînes de caractères
          qui dénotent les programmes setuid. *Note Programmes setuid::.

     ‘sudoers-file’ (par défaut : ‘%sudoers-specification’)
          Le contenu du fichier ‘/etc/sudoers’ comme un objet
          simili-fichier (*note ‘local-file’ et ‘plain-file’:
          G-Expressions.).

          Ce fichier spécifier quels utilisateurs peuvent utiliser la
          commande ‘sudo’, ce qu’ils ont le droit de faire, et quels
          privilèges ils peuvent gagner. La valeur par défaut est que
          seul ‘root’ et les membres du groupe ‘wheel’ peuvent utiliser
          ‘sudo’.

      -- Type de données : this-operating-system
          Lorsqu’il est utilisée dans la _portée lexicale_ de la
          définition d’un du système d’exploitation, cet identifiant est
          résolu comme étant le système d’exploitation définit.

          L’exemple ci-dessous montre le référencement au système
          d’exploitation définit dans la définition du champ ‘label’ :

               (use-modules (gnu) (guix))

               (operating-system
                 ;; ...
                 (label (package-full-name
                         (operating-system-kernel this-operating-system))))

          C’est une erreur que de se référer à ‘this-operating-system’
          en dehors de la définition d’un système d’exploitation.

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

   (1) Actuellement, seul le noyau Linux-libre est entièrement pris en
charge. L’utilisation de GNU mach avec le GNU Hurd est expérimentale et
n’est disponible que lors de la construction d’une image disque de
machine virtuelle.


File: guix.fr.info,  Node: Systèmes de fichiers,  Next: Périphériques mappés,  Prev: référence de système d'exploitation,  Up: Configuration du système

10.3 Systèmes de fichiers
=========================

La liste des systèmes de fichiers à monter est spécifiée dans le champ
‘file-systems’ de la déclaration de système d’exploitation (*note
Utiliser le système de configuration::). Chaque système de fichier est
déclaré avec la forme ‘file-system’, comme ceci :

     (file-system
       (mount-point "/home")
       (device "/dev/sda3")
       (type "ext4"))

   Comme d’habitude, certains de ces champs sont obligatoire — comme le
montre l’exemple au-dessus — alors que d’autres peuvent être omis. Ils
sont décrits plus bas.

 -- Type de données : file-system
     Les objets de ce type représentent des systèmes de fichiers à
     monter. Ils contiennent les membres suivants :

     ‘type’
          C’est une chaîne de caractères spécifiant le type du système
          de fichier — p. ex. ‘"ext4"’.

     ‘mount-point’
          Désigne l’emplacement où le système de fichier sera monté.

     ‘device’
          Ce champ nomme le système de fichier « source ». il peut être
          l’une de ces trois choses : une étiquette de système de
          fichiers, un UUID de système de fichier ou le nom d’un nœud
          dans ‘/dev’. Les étiquettes et les UUID offrent une manière de
          se référer à des systèmes de fichiers sans avoir à coder en
          dur le nom de périphérique(1).

          Les étiquettes de systèmes de fichiers sont crées avec la
          procédure ‘file-system-label’, les UUID avec ‘uuid’ et les
          nœuds de ‘/dev’ sont de simples chaînes de caractères. Voici
          un exemple d’un système de fichiers référencé par son
          étiquette, donnée par la commande ‘e2label’ :

               (file-system
                 (mount-point "/home")
                 (type "ext4")
                 (device (file-system-label "my-home")))

          Les UUID sont convertis à partir de leur représentation en
          chaîne de caractères (montrée par la commande ‘tune2fs -l’) en
          utilisant la forme ‘uuid’(2), comme ceci :

               (file-system
                 (mount-point "/home")
                 (type "ext4")
                 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))

          Lorsque la source d’un système de fichiers est un périphérique
          mappé (*note Périphériques mappés::), sont champ ‘device’
          _doit_ se référer au nom du périphérique mappé — p. ex.
          ‘"/dev/mapper/root-partition"’. Cela est requis pour que le
          système sache que monter ce système de fichier dépend de la
          présence du périphérique mappé correspondant.

     ‘flags’ (par défaut : ‘'()’)
          C’est une liste de symboles qui désignent des drapeaux de
          montage. Les drapeaux reconnus sont ‘read-only’, ‘bind-mount’,
          ‘no-dev’ (interdit l’accès aux fichiers spéciaux), ‘no-suid’
          (ignore les bits setuid et setgid), ‘no-atime’ (ne met pas à
          jour les heures d’accès aux fichiers) et ‘no-exec’ (interdit
          l’exécution de programmes). *Note
          (libc)Mount-Unmount-Remount::, pour plus d’informations sur
          ces drapeaux.

     ‘options’ (par défaut : ‘#f’)
          Il s’agit soit de ‘#f’, soit d’une chaîne indiquant les
          options de montage passées au pilote du système de fichiers.
          *Note (libc)Mount-Unmount-Remount::, pour plus de détails et
          lancez ‘man 8 mount’ pour les options des différents systèmes
          de fichiers. Notez que les procédures
          ‘file-system-options->alist’ et ‘alist->file-system-options’
          de ‘(gnu system file-systems)’ peuvent être utilisées pour
          convertir des options de systèmes de fichiers données sous
          forme de liste d’association en représentation de chaîne de
          caractères, et vice-versa.

     ‘mount?’ (par défaut : ‘#t’)
          Cette valeur indique s’il faut monter automatiquement le
          système de fichier au démarrage du système. Lorsque la valeur
          est ‘#f’, le système de fichier reçoit une entrée dans
          ‘/etc/fstab’ (lue par la commande ‘mount’) mais n’est pas
          monté automatiquement.

     ‘needed-for-boot?’ (par défaut : ‘#f’)
          Cette valeur booléenne indique si le système de fichier est
          nécessaire au démarrage. Si c’est vrai alors le système de
          fichier est monté au chargement du disque de RAM initial.
          C’est toujours le cas par exemple du système de fichiers
          racine.

     ‘check?’ (par défaut : ‘#t’)
          Cette valeur booléenne indique si le système de fichier doit
          être vérifié avant de le monter.

     ‘create-mount-point?’ (par défaut : ‘#f’)
          Lorsque cette valeur est vraie, le point de montage est créé
          s’il n’existe pas déjà.

     ‘mount-may-fail?’ (par défaut : ‘#t’)
          Lorsque cela est vrai, indique que le montage de ce système de
          fichiers peut échouer, mais cela ne doit pas être considéré
          comme une erreur. Ceci est utile dans des cas inhabituels ; un
          exemple de ceci est ‘efivarfs’, un système de fichiers qui ne
          peut être monté que sur des systèmes EFI/UEFI.

     ‘dependencies’ (par défaut : ‘'()’)
          C’est une liste d’objets ‘<file-system>’ ou ‘<mapped-device>’
          qui représentent les systèmes de fichiers qui doivent être
          montés ou les périphériques mappés qui doivent être ouverts
          avant (et monté ou fermés après) celui-ci.

          Par exemple, considérons une hiérarchie de montage :
          ‘/sys/fs/cgroup’ est une dépendance de ‘/sys/fs/cgroup/cpu’ et
          ‘/sys/fs/cgroup/memory’.

          Un autre exemple est un système de fichier qui dépend d’un
          périphérique mappé, par exemple pour une partition chiffrée
          (*note Périphériques mappés::).

 -- Procédure Scheme : file-system-label STR
     Cette procédure renvoie un label de système de fichiers opaque à
     partir de STR, une chaîne de caractères :

          (file-system-label "home")
          ⇒ #<file-system-label "home">

     Les étiquettes de systèmes de fichiers sont utilisées pour faire
     référence aux systèmes de fichiers par étiquette plutôt que par nom
     de dispositif. Voir ci-dessus pour des exemples.

   Le module ‘(gnu system file-systems)’ exporte les variables utiles
suivantes.

 -- Variable Scheme : %base-file-systems
     Ce sont les systèmes de fichiers essentiels qui sont requis sur les
     systèmes normaux, comme ‘%pseudo-terminal-file-system’ et
     ‘%immutable-store’ (voir plus bas). Les déclarations de systèmes
     d’exploitation devraient au moins les contenir.

 -- Variable Scheme : %pseudo-terminal-file-system
     C’est le système de fichier monté sur ‘/dev/pts’. Il supporte les
     “pseudo-terminaux” créés via ‘openpty’ et les fonctions similaires
     (*note (libc)Pseudo-Terminals::). Les pseudo-terminaux sont
     utilisés par les émulateurs de terminaux comme ‘xterm’.

 -- Variable Scheme : %shared-memory-file-system
     Ce système de fichier est monté dans ‘/dev/shm’ et est utilisé pour
     le partage de mémoire entre processus (*note ‘shm_open’:
     (libc)Memory-mapped I/O.).

 -- Variable Scheme : %immutable-store
     Ce système de fichiers effectue un « montage lié » en lecture-seule
     de ‘/gnu/store’, ce qui en fait un répertoire en lecture-seule pour
     tous les utilisateurs dont ‘root’. Cela évite que des logiciels qui
     tournent en ‘root’ ou des administrateurs systèmes ne modifient
     accidentellement le dépôt.

     Le démon lui-même est toujours capable d’écrire dans le dépôt : il
     est remonté en lecture-écriture dans son propre « espace de nom ».

 -- Variable Scheme : %binary-format-file-system
     Le système de fichiers ‘binfmt_misc’, qui permet de gérer n’importe
     quel type de fichiers exécutables à déléguer en espace utilisateur.
     Cela demande que le module du noyau ‘binfmt.ko’ soit chargé.

 -- Variable Scheme : %fuse-control-file-system
     Le système de fichiers ‘fusectl’, qui permet à des utilisateurs non
     privilégiés de monter et de démonter des systèmes de fichiers FUSE
     en espace utilisateur. Cela requiert que le module du noyau
     ‘fuse.ko’ soit chargé.

   Le module ‘(gnu system uuid)’ fournit les outils pour traiter les «
identifiants uniques » de système de fichier (UUIDs).

 -- Procédure Scheme : uuid TYPE [VALUE]
     Renvoie un objet UUID (identifiant unique) opaque du TYPE donné (un
     symbole) en analysant STR (une chaîne) :

          (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
          ⇒ #<uuid> type: dce bv: ...>

          (uuid "1234-ABCD" 'fat)
          ⇒ #<uuid> type: fat bv: ...>

     TYPE peut être l’un des codes suivants : ‘dce’, ‘iso9660’, ‘fat’,
     ‘ntfs’, ou l’un des synonymes les plus courants.

     Les UUIDs sont un autre moyen de faire référence sans ambiguïté aux
     systèmes de fichiers dans la configuration du système
     d’exploitation. Voir les exemples ci-dessus.

* Menu:

* Système de fichier Btrfs::

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

   (1) Remarquez que, s’il est tentant d’utiliser ‘/dev/disk/by-uuid’ et
autres chemins similaires pour obtenir le même résultat, ce n’est pas
recommandé : ces nœuds de périphériques spéciaux sont créés par le démon
udev et peuvent ne pas être disponibles au moment de monter le
périphérique.

   (2) La forme ‘uuid’ s’attend à des UUID sur 16 octets définis dans la
RFC 4122 (https://tools.ietf.org/html/rfc4122). C’est la forme des UUID
utilisées par la famille de systèmes de fichiers ext2 et d’autres, mais
ce n’est pas le même type d’UUID que ceux qui se trouvent sur les
systèmes de fichiers FAT par exemple


File: guix.fr.info,  Node: Système de fichier Btrfs,  Up: Systèmes de fichiers

10.3.1 Système de fichier Btrfs
-------------------------------

Btrfs a des particularités, comme les sous-volumes, qui méritent d’être
expliquées plus en détail. La section suivante tente de couvrir les
utilisations de base ainsi que les utilisations complexes d’un système
de fichiers Btrfs avec le système Guix.

   Dans son usage le plus simple, un système de fichier Btrfs peut être
décrit, par exemple, par :

     (file-system
       (mount-point "/home")
       (type "btrfs")
       (device (file-system-label "my-home")))

   L’exemple ci-dessous est plus complexe, car il utilise un sous-volume
de Btrfs, nommé ‘rootfs’. Le système de fichiers Btrfs parent est appelé
‘my-btrfs-pool’, et se trouve sur un périphérique crypté (d’où la
dépendance à l’égard de ‘mapped-devices’) :

     (file-system
       (device (file-system-label "my-btrfs-pool"))
       (mount-point "/")
       (type "btrfs")
       (options "subvol=rootfs")
       (dependencies mapped-devices))

   Certains chargeurs d’amorçage, par exemple GRUB, ne montent une
partition Btrfs qu’à son niveau supérieur au début du démarrage, et
s’appuient sur leur configuration pour se référer au chemin correct du
sous-volume à l’intérieur de ce niveau supérieur. Les chargeurs
d’amorçage fonctionnant de cette manière produisent généralement leur
configuration sur un système en cours d’exécution où les partitions
Btrfs sont déjà montées et où les informations sur les sous-volumes sont
facilement disponibles. Par exemple, ‘grub-mkconfig’, la commande de
générateur de configuration livrée avec GRUB, lit ‘/proc/self/mountinfo’
pour déterminer le chemin de niveau supérieur d’un sous-volume.

   Guix System produit une configuration de bootloader en utilisant la
configuration du système d’exploitation comme seule entrée ; il est donc
nécessaire d’extraire le nom du sous-volume sur lequel vit ‘/gnu/store’
(s’il existe) de cette configuration du système d’exploitation. Pour
mieux illustrer cela, considérons un sous-volume nommé "rootfs" qui
contient les données du système de fichiers racine. Dans une telle
situation, le chargeur de démarrage GRUB ne verrait que le niveau
supérieur de la partition Btrfs de la racine, par exemple :

     /                   (niveau supérieur)
     ├── rootfs          (répertoire des sous-volumes)
         ├── gnu         (répertoire normal)
             ├── store   (répertoire normal)
     [...]

   Ainsi, le nom du sous-volume doit être précédé du chemin ‘/gnu/store’
du noyau, des binaires initrd et de tout autre fichier mentionné dans la
configuration GRUB qui doit être trouvé au début du démarrage.

   L’exemple suivant montre une hiérarchie imbriquée de sous-volumes et
de répertoires :

     /                   (niveau supérieur)
     ├── rootfs          (sous-volume)
         ├── gnu         (répertoire normal)
             ├── store   (sous-volume)
     [...]

   Ce scénario fonctionnerait sans monter le sous-volume « store ». Le
montage de "rootfs" est suffisant, puisque le nom du sous-volume
correspond à son point de montage prévu dans la hiérarchie du système de
fichiers. Une autre solution consiste à faire référence au sous-volume «
store » en définissant l’option ‘subvol’ soit ‘/rootfs/gnu/store’ soit
‘rootfs/gnu/store’.

   Enfin, un exemple plus élaboré de sous-volumes imbriqués :

     /                           (niveau supérieur)
     ├── root-snapshots          (sous-volume)
         ├── root-current        (sous-volume)
             ├── guix-store      (sous-volume)
     [...]

   Ici, le sous-volume « guix-store » ne correspond pas à son point de
montage prévu, il est donc nécessaire de le monter. Le sous-volume doit
être entièrement spécifié, en passant son nom de fichier à l’option
‘subvol’. Par exemple, le sous-volume « guix-store » peut être monté sur
‘/gnu/store’ en utilisant une déclaration de système de fichiers telle
que :

     (file-system
       (device (file-system-label "btrfs-pool-1"))
       (mount-point "/gnu/store")
       (type "btrfs")
       (options "subvol=root-snapshots/root-current/guix-store,\
     compress-force=zstd,space_cache=v2"))


File: guix.fr.info,  Node: Périphériques mappés,  Next: Comptes utilisateurs,  Prev: Systèmes de fichiers,  Up: Configuration du système

10.4 Périphériques mappés
=========================

Le noyau Linux a une notion de “mappage de périphériques” : un
périphérique bloc, comme une partition sur un disque dur, peut être
“mappé” sur un autre périphérique, typiquement dans ‘/dev/mapper’, avec
des calculs supplémentaires sur les données qui naviguent entre les
deux(1). Un exemple typique est le mappage de périphériques chiffrés :
toutes les écritures sont sur le périphérique mappé sont chiffrées,
toutes les lectures déchiffrées, de manière transparente. Guix étend
cette notion en considérant que tout périphérique ou ensemble de
périphériques qui sont “transformés” d’une certaine manière créent un
nouveau périphérique ; par exemple, les périphériques RAID sont obtenus
en “assemblant” plusieurs autres périphériques, comme des disque ou des
partitions, en un nouveau périphérique en tant qu’unique partition.

   Les périphériques mappés sont déclarés avec la forme ‘mapped-device’,
définie comme suit ; par exemple, voir ci-dessous.

 -- Type de données : mapped-device
     Les objets de ce type représentent des mappages de périphériques
     qui seront effectués au démarrage du système.

     ‘source’
          C’est soit une chaîne qui spécifie le nom d’un périphérique
          bloc à projeter, comme ‘"/dev/sda3"’, soit une liste de
          plusieurs périphériques à assembler pour en créer un nouveau.
          Dans le cas de LVM, c’est une chaîne spécifiant le nom du
          groupe de volume à projeter.

     ‘target’
          Cette chaîne spécifie le nom du périphérique mappé qui en
          résulte. Pour les mappeurs noyaux comme les périphériques
          chiffrés de type ‘luks-device-mapping’, spécifier
          ‘"ma-partition"’ crée le périphérique
          ‘"/dev/mapper/ma-partition"’. Pour les périphériques RAID de
          type ‘raid-device-mapping’, il faut donner le nom complet
          comme ‘"/dev/md0"’. Les volumes logiques LVM de type
          ‘lvm-device-mapping’ doivent être spécifiés comme étant
          ‘"VGNAME-LVNAME"’.

     ‘targets’
          Cette liste de chaînes spécifie les noms des périphériques
          projetés s’il y en a plusieurs. Le format est identique à
          TARGET.

     ‘type’
          Ce doit être un objets ‘mapped-device-kind’, qui spécifie
          comment SOURCE est mappés sur TARGET.

 -- Variable Scheme : luks-device-mapping
     Cela définie les périphériques blocs chiffrés en LUKS avec
     ‘cryptsetup’ du paquet du même nom. Elle s’appuie sur le module du
     noyau Linux ‘dm-crypt’.

 -- Variable Scheme : raid-device-mapping
     Cela définie un périphérique RAID qui est assemblé avec la commande
     ‘mdadm’ du paquet du même nom. Elle nécessite un module noyau Linux
     approprié pour le niveau RAID chargé, comme ‘raid456’ pour RAID-4,
     RAID-5 et RAID-6 ou ‘raid10’ pour RAID-10.

 -- Variable Scheme : lvm-device-mapping
     Cela définie un ou plusieurs volumes logiques pour le Gestionnaire
     de Volume Logique (LVM) (https://www.sourceware.org/lvm2/) de
     Linux. Le groupe de volume est activé par la commande ‘vgchange’ du
     paquet ‘lvm2’.

   L’exemple suivant spécifie un mappage de ‘/dev/sda3’ vers
‘/dev/mapper/home’ avec LUKS — Linux Unified Key Setup
(https://gitlab.com/cryptsetup/cryptsetup), un mécanisme standard pour
chiffrer les disques. Le périphérique ‘/dev/mapper/home’ peut ensuite
être utilisé comme ‘device’ d’une déclaration ‘file-system’ (*note
Systèmes de fichiers::).

     (mapped-device
       (source "/dev/sda3")
       (target "home")
       (type luks-device-mapping))

   Autrement, pour devenir indépendant du numéro de périphérique, on
peut obtenir l’UUID LUKS (“l’identifiant unique”) du périphérique source
avec une commande comme :

     cryptsetup luksUUID /dev/sda3

   et l’utiliser ainsi :

     (mapped-device
       (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
       (target "home")
       (type luks-device-mapping))

   Il est aussi désirable de chiffrer l’espace d’échange, puisque
l’espace d’échange peut contenir des données sensibles. Une manière de
faire cela est d’utiliser un fichier d’échange dans un système de
fichiers sur un périphérique mappé avec un chiffrement LUKS. De cette
manière, le fichier d’échange est chiffré parce que tout le périphérique
est chiffré. *Note Disk Partitioning: Préparer l'installation, pour un
exemple.

   Un périphérique RAID formé des partitions ‘/dev/sda1’ et ‘/dev/sdb1’
peut être déclaré ainsi :

     (mapped-device
       (source (list "/dev/sda1" "/dev/sdb1"))
       (target "/dev/md0")
       (type raid-device-mapping))

   Le périphérique ‘/dev/md0’ peut ensuite être utilisé comme ‘device’
d’une déclaration ‘file-system’ (*note Systèmes de fichiers::).
Remarquez que le niveau de RAID n’a pas besoin d’être donné ; il est
choisi pendant la création initiale du périphérique RAID et est ensuite
déterminé automatiquement.

   Les volumes logiques LVM « alpha » et « beta » du groupe de volumes «
vg0 » se déclarent de cette façon :

     (mapped-device
       (source "vg0")
       (targets (list "vg0-alpha" "vg0-beta"))
       (type lvm-device-mapping))

   Les périphériques ‘/dev/mapper/vg0-alpha’ et ‘/dev/mapper/vg0-beta’
sont maintenant utilisables comme ‘device’ d’une déclaration
‘file-system’ (*note Systèmes de fichiers::).

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

   (1) Remarquez que le Hurd ne fait pas de différence entre le concept
de « périphérique mappé » et celle d’un système de fichiers : les deux
correspondent à la _traduction_ des opérations d’entrée-sortie faites
sur un fichier en des opérations sur ce qui le contient. Ainsi, le Hurd
implémente les périphériques mappés, comme les systèmes de fichiers,
avec le mécanisme des “traducteurs” générique (*note
(hurd)Translators::).


File: guix.fr.info,  Node: Comptes utilisateurs,  Next: Disposition du clavier,  Prev: Périphériques mappés,  Up: Configuration du système

10.5 Comptes utilisateurs
=========================

Les comptes utilisateurs et les groupes sont gérés entièrement par la
déclaration ‘operating-system’. Ils sont spécifiés avec les formes
‘user-account’ et ‘user-group’ :

     (user-account
       (name "alice")
       (group "users")
       (supplementary-groups '("wheel"   ;permet d'utiliser sudo, etc.
                               "audio"   ;carte son
                               "video"   ;périphériques réseaux comme les webcams
                               "cdrom")) ;le bon vieux CD-ROM
       (comment "Bob's sister"))

   Voici un compte d’utilisateur·rice qui utilise un shell différent et
un répertoire d’accueil personnalisé (le répertoire par défaut serait
‘"/home/bob"’) :

     (user-account
       (name "bob")
       (group "users")
       (comment "Alice's bro")
       (shell (file-append zsh "/bin/zsh"))
       (home-directory "/home/robert"))

   Lors du démarrage ou à la fin de ‘guix system reconfigure’, le
système s’assure que seuls les comptes utilisateurs et les groupes
spécifiés dans la déclaration ‘operating-system’ existent, et avec les
propriétés spécifiées. Ainsi, les modifications ou les créations de
comptes ou de groupes effectuées directement en invoquant des commandes
comme ‘useradd’ sont perdue à la reconfiguration ou au redémarrage. Cela
permet de s’assurer que le système reste exactement tel que déclaré.

 -- Type de données : user-account
     Les objets de se type représentent les comptes utilisateurs. Les
     membres suivants peuvent être spécifiés :

     ‘name’
          Le nom du compte utilisateur.

     ‘group’
          C’est le nom (une chaîne) ou un identifiant (un nombre) du
          groupe utilisateur auquel ce compte appartient.

     ‘supplementary-groups’ (par défaut : ‘'()’)
          Éventuellement, cela peut être définie comme une liste de noms
          de groupes auxquels ce compte appartient.

     ‘uid’ (par défaut : ‘#f’)
          C’est l’ID utilisateur de ce compte (un nombre) ou ‘#f’. Dans
          ce dernier cas, le nombre est choisi automatiquement par le
          système à la création du compte.

     ‘comment’ (par défaut : ‘""’)
          Un commentaire à propos du compte, comme le nom complet de
          l’utilisateur.

     ‘home-directory’
          C’est le nom du répertoire personnel du compte.

     ‘create-home-directory?’ (par défaut : ‘#t’)
          Indique si le répertoire personnel du compte devrait être créé
          s’il n’existe pas déjà.

     ‘shell’ (par défaut : Bash)
          C’est une G-expression qui désigne le nom de fichier d’un
          programme utilisé comme shell (*note G-Expressions::). Par
          exemple, vous pourriez vous référer à l’exécutable Bash comme
          ceci :

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

          ... et à l’ exécutable Zsh comme ceci :

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

     ‘system?’ (par défaut : ‘#f’)
          C’est une valeur booléenne qui indique si le compte est un
          compte « système ». Les comptes systèmes sont parfois traités
          à part ; par exemple, les gestionnaires de connexion
          graphiques ne les liste pas.

     ‘password’ (par défaut : ‘#f’)
          Vous laisseriez normalement ce champ à ‘#f’ et initialiseriez
          les mots de passe utilisateurs en tant que ‘root’ avec la
          commande ‘passwd’, puis laisseriez l’utilisateur le changer
          avec ‘passwd’. Les mots de passes définis avec ‘passwd’ sont
          bien sûr préservés après redémarrage et reconfiguration.

          Si vous voulez _vraiment_ définir un mot de passe pour un
          compte, alors ce champ doit contenir le mot de passe chiffré,
          comme une chaîne de caractère. Vous pouvez utiliser la
          procédure ‘crypt’ pour cela :

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

                 ;; Spécifie un mot de passe initial hashé avec sha512.
                 (password (crypt "InitialPassword!" "$6$abc")))

               Remarque : Le hash de ce mot de passe initial sera
               disponible dans un fichier dans ‘/gnu/store’, lisible par
               tous les utilisateurs, donc cette méthode est à utiliser
               avec soin.

          *Note (libc)Passphrase Storage::, pour plus d’information sur
          le chiffrement des mots de passe et *note (guile)Encryption::,
          pour des informations sur la procédure ‘crypt’ de Guile.

   Les déclarations de groupes sont encore plus simple :

     (user-group (name "students"))

 -- Type de données : user-group
     C’est le type pour, hé bien, les comptes utilisateurs. Il n’y a que
     quelques champs :

     ‘name’
          Le nom du groupe.

     ‘id’ (par défaut : ‘#f’)
          L’identifiant du groupe (un nombre). S’il est ‘#f’, un nouveau
          nombre est alloué automatiquement lorsque le groupe est créé.

     ‘system?’ (par défaut : ‘#f’)
          Cette valeur booléenne indique si le groupe est un groupe «
          système ». les groupes systèmes ont un numéro d’ID bas.

     ‘password’ (par défaut : ‘#f’)
          Quoi, les groupes utilisateurs peuvent avoir des mots de passe
          ? On dirait bien. À moins que la valeur ne soit ‘#f’, ce champ
          spécifie le mot de passe du groupe.

   Par simplicité, une variable liste les groupes utilisateurs de base
auxquels on pourrait s’attendre :

 -- Variable Scheme : %base-groups
     C’est la liste des groupes utilisateur de base que les utilisateurs
     et les paquets s’attendent à trouver sur le système. Cela comprend
     des groupes comme « root », « wheel » et « users », ainsi que des
     groupes utilisés pour contrôler l’accès à certains périphériques,
     comme « audio », « disk » et « cdrom ».

 -- Variable Scheme : %base-user-accounts
     C’est la liste des compte du système de base que les programmes
     peuvent s’attendre à trouver sur un système GNU/Linux, comme le
     compte « nobody ».

     Remarquez que le compte « root » n’est pas défini ici. C’est un cas
     particulier et il est automatiquement ajouté qu’il soit spécifié ou
     non.


File: guix.fr.info,  Node: Disposition du clavier,  Next: Régionalisation,  Prev: Comptes utilisateurs,  Up: Configuration du système

10.6 Disposition du clavier
===========================

Pour spécifier ce que fait chaque touche de votre clavier, vous devez
dire au système d’exploitation quel “disposition du clavier” vous voulez
utiliser. Par défaut, lorsque rien n’est spécifié, la disposition QWERTY
pour l’anglais américain pour les claviers 105 touches est utilisée.
Cependant, les germanophones préfèrent généralement la disposition
QWERTZ, les francophones la disposition AZERTY etc. ; les hackers
peuvent préférer Dvorak ou bépo, et peuvent même vouloir personnaliser
plus en détails l’effet de certaines touches. Cette section explique
comment faire cela.

   Il y a trois composants qui devront connaître votre disposition du
clavier :

   • Le _chargeur d’amorçage_ peut avoir besoin de connaître la
     disposition clavier que vous voulez utiliser (*note
     ‘keyboard-layout’: Configuration du chargeur d'amorçage.). C’est
     utile si vous voulez par exemple vous assurer que vous pouvez
     saisir la phrase de passe de votre partition racine chiffrée avec
     la bonne disposition.

   • Le _noyau du système d’exploitation_, Linux, en aura besoin pour
     configurer correctement la console (*note ‘keyboard-layout’:
     référence de système d'exploitation.).

   • Le _serveur d’affichage graphique_, habituellement Xorg, a aussi sa
     propre idée sur la disposition du clavier à utiliser (*note
     ‘keyboard-layout’: Système de fenêtrage X.).

   Guix vous permet de configurer les trois séparément mais,
heureusement, il vous permet de partager la même disposition du clavier
pour chacun des trois composants.

   Les dispositions de clavier sont représentées par des enregistrements
créés par la procédure ‘keyboard-layout’ de ‘(gnu system keyboard)’. En
suivant l’extension clavier de X (XKB), chaque disposition a quatre
attributs : un nom (souvent un code de langue comme « fi » pour le
finnois ou « jp » pour le japonais), un nom de variante facultatif, un
nom de modèle de clavier facultatif et une liste éventuellement vide
d’options supplémentaires. Dans la plupart des cas, vous n’aurez besoin
que du nom de la disposition.

 -- Procédure Scheme : keyboard-layout NOM [VARIANTE] [#:model]
          [#:options '()]
     Renvoie une nouvelle disposition de clavier avec les NOM et
     VARIANTE donnés.

     NOM doit être une chaine comme ‘"fr"’ ; VARIANTE doit être une
     chaine comme ‘"bepo"’ ou ‘"nodeadkeys"’. Vois le paquet
     ‘xkeyboard-config’ pour les options valides.

   Voici quelques exemples :

     ;; La disposition QWERTZ allemande.  Ici on suppose que vous utilisez un clavier
     ;; type « pc105 » standard.
     (keyboard-layout "de")

     ;; La variante bépo de la disposition française.
     (keyboard-layout "fr" "bepo")

     ;; La disposition catalane.
     (keyboard-layout "es" "cat")

     ;; Disposition du clavier en langue arabe avec « Alt-Shift » pour passer à la mise en page US.
     (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))

     ;; La disposition espagnole américaine.  En plus, la touche
     ;; « Verr. Maj. » est utilisée comme touche « Ctrl » supplémentaire,
     ;; et la touche « Menu » est utilisée comme touche « Compose » pour
     ;; saisir des lettres accentuées.
     (keyboard-layout "latam"
                      #:options '("ctrl:nocaps" "compose:menu"))

     ;; La disposition russe pour un clavier de ThinkPad.
     (keyboard-layout "ru" #:model "thinkpad")

     ;; La disposition « US internationale », qui est comme la disposition US plus
     ;; des touches mortes pour saisir des caractères accentués.  Cet exemple est pour
     ;; un clavier de MacBook Apple.
     (keyboard-layout "us" "intl" #:model "macbook78")

   Voir le répertoire ‘share/X11/xkb’ du paquet ‘xkeyboard-config’ pour
une liste complète des disposition, des variantes et des modèles pris en
charge.

   Disons que vous voulez que votre système utilise la disposition
turque sur tout le système — du chargeur d’amorçage à Xorg en passant
par la console. Voici ce que votre configuration du système contiendrait
:

     ;; Utiliser la disposition turque pour le chargeur d'amorçage,
     ;; la console et Xorg.

     (operating-system
       ;; ...
       (keyboard-layout (keyboard-layout "tr"))  ;pour la console
       (bootloader (bootloader-configuration
                     (bootloader grub-efi-bootloader)
                     (target "/boot/efi")
                     (keyboard-layout keyboard-layout))) ;pour GRUB
       (services (cons (set-xorg-configuration
                         (xorg-configuration             ;pour Xorg
                           (keyboard-layout keyboard-layout)))
                       %desktop-services)))

   Dans l’exemple ci-dessus, pour GRUB et pour Xorg, nous nous référons
simplement au champ ‘keyboard-layout’ au dessus, mais on pourrait aussi
bien se référer à une autre disposition. La procédure
‘set-xorg-configuration’ communique la configuration Xorg désirée au
gestionnaire de connexion, par défaut GDM.

   Nous avons discuté de la manière de spécifier la disposition du
clavier _par défaut_ lorsque votre système démarre, mais vous pouvez
aussi l’ajuster à l’exécution :

   • Si vous utilisez GNOME, son panneau de configuration contient une
     entrée « Région & Langues » où vous pouvez choisir une ou plusieurs
     dispositions du clavier.

   • Sous Xorg, la commande ‘sexkbmap’ (du paquet du même nom) vous
     permet de changer la disposition actuelle. Par exemple, voilà
     comment changer la disposition pour un Dvorak américain :

          setxkbmap us dvorak

   • La commande ‘loadkey’ change la disposition du clavier dans la
     console Linux. Cependant, remarque que ‘loadkeys’ n’utilise _pas_
     la catégorisation des dispositions XKB décrite plus haut. La
     commande suivante charge la disposition bépo française :

          loadkeys fr-bepo


File: guix.fr.info,  Node: Régionalisation,  Next: Services,  Prev: Disposition du clavier,  Up: Configuration du système

10.7 Régionalisation
====================

Un “paramètre linguistique” définie les conventions culturelles d’une
langue et d’une région particulières (*note (libc)Régionalisation::).
Chaque paramètre linguistique a un nom de la forme
‘LANGUE_TERRITOIRE.JEUDECARACTÈRES’ — p. ex. ‘fr_LU.utf8’ désigne le
paramètre linguistique pour le français, avec les conventions
culturelles du Luxembourg, en utilisant l’encodage UTF-8.

   Normalement, vous voudrez spécifier les paramètres linguistiques par
défaut pour la machine en utilisant le champ ‘locale’ de la déclaration
‘operating-system’ (*note ‘locale’: référence de système
d'exploitation.).

   Les paramètres régionaux choisis sont automatiquement ajoutés aux
définitions des “paramètres régionaux” connues par le système au besoin,
avec le jeu de caractères inféré à partir de son nom, p. ex.
‘bo_CN.utf8’ supposera qu’il faut utiliser le jeu de caractères ‘UTF-8’.
Des définitions supplémentaires peuvent être spécifiées dans le champ
‘locale-definitions’ de ‘operating-system’ — c’est utile par exemple si
le jeu de caractères n’a pas été inféré à partir du nom. L’ensemble par
défaut de définitions comprend certains paramètres linguistiques parmi
les plus utilisés, mais pas toutes les variantes disponibles, pour
gagner de la place.

   Par exemple, pour ajouter les paramètres pour le frison septentrional
en Allemagne, la valeur de ce champ serait :

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

   De me, pour gagner de la place, on peut vouloir lister dans
‘locale-definitions’ seulement les paramètres qui sont vraiment
utilisés, comme dans :

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

   Les définitions compilées de locale sont disponibles à
‘/run/current-system/locale/X.Y’, où ‘X.Y’ est la version de la libc,
qui est l’emplacement par défaut où la GNU libc fournie par Guix
recherche les données locales. Il est possible d’y remédier en utilisant
la variable d’environnement ‘LOCPATH’ (*note ‘LOCPATH’ et les paquets
locaux: locales-and-locpath.).

   La forme ‘locale-definition’ est fournie par le module ‘(gnu system
locale)’. Des détails sont disponibles plus bas.

 -- Type de données : locale-definition
     C’est le type de données d’une définition de paramètres
     linguistiques.

     ‘name’
          Le nom du paramètre linguistique. *Note (libc)Locale Names::,
          pour en savoir plus sur les noms de paramètres linguistiques.

     ‘source’
          Le nom de la source pour ce paramètre linguistique. C’est
          typiquement la partie ‘LANGUE_TERRITOIRE’ du nom du paramètre.

     ‘charset’ (par défaut : ‘"UTF-8"’)
          Le « jeu de caractères » d’un paramètre linguistique, défini
          par l’IANA (https://www.iana.org/assignments/character-sets).

 -- Variable Scheme : %default-locale-definitions
     Une liste des paramètres linguistiques UTF-8 couramment utilisés,
     utilisée comme valeur par défaut pour le champ ‘locale-definitions’
     des déclarations ‘operating-system’.

     Ces définitions de paramètres linguistiques utilisent le “jeu de
     caractère normalisé” pour la partie qui suit le point dans le nom
     (*note normalized codeset: (libc)Using gettextized software.). Donc
     par exemple il y a ‘uk_UA.utf8’ mais _pas_, disons, ‘uk_UA.UTF-8’.

10.7.1 Considérations sur la compatibilité des données linguistiques
--------------------------------------------------------------------

Les déclaration ‘operating-system’ fournissent un champ ‘locale-libcs’
pour spécifier les paquets GNU libc à utiliser pour compiler les
déclarations de paramètres linguistiques (*note référence de système
d'exploitation::). « Pourquoi je devrais m’en soucier ? », vous
demandez-vous sûrement. Hé bien il se trouve que le format binaire des
données linguistique est parfois incompatible d’une version de la libc à
une autre.

   Par exemple, un programme lié à la version 2.21 de la libc est
incapable de lire les données locales produites avec la libc 2.22 ; pire
encore, ce programme _aborts_ au lieu d’ignorer simplement les données
locales incompatibles(1). De même, un programme lié à la libc 2.22 peut
lire la plupart des données locales de la libc 2.21, mais pas toutes (en
particulier, les données ‘LC_COLLATE’ sont incompatibles) ; ainsi, les
appels à ‘setlocale’ peuvent échouer, mais les programmes ne
s’arrêteront pas.

   Le « problème » avec Guix c’est que les utilisateurs ont beaucoup de
liberté : ils peuvent choisir s’ils veulent et quand ils veulent mettre
à jour les logiciels de leur profil, et peuvent utiliser une version
différente de la libc de celle que l’administrateur système utilise pour
construire les données linguistiques du système global.

   Heureusement, les utilisateur·rice·s non privilégié·e·s peuvent aussi
installer leurs propres données linguistiques et définir GUIX_LOCPATH
comme il le faut (*note ‘GUIX_LOCPATH’ and locale packages:
locales-and-locpath.).

   Cependant, c’est encore mieux si les données linguistiques du système
dans ‘/run/current-system/locale’ étaient construites avec les versions
de la libc utilisées sur le système, pour que tous les programmes
puissent y accéder — c’est surtout crucial sur un système
multi-utilisateurs. Pour cela, l’administrateur peut spécifier plusieurs
paquets de la libc dans le champ ‘locale-libcs’ de ‘operating-system’ :

     (use-package-modules base)

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

   Cet exemple créera un système contenant les définitions des
paramètres linguistiques pour la libc 2.21 et pour la version actuelle
de la libc dans ‘/run/current-system/locale’.

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

   (1) Versions 2.23 et suivantes de GNU libc ignorera simplement les
données locales incompatibles, ce qui est déjà une amélioration.


File: guix.fr.info,  Node: Services,  Next: Programmes setuid,  Prev: Régionalisation,  Up: Configuration du système

10.8 Services
=============

Une part importante de la préparation d’une déclaration
‘operating-system’ est la liste des “services systèmes” et de leur
configuration (*note Utiliser le système de configuration::). Les
services systèmes sont typiquement des démons lancés au démarrage ou
d’autres actions requises à ce moment-là — p. ex. configurer les accès
réseaux.

   Guix a une définition large de « service » (*note Composition de
services::), mais beaucoup de services sont gérés par le GNU Shepherd
(*note Services Shepherd::). Sur un système lancé, la commande ‘herd’
vous permet de lister les services disponibles, montrer leur statut, les
démarrer et les arrêter, ou faire d’autres opérations spécifiques (*note
(shepherd)Jump Start::). Par exemple :

     # herd status

   La commande ci-dessus, lancée en ‘root’, liste les services
actuellement définis. La commande ‘herd doc’ montre un synopsis du
service donné et ses actions associées :

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

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

   Les sous-commandes ‘start’, ‘stop’ et ‘restart’ ont l’effet auquel on
s’attend. Par exemple, les commande suivantes stoppent le service nscd
et redémarrent le serveur d’affichage Xorg :

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

   Les sections suivantes documentent les services disponibles, en
commençant par les services de base qui peuvent être utilisés avec une
déclaration ‘operating-system’.

* Menu:

* Services de base::         Services systèmes essentiels.
* Exécution de tâches planifiées::  Le service mcron.
* Rotation des journaux::    Le service rottlog.
* Services réseau::         Paramètres réseau, démon SSH, etc.
* Mises à jour non surveillées (Unattended Upgrades)::  Mise à jour du
                                                            système
                                                            automatisé.
* Système de fenêtrage X::  Affichage graphique.
* Services d'impression::    Support pour les imprimantes locales et
                               distantes.
* Services de bureaux::      D-Bus et les services de bureaux.
* Services de son::          Services ALSA et Pulseaudio.
* Services de bases de données::  Bases SQL, clefs-valeurs, etc.
* Services de courriels::    IMAP, POP3, SMTP, et tout ça.
* Services de messagerie::   Services de messagerie.
* Services de téléphonie::  Services de téléphonie.
* Services de partage de fichiers::  Services de partage de fichiers.
* Services de surveillance::  Services de surveillance.
* Services Kerberos::        Services Kerberos.
* Services LDAP::            Services LDAP.
* Services web::             Services web.
* Services de certificats::  Certificats TLS via Let’s Encrypt.
* Services DNS::             Démons DNS.
* Services VPN::             Démons VPN.
* Système de fichiers en réseau::  Services liés à NFS.
* Intégration continue::    Les services Cuirass et Laminar.
* Services de gestion de l'énergie::  Augmenter la durée de vie de la
                                         batterie.
* Services audio::           MPD.
* Services de virtualisation::  Services de virtualisation.
* Services de contrôle de version::  Fournit des accès distants à des
                                        dépôts Git.
* Services de jeu::          Serveurs de jeu.
* Service PAM de montage::   Service pour monter des volumes quand vous vous
                               connectez.
* Services Guix::            Services liés spécifiquement à Guix.
* Services Linux::           Services liés au noyau Linux.
* Services Hurd::            Services spécifiques pour un système Hurd.
* Services divers::          D’autres services.


File: guix.fr.info,  Node: Services de base,  Next: Exécution de tâches planifiées,  Up: Services

10.8.1 Services de base
-----------------------

Le module ‘(gnu services base)’ fournit des définitions de services pour
les services de base qu’on peut attendre du système. Les services
exportés par ce module sort listés ci-dessous.

 -- Variable Scheme : %base-services
     Cette variable contient une liste de services de base (*note Types
     service et services::, pour plus d’informations sur les objets
     service) qu’on peut attendre du système : un service de connexion
     (mingetty) sur chaque tty, syslogd, le démon de cache de noms de la
     libc (nscd), le gestionnaire de périphériques udev, et plus.

     C’est la valeur par défaut du champ ‘services’ des déclarations
     ‘operating-system’. Habituellement, lors de la personnalisation
     d’un système, vous voudrez ajouter des services à ceux de
     ‘%base-services’, comme ceci :

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

 -- Variable Scheme : special-files-service-type
     C’est le service qui met en place des « fichiers spéciaux » comme
     ‘/bin/sh’ ; une instance de ce service fait partie de
     ‘%base-services’.

     La valeur associée avec les services ‘special-files-service-type’
     doit être une liste de couples dont le premier élément est le «
     fichier spécial » et le deuxième sa cible. Par défaut il s’agit de
     :

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

     Si vous voulez ajouter, disons, ‘/usr/bin/env’ à votre système,
     vous pouvez changer cela en :

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

     Comme cela fait partie de ‘%base-services’, vous pouvez utiliser
     ‘modify-services’ pour personnaliser l’ensemble des fichiers
     spéciaux (*note ‘modify-services’: Référence de service.). Mais la
     manière la plus simple d’ajouter un fichier spécial est via la
     procédure ‘extra-special-file’ (voir ci-dessous).

 -- Procédure Scheme : extra-special-file FILE TARGET
     Utilise TARGET comme « fichier spécial » FILE.

     Par exemple, ajouter l’une des lignes suivantes au champ ‘services’
     de votre déclaration de système d’exploitation crée un lien
     symbolique ‘/usr/bin/env’ :

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

 -- Procédure Scheme : host-name-service NAME
     Renvoie un service qui paramètre le nom d’hôte à NAME.

 -- Variable Scheme : console-font-service-type
     Installez les polices données sur les ttys spécifiés (les polices
     sont par console virtuelle sur le noyau Linux). La valeur de ce
     service est une liste de paires tty/polices. La police peut être le
     nom d’une police fournie par le paquet ‘kbd’ ou tout argument
     valide de ‘setfont’, comme dans cet exemple :

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

 -- Procédure Scheme : login-service CONFIG
     Renvoie un service pour lancer login en suivant CONFIG, un objet
     ‘<login-configuration>’ qui spécifie le message du jour, entre
     autres choses.

 -- Type de données : login-configuration
     Le type de données qui représente la configuration de login.

     ‘motd’
          Un objet simili-fichier contenant le « message du jour ».

     ‘allow-empty-passwords?’ (par défaut : ‘#t’)
          Permet les mots de passes vides par défaut pour que les
          utilisateurs puissent se connecter au compte « root » la
          première fois après sa création.

 -- Procédure Scheme : mingetty-service CONFIG
     Renvoie un service qui lance mingetty en suivant CONFIG, un objet
     ‘<mingetty-configuration>’, qui spécifie le tty à lancer entre
     autres choses.

 -- Type de données : mingetty-configuration
     C’est le type de données représentant la configuration de Mingetty,
     qui fournit l’implémentation par défaut de l’écran de connexion des
     consoles virtuelles.

     ‘tty’
          Le nom de la console sur laquelle tourne ce Mingetty, p. ex.
          ‘"tty1"’.

     ‘auto-login’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, ce champ doit être une chaîne de
          caractère dénotant le nom d’utilisateur pour lequel le système
          se connecte automatiquement. Lorsque la valeur est ‘#f’, il
          faut entrer un nom d’utilisateur et un mot de passe pour se
          connecter.

     ‘login-program’ (par défaut : ‘#f’)
          Ce doit être soit ‘#f’, auquel cas le programme de connexion
          par défaut est utilisé (‘login’ de la suite d’outils Shadow),
          soit une gexp dénotant le nom d’un programme de connexion.

     ‘login-pause?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’ en plus de AUTO-LOGIN,
          l’utilisateur devrai appuyer sur une touche avant que le shell
          de connexion ne soit lancé.

     ‘clear-on-logout?’ (par défaut : ‘#t’)
          Lorsque la valeur est ‘#t’, l’écran sera nettoyé après la
          déconnexion.

     ‘mingetty’ (par défaut : MINGETTY)
          Le paquet Mingetty à utiliser.

 -- Procédure Scheme : agetty-service CONFIG
     Renvoie un service pour lancer agetty en suivant CONFIG, un objet
     ‘<agetty-configuration>’, qui spécifie le tty à lancer, entre
     autres choses.

 -- Type de données : agetty-configuration
     Ce type de données représente la configuration de agetty, qui
     implémente l’écran de connexion des consoles virtuelles et series.
     Voir la page de manuel de ‘agetty(8)’ pour plus d’informations.

     ‘tty’
          Le nom de la console sur laquelle cet agetty fonctionne, sous
          forme de chaîne de caractères, par exemple ‘"ttyS0"’. Cet
          argument est optionnel, il sera par défaut un port série
          raisonnable par défaut utilisé par le noyau Linux.

          Pour cela, s’il y a une valeur pour une option ‘agetty.tty’
          sur la ligne de commande du noyau, agetty extraira le nom du
          périphérique du port série à partir de cette option.

          Sinon et s’il y a une valeur pour une option ‘console’ avec un
          tty sur la ligne de commande du noyau Linux, agetty extraira
          le nom du périphérique du port série et l’utilisera.

          Dans les deux cas, agetty laissera les autres paramètres du
          périphérique série (baud, etc.) sans y toucher — dans l’espoir
          que Linux leur a assigné les bonnes valeurs.

     ‘baud-rate’ (par défaut : ‘#f’)
          Une chaîne qui contient une liste d’un ou plusieurs taux de
          baud séparés par des virgules, en ordre décroissant.

     ‘term’ (par défaut : ‘#f’)
          Une chaîne de caractères contenant la valeur utilisée pour la
          variable d’environnement ‘TERM’.

     ‘eight-bits?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, le tty est supposé être propre
          pour les caractères 8-bit et la détection de parité est
          désactivée.

     ‘auto-login’ (par défaut : ‘#f’)
          Lorsqu’un nom de connexion est passé comme une chaîne de
          caractères, l’utilisateur spécifié sera automatiquement
          connecté sans demande du nom d’utilisateur ni du mot de passe.

     ‘no-reset?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, ne vide pas les cflags du terminal
          (modes de contrôle).

     ‘host’ (par défaut : ‘#f’)
          Ceci accepte une chaîne de caractères contenant le
          "login_host", qui sera écrite dans le fichier
          ‘/var/run/utmpx’.

     ‘remote?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’ en plus de HOST, cette option
          ajoutera une option fakehost ‘-r’ à la ligne de commande du
          programme de connexion spécifié dans LOGIN-PROGRAM.

     ‘flow-control?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, active le contrôle de flux
          matériel (RTS/CTS).

     ‘no-issue?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, le contenu du fichier ‘/etc/issue’
          ne sera pas affiché avant de présenter l’écran de connexion.

     ‘init-string’ (par défaut : ‘#f’)
          Cette option accepte une chaîne de caractères qui sera envoyée
          au tty ou au modem avant toute autre chose. Elle peut être
          utilisée pour initialiser un modem.

     ‘no-clear?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, agetty ne nettoiera pas l’écran
          avant de montrer l’écran de connexion.

     ‘login-program’ (par défaut : (file-append shadow "/bin/login"))
          Cette option doit être soit une gexp dénotant le nom d’un
          programme de connexion, soit non définie, auquel cas la valeur
          par défaut est la commande ‘login’ de la suite d’outils
          Shadow.

     ‘local-line’ (par défaut : ‘#f’)
          Contrôle le drapeau CLOCAL. Cette option accepte l’un des
          trois symboles comme argument, ‘'auto’, ‘'always’ ou ‘'never’.
          Si la valeur est ‘#f’, la valeur par défaut choisie par agetty
          est ‘'auto’.

     ‘extract-baud?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, dit à agetty d’essayer d’extraire
          la taux de baud depuis les messages de statut produits par
          certains modems.

     ‘skip-login?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, ne demande par de nom
          d’utilisateur. Elle peut être utilisée avec le champ
          LOGIN-PROGRAM pour utiliser des systèmes de connexion non
          standards.

     ‘no-newline?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, n’affiche pas de retour à la ligne
          avant d’afficher le fichier ‘/etc/issue’.

     ‘login-options’ (par défaut : ‘#f’)
          Cette option accepte une chaîne de caractères contenant des
          options passées au programme login. Lorsqu’utilisé avec
          LOGIN-PROGRAM, soyez conscient qu’un utilisateur malicieux
          pourrait essayer de rentrer un nom d’utilisateur contenant des
          options incluses qui pourraient être analysées par le
          programme de connexion.

     ‘login-pause’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, attend qu’une touche soit appuyée
          avant de montrer l’écran de connexion. Cela peut être utilisé
          avec AUTO-LOGIN pour sauvegarder de la mémoire en lançant les
          shells de manière fainéante.

     ‘chroot’ (par défaut : ‘#f’)
          Change de racine dans le répertoire donné. Cette option
          accepte un chemin en tant que chaîne de caractères.

     ‘hangup?’ (par défaut : ‘#f’)
          Utilise l’appel système Linux ‘vhangup’ pour raccrocher
          virtuellement le terminal spécifié.

     ‘keep-baud?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, essaye de garder le taux de baud
          existant. Les taux de baud de BAUD-RATE sont utilisés lorsque
          agetty reçoit un caractères <BREAK>.

     ‘timeout’ (par défaut : ‘#f’)
          Lorsque la valeur est un nombre entier, termine la session si
          aucun nom d’utilisateur n’a pu être lu après TIMEOUT secondes.

     ‘detect-case?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, active le support pour la
          détection des terminaux en majuscule uniquement. Ce paramètre
          détectera qu’un nom d’utilisateur qui ne contient que des
          majuscules indique un terminal en majuscule et effectuera des
          conversion de majuscule en minuscule. Remarquez que cela ne
          fonctionne pas avec les caractères unicode.

     ‘wait-cr?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, attend que l’utilisateur ou le
          modem envoie un retour chariot ou un saut de ligne avant
          d’afficher ‘/etc/issue’ ou l’écran de connexion. Cela est
          typiquement utilisé avec l’option INIT-STRING.

     ‘no-hints?’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#t’, n’affiche par les astuces à propos
          des verrouillages numériques, majuscule et défilement.

     ‘no-hostname?’ (par défaut : ‘#f’)
          Par défaut, le nom d’hôte est affiché. Lorsque la valeur est
          ‘#t’, aucun nom d’hôte ne sera affiché.

     ‘long-hostname?’ (par défaut : ‘#f’)
          Par défaut, le nom d’hôte n’est affiché qu’après le premier
          point. Lorsque la valeur est ‘#t’, le nom d’hôte pleinement
          qualifié renvoyé par ‘gethostname’ ou ‘getaddrinfo’ sera
          affiché.

     ‘erase-characters’ (par défaut : ‘#f’)
          Cette option accepte une chaîne de caractères de caractères
          supplémentaires qui devraient être interprétés comme des
          effacements lorsque l’utilisateur les tape dans leur nom
          d’utilisateur.

     ‘kill-characters’ (par défaut : ‘#f’)
          Cette option accepte une chaîne de caractères qui devrait être
          interprétée comme signifiant « ignore tous les caractères
          précédents » (aussi appelé un caractère « kill ») lorsque
          l’utilisateur·rice tape son nom d’utilisateur·rice.

     ‘chdir’ (par défaut : ‘#f’)
          Cette option accepte, en tant que chaîne de caractères, un
          chemin vers un répertoire dans lequel se trouvera la commande
          avant la connexion.

     ‘delay’ (par défaut : ‘#f’)
          Cette option accepte, en tant qu’entier, le nombre de secondes
          à attendre avant d’ouvrir le tty et afficher l’écran de
          connexion.

     ‘nice’ (par défaut : ‘#f’)
          Cette option accepte, en tant qu’entier, la valeur « nice »
          avec laquelle le programme ‘login’ tourne.

     ‘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 à ‘agetty’ comme une liste de chaînes de
          caractères.

 -- Procédure Scheme : kmscon-service-type CONFIG
     Renvoie un service qui lance kmscon
     (https://www.freedesktop.org/wiki/Software/kmscon) d’après CONFIG,
     un objet ‘<kmscon-configuration>’, qui spécifie le tty sur lequel
     tourner, entre autres choses.

 -- Type de données : kmscon-configuration
     C’est le type de données représentant la configuration de Kscon,
     qui implémente l’écran de chargement de la console virtuelle.

     ‘virtual-terminal’
          Le nom de la console sur laquelle Kmscon tourne, p. ex.
          ‘"tty1"’.

     ‘login-program’ (par défaut : ‘#~(string-append #$shadow "/bin/login")’)
          Une gexp qui dénote le nom d’un programme de connexion. le
          programme de connexion par défaut est ‘login’ de la suite
          d’outils Shadow.

     ‘login-arguments’ (par défaut : ‘'("-p")’)
          Une liste d’arguments à passer à ‘login’.

     ‘auto-login’ (par défaut : ‘#f’)
          Lorsqu’un nom de connexion est passé comme une chaîne de
          caractères, l’utilisateur spécifié sera automatiquement
          connecté sans demande du nom d’utilisateur ni du mot de passe.

     ‘hardware-acceleration?’ (par défaut : #f)
          S’il faut utiliser l’accélération matérielle.

     ‘font-engine’ (par défaut : ‘"pango"’)
          Moteur de polices utilisé dans Kmscon.

     ‘font-size’ (par défaut : ‘12’)
          Taille de police utilisée par Kmscon.

     ‘kmscon’ (par défaut : KMSCON)
          Le paquet Kmscon à utiliser.

 -- Procédure Scheme : nscd-service [CONFIG] [#:glibc glibc]
          [#:name-services '()]
     Renvoie un service qui lance le démon de cache de services de noms
     de la libc (nscd) avec la CONFIG donnée — un objet
     ‘<nscd-configuration>’. *Note Name Service Switch::, pour un
     exemple.

     Parce que c’est pratique, le service du Shepherd pour nscd fournit
     les actions suivantes :

     ‘invalidate’
          Cela invalide le cache donné. Par exemple, en laçant :

               herd invalidate nscd hosts

          on invalide le cache de noms d’hôtes de nscd.

     ‘statistiques’
          Lancer ‘herd statistics nscd’ affiche des informations sur
          l’utilisation de nscd et des caches.

 -- Variable Scheme : %nscd-default-configuration
     C’est la valeur par défaut de ‘<nscd-configuration>’ (voir plus
     bas) utilisée par ‘nscd-service’. Elle utilise les caches définis
     par ‘%nscd-default-caches’ ; voir plus bas.

 -- Type de données : nscd-configuration
     C’est le type de données qui représente la configuration du démon
     de cache de services de noms (nscd).

     ‘name-services’ (par défaut : ‘'()’)
          Liste des paquets dénotant des “services de noms” qui doivent
          être visible pour nscd, p. ex. ‘(list NSS-MDNS)’.

     ‘glibc’ (par défaut : GLIBC)
          Objet de paquet qui dénote la Bibliothèque C de GNU qui
          fournit la commande ‘nscd’.

     ‘log-file’ (par défaut : ‘"/var/log/nscd.log"’)
          Nom du fichier journal de nscd. C’est là que les sorties de
          débogage sont envoyée lorsque ‘debug-level’ est strictement
          positif.

     ‘debug-level’ (par défaut : ‘0’)
          Entier qui dénote le niveau de débogage. Les entiers les plus
          grands signifient plus de sortie de débogage.

     ‘caches’ (par défaut : ‘%nscd-default-caches’)
          Liste d’objets ‘<nscd-cache>’ qui dénotent des choses à mettre
          en cache ; voir plus bas.

 -- Type de données : nscd-cache
     Type de données représentant une base de données de cache de nscd
     et ses paramètres.

     ‘database’
          C’est un symbole qui représente le nom de la base de donnée à
          mettre en cache. Les valeurs valide sont ‘passwd’, ‘group’,
          ‘hosts’ et ‘services’ qui désignent les bases de données NSS
          correspondantes (*note (libc)NSS Basics::).

     ‘positive-time-to-live’
     ‘negative-time-to-live’ (par défaut : ‘20’)
          Un entier qui représente le nombre de secondes pendant
          lesquelles un résultat positif ou négatif reste en cache.

     ‘check-files?’ (par défaut : ‘#t’)
          Indique s’il faut vérifier des mises à jours dans les fichiers
          correspondant à DATABASE.

          Par exemple, lorsque DATABASE est ‘hosts’, ce drapeau indique
          à nscd de vérifier s’il y a des mises à jour de ‘/etc/hosts’
          et de les prendre en compte.

     ‘persistent?’ (par défaut : ‘#t’)
          Indique si le cache devrait être stocké de manière persistante
          sur le disque.

     ‘shared?’ (par défaut : ‘#t’)
          Indique si le cache devrait être partagé entre les
          utilisateurs.

     ‘max-database-size’ (par défaut : 32 MiB)
          Taille maximale en octets de la base de données en cache.

 -- Variable Scheme : %nscd-default-caches
     Liste d’objets ‘<nscd-cache>’ utilisés par défaut par
     ‘nscd-configuration’ (voir plus haut).

     Elle active la mise en cache persistante et agressive des
     recherches de services et de noms d’hôtes. Ces derniers fournissent
     une recherche de noms d’hôtes plus performante, résiliente face à
     des serveurs de noms peu fiables et une protection de votre vie
     privée plus efficace — souvent le résultat des recherches de noms
     d’hôtes sont dans le cache local, donc les serveurs de nom externes
     n’ont même pas besoin d’être questionnés.

 -- Type de données : syslog-configuration
     Ce type de données représente la configuration du démon syslog.

     ‘syslogd’ (par défaut : ‘#~(string-append #$inetutils "/libexec/syslogd")’)
          Le démon syslog à utiliser.

     ‘config-file’ (par défaut : ‘%default-syslog.conf’)
          Le fichier de configuration de syslog à utiliser.

 -- Procédure Scheme : syslog-service CONFIG
     Renvoie un service qui lance un démon syslog en suivant CONFIG.

     *Note (inetutils)syslogd invocation::, pour plus d’informations sur
     la syntaxe du fichier de configuration.

 -- Variable Scheme : guix-service-type
     C’est le type de service qui lance le démon de construction,
     ‘guix-daemon’ (*note Invoquer guix-daemon::). Sa valeur doit être
     un enregistrement ‘guix-configuration’ décrit plus bas.

 -- Type de données : guix-configuration
     Ce type de données représente la configuration du démon de
     construction de Guix. *Note Invoquer guix-daemon:: pour plus
     d’informations.

     ‘guix’ (par défaut : GUIX)
          Le paquet Guix à utiliser.

     ‘build-group’ (par défaut : ‘"guixbuild"’)
          Nom du groupe des comptes utilisateurs de construction.

     ‘build-accounts’ (par défaut : ‘10’)
          Nombre de comptes utilisateurs de construction à créer.

     ‘authorize-key?’ (par défaut : ‘#t’)
          Indique s’il faut autoriser ou non les clefs de substituts
          listées dans ‘authorize-keys’ — par défaut celle de
          ‘ci.guix.gnu.org’ (*note Substituts::).

          Lorsque ‘authorize-key?’ est vrai, ‘/etc/guix/acl’ ne peut pas
          être changé en invoquant ‘guix archive --authorize’. vous
          devez plutôt ajuster ‘guix-configuration’ comme vous le
          souhaitez et reconfigurer le système. Cela s’assure que le
          fichier de configuration de votre système est auto-contenu.

               Remarque : Au démarrage ou la reconfiguration d’un
               système où ‘authorize-key?’ est vrai, le fichier
               ‘/etc/guix/acl’ existant est sauvegardé dans
               ‘/etc/guix/acl.bak’ s’il est déterminé qu’il a été
               modifié manuellement. Cela facilite la migration à partir
               de versions précédentes, qui permettaient des
               modifications en-place de ‘/etc/guix/acl’.

     ‘authorized-keys’ (par défaut : ‘%default-authorized-guix-keys’)
          La liste des fichiers des fichiers de clés autorisées pour les
          imports d’archives, en tant que liste de gexps sous forme de
          chaines (*note Invoquer guix archive::). Par défaut, elle
          contient celle de ‘ci.guix.gnu.org’ (*note Substituts::). Voir
          ‘substitute-urls’ ci-dessous pour apprendre comment la
          changer.

     ‘use-substitutes?’ (par défaut : ‘#t’)
          S’il faut utiliser les substituts.

     ‘substitute-urls’ (par défaut : ‘%default-substitute-urls’)
          La liste des URL où trouver des substituts par défaut.

          Supposons que vous vouliez récupérer des substituts à partir
          de ‘guix.example.org’ en plus de ‘ci.guix.gnu.org’. Vous
          devrez faire deux choses : (1) ajouter ‘guix.example.org’ à
          ‘substitute-urls’, et (2) autoriser sa clé de signature, après
          avoir effectué les vérifications adéquates (*note Autoriser un
          serveur de substituts::). La configuration ci-dessous fait
          exactement cela :

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

          Cet exemple suppose que le fichier
          ‘./guix.example.org-key.pub’ contient la clé publique que
          ‘guix.example.org’ utilise pour signer les substituts.

     ‘max-silent-time’ (par défaut : ‘0’)
     ‘timeout’ (par défaut : ‘0’)
          Le nombre de secondes de silence et le nombre de secondes
          d’inactivité, respectivement, après lesquelles un processus de
          construction son délai d’attente. Une valeur de zéro désactive
          le délai d’attente.

     ‘log-compression’ (par défaut : ‘'bzip2’)
          Le type de compression utilisé par les journaux de
          construction — parmi ‘gzip’, ‘bzip2’ et ‘none’.

     ‘discover?’ (par défaut : ‘#f’)
          Indique s’il faut découvrir les serveurs de substitut sur le
          réseau local avec mDNS et DNS-SD.

     ‘extra-options’ (par défaut : ‘'()’)
          Liste d’options supplémentaires de la ligne de commande pour
          ‘guix-daemon’.

     ‘log-file’ (par défaut : ‘"/var/log/guix-daemon.log"’)
          Le fichier où les sorties standard et d’erreur de
          ‘guix-daemon’ sont écrites.

     ‘http-proxy’ (par défaut : ‘#f’)
          L’URL du proxy HTTP et HTTPS utilisé pour le téléchargement
          des dérivés et substituts à sortie fixe.

          Il est également possible de changer le proxy du démon au
          moment de l’exécution grâce à l’action ‘set-http-proxy’, qui
          le redémarre :

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

          Pour effacer les paramètres du proxy, exécutez :

               herd set-http-proxy guix-daemon

     ‘tmpdir’ (par défaut : ‘#f’)
          Un répertoire où ‘guix-daemon’ effectuera ses constructions.

 -- Procédure Scheme : udev-service [#:udev EUDEV #:rules ‘'()’]
     Lance UDEV, qui remplit le répertoire ‘/dev’ dynamiquement. Les
     règles udev peuvent être fournies comme une liste de fichier via la
     variable RULES. Les procédures ‘udev-rule’, ‘udev-rules-service’ et
     ‘(gnu services base)’ simplifient la création de ces fichiers de
     règle.

     La commande ‘herd rules udev’, en tant que root, renvoie le nom du
     répertoire contenant toutes les règles udev actives.

 -- Procédure Scheme : udev-rule [FILE-NAME CONTENTS]
     Renvoie un fichier de règle udev nommé FILE-NAME contenant les
     règles définie par le littéral CONTENTS.

     Dans l’exemple suivant, on définie une règle pour un périphérique
     USB qui sera stockée dans le fichier ‘90-usb-thing.rules’. La règle
     lance un script à la détection du périphérique USB avec
     l’identifiant de produit donné.

          (define %example-udev-rule
            (udev-rule
              "90-usb-thing.rules"
              (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
                             "ATTR{product}==\"Example\", "
                             "RUN+=\"/path/to/script\"")))

 -- Procédure Scheme : udev-rule-service [NAME RULES] [#:groups GROUPS]
     Renvoie un service qui étend ‘udev-service-type ’ avec RULES et
     ‘account-service-type’ avec GROUPS comme groupes système. Cela
     fonctionne en créant un service de type ‘NAME-udev-rules’, dont le
     service renvoyé est une instance.

     Nous montrons ici comment cela peut être utilisé pour étendre
     ‘udev-service-type’ avec la règle précédemment définie
     ‘%exemple-udev-rule’.

          (operating-system
           ;; ...
           (services
             (cons (udev-rules-service 'usb-thing %example-udev-rule)
                   %desktop-services)))

 -- Procédure Scheme : file->udev-rule [FILE-NAME FILE]
     Renvoie un fichier udev nommé FILE-NAME contenant les règles
     définies dans FILE, un objet simili-fichier.

     L’exemple suivant montre comment utiliser un fichier de règles
     existant.

          (use-modules (guix download)     ;pour url-fetch
                       (guix packages)     ;pour origin
                       ...)

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

   En plus, les définitions des paquets de Guix peuvent être inclus dans
RULES pour étendre les règles avec les définitions trouvées dans leur
sous-répertoire ‘lib/udev/rules.d’. Au lieu de l’exemple FILE->UDEV-RULE
précédent, on aurait pu utiliser le paquet ANDROID-UDEV-RULES qui existe
dans le module ‘(gnu packages android)’.

   L’exemple suivant montre comment utiliser le paquet
ANDROID-UDEV-RULES pour que l’outil Android ‘adb’ puisse détecter les
appareils sans privilège root. Il détaille aussi comment créer le groupe
‘adbusers’, requis pour le bon fonctionnement des règles définies dans
le paquet ‘android-udev-rules’. Pour créer ce groupe, on doit le définir
dans les ‘supplementary-groups’ de la déclaration ‘user-account’ ainsi
que dans le champ GROUPS de l’enregistrement OPERATING-SYSTEM.

     (use-modules (gnu packages android)  ;pour android-udev-rules
                  (gnu system shadow)     ;pour user-group
                  ...)

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

 -- Variable Scheme : urandom-seed-service-type
     Conserve de l’ entropie dans ‘%random-seed-file’ pour amorcer
     ‘/dev/urandom’ lors du redémarrage. Il essaie également d’amorcer
     ‘/dev/urandom’ à partir de ‘/dev/hwrng’ lors du démarrage, si
     ‘/dev/hwrng’ existe et est lisible.

 -- Variable Scheme : %random-seed-file
     C’est le nom du fichier où des octets aléatoires sont sauvegardés
     par URANDOM-SEED-SERVICE pour démarrer ‘/dev/urandom’ au
     redémarrage. Sa valeur par défaut est ‘/var/lib/random-seed’.

 -- Variable Scheme : gpm-service-type
     C’est le type du service qui lance GPM, le “démon de souris à but
     général”, qui fournit le support de la souris sur la console Linux.
     GPM permet aux utilisateurs d’utiliser la souris dans la console,
     entre autres pour sélectionner, copier et coller du texte.

     La valeur pour les services de ce type doit être un
     ‘gpm-configuration’ (voir plus bas). Ce service ne fait pas partie
     de ‘%base-services’.

 -- Type de données : gpm-configuration
     Type de données représentant la configuration de GPM.

     ‘options’ (par défaut : ‘%default-gpm-options’)
          Les options de la ligne de commande à passer à ‘gpm’.
          L’ensemble des options par défaut dit à ‘gpm’ d’écouter les
          événements de la souris dans ‘/dev/input/mice’. *Note
          (gpm)Command Line::, pour plus d’informations.

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

 -- Variable Scheme : guix-publish-service-type
     C’est le type de service pour ‘guix publish’ (*note Invoquer guix
     publish::). Sa valeur doit être un objet
     ‘guix-publish-configuration’ décrit plus bas.

     Ce service suppose que ‘/etc/guix’ contient déjà une paire de clefs
     créée par ‘guix archive --generate-key’ (*note Invoquer guix
     archive::). Si ce n’est pas le cas, le service ne démarrera pas.

 -- Type de données : guix-publish-configuration
     Le type de données représentant la configuration du service ‘guix
     publish’.

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

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

     ‘host’ (par défaut : ‘"localhost"’)
          L’hôte (et donc, l’interface réseau) sur lequel écouter.
          Utilisez ‘"0.0.0.0"’ pour écouter sur toutes les interfaces
          réseaux.

     ‘advertise?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, publie le service sur le réseau
          local via le protocole DNS-SD, avec Avahi.

          Cela permet aux machines Guix voisines qui ont activé la
          découverte (voir ‘guix-configuration’ ci-dessus) de découvrir
          cette instance de ‘guix publish’ et de télécharger des
          substituts directement à partir d’elle.

     ‘compression’ (par défaut : ‘'(("gzip" 3) ("zstd" 3))’)
          Il s’agit d’une liste de méthodes de compression/numéros de
          niveau utilisés lors de la compression des substituts. Par
          exemple, pour compresser tous les substituts avec _both_ lzip
          au niveau 7 et gzip au niveau 9, écrivez :

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

          Le niveau 9 atteint le meilleur taux de compression au
          détriment d’une utilisation accrue du CPU, tandis que le
          niveau 1 atteint une compression rapide. *Note Invoquer guix
          publish::, pour plus d’information sur les méthodes de
          compression disponibles et les compromis à faire entre elles.

          Une liste vide désactive complètement la compression.

     ‘nar-path’ (par défaut : ‘"nar"’)
          Le chemin d’URL où les « nars » se trouvent. *Note
          ‘--nar-path’: Invoquer guix publish, pour des détails.

     ‘cache’ (par défaut : ‘#f’)
          Lorsque la valeur est ‘#f’, désactive le cache et génère les
          archives à la demande. Sinon, cela devrait être le nom d’un
          répertoire — p. ex. ‘"/var/cache/guix/publish"’ — où ‘guix
          publish’ gère le cache des archives et des métadonnées prêtes
          à être envoyées. *Note ‘--cache’: Invoquer guix publish, pour
          plus d’informations sur les compromis impliqués.

     ‘workers’ (par défaut : ‘#f’)
          Lorsque la valeur est un entier, c’est le nombre de threads de
          travail utilisés pour le cache ; lorsque la valeur est ‘#f’,
          le nombre de processeurs est utilisé. *Note ‘--workers’:
          Invoquer guix publish, pour plus d’informations.

     ‘cache-bypass-threshold’ (par défaut : 10 Mio)
          Lorsque ‘cache’ est vrai, c’est la taille maximale en octets
          d’un élément du dépôt pour lequel ‘guix publish’ peut
          contourner le cache s’il n’y est pas. *Note
          ‘--cache-bypass-threshold’: Invoquer guix publish, pour plus
          d’informations.

     ‘ttl’ (par défaut : ‘#f’)
          Lorsque la valeur est un entier, il dénote la “durée de vie”
          en secondes des archives publiées. *Note ‘--ttl’: Invoquer
          guix publish, pour plus d’informations.

 -- Procédure Scheme : rngd-service [#:rng-tools RNG-TOOLS] [#:device
          "/dev/hwrng"]
     Renvoie un service qui lance le programme ‘rngd’ de RNG-TOOLS pour
     ajouter DEVICE à la réserve d’entropie du noyau. Le service
     échouera si DEVICE n’existe pas.

 -- Procédure Scheme : pam-limits-service [#:limits ‘'()’]

     Renvoie un service qui installe un fichier de configuration pour le
     module ‘pam_limits’
     (http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html). La
     procédure prend éventuellement une liste de valeurs
     ‘pam-limits-entry’ qui peuvent être utilisées pour spécifier les
     limites ‘ulimit’ et les priorités ‘nice’ des sessions utilisateurs.

     La définition de limites suivante défini deux limites matérielles
     et logicielles pour toutes les sessions connectées des utilisateurs
     du groupe ‘realtime’ :

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

     La première entrée augment la priorité en temps réel maximale des
     processus non privilégiés ; la deuxième entrée abandonne les
     restrictions sur l’espace d’adressage maximal qui peut être
     verrouillé en mémoire. Ces paramètres sont souvent utilisés sur les
     systèmes audio temps-réel.

     Un autre exemple utile est d’augmenter le nombre maximum de
     descripteurs de fichiers ouverts qui peuvent être utilisés :

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

     Dans l’exemple au-dessus, l’astérisque signifie que la limite
     s’applique à tous les utilisateurs. Il est important de s’assurer
     que la valeur choisie n’excède pas la valeur maximale du système
     visible dans le fichier ‘/proc/sys/fs/file-max’, sinon les
     utilisateurs ne pourront pas se connecter. Pour plus d’information
     sur les limites du module d’authentification grefable (PAM),
     regardez la page de manuel ‘pam_limits’ du paquet ‘linux-pam’.


File: guix.fr.info,  Node: Exécution de tâches planifiées,  Next: Rotation des journaux,  Prev: Services de base,  Up: Services

10.8.2 Exécution de tâches planifiées
-------------------------------------

Le module ‘(gnu services mcron)’ fournit une interface pour GNU mcron,
un démon qui lance des tâches planifiées (*note (mcron)Top::). GNU mcron
est similaire au démon Unix traditionnel ‘cron’ ; la principale
différence est qu’il est implémenté en Guile Scheme, qui fournit
beaucoup de flexibilité lors de la spécification de la planification des
tâches et de leurs actions.

   L’exemple en dessous définit un système d’exploitation qui lance les
commandes ‘updatebd’ (*note (find)Invoking updatedb::) et ‘guix gc’
(*note Invoquer guix gc::) tous les jours, ainsi que la commande ‘mkid’
en tant qu’utilisateur non privilégié (*note (idutils)mkid
invocation::). Il utilise des gexps pour introduire des définitions de
tâches qui sont passées à mcron (*note G-Expressions::).

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

     (define updatedb-job
       ;; Lance « updatedb » à 3h du matin chaque jour.  Ici nous spécifions
       ;; l'action de la tâche comme une procédure Scheme.
       #~(job '(next-hour '(3))
              (lambda ()
                (execl (string-append #$findutils "/bin/updatedb")
                       "updatedb"
                       "--prunepaths=/tmp /var/tmp /gnu/store"))))

     (define garbage-collector-job
       ;; Lance le ramasse-miettes tous les jours à minuit cinq.
       ;; L'action de la tâche est une commande shell.
       #~(job "5 0 * * *"            ;Vixie cron syntax
              "guix gc -F 1G"))

     (define idutils-job
       ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
       ;; et 19h15.  La commande est lancée depuis le répertoire personnel de l'utilisateur.
       #~(job '(next-minute-from (next-hour '(12 19)) '(15))
              (string-append #$idutils "/bin/mkid src")
              #:user "charlie"))

     (operating-system
       ;; ...

       ;; %BASE-SERVICES inclus déjà une instance de
       ;; « mcron-service-type », que nous étendons avec un
       ;; travail supplémentaire avec « simple-service ».
       (services (cons (simple-service 'my-cron-jobs
                                        mcron-service-type
                                        (list garbage-collector-job
                                              updatedb-job
                                              idutils-job))
                       %base-services)))

   Pour les tâches plus complexes définies dans Scheme où vous devez
contrôler le haut niveau, par exemple pour introduire un formulaire
‘use-modules’, vous pouvez déplacer votre code vers un programme séparé
en utilisant la procédure ‘program-file’ du module ‘(guix gexp)’ (*note
G-Expressions::). L’exemple ci-dessous illustre cette possibilité.

     (define %battery-alert-job
       ;; Beep when the battery percentage falls below %MIN-LEVEL.
       #~(job
          '(next-minute (range 0 60 1))
          #$(program-file
             "battery-alert.scm"
             (with-imported-modules (source-module-closure
                                     '((guix build utils)))
               #~(begin
                   (use-modules (guix build utils)
                                (ice-9 popen)
                                (ice-9 regex)
                                (ice-9 textual-ports)
                                (srfi srfi-2))

                   (define %min-level 20)

                   (setenv "LC_ALL" "C")     ; assure que la sortie est en anglais
                   (and-let* ((input-pipe (open-pipe*
                                           OPEN_READ
                                           #$(file-append acpi "/bin/acpi")))
                              (output (get-string-all input-pipe))
                              (m (string-match "Discharging, ([0-9]+)%" output))
                              (level (string->number (match:substring m 1)))
                              ((< level %min-level)))
                     (format #t "warning: Battery level is low (~a%)~%" level)
                     (invoke #$(file-append beep "/bin/beep") "-r5")))))))

   *Note mcron job specifications: (mcron)Guile Syntax, pour plus
d’informations sur les spécifications des tâche de mcron. Ci-dessous est
la référence du service mcron.

   Sur un système lancé, vous pouvez utiliser l’action ‘schedule’ du
service pour visualiser les travaux mcron qui seront exécutés ensuite :

     # herd schedule mcron

Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais
vous pouvez spécifier le nombre de tâches à afficher :

     # herd schedule mcron 10

 -- Variable Scheme : mcron-service-type
     C’est le type du service ‘mcron’, dont la valeur est un objet
     ‘mcron-configuration’.

     Ce type de service peut être la cible d’une extension de service
     qui lui fournit des spécifications de tâches supplémentaires (*note
     Composition de services::). En d’autres termes, il est possible de
     définir des services qui fournissent des tâches mcron à lancer.

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

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

     ‘jobs’
          C’est la liste des gexps (*note G-Expressions::), où chaque
          gexp correspond à une spécification de tâche de mcron (*note
          mcron job specifications: (mcron)Syntax.).


File: guix.fr.info,  Node: Rotation des journaux,  Next: Services réseau,  Prev: Exécution de tâches planifiées,  Up: Services

10.8.3 Rotation des journaux
----------------------------

Les fichiers journaux comme ceux qui se trouvent dans ‘/var/log’ ont
tendance à grandir sans fin, donc c’est une bonne idée de le “faire
tourner” de temps à autres — c.-à-d. archiver leur contenu dans des
fichiers séparés, potentiellement compressés. Le module ‘(gnu services
admin)’ fournit une interface pour GNU Rot[t]log, un outil de rotation
de journaux (*note (rottlog)Top::).

   Ce service fait partie de ‘%base-services’, et se trouve donc activé
par défaut, avec les paramètres par défaut, pour les fichiers journaux
les plus fréquemment rencontrés. L’exemple ci-dessous montre comment
l’étendre avec une “rotation” supplémentaire, si vous devez le faire
(généralement, les services qui produisent des fichiers journaux s’en
chargent déjà) :

     (use-modules (guix) (gnu))
     (use-service-modules admin)

     (define my-log-files
       ;; Journaux que je veux faire tourner.
       '("/var/log/something.log" "/var/log/another.log"))

     (operating-system
       ;; ...
       (services (cons (simple-service 'rotate-my-stuff
                                       rottlog-service-type
                                       (list (log-rotation
                                              (frequency 'daily)
                                              (files my-log-files))))
                       %base-services)))

 -- Variable Scheme : rottlog-service-type
     C’est le type du service Rotlog, dont la valeur est un objet
     ‘rottlog-configuration’.

     D’autres services peuvent étendre celui-ci avec de nouveaux objets
     ‘log-rotation’ (voir plus bas), en augmentant ainsi l’ensemble des
     fichiers à faire tourner.

     Ce type de service peut définir des taches (*note Exécution de
     tâches planifiées::) pour lancer le service rottlog.

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

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

     ‘rc-file’ (par défaut : ‘(file-append rottlog "/etc/rc")’)
          Le fichier de configuration Rottlog à utiliser (*note
          (rottlog)Mandatory RC Variables::).

     ‘rotations’ (par défaut : ‘%default-rotations’)
          Une liste d’objets ‘log-rotation’ définis plus bas.

     ‘jobs’
          C’est une liste de gexps où chaque gexp correspond à une
          spécification de tache de mcron (*note Exécution de tâches
          planifiées::).

 -- Type de données : log-rotation
     Type de données représentant la rotation d’un groupe de fichiers
     journaux.

     En reprenant un exemple du manuel de Rottlog (*note (rottlog)Period
     Related File Examples::), on peut définir la rotation d’un journal
     de cette manière :

          (log-rotation
            (frequency 'daily)
            (files '("/var/log/apache/*"))
            (options '("storedir apache-archives"
                       "rotate 6"
                       "notifempty"
                       "nocompress")))

     La liste des champs est la suivante :

     ‘frequency’ (par défaut : ‘'weekly’)
          La fréquence de rotation, un symbole.

     ‘files’
          La liste des fichiers ou des motifs de noms de fichiers à
          faire tourner.

     ‘options’ (par défaut : ‘'()’)
          La liste des options de rottlog pour cette rotation (*note
          (rottlog)Configuration parameters::).

     ‘post-rotate’ (par défaut : ‘#f’)
          Soit ‘#f’, soit une gexp à exécuter une fois la rotation
          terminée.

 -- Variable Scheme : %default-rotations
     Spécifie la rotation hebdomadaire de ‘%rotated-files’ et de
     ‘/var/log/guix-daemon.log’.

 -- Variable Scheme : %rotated-files
     La liste des fichiers contrôlés par syslog à faire tourner. Par
     défaut il s’agit de : ‘'("/var/log/messages" "/var/log/secure"
     "/var/log/debug" \ "/var/log/maillog")’.


File: guix.fr.info,  Node: Services réseau,  Next: Mises à jour non surveillées (Unattended Upgrades),  Prev: Rotation des journaux,  Up: Services

10.8.4 Services réseau
----------------------

Le module ‘(gnu services networking)’ fournit des services pour
configurer les interfaces réseaux.

 -- Variable Scheme : dhcp-client-service-type
     C’est le type de services qui lance DHCP, un client DHC (protocole
     de configuration d’hôte dynamique) sur toutes les interfaces réseau
     non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
     ‘isc-dhcp’ par défaut.

 -- Procédure Scheme : dhcpd-service-type
     Ce type définie un service qui lance un démon DHCP. Pour créer un
     service de ce type, vous devez appliquer un objet
     ‘<dhcpd-configuration>’. Par exemple :

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

 -- Type de données : dhcpd-configuration
     ‘package’ (par défaut : ‘isc-dhcp’)
          Le paquet qui fournit le démon DHCP. ce paquet doit fournir le
          démon ‘sbin/dhcpd’ relativement à son répertoire de sortie. Le
          paquet par défaut est le serveur DHCP d’ISC
          (https://www.isc.org/products/DHCP).
     ‘config-file’ (par défaut : ‘#f’)
          Le fichier de configuration à utiliser. Il est requis. Il sera
          passé à ‘dhcpd’ via son option ‘-cf’. La valeur peut être
          n’importe quel objet « simili-fichier » (*note file-like
          objects: G-Expressions.). Voir ‘man dhcpd.conf’ pour des
          détails sur la syntaxe du fichier de configuration.
     ‘version’ (par défaut : ‘"4"’)
          La version de DHCP à utiliser. Le serveur DHCP d’ISC supporte
          les valeur « 4 », « 6 » et « 4o6 ». Elles correspondent aux
          options ‘-4’, ‘-6’ et ‘-4o6’ du programme ‘dhcpd’. Voir ‘man
          dhcpd’ pour plus de détails.
     ‘run-directory’ (par défaut : ‘"/run/dhcpd"’)
          Le répertoire d’exécution à utiliser. Au moment de
          l’activation du service, ce répertoire sera créé s’il n’existe
          pas.
     ‘pid-file’ (par défaut : ‘"/run/dhcpd/dhcpd.pid"’)
          Le fichier de PID à utiliser. Cela correspond à l’option ‘-pf’
          de ‘dhcpd’. Voir ‘man dhcpd’ pour plus de détails.
     ‘interfaces’ (par défaut : ‘'()’)
          Les noms des interfaces réseaux sur lesquelles dhcpd écoute.
          Si cette liste n’est pas vide, alors ses éléments (qui doivent
          être des chaînes de caractères) seront ajoutés à l’invocation
          de ‘dhcpd’ lors du démarrage du démon. Il n’est pas forcément
          nécessaire de spécifier des interfaces ici ; voir ‘man dhcpd’
          pour plus de détails.

 -- Variable Scheme : static-networking-service-type
     C’est le type des interfaces réseaux configurés statiquement.

 -- Procédure Scheme : static-networking-service INTERFACE IP [#:netmask
          #f] [#:gateway #f] [#:name-servers ‘'()’] [#:requirement
          ‘'(udev)’]
     Renvoie un service qui démarre INTERFACE avec l’adresse IP. Si
     NETMASK est vrai, il sera utilisé comme masque de sous-réseau. Si
     GATEWAY est vrai, ce doit être une chaîne de caractères qui
     spécifie la passerelle par défaut du réseau. REQUIREMENT peut être
     utilisé pour déclarer une dépendance sur un autre service avant de
     configurer l’interface.

     On peut appeler cette procédure plusieurs fois, une fois par
     interface réseau qui nous intéresse. Dans les coulisses, elle étend
     ‘static-networking-service-type’ avec les interfaces réseaux
     supplémentaires à gérer.

     Par exemple :

          (static-networking-service "eno1" "192.168.1.82"
                                     #:gateway "192.168.1.2"
                                     #:name-servers '("192.168.1.2"))

 -- Procédure Scheme : wicd-service [#:wicd WICD]
     Renvoie un service qui lance Wicd (https://launchpad.net/wicd), un
     démon de gestion réseau qui cherche à simplifier la configuration
     des réseaux filaires et sans fil.

     Ce service ajoute le paquet WICD au profil global, pour fournir des
     commandes pour interagir avec le démon et configurer le réseau :
     ‘wicd-client’, une interface graphique et les interfaces
     utilisateurs ‘wicd-cli’ et ‘wicd-curses’.

 -- Variable Scheme : modem-manager-service-type
     C’est le type de service pour le service ModemManager
     (https://wiki.gnome.org/Projects/ModemManager). La valeur de ce
     type de service est un enregistrement
     ‘modem-manager-configuration’.

     Ce service fait partie de ‘%desktop-services’ (*note Services de
     bureaux::).

 -- Type de données : modem-manager-configuration
     Type de donnée représentant la configuration de ModemManager.

     ‘modem-manager’ (par défaut : ‘modem-manager’)
          Le paquet ModemManager à utiliser.

 -- Variable Scheme : usb-modeswitch-service-type
     C’est le type de service pour le service USB_ModeSwitch
     (https://www.draisberghof.de/usb_modeswitch/). La valeur pour ce
     type de service est un enregistrement
     ‘usb-modeswitch-configuration’.

     Lorsqu’ils sont branchés, certains modems USB (et autres
     dispositifs USB) se présentent initialement comme un support de
     stockage en lecture seule et non comme un modem. Ils doivent être
     “modeswitched” avant d’être utilisables. Le service de type
     USB_ModeSwitch installe des règles udev pour commuter
     automatiquement les modes de ces dispositifs lorsqu’ils sont
     branchés.

     Ce service fait partie de ‘%desktop-services’ (*note Services de
     bureaux::).

 -- Type de donnée : openvswitch-configuration
     Type de données représentant la configuration du USB_ModeSwitch.

     ‘usb-modeswitch’ (par défaut : ‘usb-modeswitch’)
          Le paquet USB_ModeSwitch fournit les binaires pour la
          commutation de modes.

     ‘usb-modeswitch-data’ (par défaut : ‘usb-modeswitch-data’)
          Le paquet fournissant les données du dispositif et le fichier
          de règles udev utilisé par USB_ModeSwitch.

     ‘config-file’ (par défaut : ‘#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")’)
          Le fichier de configuration à utiliser pour le répartiteur
          USB_ModeSwitch. Par défaut, le fichier de configuration livré
          avec USB_ModeSwitch est utilisé, ce qui désactive la connexion
          au ‘/var/log’ parmi d’autres paramètres par défaut. S’il est
          défini sur ‘#f’, aucun fichier de configuration n’est utilisé.

 -- Variable Scheme : network-manager-service-type
     C’est le type de service pour le service NetworkManager
     (https://wiki.gnome.org/Projects/NetworkManager). La valeur pour ce
     type de service est un enregistrement
     ‘network-manager-configuration’.

     Ce service fait partie de ‘%desktop-services’ (*note Services de
     bureaux::).

 -- Type de données : network-manager-configuration
     Type de données représentant la configuration de NetworkManager.

     ‘network-manager’ (par défaut : ‘network-manager’)
          Le paquet NetworkManager à utiliser.

     ‘dns’ (par défaut : ‘"default"’)
          Mode de gestion pour le DNS, qui affecte la manière dont
          NetworkManager utilise le fichier de configuration
          ‘resolv.conf’.

          ‘default’
               NetworkManager mettra à jour ‘resolv.conf’ pour refléter
               les serveurs de noms fournis par les connexions actives.

          ‘dnsmasq’
               NetworkManager exécutera ‘dnsmasq’ comme un serveur de
               noms local en cache, en utilisant une configuration
               “transfert conditionnel” si vous êtes connecté à un VPN,
               puis mettra à jour ‘resolv.conf’ pour pointer vers le
               serveur de noms local.

               Avec ce paramètre, vous pouvez partager votre connexion
               réseau. Par exemple, lorsque vous souhaitez partager
               votre connexion réseau avec un autre ordinateur portable
               via un câble Ethernet, vous pouvez ouvrir
               ‘nm-connection-editor’ et configurer la méthode de
               connexion câblée pour IPv4 et IPv6 de manière à ce
               qu’elle soit "partagée avec d’autres ordinateurs" et à ce
               que la connexion soit rétablie (ou redémarrée).

               Vous pouvez également établir une “connexion hôte-invité”
               aux VM QEMU (*note Installer Guix dans une VM::). Avec
               une connexion d’hôte à invité, vous pouvez par exemple  :
               accéder à un serveur Web fonctionnant sur la VM (*note
               Services web::) à partir d’un navigateur Web sur votre
               système hôte, ou vous connecter à la VM via SSH (*note
               ‘openssh-service-type’: Services réseau.). Pour établir
               une connexion entre hôtes, exécutez cette commande une
               fois :

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

               Ensuite, chaque fois que vous lancez votre VM QEMU (*note
               Lancer Guix dans une VM::), passez ‘-nic
               tap,ifname=tap0,script=no,downscript=no’ à
               ‘qemu-system-...’.

          ‘none’
               NetworkManager ne modifiera pas ‘resolv.conf’.

     ‘vpn-plugins’ (par défaut : ‘'()’)
          C’est la liste des greffons disponibles pour les VPN (réseaux
          privés virtuels). Un exemple est le paquet
          ‘network-manager-openvpn’, qui permet à NetworkManager de
          gérer des VPN via OpenVPN.

 -- Variable Scheme : connman-service-type
     C’est le type de service pour lancer Connman
     (https://01.org/connman), un gestionnaire de connexions réseaux.

     Sa valeur doit être un enregistrement ‘connman-configuration’ comme
     dans cet exemple :

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

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

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

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

     ‘disable-vpn?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, désactive le greffon vpn de
          connman.

 -- Variable Scheme : wpa-supplicant-service-type
     C’est le type du service qui lanceWPA supplicant
     (https://w1.fi/wpa_supplicant/), un démon d’authentification requis
     pour s’authentifier sur des WiFi chiffrés ou des réseaux ethernet.

 -- Type de données : wpa-supplicant-configuration
     Type données qui représente la configuration de WPA Supplicant.

     Il prend les paramètres suivants :

     ‘wpa-supplicant’ (par défaut : ‘wpa-supplicant’)
          Le paquet WPA Supplicant à utiliser.

     ‘requirement’ (par défaut : ‘'(user-processes loopback syslogd)’
          Liste des services qui doivent être démarrés avant le début de
          WPA Supplicant.

     ‘dbus?’ (par défaut : ‘#t’)
          Indique s’il faut écouter les requêtes sur D-Bus.

     ‘pid-file’ (par défaut : ‘"/var/run/wpa_supplicant.pid"’)
          Où stocker votre fichier de PID.

     ‘interface’ (par défaut : ‘#f’)
          Si une valeur est indiquée, elle doit spécifier le nom d’une
          interface réseau que WPA supplicant contrôlera.

     ‘config-file’ (par défaut : ‘#f’)
          Fichier de configuration facultatif à utiliser.

     ‘extra-options’ (par défaut : ‘'()’)
          Liste d’arguments de la ligne de commande supplémentaires à
          passer au démon.

 -- Variable Scheme : hostapd-service-type
     Il s’agit du type de service permettant d’exécuter le démon hostapd
     (https://w1.fi/hostapd/) pour mettre en place des points d’accès et
     des serveurs d’authentification WiFi (IEEE 802.11). Sa valeur
     associée doit être un ‘hostapd-configuration’ comme indiqué
     ci-dessous :

          ;; Utiliser wlan1 pour lancer le point d'accès pour « My Network ».
          (service hostapd-service-type
                   (hostapd-configuration
                    (interface "wlan1")
                    (ssid "My Network")
                    (channel 12)))

 -- Type de données : hostapd-configuration
     Ce type de données représente la configuration du service hostapd,
     avec les champs suivants :

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

     ‘interface’ (par défaut : ‘"wlan0"’)
          L’interface réseau pour faire fonctionner le point d’accès
          WiFi.

     ‘ssid’
          Le SSID (“identifiant de l’ensemble de services”), une chaîne
          de caractères qui identifie ce réseau.

     ‘broadcast-ssid?’ (par défaut : ‘#t’)
          La diffusion de ce SSID.

     ‘channel’ (par défaut : ‘#f’)
          Le canal WiFi à utiliser.

     ‘drivers’ (par défaut : ‘"nl80211"’)
          Le type d’interface du conducteur. ‘"nl80211"’ est utilisé
          avec tous les pilotes mac80211 de Linux. Utilisez ‘"none"’ si
          vous construisez hostapd comme un serveur RADIUS autonome qui
          ne # contrôle aucun pilote sans-fil/filaire.

     ‘extra-settings’ (par défaut : ‘""’)
          Paramètres supplémentaires à ajouter tels quels au fichier de
          configuration de hostapd. Voir
          <https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf> pour la
          référence du fichier de configuration.

 -- Variable Scheme : simulated-wifi-service-type
     C’est le type de service permettant de simuler la mise en réseau
     WiFi, qui peut être utile dans les machines virtuelles à des fins
     de test. Le service charge le noyau Linux module ‘mac80211_hwsim’
     (https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html)
     et lance hostapd pour créer un pseudo réseau WiFi qui peut être vu
     sur ‘wlan0’, par défaut.

     La valeur du service est un enregistrement ‘hostapd-configuration’.

 -- Variable Scheme : iptables-service-type
     C’est le type de service pour mettre en place une configuration
     iptables. iptables est un outil de filtrage de paquets pris en
     charge par le noyau Linux. Ce service prend en charge la
     configuration d’iptable pour IPv4 et IPv6. Un exemple de
     configuration simple, qui rejette les connexions entrantes sauf
     celles sur le port 22 est présenté ci-dessous.

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

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

     ‘iptables’ (par défaut : ‘iptables’)
          Le paquet iptables qui fournit ‘iptables-restore’ et
          ‘ip6tables-restore’.
     ‘ipv4-rules’ (par défaut : ‘%iptables-accept-all-rules’)
          Les règles iptables à utiliser. Elles seront passées à
          ‘iptables-restore’. Cela peut être un objet « simili-fichier »
          (*note file-like objects: G-Expressions.).
     ‘ipv6-rules’ (par défaut : ‘%iptables-accept-all-rules’)
          Les règles iptables à utiliser. Elles seront passées à
          ‘ip6tables-restore’. Cela peut être un objet « simili-fichier
          » (*note file-like objects: G-Expressions.).

 -- Variable Scheme : nftables-service-type
     C’est le type de service permettant de mettre en place une
     configuration nftables. nftables est un projet de netfilter qui
     vise à remplacer le cadre existant iptables, ip6tables, arptables
     et ebtables. Il fournit un nouveau cadre de filtrage de paquets, un
     nouvel utilitaire d’espace utilisateur·rice ‘nft’, et une couche de
     compatibilité pour iptables. Ce service est fourni avec un jeu de
     règles par défaut ‘%default-nftables-ruleset’ qui rejette toutes
     les connexions entrantes sauf celles vers le port ssh 22. Pour
     l’utiliser, il suffit d’écrire :

          (service nftables-service-type)

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

     ‘package’ (par défaut : ‘nftables’)
          Le paquet nftables qui fournit ‘nft’.
     ‘ruleset’ (par défaut : ‘%default-nftables-ruleset’)
          Les règles d’utilisation de nftables. Il peut s’agir de
          n’importe quel objet « de type fichier » (*note objets de type
          fichier: G-Expressions.).

 -- Variable Scheme : ntp-service-type
     C’est le type de service qui lance le démon Network Time Protocol
     (NTP) (https://www.ntp.org), ‘ntpd’. Le démon gardera l’horloge
     système synchronisée avec celle des serveurs NTP spécifiés.

     La valeur de ce service est un objet ‘ntpd-configuration’, décrit
     ci-dessous.

 -- Type de données : ntp-configuration
     C’est le type de données représentant la configuration du service
     NTP.

     ‘servers’ (par défaut : ‘%ntp-servers’)
          C’est la liste des serveurs (enregistrements ‘<ntp-server>’)
          avec lesquels ‘ntpd’ sera synchronisé. Voir la définition du
          type de données ‘ntp-server’ ci-dessous.

     ‘allow-large-adjustment?’ (par défaut : ‘#t’)
          Détermine si ‘ntpd’ peut faire un ajustement initial de plus
          de 1 000 secondes.

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

 -- Variable Scheme : %ntp-servers
     Liste de noms d’hôtes à utiliser comme serveurs NTP par défaut. Ce
     sont les serveurs du projet NTP Pool (https://www.ntppool.org/fr/).

 -- Type de données : ntp-server
     Le type de données représentant la configuration d’un serveur NTP.

     ‘type’ (par défaut : ‘'server’)
          Le type de serveur NTP, indiqué par un symbole. L’un des types
          suivants : ‘'pool’, ‘'server’, ‘'peer’, ‘'broadcast’ ou
          ‘'manycastclient’.

     ‘adresse’
          L’adresse du serveur, comme une chaîne de caractères.

     ‘options’
          Les options NTPD à utiliser avec ce serveur spécifique,
          données sous la forme d’une liste de noms d’options et/ou de
          tuples de noms et de valeurs d’options. L’exemple suivant
          définit un serveur à utiliser avec les options ‘iburst’ et
          ‘prefer’, ainsi que ‘version’ 3 et un temps ‘maxpoll’ de 16
          secondes.

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

 -- Procédure Scheme : openntpd-service-type
     Lance le démon NTP ‘ntpd’, implémenté par OpenNTPD
     (http://www.openntpd.org). Le démon gardera l’horloge système
     synchronisée avec celle des serveurs donnés.

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


 -- Variable Scheme : %openntpd-servers
     Cette variable est une liste des adresses de serveurs définies dans
     ‘%ntp-servers’.

 -- Type de données : openntpd-configuration
     ‘openntpd’ (par défaut : ‘(file-append openntpd "/sbin/ntpd")’)
          L’exécutable openntpd à utiliser.
     ‘listen-on’ (par défaut : ‘'("127.0.0.1" "::1")’)
          Une liste d’adresses IP locales ou de noms d’hôtes que devrait
          écouter le démon ntpd.
     ‘query-from’ (par défaut : ‘'()’)
          Une liste d’adresses IP que le démon devrait utiliser pour les
          requêtes sortantes.
     ‘sensor’ (par défaut : ‘'()’)
          Spécifie une liste de senseurs de différences de temps que
          ntpd devrait utiliser. ‘ntpd’ écoutera chaque senseur qui
          existe et ignorera ceux qui n’existent pas. Voir la
          documentation en amont (https://man.openbsd.org/ntpd.conf)
          pour plus d’informations.
     ‘server’ (par défaut : ‘'()’)
          Spécifie une liste d’adresses IP ou de noms d’hôtes de
          serveurs NTP avec lesquels se synchroniser.
     ‘servers’ (par défaut : ‘%openntp-servers’)
          Spécifie une liste d’adresses IP ou de noms d’hôtes de banques
          de serveurs NTP avec lesquelles se synchroniser.
     ‘constraint-from’ (par défaut : ‘'()’)
          ‘ntpd’ peut être configuré pour demander la « Date » à des
          serveurs HTTPS de confiance via TLS. Cette information de
          temps n’est pas utilisée pour sa précision mais agit comme une
          contrainte authentifiée, ce qui réduit l’impact d’une attaque
          par l’homme du milieu sur le protocole NTP non authentifié.
          Spécifie une liste d’URL, d’adresses IP ou de noms d’hôtes de
          serveurs HTTPS qui fournissent cette contrainte.
     ‘constraints-from’ (par défaut : ‘'()’)
          Comme pour ‘constraint-from’, spécifie une liste d’URL,
          d’adresses IP ou de noms d’hôtes de serveurs HTTPS qui
          fournissent une contrainte. Si les noms d’hôtes sont résolus
          en plusieurs adresses IP, ‘ntpd’ calculera la contrainte
          médiane.

 -- Variable Scheme : inetd-service-type
     Ce service lance le démon ‘inetd’ (*note (inetutils)inetd
     invocation::). ‘inetd’ écoute des connexions sur des sockets
     internet et démarre le programme spécifié uniquement lorsqu’une
     connexion arrive sur l’un de ces sockets.

     La valeur de ce service est un objet ‘inetd-configuration’.
     L’exemple suivant configure le démon ‘inetd’ pour qu’il fournisse
     le service ‘echo’, ainsi qu’un service smtp qui transfère le trafic
     smtp par ssh à un serveur ‘smtp-server’ derrière une passerelle
     ‘hostname’ :

          (service
           inetd-service-type
           (inetd-configuration
            (entries (list
                      (inetd-entry
                       (name "echo")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root"))
                      (inetd-entry
                       (node "127.0.0.1")
                       (name "smtp")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root")
                       (program (file-append openssh "/bin/ssh"))
                       (arguments
                        '("ssh" "-qT" "-i" "/chemin/vers/ssh_key"
                          "-W" "smtp-server:25" "user@hostname")))))))

     Voir plus bas pour plus de détails sur ‘inetd-configuration’.

 -- Type de données : inetd-configuration
     Type de données représentant la configuration de ‘inetd’.

     ‘program’ (par défaut : ‘(file-append inetutils "/libexec/inetd")’)
          L’exécutable ‘inetd’ à utiliser.

     ‘entries’ (par défaut : ‘'()’)
          Une liste d’entrées de services ‘inetd’. Chaque entrée devrait
          être crée avec le constructeur ‘inetd-entry’.

 -- Type de données : inetd-entry
     Type de données représentant une entrée dans la configuration
     d’‘inetd’. Chaque entrée correspond à un socket sur lequel ‘inetd’
     écoutera les requêtes.

     ‘node’ (par défaut : ‘#f’)
          Chaîne de caractères facultative, un liste d’adresses locales
          séparées par des virgules que ‘inetd’ devrait utiliser pour
          écouter ce service. *Note (inetutils)Configuration file:: pour
          une description complète de toutes les options.
     ‘name’
          Une chaîne de caractères dont le nom doit correspondre à une
          entrée de ‘/etc/services’.
     ‘socket-type’
          Un symbole parmi ‘'stream’, ‘'dgram’, ‘'raw’, ‘'rdm’ ou
          ‘'seqpacket’.
     ‘protocol’
          Une chaîne de caractères qui doit correspondre à une entrée
          dans ‘/etc/protocols’.
     ‘wait?’ (par défaut : ‘#t’)
          Indique si ‘inetd’ devrait attendre que le serveur ait quitté
          avant d’écouter de nouvelles demandes de service.
     ‘user’
          Une chaîne de caractères contenant le nom d’utilisateur (et
          éventuellement de groupe) de l’utilisateur en tant que lequel
          le serveur devrait tourner. Le nom du groupe peut être
          spécifié comme un suffixe, séparé par un deux-points ou un
          point, c.-à-d. ‘"utilisateur"’, ‘"utilisateur:groupe"’ ou
          ‘"utilisateur.groupe"’.
     ‘program’ (par défaut : ‘"internal"’)
          Le programme du serveur qui servira les requêtes, ou
          ‘"internal"’ si ‘inetd’ devrait utiliser un service inclus.
     ‘arguments’ (par défaut : ‘'()’)
          Une liste de chaînes de caractères ou d’objets simili-fichiers
          qui sont les arguments du programme du serveur, en commençant
          par le zéroième argument, c.-à-d. le nom du programme
          lui-même. Pour les services internes à ‘inetd’, cette entrée
          doit être ‘'()’ ou ‘'("internal")’.

     *Note (inetutils)Configuration file:: pour trouver une discussion
     plus détaillée de chaque champ de configuration.

 -- Variable Scheme : tor-service-type
     C’est le type pour un service qui lance le démon de navigation
     anonyme Tor (https://torproject.org). Le service est configuré avec
     un enregistrement ‘<tor-configuration>’. Par défaut, le démon Tor
     est lancé en tant qu’utilisateur non privilégié ‘tor’, membre du
     groupe ‘tor’.

 -- Type de données : tor-configuration
     ‘tor’ (par défaut : ‘tor’)
          Le paquet qui fournit le démon Tor. Ce paquet doit fournir le
          démon ‘bin/tor’ relativement à son répertoire de sortie. Le
          paquet par défaut est le l’implémentation du projet Tor
          (https://www.torproject.org).

     ‘config-file’ (par défaut : ‘(plain-file "empty" "")’)
          Le fichier de configuration à utiliser. Il sera ajouté au
          fichier de configuration par défaut, et le fichier de
          configuration final sera passé à ‘tor’ via son option ‘-f’.
          Cela peut être n’importe quel objet « simili-fichier » (*note
          file-like objects: G-Expressions.). Voir ‘man tor’ pour plus
          de détails sur la syntaxe du fichier de configuration.

     ‘hidden-services’ (par défaut : ‘'()’)
          La liste des enregistrements ‘<hidden-service>’ à utiliser.
          Pour n’importe quel service cache que vous ajoutez à cette
          liste, la configuration appropriée pour activer le service
          caché sera automatiquement ajouté au fichier de configuration
          par défaut. Vous pouvez aussi créer des enregistrements
          ‘<hidden-service>’ avec la procédure ‘tor-hidden-service’
          décrite plus bas.

     ‘socks-socket-type’ (par défaut : ‘'tcp’)
          Le type de socket par défaut que Tor devrait utiliser pour les
          socket SOCKS. Cela doit être soit ‘'tcp’ soit ‘'unix’. S’il
          s’agit de ‘'tcp’, alors Tor écoutera pas défaut sur le port
          TCP 9050 sur l’interface de boucle locale (c.-à-d. localhost).
          S’il s’agit de ‘'unix’, Tor écoutera sur le socket UNIX domain
          ‘/var/run/tor/socks-sock’, qui sera inscriptible pour les
          membres du groupe ‘tor’.

          Si vous voulez personnaliser le socket SOCKS plus avant,
          laissez ‘socks-socket-type’ à sa valeur par défaut de ‘'tcp’
          et utilisez ‘config-file’ pour remplacer les valeurs par
          défaut avec votre propre option ‘SocksPort’.

     ‘control-socket?’ (par défaut : ‘#f’)
          Indique s’il faut utiliser un « socket de contrôle » par
          lequel on peut contrôler Tor pour, par exemple, instancier des
          services onion dynamiquement. Si la valeur est ‘#t’, Tor
          écoutera les commandes de contrôle sur le socket UNIX domain
          ‘/var/run/tor/control-sock’, qui sera inscriptible pour les
          membres du groupe ‘tor’.

 -- Procédure Scheme : tor-hidden-service NAME MAPPING
     Définie un “service caché” pour Tor nommé NAME qui implémente
     MAPPING. MAPPING est une liste de paires de port et d’hôte, comme
     dans :

           '((22 "127.0.0.1:22")
             (80 "127.0.0.1:8080"))

     Dans cet exemple, le port 22 du service caché est relié au port
     local 22 et le port 80 est relié au port local 8080.

     Cela crée un répertoire ‘/var/lib/tor/hidden-services/NAME’ où le
     fichier ‘hostname’ contient le nom d’hôte ‘.onion’ pour le service
     caché.

     Voir the Tor project’s documentation
     (https://www.torproject.org/docs/tor-hidden-service.html.en) pour
     trouver plus d’information.

   Le module ‘(gnu services rsync)’ fournit les services suivant :

   Vous pourriez vouloir un démon rsync si vous voulez que des fichiers
soient disponibles pour que n’importe qui (ou juste vous) puisse
télécharger des fichiers existants ou en téléverser des nouveaux.

 -- Variable Scheme : rsync-service-type
     C’est le type pour le démon rsync (https://rsync.samba.org). La
     valeur de ce service est un enregistrement ‘rsync-configuration’
     comme dans cet exemple :

          (service rsync-service-type)

     Voir plus pas pour trouver des détails à propos de
     ‘rsync-configuration’.

 -- Type de données : rsync-configuration
     Type de données représentant la configuration de ‘rsync-service’.

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

     ‘port-number’ (par défaut : ‘873’)
          Le port TCP sur lequel ‘rsync’ écoute les connexions
          entrantes. Si le port est inférieur à ‘1024’, ‘rsync’ doit
          être démarré en tant qu’utilisateur et groupe ‘root’.

     ‘pid-file’ (par défaut : ‘"/var/run/rsyncd/rsyncd.pid"’)
          Nom du fichier où ‘rsync’ écrit son PID.

     ‘lock-file’ (par défaut : ‘"/var/run/rsyncd/rsyncd.lock"’)
          Nom du fichier où ‘rsync’ écrit son fichier de verrouillage.

     ‘log-file’ (par défaut : ‘"/var/log/rsyncd.log"’)
          Nom du fichier où ‘rsync’ écrit son fichier de journal.

     ‘use-chroot?’ (par défaut : #T)
          S’il faut utiliser un chroot pour le répertoire partagé de
          ‘rsync’.

     ‘share-path’ (par défaut : ‘/srv/rsync’)
          Emplacement du répertoire partagé de ‘rsync’.

     ‘share-comment’ (par défaut : ‘"Rsync share"’)
          Commentaire du répertoire partagé de ‘rsync’.

     ‘read-only?’ (par défaut : #F)
          Permission en écriture sur le répertoire partagé.

     ‘timeout’ (par défaut : ‘300’)
          Délai d’attente d’entrée-sortie en secondes.

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

     ‘group’ (par défaut : "ROOT")
          Groupe du processus ‘rsync’.

     ‘uid’ (par défaut : "RSYNCD")
          Nom d’utilisateur ou ID utilisateur en tant que lequel les
          transferts de fichiers ont lieu si le démon a été lancé en
          ‘root’.

     ‘gid’ (par défaut : "RSYNCD")
          Nom du groupe ou ID du groupe qui sera utilisé lors de l’accès
          au module.

   Le module ‘(gnu services syncthing)’ fournit les services suivant :

   Vous pourriez vouloir un démon syncthing si vous avez des fichiers
sur plusieurs ordinateurs et souhaitez les synchroniser en temps réel,
de manière sécurisée sans espionnage possible.

 -- Variable Scheme : syncthing-service-type
     C’est le type pour le démon syncthing (https://syncthing.net/). La
     valeur de ce service est un enregistrement
     ‘syncthing-configuration’ comme dans cet exemple :

          (service syncthing-service-type
                   (syncthing-configuration (user "alice")))

     Voir plus pas pour trouver des détails à propos de
     ‘syncthing-configuration’.

      -- Type de données : syncthing-configuration
          Type de données représentant la configuration de
          ‘syncthing-service’.

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

          ‘arguments’ (par défaut : ’())
               Liste d’arguments de la ligne de commande à passer au
               binaire ‘syncthing’.

          ‘logflags’ (par défaut : 0)
               L’ensemble des drapeaux de journalisation, voir logfiles
               sur la documentation de Syncthing
               (https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags).

          ‘user’ (par défaut : #F)
               L’utilisateur qui lance le service Syncthing. Cela
               suppose que l’utilisateur spécifié existe.

          ‘group’ (par défaut : "USERS")
               Le groupe qui lance le service Syncthing. Cela suppose
               que le group spécifié existe.

          ‘home’ (par défaut : #F)
               Configuration et répertoires de données communs. Le
               répertoire de configuration par défaut est ‘$HOME’ de
               l’utilisateur ‘user’ de Syncthing.

   En plus, ‘(gnu services ssh)’ fournit les services suivant.

 -- Procédure Scheme : lsh-service [#:host-key "/etc/lsh/host-key"]
          [#:daemonic? #t] [#:interfaces '()] [#:port-number 22]
          [#:allow-empty-passwords? #f] [#:root-login? #f]
          [#:syslog-output? #t] [#:x11-forwarding? #t]
          [#:tcp/ip-forwarding? #t] [#:password-authentication? #t]
          [#:public-key-authentication? #t] [#:initialize? #t]
     Lance le programme ‘lshd’ de LSH pour écouter sur le port
     PORT-NUMBER. HOST-KEY doit désigner un fichier contenant la clef
     d’hôte et ne doit être lisible que par root.

     Lorsque DAEMONIC? est vrai, ‘lshd’ se détachera du terminal qui le
     contrôle et enregistrera ses journaux avec syslogd, à moins que
     SYSLOG-OUTPUT? ne soit faux. Évidemment, cela rend aussi
     lsh-service dépendant de l’existence d’un service syslogd. Lorsque
     PID-FILE? est vrai, ‘lshd’ écrit son PID dans le fichier PID-FILE.

     Lorsque INITIALIZE? est vrai, la graine et la clef d’hôte seront
     créés lors de l’activation du service s’ils n’existent pas encore.
     Cela peut prendre du temps et demande une interaction.

     Lorsque INITIALIZE? est faux, c’est à l’utilisateur d’initialiser
     le générateur d’aléatoire (*note (lsh)lsh-make-seed::) et de crée
     une paire de clefs dont la clef privée sera stockée dans le fichier
     HOST-KEY (*note (lsh)lshd basics::).

     Lorsque INTERFACES est vide, lshd écoute les connexions sur toutes
     les interfaces réseau ; autrement, INTERFACES doit être une liste
     de noms d’hôtes et d’adresses.

     ALLOW-EMPTY-PASSWORDS? spécifie si les connexions avec des mots de
     passes vides sont acceptés et ROOT-LOGIN? spécifie si la connexion
     en root est acceptée.

     Les autres options devraient être évidentes.

 -- Variable Scheme : openssh-service-type
     C’est le type pour le démon ssh OpenSSH (http://www.openssh.org),
     ‘sshd’. Sa valeur doit être un enregistrement
     ‘openssh-configuration’ comme dans cet exemple :

          (service openssh-service-type
                   (openssh-configuration
                     (x11-forwarding? #t)
                     (permit-root-login 'without-password)
                     (authorized-keys
                       `(("alice" ,(local-file "alice.pub"))
                         ("bob" ,(local-file "bob.pub"))))))

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

     Ce service peut être étendu avec des clefs autorisées
     supplémentaires, comme dans cet exemple :

          (service-extension openssh-service-type
                             (const `(("charlie"
                                       ,(local-file "charlie.pub")))))

 -- Type de données : openssh-configuration
     C’est l’enregistrement de la configuration de la commande ‘sshd’
     d’OpenSSH.

     ‘openssh’ (par défaut : OPENSSH)
          Le paquet Openssh à utiliser.

     ‘pid-file’ (par défaut : ‘"/var/run/sshd.pid"’)
          Nom du fichier où ‘sshd’ écrit son PID.

     ‘port-number’ (par défaut : ‘22’)
          Port TCP sur lequel ‘sshd’ écoute les connexions entrantes.

     ‘permit-root-login’ (par défaut : ‘#f’)
          Ce champ détermine si et quand autoriser les connexions en
          root. Si la valeur est ‘#f’, les connexions en root sont
          désactivées ; si la valeur est ‘#t’, elles sont autorisées.
          S’il s’agit du symbole ‘'without-password’, alors les
          connexions root sont autorisées mais pas par une
          authentification par mot de passe.

     ‘allow-empty-passwords?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, les utilisateurs avec un mot de
          passe vide peuvent se connecter. Sinon, ils ne peuvent pas.

     ‘password-authentication?’ (par défaut : ‘#t’)
          Lorsque la valeur est vraie, les utilisateurs peuvent se
          connecter avec leur mot de passe. Sinon, ils doivent utiliser
          une autre méthode d’authentification.

     ‘public-key-authentication?’ (par défaut : ‘#t’)
          Lorsque la valeur est vraie, les utilisateurs peuvent se
          connecter avec leur clef publique. Sinon, les utilisateurs
          doivent utiliser une autre méthode d’authentification.

          Les clefs publiques autorisées sont stockées dans
          ‘~/.ssh/authorized_keys’. Ce n’est utilisé que par le
          protocole version 2.

     ‘x11-forwarding?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, le transfert de connexion du
          client graphique X11 est activé — en d’autre termes, les
          options ‘-X’ et ‘-Y’ de ‘ssh’ fonctionneront.

     ‘allow-agent-forwarding?’ (par défaut : ‘#t’)
          Indique s’il faut autoriser la redirection d’agent.

     ‘allow-tcp-forwarding?’ (par défaut : ‘#t’)
          Indique s’il faut autoriser la redirection TCP.

     ‘gateway-ports?’ (par défaut : ‘#f’)
          Indique s’il faut autoriser les ports de passerelle.

     ‘challenge-response-authentication?’ (par défaut : ‘#f’)
          Spécifie si l’authentification par défi est autorisée (p. ex.
          via PAM).

     ‘use-pam?’ (par défaut : ‘#t’)
          Active l’interface avec le module d’authentification
          greffable, PAM. Si la valeur est ‘#t’, cela activera
          l’authentification PAM avec
          ‘challenge-response-authentication?’ et
          ‘password-authentication?’, en plus des modules de compte et
          de session de PAM pour tous les types d’authentification.

          Comme l’authentification par défi de PAM sert généralement un
          rôle équivalent à l’authentification par mot de passe, vous
          devriez désactiver soit ‘challenge-response-authentication?’,
          soit ‘password-authentication?’.

     ‘print-last-log?’ (par défaut : ‘#t’)
          Spécifie si ‘sshd’ devrait afficher la date et l’heure de
          dernière connexion des utilisateurs lorsqu’un utilisateur se
          connecte de manière interactive.

     ‘subsystems’ (par défaut : ‘'(("sftp" "internal-sftp"))’)
          Configure les sous-systèmes externes (p. ex. le démon de
          transfert de fichiers).

          C’est une liste de paires, composées chacune du nom du
          sous-système et d’une commande (avec éventuellement des
          arguments) à exécuter à la demande du sous-système.

          La commande ‘internal-sftp’ met en œuvre un serveur SFTP en
          cours de traitement. On peut aussi spécifier la commande
          ‘sftp-server’ :
               (service openssh-service-type
                        (openssh-configuration
                         (subsystems
                          `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))

     ‘accepted-environment’ (par défaut : ‘'()’)
          Liste de chaînes de caractères qui décrivent les variables
          d’environnement qui peuvent être exportées.

          Chaque chaîne a sa propre ligne. Voir l’option ‘AcceptEnv’
          dans ‘man sshd_config’.

          Cet exemple permet aux clients ssh d’exporter la variable
          ‘COLORTERM’. Elle est initialisée par les émulateurs de
          terminaux qui supportent les couleurs. Vous pouvez l’utiliser
          dans votre fichier de ressource de votre shell pour activer
          les couleurs sur la ligne de commande si cette variable est
          initialisée.

               (service openssh-service-type
                        (openssh-configuration
                          (accepted-environment '("COLORTERM"))))

     ‘authorized-keys’ (par défaut : ‘'()’)
          C’est la liste des clefs autorisées. Chaque élément de la
          liste est un nom d’utilisateur suivit d’un ou plusieurs objets
          simili-fichiers qui représentent les clefs publiques SSH. Par
          exemple :

               (openssh-configuration
                 (authorized-keys
                   `(("rekado" ,(local-file "rekado.pub"))
                     ("chris" ,(local-file "chris.pub"))
                     ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))

          enregistre les clefs publiques spécifiées pour les comptes
          ‘rekado’, ‘chris’ et ‘root’.

          Des clefs autorisées supplémentaires peuvent être spécifiées
          via ‘service-extension’.

          Remarquez que cela n’interfère _pas_ avec l’utilisation de
          ‘~/.ssh/authorized_keys’.

     ‘log-level’ (par défaut : ‘'info’)
          C’est le symbole qui spécifie le niveau de journalisation :
          ‘quiet’, ‘fatal’, ‘error’, ‘info’, ‘verbose’, ‘debug’, etc.
          Voir la page de manuel de ‘sshd_config’ pour trouver la liste
          complète des noms de niveaux.

     ‘extra-content’ (par défaut : ‘""’)
          Ce champ peut être utilisé pour ajouter un texte arbitraire au
          fichier de configuration. C’est particulièrement utile pour
          des configurations élaborées qui ne pourraient pas être
          exprimées autrement. Cette configuration, par exemple,
          désactiverait les connexions en root, mais les permettrait
          depuis une adresse IP spécifique :

               (openssh-configuration
                 (extra-content "\
               Match Address 192.168.0.1
                 PermitRootLogin yes"))

 -- Procédure Scheme : dropbear-service [CONFIG]
     Lance le démon SSH Dropbear
     (https://matt.ucc.asn.au/dropbear/dropbear.html) avec la
     configuration CONFIG donnée, un objet ‘<dropbear-configuration>’.

     Par exemple, pour spécifier un service Dropbear qui écoute sur le
     port 1234, ajoutez cet appel au champ ‘services’ de votre système
     d’exploitation :

          (dropbear-service (dropbear-configuration
                              (port-number 1234)))

 -- Type de données : dropbear-configuration
     Ce type de données représente la configuration d’un démon SSH
     Dropbear.

     ‘dropbear’ (par défaut : DROPBEAR)
          Le paquet Dropbear à utiliser.

     ‘port-number’ (par défaut : 22)
          Le port TCP sur lequel le démon attend des connexions
          entrantes.

     ‘syslog-output?’ (par défaut : ‘#t’)
          Indique s’il faut activer la sortie vers syslog.

     ‘pid-file’ (par défaut : ‘"/var/run/dropbear.pid"’)
          Nom du fichier de PID du démon.

     ‘root-login?’ (par défaut : ‘#f’)
          Indique s’il faut autoriser les connexions en ‘root’.

     ‘allow-empty-passwords?’ (par défaut : ‘#f’)
          Indique s’il faut autoriser les mots de passes vides.

     ‘password-authentication?’ (par défaut : ‘#t’)
          Indique s’il faut autoriser l’authentification par mot de
          passe.

 -- Variable Scheme : autossh-service-type
     C’est le type du programme AutoSSH
     (https://www.harding.motd.ca/autossh) qui exécute une copie de
     ‘ssh’ et la surveille, en la redémarrant si nécessaire si elle
     meurt ou arrête le trafic passant. AutoSSH peut être exécuté
     manuellement à partir de la ligne de commande en passant des
     arguments au binaire ‘autossh’ du paquet ‘autossh’, mais peut aussi
     être exécuté comme un service Guix. Ce dernier cas d’utilisation
     est documenté ici.

     AutoSSH peut être utilisé pour transférer le trafic local vers une
     machine distante en utilisant un tunnel SSH, et il respecte le
     ‘~/.ssh/config’ de l’utilisateur sous lequel il est exécuté.

     Par exemple, pour spécifier un service exécutant autossh comme
     utilisateur·rice ‘pino’ et transférant toutes les connexions
     locales au port ‘8081’ vers ‘remote:8081’ en utilisant un tunnel
     SSH, ajoutez cet appel au champ ‘services’ du système
     d’exploitation :

          (service autossh-service-type
                   (autossh-configuration
                    (user "pino")
                    (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "remote.net"))))

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

     ‘user’ (par défaut : ‘"autossh"’)
          L’utilisateur·rice en tant que responsable du service AutoSSH.
          Cela suppose que l’utilisateur spécifié existe.

     ‘poll’ (par défaut : ‘600’)
          Spécifie le temps de sondage de la connexion en secondes.

     ‘first-poll’ (par défaut : ‘#f’)
          Indique le nombre de secondes que l’AutoSSH attend avant le
          premier test de connexion. Après ce premier test, le vote
          reprend au rythme défini dans ‘poll’. Lorsqu’il est défini à
          ‘#f’, le premier sondage n’est pas traité spécialement et
          utilisera également le sondage de connexion spécifié dans
          ‘poll’.

     ‘gate-time’ (par défaut : ‘30’)
          Spécifie combien de secondes une connexion SSH doit être
          active avant qu’elle soit considérée comme réussie.

     ‘log-level’ (par défaut : ‘1’)
          Le niveau du log, correspondant aux niveaux utilisés par
          syslog—donc ‘0’ est le plus silencieux tandis que ‘7’ est le
          plus bavard.

     ‘max-start’ (par défaut : ‘#f’)
          Le nombre maximum de fois que SSH peut être (re)démarré avant
          la sortie d’AutoSSH. Lorsqu’il est défini sur ‘#f’, aucun
          maximum n’est configuré et AutoSSH peut redémarrer
          indéfiniment.

     ‘message’ (par défaut : ‘""’)
          Le message à ajouter à celui de echo envoyé lors du test des
          connexions.

     ‘port’ (par défaut : ‘"0"’)
          Les ports utilisés pour la surveillance de la connexion.
          Lorsqu’il est défini sur ‘"0"’, la surveillance est
          désactivée. Lorsqu’il est défini sur ‘"N"’ où N est un entier
          positif, les ports N et N+1 sont utilisés pour surveiller la
          connexion, de sorte que le port N est le port de surveillance
          de base et ‘n+1’ est le port d’echo. Lorsqu’ils sont définis
          sur ‘"N:M"’ où N et M sont des entiers positifs, les ports N
          et M sont utilisés pour surveiller la connexion, de sorte que
          le port N est le port de surveillance de base et M est le port
          d’echo.

     ‘ssh-options’ (par défaut : ‘'()’)
          La liste des arguments de la ligne de commande à passer à
          ‘ssh’ lorsqu’elle est exécutée. Les options ‘-f’ et ‘-M’ sont
          réservées à AutoSSH et peuvent provoquer un comportement
          indéfini.

 -- Variable Scheme : webssh-service-type
     C’est le type du programme WebSSH (https://webssh.huashengdun.org/)
     qui exécute un client web SSH. WebSSH peut être exécuté
     manuellement à partir de la ligne de commande en passant des
     arguments au binaire ‘wssh’ du paquet ‘webssh’, mais il peut aussi
     être exécuté comme un service Guix. Ce dernier cas d’utilisation
     est documenté ici.

     Par exemple, pour spécifier un service exécutant WebSSH sur
     l’interface de bouclage sur le port ‘8888’ avec une politique de
     rejet avec une liste des hôtes autorisés à se connecter, et NGINX
     comme reverse-proxy de ce service écoutant la connexion HTTPS,
     ajouter cet appel au champ ‘services’ du système d’exploitation :

          (service webssh-service-type
            (webssh-configuration (address "127.0.0.1")
                                  (port 8888)
                                  (policy 'reject)
                                  (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
                                                 "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))

          (service nginx-service-type
                   (nginx-configuration
                    (server-blocks
                     (list
                      (nginx-server-configuration
                       (inherit %webssh-configuration-nginx)
                       (server-name '("webssh.example.com"))
                       (listen '("443 ssl"))
                       (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
                       (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
                       (locations
                        (cons (nginx-location-configuration
                               (uri "/.well-known")
                               (body '("root /var/www;")))
                              (nginx-server-configuration-locations %webssh-configuration-nginx))))))))

 -- Type de données : webssh-configuration
     Type de données représentant la configuration pour
     ‘webssh-service’.

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

     ‘user-name’ (par défaut : "WEBSSH")
          Le nom ou l’identifiant de l’utilisateur·rice qui transfère le
          fichier vers et depuis ce module doit avoir lieu.

     ‘group-name’ (par défaut : "WEBSSH")
          Nom du groupe ou ID du groupe qui sera utilisé lors de l’accès
          au module.

     ‘address’ (par défaut : #F)
          Adresse IP sur laquelle ‘webssh’ écoute les connexions
          entrantes.

     ‘port’ (par défaut : 8888)
          Port TCP sur lequel ‘webssh’ écoute les connexions entrantes.

     ‘policy’ (par défaut : #F)
          Politique de connexion. La politique de REJECT nécessite de
          spécifier KNOWN-HOSTS.

     ‘known-hosts’ (par défaut : ’())
          Liste des hôtes qui ont permis une connexion SSH à partir de
          ‘webssh’.

     ‘log-file’ (par défaut : ‘"/var/log/webssh.log"’)
          Nom du fichier où ‘webssh’ écrit son fichier de journal.

     ‘log-level’ (par défaut : #F)
          Niveau d’enregistrement.

 -- Variable Scheme : %facebook-host-aliases
     Cette variable contient une chaîne de caractères à utiliser dans
     ‘/etc/hosts’ (*note (libc)Host Names::). Chaque ligne contient une
     entrée qui fait correspondre les noms des serveurs connus du
     service en ligne Facebook — p. ex. ‘www.facebook.com’ — à l’hôte
     local — ‘127.0.0.1’ ou son équivalent en IPv6, ‘::1’.

     Cette variable est typiquement utilisée dans le champ ‘hosts-file’
     d’une déclaration ‘operating-system’ (*note ‘/etc/hosts’: référence
     de système d'exploitation.) :

          (use-modules (gnu) (guix))

          (operating-system
            (host-name "mamachine")
            ;; ...
            (hosts-file
              ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
              ;; et « mamachine », ainsi que pour les serveurs de Facebook.
              (plain-file "hosts"
                          (string-append (local-host-aliases host-name)
                                         %facebook-host-aliases))))

     Ce mécanisme peut éviter que des programmes qui tournent
     localement, comme des navigateurs Web, ne se connectent à Facebook.

   Le module ‘(gnu services avahi)’ fourni la définition suivante.

 -- Variable Scheme : avahi-service-type
     C’est le service qui lance ‘avahi-daemon’, un service système qui
     répond aux requêtes mDNS/DNS-SD qui permet la découverte de
     services et la recherche de nom en « zéro configuration » (voir
     <https://avahi.org/>). Sa valeur doit être un enregistrement
     ‘avahi-configuration’ — voir plus bas.

     Ce service étend le démon de cache de services de noms (nscd) pour
     qu’il puisse résoudre les noms d’hôtes en ‘.local’ avec nss-mdns
     (https://0pointer.de/lennart/projects/nss-mdns/). *Note Name
     Service Switch::, pour plus d’informations sur la résolution des
     noms d’hôte.

     En plus, cela ajoute le paquet AVAHI au profil du système pour que
     les commandes comme ‘avahi-browse’ soient directement utilisables.

 -- Type de données : avahi-configuration
     Type de données représentant la configuration d’Avahi.

     ‘host-name’ (par défaut : ‘#f’)
          Si la valeur n’est pas ‘#f’, utilise cette valeur comme nom
          d’hôte à publier pour la machine ; sinon, utilise le vrai nom
          d’hôte de la machine.

     ‘publish?’ (par défaut : ‘#t’)
          Lorsque la valeur est vraie, permet la publication sur le
          réseau (en diffusion) des noms d’hôtes et des services.

     ‘publish-workstation?’ (par défaut : ‘#t’)
          Lorsque la valeur est vraie, ‘avahi-daemon’ publie le nom
          d’hôte et l’adresse IP de la machine via mDNS sur le réseau
          local. Pour voir les noms d’hôtes publiés sur votre réseau
          local, vous pouvez lancer :

               avahi-browse _workstation._tcp

     ‘wide-area?’ (par défaut : ‘#f’)
          Lorsque la valeur est vraie, DNS-SD sur DNS unicast est
          activé.

     ‘ipv4?’ (par défaut : ‘#t’)
     ‘ipv6?’ (par défaut : ‘#t’)
          Ces champs déterminent s’il faut utiliser des socket
          IPv4/IPv6.

     ‘domains-to-browse’ (par défaut : ‘'()’)
          C’est la liste des domaines sur lesquels naviguer.

 -- Variable Scheme : openvswitch-service-type
     C’est le type du service Open vSwitch
     (https://www.openvswitch.org), dont la valeur devrait être un objet
     ‘openvswitch-configuration’.

 -- Type de données : openvswitch-configuration
     Type de données représentant la configuration de Open vSwitch, un
     commutateur virtuel multiniveaux conçu pour rendre possible
     l’automatisation massive des réseaux avec des extensions
     programmables.

     ‘package’ (par défaut : OPENVSWITCH)
          Objet de paquet de Open vSwitch.

 -- Variable Scheme : pagekite-service-type
     Il s’agit du type de service du service PageKite
     (https://pagekite.net), une solution de tunneling permettant de
     rendre les serveurs locaux visibles au public, même derrière des
     pare-feu restrictifs ou du NAT sans transfert de ports. La valeur
     pour ce type de service est un enregistrement
     ‘pagekite-configuration’.

     Voici un exemple exposant les démons locaux HTTP et SSH :

          (service pagekite-service-type
                   (pagekite-configuration
                     (kites '("http:@kitename:localhost:80:@kitesecret"
                              "raw/22:@kitename:localhost:22:@kitesecret"))
                     (extra-file "/etc/pagekite.rc")))

 -- Type de données : pagekite-configuration
     Type de données représentant la configuration de PageKite.

     ‘package’ (par défaut : PAGEKITE)
          Objet du paquet de PageKite.

     ‘kitename’ (par défaut : ‘#f’)
          Nom de PageKite pour l’authentification au serveur frontal.

     ‘kitesecret’ (par défaut : ‘#f’)
          Secret partagé pour s’authentifier auprès du serveur frontal.
          Vous devriez probablement mettre cela dans ‘extra-file’ à la
          place.

     ‘frontend’ (par défaut : ‘#f’)
          Connectez-vous au serveur frontal nommé PageKite au lieu du
          service pagekite.net.

     ‘kites’ (par défaut : ‘'("http:@kitename:localhost:80:@kitesecret")’)
          Liste de services kites à utiliser. Expose HTTP sur le port 80
          par défaut. Le format est ‘proto:nomdukite:hôte:port:secret’.

     ‘extra-file’ (par défaut : ‘#f’)
          Fichier de configuration supplémentaire à lire, que vous devez
          créer manuellement. Utilisez-le pour ajouter des options
          supplémentaires et gérer les secrets partagés hors bande.

 -- Variable Scheme : yggdrasil-service-type
     Le type de service pour se connecter au réseau Yggdrasil
     (https://yggdrasil-network.github.io/), une jeune implémentation
     d’un réseau IPv6 entièrement chiffré de bout en bout.

          Yggdrasil fournit le routage indépendant du nom avec des
          adresses générées de manière cryptographiques. L’adressage
          statique signifie que vous pouvez garder la même adresse aussi
          longtemps que vous le souhaitez, même si vous changez
          d’emplacement, et que vous pouvez générer une nouvelle adresse
          (en générant de nouvelles clés) quand vous le souhaitez.
          <https://yggdrasil-network.github.io/2018/07/28/addressing.html>

     Passez-lui une valeur de type ‘yggdrasil-configuration’ pour le
     connecter aux pairs publics ou aux pairs locaux.

     voici un exemple qui utilise des pairs publics et une adresse
     statique. Les clés de signature et de chiffrement statiques sont
     définies dans ‘/etc/yggdrasil-private.conf’ (la valeur par défaut
     de ‘config-file’).

          ;; extrait d'une déclaration de système d'exploitation
          (service yggdrasil-service-type
                        (yggdrasil-configuration
                         (autoconf? #f) ;; utiliser uniquement les pairs publics
                         (json-config
                         ;; choisir parmi
                         ;; https://github.com/yggdrasil-network/public-peers
                          '((peers . #("tcp://1.2.3.4:1337"))))
                         ;; /etc/yggdrasil-private.conf est la valeur par défaut pour config-file
                         ))
          # exemple de contenu de /etc/yggdrasil-private.conf
          {
            # Votre clé de chiffrement publique. Vos pairs peuvent vous la demander pour la
            # mettre dans leur configuration AllowedEncryptionPublicKeys.
            EncryptionPublicKey: 378dc5...

            # Votre clé de chiffrement privée. NE la partagez avec PERSONNE !
            EncryptionPrivateKey: 0777...

            # Votre clé de signature publique. Vous n'avez normalement pas besoin de
            # la partager avec quiconque.
            SigningPublicKey: e1664...

            # Votre clé de signature privée. NE la partagez avec PERSONNE !
            SigningPrivateKey: 0589d...
          }

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

     ‘package’ (par défaut : ‘yggdrasil’)
          Objet du paquet de Yggdrasil.

     ‘json-config’ (par défaut : ‘'()’)
          Contenu de ‘/etc/yggdrasil.conf’. Sera fusionné avec
          ‘/etc/yggdrasil-private.conf’. Remarquez que ces paramètres
          sont stockés dans le dépôt de Guix, qui est disponible en
          lecture pour tout le monde. *Ne stockez pas vos clés privées
          dedans*. Voir la sortie de ‘yggdrasil -genconf’ pour un aperçu
          rapide de ce que sont des clés valides et leurs valeurs par
          défaut.

     ‘autoconf?’ (par défaut : ‘#f’)
          Indique s’il faut utiliser le mode automatique. L’activer fera
          utiliser une IP dynamique à Yggdrasil et l’appairer à ses
          voisins IPv6.

     ‘log-level’ (par défaut : ‘'info’)
          La quantité de détails à inclure dans les journaux. Utilisez
          ‘'debug’ pour plus de détails.

     ‘log-to’ (par défaut : ‘'stdout’)
          L’emplacement où envoyer les journaux. Par défaut, le service
          enregistre la sortie standard dans ‘/var/log/yggdrasil.log’.
          L’alternative est ‘'syslog’, qui envoie la sortie au service
          syslog.

     ‘config-file’ (par défaut : ‘"/etc/yggdrasil-private.conf"’)
          Le fichier HJSON depuis lequel charger les données sensibles.
          C’est l’emplacement où stocker les clés privées, qui doivent
          être spécifiées si vous ne voulez pas une adresse aléatoire à
          chaque démarrage. Utilisez ‘#f’ pour désactiver. Les options
          définies dans ce fichier prennent le pas sur ‘json-config’.
          Utilisez la sortie de ‘yggdrasil -genconf’ pour commencer.
          Pour configurer une adresse statique, supprimez tout sauf ces
          options :

             • ‘EncryptionPublicKey’
             • ‘EncryptionPrivateKey’
             • ‘SigningPublicKey’
             • ‘SigningPrivateKey’

 -- Variable Scheme : ipfs-service-type
     Le type de service pour se connecter au réseau IPFS
     (https://ipfs.io), un système de fichiers mondial, versionné et en
     pair-à-pair. Passez lui un objet ‘ipfs-configuration’ pour changer
     les ports utilisés pour la passerelle et l’API.

     Voici un exemple de configuration, avec des ports non standards :

          (service ipfs-service-type
                   (ipfs-configuration
                    (gateway "/ip4/127.0.0.1/tcp/8880")
                    (api "/ip4/127.0.0.1/tcp/8881")))

 -- Type de données : ipfs-configuration
     Type de données représentant la configuration d’IPFS.

     ‘package’ (par défaut : ‘go-ipfs’)
          Objet du paquet d’IPFS.

     ‘gateway’ (par défaut : ‘"/ip4/127.0.0.1/tcp/8082"’)
          Adresse de la passerelle, au format « multiaddress ».

     ‘api’ (par défaut : ‘"/ip4/127.0.0.1/tcp/5001"’)
          Adresse du point d’accès de l’API, au format « multiaddress ».

 -- Variable Scheme : keepalived-service-type
     C’est le type pour le logiciel de routage Keepalived
     (https://www.keepalived.org/), ‘keepalived’. Sa valeur doit être un
     enregistrement ‘keepalived-configuration’ comme dans cet exemple
     pour la machine maître :

          (service keepalived-service-type
                   (keepalived-configuration
                     (config-file (local-file "keepalived-master.conf"))))

     où ‘keepalived-master.conf’ :

          vrrp_instance my-group {
            state MASTER
            interface enp9s0
            virtual_router_id 100
            priority 100
            unicast_peer { 10.0.0.2 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }

     et pour la machine de secours :

          (service keepalived-service-type
                   (keepalived-configuration
                    (config-file (local-file "keepalived-backup.conf"))))

     où ‘keepalived-backup.conf’ :

          vrrp_instance my-group {
            state BACKUP
            interface enp9s0
            virtual_router_id 100
            priority 99
            unicast_peer { 10.0.0.3 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }


File: guix.fr.info,  Node: Mises à jour non surveillées (Unattended Upgrades),  Next: Système de fenêtrage X,  Prev: Services réseau,  Up: Services

10.8.5 Mises à jour non surveillées (Unattended Upgrades)
---------------------------------------------------------

Guix fournit un service pour effectuer des _unattended upgrades_ :
périodiquement, le système se reconfigure automatiquement à partir du
dernier Guix. Guix System possède plusieurs propriétés qui rendent les
mises à jour non surveillées sûres :

   • les mises à jour sont transactionnelles (soit la mise à jour
     réussit, soit elle échoue, mais vous ne pouvez pas vous retrouver
     avec un état système "intermédiaire") ;
   • le journal de mise à niveau est kept— vous pouvez le consulter avec
     ‘guix system list-generations’–et vous pouvez revenir à n’importe
     quelle génération précédente, si le système mis à jour ne se
     comporte pas comme prévu ;
   • le code du canal est authentifié, vous savez donc que vous ne
     pouvez exécuter que du code authentique (*note Canaux::) ;
   • ‘guix system reconfigure’ empêche les déclassements, ce qui le rend
     immunisé contre les attaques “downgrade attacks”.

   Pour mettre en place des mises à jour sans surveillance, ajoutez une
instance de ‘unattended-upgrade-service-type’ comme celle ci-dessous, à
la liste des services de votre système d’exploitation :

     (service unattended-upgrade-service-type)

   Les valeurs par défaut ci-dessus mettent en place des mises à jour
hebdomadaires : tous les dimanches à minuit. Il n’est pas nécessaire de
fournir le fichier de configuration du système d’exploitation : il
utilise ‘/run/current-system/configuration.scm’, ce qui garantit qu’il
utilise toujours votre dernière configuration—*note
provenance-service-type::, pour plus d’informations sur ce fichier.

   Plusieurs choses peuvent être configurés, notamment la périodicité et
les services (démons) à redémarrer à la fin. Lorsque la mise à jour est
réussie, le service se charge de supprimer les générations de systèmes
plus anciennes qu’un certain seuil, conformément à ‘guix system
delete-generations’. Voir la référence ci-dessous pour plus de détails.

   Pour vous assurer que les mises à jour sont bien effectuées, vous
pouvez exécuter ‘guix system describe’. Pour enquêter sur les échecs de
mise à jour, consultez le fichier journal des mises à jour non
surveillées (voir ci-dessous).

 -- Variable Scheme : unattended-upgrade-service-type
     C’est le type de service pour les mises à jour sans surveillance.
     Il met en place un job mcron (*note Exécution de tâches
     planifiées::) qui exécute ‘guix system reconfigure’ à partir de la
     dernière version des canaux spécifiés.

     Sa valeur doit être un enregistrement
     ‘unattended-upgrade-configuration’ (voir ci-dessous).

 -- Type de données : unattended-upgrade-configuration
     Ce type de données représente la configuration du service de mise à
     jour non surveillée. Les champs suivants sont disponibles :

     ‘schedule’ (par défaut : ‘"30 01 * * 0"’)
          Il s’agit du calendrier des mises à jour, exprimé sous la
          forme d’une gexp contenant un calendrier des travaux mcron
          (*note mcron job specifications: (mcron)Guile Syntax.).

     ‘channels’ (par défaut : ‘#~%default-channels’)
          Ce gexp spécifie les canaux à utiliser pour la mise à jour
          (*note Canaux::). Par défaut, l’extrémité du canal officiel
          ‘guix’ est utilisée.

     ‘operating-system-file’ (par défaut : ‘"/run/current-system/configuration.scm"’)
          Ce champ indique le fichier de configuration du système
          d’exploitation à utiliser. La valeur par défaut est de
          réutiliser le fichier de configuration de la configuration
          actuelle.

          Il y a cependant des cas où la référence à
          ‘/run/current-system/configuration.scm’ n’est pas suffisante,
          par exemple parce que ce fichier fait référence à des fichiers
          supplémentaires (clés publiques SSH, fichiers de configuration
          supplémentaires, etc.) via ‘local-file’ et constructions
          similaires. Pour ces cas, nous recommandons quelque chose qui
          va dans ce sens :

               (unattended-upgrade-configuration
                 (operating-system-file
                   (file-append (local-file "." "config-dir" #:recursive? #t)
                                "/config.scm")))

          L’effet ici est d’importer tout le répertoire courant dans le
          dépôt, et de se référer à ‘config.scm’ dans ce répertoire. Par
          conséquent, l’utilisation de ‘local-file’ dans ‘config.scm’
          fonctionnera comme prévu. *Note G-Expressions::, pour plus d’
          informations sur ‘local-file’ et ‘file-append’.

     ‘services-to-restart’ (par défaut : ‘'(mcron)’)
          Ce champ indique les services Shepherd à redémarrer lorsque la
          mise à jour est terminée.

          Ces services sont redémarrés dès qu’ils sont terminés, comme
          avec ‘herd restart’, ce qui garantit que la dernière version
          fonctionne—souvenez-vous que par défaut ‘guix system
          reconfigure’ ne redémarre que les services qui ne fonctionnent
          pas actuellement, ce qui est conservateur : cela minimise les
          perturbations mais laisse fonctionner les services obsolètes.

          Utilisez ‘herd status’ pour trouver les candidats au
          redémarrage. *Note Services::, pour des informations générales
          sur les services. Les services courants à redémarrer sont
          ‘ntpd’ et ‘ssh-daemon’.

          Par défaut, le service ‘mcron’ est redémarré. Cela garantit
          que la dernière version du travail de mise à niveau non
          surveillée sera utilisée la prochaine fois.

     ‘system-expiration’ (par défaut : ‘(* 3 30 24 3600)’)
          C’est le temps d’expiration en secondes pour les générations
          du système. Les générations du système plus anciennes que ce
          délai sont supprimées avec ‘guix system delete-generations’
          lorsqu’une mise à jour se termine .

               Remarque : Le service de mise à jour sans surveillance ne
               fait pas fonctionner le ramasse miettes. Vous voudrez
               probablement configurer votre propre job mcron pour
               exécuter ‘guix gc’ périodiquement.

     ‘minimum-duration’ (par défaut : ‘3600’)
          Durée maximale en secondes de la mise à jour ; passé ce délai,
          la mise à jour est interrompue.

          Cela est surtout utile pour s’assurer que la mise à jour ne
          finira pas par reconstruire ou retélécharger « le monde ».

     ‘log-file’ (par défaut : ‘"/var/log/unattended-upgrade.log"’)
          Fichier où sont consignées les mises à jour non surveillées.


File: guix.fr.info,  Node: Système de fenêtrage X,  Next: Services d'impression,  Prev: Mises à jour non surveillées (Unattended Upgrades),  Up: Services

10.8.6 Système de fenêtrage X
-----------------------------

La prise en chargue du système d’affichage graphique X Window — en
particulier Xorg — est fournit par le module ‘(gnu services xorg)’.
Remarquez qu’il n’y a pas de procédure ‘xorg-service’. À la place, le
serveur X est démarré par le “gestionnaire de connexion”, par défaut le
gestionnaire d’affichage de GNOME (GDM).

   GDM permet évidemment aux utilisateurs de se connecter et d’ouvrir un
gestionnaire de fenêtre ou un gestionnaire d’environnement autre que
GNOME ; pour ceux qui utilisent GNOME, GDM est requis pour certaines
fonctionnalités comme l’écran de verrouillage automatique.

   Pour utiliser X11, vous devez installer au moins un “gestionnaire de
fenêtre” — par exemple les paquets ‘windowmaker’ ou ‘openbox’ — de
préférence en l’ajoutant au champ ‘packages’ de votre définition de
système d’exploitation (*note system-wide packages: référence de système
d'exploitation.).

 -- Variable Scheme : gdm-service-type
     C’est le type pour le GNOME Desktop Manager
     (https://wiki.gnome.org/Projects/GDM/) (GDM), un programme qui gère
     les serveurs d’affichage graphique et qui gère les connexions
     graphiques des utilisateur·rice·s. Sa valeur doit être un
     ‘gdm-configuration’ (voir ci-dessous).

     GDM cherche des “types de sessions” définies par les fichiers
     ‘.desktop’ dans ‘/run/current-system/profile/share/xsessions’ et
     permet aux utilisateurs de choisir une session depuis l’écran de
     connexion. Les paquets comme ‘gnmoe’, ‘xfce’ et ‘i3’ fournissent
     des fichiers ‘.desktop’ ; les ajouter à l’ensemble des paquets du
     système les rendra automatiquement disponibles sur l’écran de
     connexion.

     En plus, les fichiers ‘~/.xsession’ sont honorées. Lorsqu’il est
     disponible, ‘~/.xsession’ doit être un fichier exécutable qui
     démarre un gestionnaire de fenêtre au un autre client X.

 -- Type de données : gdm-configuration
     ‘auto-login?’ (par défaut : ‘#f’)
     ‘default-user’ (par défaut : ‘#f’)
          Lorsque ‘auto-login?’ est faux, GDM présente un écran de
          connexion.

          Lorsque ‘auto-login?’ est vrai, GDM se connecte directement en
          tant que ‘default-user’.

     ‘debug?’ (par défaut : ‘#f’)
          Lorsqu’il est « vrai », GDM écrit des messages de débogage
          dans son journal.

     ‘gnome-shell-assets’ (par défaut : …)
          Liste de données requises par GDM : un thème d’icônes, des
          polices, etc.

     ‘xorg-configuration’ (par défaut : ‘(xorg-configuration)’)
          Configuration du serveur graphique Xorg.

     ‘xsession’ (par défaut : ‘xinitrc’)
          Le script à lancer avant de démarrer une session X.

     ‘dbus-daemon’ (par défaut : ‘dbus-daemon-wrapper’)
          Nom du fichier de l’exécutable ‘dbus-daemon’.

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

 -- Variable Scheme : slim-service-type
     C’est de type pour le gestionnaire de connexion graphique SLiM pour
     X11.

     Comme GDM, SLiM recherche des types de sessions décrites par des
     fichiers ‘.desktop’ et permet aux utilisateurs de choisir une
     session à partir de l’écran de connexion avec ‘F1’. Il comprend
     aussi les fichiers ‘~/.xsession’.

     Contrairement à GDM, SLiM ne démarre pas la session utilisateur sur
     un terminal virtuel différent à la connexion, ce qui signifie que
     vous ne pouvez démarrer qu’une seule session graphique. Si vous
     voulez pouvoir exécuter plusieurs sessions graphiques en même
     temps, vous devez ajouter plusieurs services SLiM à la liste des
     services de votre système. L’exemple suivant montre comment
     remplacer le service GDM par défaut par deux services SLiM sur les
     tty 7 et 8.

          (use-modules (gnu services)
                       (gnu services desktop)
                       (gnu services xorg)
                       (srfi srfi-1))  ;pour « remove »

          (operating-system
            ;; ...
            (services (cons* (service slim-service-type (slim-configuration
                                                         (display ":0")
                                                         (vt "vt7")))
                             (service slim-service-type (slim-configuration
                                                         (display ":1")
                                                         (vt "vt8")))
                             (modify-services %desktop-services
                               (delete gdm-service-type)))))

 -- Type de données : slim-configuration
     Type de données représentant la configuration de
     ‘slim-service-type’.

     ‘allow-empty-passwords?’ (par défaut : ‘#t’)
          S’il faut autoriser les connexions avec un mot de passe vide.

     ‘auto-login?’ (par défaut : ‘#f’)
     ‘default-user’ (par défaut : ‘""’)
          Lorsque ‘auto-login?’ est faux, SLiM présent un écran de
          connexion.

          Lorsque ‘auto-login?’ est vrai, SLiM se connecte directement
          en tant que ‘default-user’.

     ‘theme’ (par défaut : ‘%default-slim-theme’)
     ‘theme-name’ (par défaut : ‘%default-slim-theme-name’)
          Le thème graphique à utiliser et son nom.

     ‘auto-login-session’ (par défaut : ‘#f’)
          Si la valeur est vraie, elle doit être le nom d’un exécutable
          à démarrer comme session par défaut — p. ex. ‘(file-append
          windowmaker "/bin/windowmaker")’.

          Si la valeur est fausse, une session décrite par l’un des
          fichiers ‘.desktop’ disponibles dans
          ‘/run/current-system/profile’ et ‘~/.guix-profile’ sera
          utilisée.

               Remarque : Vous devez installer au moins un gestionnaire
               de fenêtres dans le profil du système ou dans votre
               profil utilisateur. Sinon, si ‘auto-login-session’ est
               faux, vous ne serez jamais capable de vous connecter.

     ‘xorg-configuration’ (par défaut : ‘(xorg-configuration)’)
          Configuration du serveur graphique Xorg.

     ‘display’ (par défaut : ‘":0"’)
          La session d’affichage sur laquelle démarrer le serveur
          graphique Xorg.

     ‘vt’ (par défaut : ‘"vt7"’)
          Le terminal virtuel sur lequel démarrer le serveur d’affichage
          graphique Xorg.

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

     ‘shepherd’ (par défaut : ‘shepherd’)
          Le paquet Shepherd à utiliser pour invoquer ‘halt’ et
          ‘reboot’.

     ‘sessreg’ (par défaut : ‘sessreg’)
          Le paquet sessreg à utiliser pour enregistrer la session.

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

 -- Variable Scheme : %default-theme
 -- Variable Scheme : %default-theme-name
     Le thème SLiM par défaut et son nom.

 -- Type de données : sddm-configuration
     C’est le type de données représentant la configuration du service
     SDDM.

     ‘display-server’ (par défaut : "x11")
          Choisit le serveur d’affichage à utiliser pour l’écran
          d’accueil. Les valeurs valides sont ‘"x11"’ ou ‘"wayland"’.

     ‘numlock’ (par défaut : "on")
          Les valeurs valides sont ‘"on"’, ‘"off"’ or ‘"none"’.

     ‘halt-command’ (par défaut : ‘#~(string-apppend #$shepherd "/sbin/halt")’)
          La commande à lancer à l’arrêt du système.

     ‘reboot-command’ (par défaut : ‘#~(string-append #$shepherd "/sbin/reboot")’)
          La commande à lancer lors du redémarrage du système.

     ‘theme’ (par défaut : "maldives")
          Thème à utiliser. Les thèmes par défaut fournis par SDDM sont
          ‘"elarun"’, ‘"maldives"’ ou ‘"maya"’.

     ‘themes-directory’ (par défaut : "/run/current-system/profile/share/sddm/themes")
          Le répertoire où se trouvent les thèmes.

     ‘faces-directory’ (par défaut : "/run/current-system/profile/share/sddm/faces")
          Répertoire où se trouvent les avatars.

     ‘default-path’ (par défaut : "/run/current-system/profile/bin")
          Le PATH par défaut à utiliser.

     ‘minimum-uid’ (par défaut : 1000)
          UID minimum affiché dans le SDDM et autorisé pour la
          connexion.

     ‘maximum-uid’ (par défaut : 2000)
          UID maximum pour être affiché dans SDDM.

     ‘remember-last-user?’ (par défaut : #t)
          S’il faut se rappeler le dernier utilisateur connecté.

     ‘remember-last-session?’ (par défaut : #t)
          S’il faut se rappeler la dernière session.

     ‘hide-users’ (par défaut : "")
          Les noms d’utilisateurs à cacher sur l’écran d’accueil de
          SDDM.

     ‘hide-shells’ (par défaut : ‘#~(string-append #$shadow "/sbin/nologin")’)
          Les utilisateurs avec les shells listés seront cachés sur
          l’écran d’accueil de SDDM.

     ‘session-command’ (par défaut : ‘#~(string-append #$sddm "/share/sddm/scripts/wayland-session")’)
          Le script à lancer avant de démarrer une session wayland.

     ‘sessions-directory’ (par défaut : "/run/current-system/profile/share/wayland-sessions")
          Le répertoire où trouver les fichiers .desktop qui démarrent
          des sessions wayland.

     ‘xorg-configuration’ (par défaut : ‘(xorg-configuration)’)
          Configuration du serveur graphique Xorg.

     ‘xauth-path’ (par défaut : ‘#~(string-append #$xauth "/bin/xauth")’)
          Chemin vers xauth.

     ‘xephyr-path’ (par défaut : ‘#~(string-append #$xorg-server "/bin/Xephyr")’)
          Chemin vers Xephyr.

     ‘xdisplay-start’ (par défaut : ‘#~(string-append #$sddm "/share/sddm/scripts/Xsetup")’)
          Le script à lancer après avoir démarré xorg-server.

     ‘xdisplay-stop’ (par défaut : ‘#~(string-append #$sddm "/share/sddm/scripts/Xstop")’)
          Le script à lancer avant d’arrêter xorg-server.

     ‘xsession-command’ (par défaut : ‘xinitrc’)
          Le script à lancer avant de démarrer une session X.

     ‘xsessions-directory’ (par défaut : "/run/current-system/profile/share/xsessions")
          Répertoire où trouver les fichiers .desktop pour les sessions
          X.

     ‘minimum-vt’ (par défaut : 7)
          VT minimal à utiliser.

     ‘auto-login-user’ (par défaut : "")
          Utilisateur à utiliser pour la connexion automatique.

     ‘auto-login-session’ (par défaut : "")
          Le fichier desktop à utiliser pour la connexion automatique.

     ‘relogin?’ (par défaut : #f)
          S’il faut se reconnecter après la déconnexion.

 -- Variable Scheme : sddm-service-type
     C’est le type de service qui permet d’exécuter le gestionnaire
     d’affichage Gestionnaire d’affichage SDDM
     (https://github.com/sddm/sddm). Sa valeur doit être un
     enregistrement ‘sddm-configuration’ (voir ci-dessous).

     Voici un exemple d’utilisation :

          (service sddm-service-type
                   (sddm-configuration
                     (auto-login-user "alice")
                     (auto-login-session "xfce.desktop")))

 -- Type de données : sddm-configuration
     Ce type de données représente la configuration du gestionnaire de
     connexion SDDM. Les champs disponibles sont :

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

     ‘display-server’ (default : ‘"x11"’)
          La valeur doit être soit ‘"X11"’, soit ‘"wayland"’.

     ‘auto-login-user’ (par défaut : ‘""’)
          Si la valeur n’est pas vide, c’est le compte utilisateur sous
          lequel se connecter automatiquement.

     ‘auto-login-session’ (par défaut : ‘""’)
          Si la valeur n’est pas vide, c’est le nom du fichier
          ‘.desktop’ utilisé comme session pour la connexion
          automatique.

 -- Type de données : xorg-configuration
     Ce type de données représente la configuration du serveur
     d’affichage graphique Xorg. Remarquez qu’il n’y a pas de service
     Xorg ; à la place, le serveur X est démarré par un « gestionnaire
     d’affichage graphique » comme GDM, SDDM et SLiM. Ainsi, la
     configuration de ces gestionnaires d’affichage agrègent un
     enregistrement ‘xorg-configuration’.

     ‘modules’ (par défaut : ‘%default-xorg-modules’)
          C’est une liste de “paquets de module” chargés par le serveur
          Xorg — p. ex. ‘xf86-video-vesa’, ‘xf86-input-keyboard’ etc.

     ‘fonts’ (par défaut : ‘%default-xorg-fonts’)
          C’est une liste de répertoires de polices à ajouter au “chemin
          de polices” du serveur.

     ‘drivers’ (par défaut : ‘'()’)
          Cela doit être soit la liste vide, auquel cas Xorg choisit un
          pilote graphique automatiquement, soit une liste de noms de
          pilotes qui seront essayés dans cet ordre — p. ex.
          ‘("modesetting" "vesa")’.

     ‘resolutions’ (par défaut : ‘'()’)
          Lorsque ‘resolutions’ est la liste vide, Xorg choisit une
          résolution d’écran appropriée. Sinon, il doit s’agir d’une
          liste de résolutions — p. ex. ‘((1024 768) (640 480))’.

     ‘keyboard-layout’ (par défaut : ‘#f’)
          Si la valeur est ‘#f’, Xorg utilise la disposition du clavier
          par défaut — habituellement la disposition anglaise américaine
          (« qwerty ») pour un clavier de PC à 105 touches.

          Sinon cela doit être un objet ‘keyboard-layout’ spécifiant la
          disposition du clavier à utiliser lorsque Xorg tourne. *Note
          Disposition du clavier:: pour plus d’informations sur la
          manière de spécifier la disposition du clavier.

     ‘extra-config’ (par défaut : ‘'()’)
          C’est une liste de chaînes de caractères ou d’objets ajoutés
          au fichier de configuration. Elle est utile pour ajouter du
          texte supplémentaire directement dans le fichier de
          configuration.

     ‘server’ (par défaut : ‘xorg-server’)
          C’est le paquet fournissant le serveur Xorg.

     ‘server-arguments’ (par défaut : ‘%default-xorg-server-arguments’)
          Liste d’arguments de la ligne de commande supplémentaires à
          passer au serveur X. La valeur par défaut est ‘-nolisten tcp’.

 -- Procédure Scheme : set-xorg-configuration CONFIG
          [LOGIN-MANAGER-SERVICE-TYPE]
     Dit au gestionnaire de connexion (de type
     LOGIN-MANAGER-SERVICE-TYPE) d’utiliser CONFIG, un enregistrement
     ‘<xorg-configuration>’.

     Comme la configuration Xog est incluse dans la configuration du
     gestionnaire de connexion — p. ex. ‘gdm-configuration’ — cette
     procédure fournit un raccourci pour configurer Xorg.

 -- Procédure Scheme : xorg-start-command [CONFIG]
     Renvoie un script ‘startx’ dans lequel les modules, les polices,
     etc., spécifiés dans CONFIG sont disponibles. Le résultat devrait
     être utilisé à la place de ‘startx’.

     Habituellement le serveur X est démarré par un gestionnaire de
     connexion.

 -- Procédure Scheme : screen-locker-service PACKAGE [PROGRAM]
     Ajoute PACKAGE, un paquet pour un verrouiller l’écran ou un
     économiseur d’écran dont la commande est PROGRAM, à l’ensemble des
     programmes setuid et lui ajoute une entrée PAM. Par exemple :

          (screen-locker-service xlockmore "xlock")

     rend utilisable le bon vieux XlockMore.


File: guix.fr.info,  Node: Services d'impression,  Next: Services de bureaux,  Prev: Système de fenêtrage X,  Up: Services

10.8.7 Services d’impression
----------------------------

Le module ‘(gnu services cups)’ fournit une définition de service Guix
pour le service d’impression CUPS. Pour ajouter la prise en charge d’une
imprimante à un système Guix, ajoutez un ‘cups-service’ à la définition
du système d’exploitation :

 -- Variable Scheme : cups-service-type
     Le type de service pour un serveur d’impression CUPS. Sa valeur
     devrait être une configuration CUPS valide (voir plus bas). Pour
     utiliser les paramètres par défaut, écrivez simplement :
          (service cups-service-type)

   La configuration de CUPS contrôle les paramètres de base de votre
installation CUPS : sur quelles interfaces il doit écouter, que faire si
un travail échoue, combien de journalisation il faut faire, etc. Pour
ajouter une imprimante, vous devrez visiter l’URL <http://localhost:631>
ou utiliser un outil comme les services de configuration d’imprimante de
GNOME. Par défaut, la configuration du service CUPS générera un
certificat auto-signé si besoin, pour les connexions sécurisée avec le
serveur d’impression.

   Supposons que vous souhaitiez activer l’interface Web de CUPS et
ajouter le support pour les imprimantes Epson via le paquet
‘epson-inkjet-printer-escpr’ et pour les imprimantes HP via le paquet
‘hplip-minimal’. Vous pouvez le faire directement, comme ceci (vous
devez utiliser le module ‘(gnu packages cups)’) :

     (service cups-service-type
              (cups-configuration
                (web-interface? #t)
                (extensions
                  (list cups-filters epson-inkjet-printer-escpr hplip-minimal))))

   Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui
provient du paquet hplip, nous vous suggérons d’installer le paquet
‘hplip’, soit dans votre configuration d’OS, soit en tant
qu’utilisateur.

   Les paramètres de configuration disponibles sont les suivants. Chaque
définition des paramètres est précédé par son type ; par exemple,
‘string-list foo’ indique que le paramètre ‘foo’ devrait être spécifié
comme une liste de chaînes de caractères. Il y a aussi une manière de
spécifier la configuration comme une chaîne de caractères, si vous avez
un vieux fichier ‘cupsd.conf’ que vous voulez porter depuis un autre
système ; voir la fin pour plus de détails.

   Les champs de ‘cups-configuration’ disponibles sont :

 -- paramètre de ‘cups-configuration’ : package cups
     Le paquet CUPS.

 -- paramètre de ‘cups-configuration’ : package-list extensions (par
          défaut : ‘(list brlaser cups-filters
          epson-inkjet-printer-escpr foomatic-filters hplip-minimal
          splix)’)
     Pilotes et autres extensions du paquet CUPS.

 -- paramètre de ‘cups-configuration’ : files-configuration
          files-configuration
     Configuration de l’emplacement où écrire les journaux, quels
     répertoires utiliser pour les travaux d’impression et les
     paramètres de configuration privilégiés liés.

     Les champs ‘files-configuration’ disponibles sont :

      -- paramètre de ‘files-configuration’ : log-location access-log
          Définit le fichier de journal d’accès. Spécifier un nom de
          fichier vide désactive la génération de journaux d’accès. La
          valeur ‘stderr’ fait que les entrées du journal seront envoyés
          sur l’erreur standard lorsque l’ordonnanceur est lancé au
          premier plan ou vers le démon de journal système lorsqu’il
          tourne en tache de fond. La valeur ‘syslog’ fait que les
          entrées du journal sont envoyées au démon de journalisation du
          système. Le nom du serveur peut être inclus dans les noms de
          fichiers avec la chaîne ‘%s’, comme dans
          ‘/var/log/cups/%s-access_log’.

          La valeur par défaut est ‘"/var/log/cups/access_log"’.

      -- paramètre de ‘files-configuration’ : file-name cache-dir
          L’emplacement où CUPS devrait mettre les données en cache.

          La valeur par défaut est ‘"/var/cache/cups"’.

      -- paramètre de ‘files-configuration’ : string config-file-perm
          Spécifie les permissions pour tous les fichiers de
          configuration que l’ordonnanceur écrit.

          Remarquez que les permissions pour le fichier printers.conf
          sont actuellement masqués pour ne permettre que l’accès par
          l’utilisateur de l’ordonnanceur (typiquement root). La raison
          est que les URI des imprimantes contiennent des informations
          d’authentification sensibles qui ne devraient pas être connues
          sur le système. Il n’est pas possible de désactiver cette
          fonctionnalité de sécurité.

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

      -- paramètre de ‘files-configuration’ : log-location error-log
          Définit le fichier de journal d’erreur. Spécifier un nom de
          fichier vide désactive la génération de journaux d’erreur. La
          valeur ‘stderr’ fait que les entrées du journal seront envoyés
          sur l’erreur standard lorsque l’ordonnanceur est lancé au
          premier plan ou vers le démon de journalisation du système
          lorsqu’il tourne en tache de fond. La valeur ‘syslog’ fait que
          les entrées du journal sont envoyées au démon de
          journalisation du système. Le nom du serveur peut être inclus
          dans les noms de fichiers avec la chaîne ‘%s’, comme dans
          ‘/var/log/cups/%s-error_log’.

          La valeur par défaut est ‘"/var/log/cups/error_log"’.

      -- paramètre de ‘files-configuration’ : string fatal-errors
          Spécifie quelles erreurs sont fatales, qui font terminer
          l’ordonnanceur. Les types de chaînes sont :

          ‘none’
               Aucune erreur n’est fatale.

          ‘all’
               Toutes les erreurs ci-dessous sont fatales.

          ‘browse’
               Les erreurs d’initialisation de la navigation sont
               fatales, par exemple les connexion échouées au démon
               DNS-SD.

          ‘config’
               Les erreurs de syntaxe du fichier de configuration sont
               fatale.

          ‘listen’
               Les erreurs d’écoute ou de port sont fatales, sauf pour
               les erreurs d’IPv6 sur la boucle locale ou les adresses
               ‘any’.

          ‘log’
               Les erreurs de création ou d’écriture des fichiers de
               journal sont fatales.

          ‘permissions’
               Les mauvaises permissions des fichiers de démarrage sont
               fatales, par exemple un certificat TLS et des fichiers de
               clefs avec des permissions permettant la lecture à tout
               le monde.

          La valeur par défaut est ‘"all -browse"’.

      -- paramètre de ‘files-configuration’ : boolean file-device?
          Spécifie si le fichier de pseudo-périphérique peut être
          utilisé pour de nouvelles queues d’impression. L’URI
          <file:///dev/null> est toujours permise.

          La valeur par défaut est ‘#f’.

      -- paramètre de ‘files-configuration’ : string group
          Spécifie le nom ou l’ID du groupe qui sera utilisé lors de
          l’exécution de programmes externes.

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

      -- paramètre de ‘files-configuration’ : string log-file-perm
          Spécifie les permissions pour tous les fichiers de journal que
          l’ordonnanceur écrit.

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

      -- paramètre de ‘files-configuration’ : log-location page-log
          Définit le fichier de journal de page. Spécifier un nom de
          fichier vide désactive la génération de journaux de pages. La
          valeur ‘stderr’ fait que les entrées du journal seront envoyés
          sur l’erreur standard lorsque l’ordonnanceur est lancé au
          premier plan ou vers le démon de journal système lorsqu’il
          tourne en tache de fond. La valeur ‘syslog’ fait que les
          entrées du journal sont envoyées au démon de journalisation du
          système. Le nom du serveur peut être inclus dans les noms de
          fichiers avec la chaîne ‘%s’, comme dans
          ‘/var/log/cups/%s-page_log’.

          La valeur par défaut est ‘"/var/log/cups/page_log"’.

      -- paramètre de ‘files-configuration’ : string remote-root
          Spécifie le nom d’utilisateur associé aux accès non
          authentifiés par des clients qui se disent être l’utilisateur
          root. La valeur par défaut est ‘remroot’.

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

      -- paramètre de ‘files-configuration’ : file-name request-root
          Spécifie le répertoire qui contient les travaux d’impression
          et d’autres données des requêtes HTTP.

          La valeur par défaut est ‘"/var/spool/cups"’.

      -- paramètre de ‘files-configuration’ : sandboxing sandboxing
          Spécifie le niveau d’isolation de sécurité appliqué aux
          filtres d’impression, aux moteurs et aux autres processus fils
          de l’ordonnanceur ; soit ‘relaxed’ soit ‘strict’. Cette
          directive n’est actuellement utilisée et supportée que sur
          macOS.

          La valeur par défaut est ‘strict’.

      -- paramètre de ‘files-configuration’ : file-name server-keychain
          Spécifie l’emplacement des certifications TLS et des clés
          privées. CUPS cherchera les clés publiques et privées dans ce
          répertoire : un fichier ‘.crt’ pour un certificat encodé en
          PEM et le fichier ‘.key’ correspondant pour la clé privée
          encodée en PEM.

          La valeur par défaut est ‘"/etc/cups/ssl"’.

      -- paramètre de ‘files-configuration’ : file-name server-root
          Spécifie le répertoire contenant les fichiers de configuration
          du serveur.

          La valeur par défaut est ‘"/etc/cups"’.

      -- paramètre de ‘files-configuration’ : boolean sync-on-close?
          Spécifie si l’ordonnanceur appelle fsync(2) après avoir écrit
          la configuration ou les fichiers d’état.

          La valeur par défaut est ‘#f’.

      -- paramètre de ‘files-configuration’ :
               space-separated-string-list system-group
          Spécifie le groupe ou les groupes à utiliser pour
          l’authentification du groupe ‘@SYSTEM’.

      -- paramètre de ‘files-configuration’ : file-name temp-dir
          Spécifie le répertoire où les fichiers temporaires sont
          stockés.

          La valeur par défaut est ‘"/var/spool/cups/tmp"’.

      -- paramètre de ‘files-configuration’ : string user
          Spécifie le nom d’utilisateur ou l’ID utilisé pour lancer des
          programmes externes.

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

      -- paramètre de ‘files-configuration’ : string set-env
          Indique que la variable d’environnement spécifiée doit être
          passée aux processus fils.

          La valeur par défaut est ‘"variable value"’.

 -- paramètre de ‘cups-configuration’ : access-log-level
          access-log-level
     Spécifie le niveau de journalisation pour le fichier AccessLog. Le
     niveau ‘config’ enregistre les ajouts, suppressions et
     modifications d’imprimantes et de classes et lorsque les fichiers
     de configuration sont accédés ou mis à jour. Le niveau ‘actions’
     enregistre la soumission, la suspension, la libération, la
     modification et l’annulation des travaux et toutes les conditions
     de ‘config’. Le niveau ‘all’ enregistre toutes les requêtes.

     La valeur par défaut est ‘actions’.

 -- paramètre de ‘cups-configuration’ : boolean auto-purge-jobs?
     Spécifie s’il faut vider l’historique des travaux automatiquement
     lorsqu’il n’est plus nécessaire pour les quotas.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : comma-separated-string-list
          browse-dns-sd-sub-types
     Spécifie une liste de sous-types DNS-SD à publier pour chaque
     imprimante connectée. Par exemple, ‘" cups" " print"’ dira aux
     clients réseaux que le partage CUPS et IPP Everywhere sont pris en
     charge.

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

 -- paramètre de ‘cups-configuration’ : browse-local-protocols
          browse-local-protocols
     Spécifie les protocoles à utiliser pour partager les imprimantes
     sur le réseau local.

     La valeur par défaut est ‘dnssd’.

 -- paramètre de ‘cups-configuration’ : boolean browse-web-if?
     Spécifie si l’interface web de CUPS est publiée.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : boolean browsing?
     Spécifie si les imprimantes partagées sont publiées.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : string classification
     Spécifie la classification de sécurité du serveur. N’importe quel
     nom de bannière peut être utilisé, comme ‘"classified"’,
     ‘"confidential"’, ‘"secret"’, ‘"topsecret"’ et ‘"unclassified"’ ou
     la bannière peut être omise pour désactiver les fonctions
     d’impression sécurisées.

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

 -- paramètre de ‘cups-configuration’ : boolean classify-override?
     Spécifie si les utilisateurs peuvent remplacer la classification
     (page de couverture) des travaux d’impression individuels avec
     l’option ‘job-sheets’.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : default-auth-type
          default-auth-type
     Spécifie le type d’authentification par défaut à utiliser.

     La valeur par défaut est ‘Basic’.

 -- paramètre de ‘cups-configuration’ : default-encryption
          default-encryption
     Spécifie si le chiffrement sera utilisé pour les requêtes
     authentifiées.

     La valeur par défaut est ‘Required’.

 -- paramètre de ‘cups-configuration’ : string default-language
     Spécifie la langue par défaut à utiliser pour le contenu textuel et
     web.

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

 -- paramètre de ‘cups-configuration’ : string default-paper-size
     Spécifie la taille de papier par défaut pour les nouvelles queues
     d’impression. ‘"Auto"’ utilise la valeur par défaut du paramètre de
     régionalisation, tandis que ‘"None"’ spécifie qu’il n’y a pas de
     taille par défaut. Des noms de tailles spécifique sont par exemple
     ‘"Letter"’ et ‘"A4"’.

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

 -- paramètre de ‘cups-configuration’ : string default-policy
     Spécifie la politique d’accès par défaut à utiliser.

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

 -- paramètre de ‘cups-configuration’ : boolean default-shared?
     Spécifie si les imprimantes locales sont partagées par défaut.

     La valeur par défaut est ‘#t’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          dirty-clean-interval
     Spécifie le délai pour mettre à jour les fichiers de configuration
     et d’état. Une valeur de 0 fait que la mise à jour arrive aussi
     vite que possible, typiquement en quelques millisecondes.

     La valeur par défaut est ‘30’.

 -- paramètre de ‘cups-configuration’ : error-policy error-policy
     Spécifie ce qu’il faut faire si une erreur a lieu. Les valeurs
     possibles sont ‘abort-job’, qui supprimera les travaux d’impression
     en échec ; ‘retry-job’, qui tentera de nouveau l’impression plus
     tard ; ‘retry-current-job’, qui retentera l’impression
     immédiatement ; et ‘stop-printer’ qui arrête l’imprimante.

     La valeur par défaut est ‘stop-printer’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          filter-limit
     Spécifie le coût maximum des filtres qui sont lancés en même temps,
     pour minimiser les problèmes de ressources de disque, de mémoire et
     de CPU. Une limite de 0 désactive la limite de filtrage. Une
     impression standard vers une imprimante non-PostScript requiert une
     limite de filtre d’environ 200. Une imprimante PostScript requiert
     environ la moitié (100). Mettre en place la limite en dessous de
     ces valeurs limitera l’ordonnanceur à un seul travail d’impression
     à la fois.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer filter-nice
     Spécifie la priorité des filtres de l’ordonnanceur qui sont lancés
     pour imprimer un travail. La valeur va de 0, la plus grande
     priorité, à 19, la plus basse priorité.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : host-name-lookups
          host-name-lookups
     Spécifie s’il faut faire des résolutions inverses sur les clients
     qui se connectent. Le paramètre ‘double’ fait que ‘cupsd’ vérifie
     que le nom d’hôte résolu depuis l’adresse correspond à l’une des
     adresses renvoyées par ce nom d’hôte. Les résolutions doubles
     évitent aussi que des clients avec des adresses non enregistrées ne
     s’adressent à votre serveur. N’initialisez cette valeur qu’à ‘#t’
     ou ‘double’ que si c’est absolument nécessaire.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          job-kill-delay
     Spécifie le nombre de secondes à attendre avant de tuer les filtres
     et les moteurs associés avec un travail annulé ou suspendu.

     La valeur par défaut est ‘30’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          job-retry-interval
     Spécifie l’intervalle des nouvelles tentatives en secondes. C’est
     typiquement utilisé pour les queues de fax mais peut aussi être
     utilisé avec des queues d’impressions normales dont la politique
     d’erreur est ‘retry-job’ ou ‘retry-current-job’.

     La valeur par défaut est ‘30’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          job-retry-limit
     Spécifie le nombre de nouvelles tentatives pour les travaux. C’est
     typiquement utilisé pour les queues de fax mais peut aussi être
     utilisé pour les queues d’impressions dont la politique d’erreur
     est ‘retry-job’ ou ‘retry-current-job’.

     La valeur par défaut est ‘5’.

 -- paramètre de ‘cups-configuration’ : boolean keep-alive?
     Spécifie s’il faut supporter les connexion HTTP keep-alive.

     La valeur par défaut est ‘#t’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          keep-alive-timeout
     Spécifie combien de temps les connexions inactives avec les clients
     restent ouvertes, en secondes.

     La valeur par défaut est ‘30’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          limit-request-body
     Spécifie la taille maximale des fichiers à imprimer, des requêtes
     IPP et des données de formulaires HTML. Une limite de 0 désactive
     la vérification de la limite.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : multiline-string-list listen
     Écoute sur les interfaces spécifiées. Les valeurs valides sont de
     la forme ADRESSE:PORT, où ADRESSE est soit une adresse IPv6 dans
     des crochets, soit une adresse IPv4, soit ‘*’ pour indiquer toutes
     les adresses. Les valeurs peuvent aussi être des noms de fichiers
     de socket UNIX domain. La directive Listen est similaire à la
     directive Port mais vous permet de restreindre l’accès à des
     interfaces ou des réseaux spécifiques.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          listen-back-log
     Spécifie le nombre de connexions en attente qui seront permises. Ça
     n’affecte normalement que les serveurs très actifs qui ont atteint
     la limite MaxClients, mais peut aussi être déclenché par un grand
     nombre de connexions simultanées. Lorsque la limite est atteinte,
     le système d’exploitation refusera les connexions supplémentaires
     jusqu’à ce que l’ordonnanceur accepte les connexions en attente.

     La valeur par défaut est ‘128’.

 -- paramètre de ‘cups-configuration’ : location-access-control-list
          location-access-controls
     Spécifie un ensemble de contrôles d’accès supplémentaires.

     Les champs de ‘location-access-controls’ disponibles sont :

      -- paramètre de ‘location-access-controls’ : file-name path
          Spécifie le chemin d’URI auquel les contrôles d’accès
          s’appliquent.

      -- paramètre de ‘location-access-controls’ : access-control-list
               access-controls
          Les contrôles d’accès pour tous les accès à ce chemin, dans le
          même format que le champ ‘access-controls’ de
          ‘operation-access-control’.

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

      -- paramètre de ‘location-access-controls’ :
               method-access-control-list method-access-controls
          Contrôles d’accès pour les accès spécifiques à la méthode à ce
          chemin.

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

          Les champs de ‘method-access-controls’ disponibles sont :

           -- paramètre de ‘method-access-controls’ : boolean reverse?
               Si la valeur est ‘#t’, applique les contrôles d’accès à
               toutes les méthodes sauf les méthodes listées. Sinon,
               applique le contrôle uniquement aux méthodes listées.

               La valeur par défaut est ‘#f’.

           -- paramètre de ‘method-access-controls’ : method-list
                    methods
               Les méthodes auxquelles ce contrôle d’accès s’applique.

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

           -- paramètre de ‘method-access-controls’ :
                    access-control-list access-controls
               Directives de contrôle d’accès, en tant que liste de
               chaines de caractères. Chaque chaine devrait être une
               directive, comme ‘"Order allow,deny"’.

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

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          log-debug-history
     Spécifie le nombre de messages de débogage qui sont retenu pour la
     journalisation si une erreur arrive dans un travail d’impression.
     Les messages de débogage sont journalisés indépendamment du
     paramètre LogLevel.

     La valeur par défaut est ‘100’.

 -- paramètre de ‘cups-configuration’ : log-level log-level
     Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
     ‘none’ arrête toute journalisation alors que ‘debug2’ enregistre
     tout.

     La valeur par défaut est ‘info’.

 -- paramètre de ‘cups-configuration’ : log-time-format log-time-format
     Spécifie le format de la date et de l’heure dans les fichiers de
     journaux. La valeur ‘standard’ enregistre les secondes entières
     alors que ‘usecs’ enregistre les microsecondes.

     La valeur par défaut est ‘standard’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer max-clients
     Spécifie le nombre maximum de clients simultanés qui sont autorisés
     par l’ordonnanceur.

     La valeur par défaut est ‘100’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-clients-per-host
     Spécifie le nombre maximum de clients simultanés permis depuis une
     même adresse.

     La valeur par défaut est ‘100’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer max-copies
     Spécifie le nombre maximum de copies qu’un utilisateur peut
     imprimer pour chaque travail.

     La valeur par défaut est ‘9999’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-hold-time
     Spécifie la durée maximum qu’un travail peut rester dans l’état de
     suspension ‘indefinite’ avant qu’il ne soit annulé. La valeur 0
     désactive l’annulation des travaux suspendus.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer max-jobs
     Spécifie le nombre maximum de travaux simultanés autorisés. La
     valeur 0 permet un nombre illimité de travaux.

     La valeur par défaut est ‘500’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-jobs-per-printer
     Spécifie le nombre maximum de travaux simultanés autorisés par
     imprimante. La valeur 0 permet au plus MaxJobs travaux par
     imprimante.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-jobs-per-user
     Spécifie le nombre maximum de travaux simultanés permis par
     utilisateur. La valeur 0 permet au plus MaxJobs travaux par
     utilisateur.

     La valeur par défaut est ‘0’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-job-time
     Spécifie la durée maximum qu’un travail peut prendre avant qu’il ne
     soit annulé, en secondes. Indiquez 0 pour désactiver l’annulation
     des travaux « coincés ».

     La valeur par défaut est ‘10800’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          max-log-size
     Spécifie la taille maximale des fichiers de journaux avant qu’on ne
     les fasse tourner, en octets. La valeur 0 désactive la rotation.

     La valeur par défaut est ‘1048576’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          multiple-operation-timeout
     Spécifie la durée maximale à permettre entre les fichiers d’un
     travail en contenant plusieurs, en secondes.

     La valeur par défaut est ‘300’.

 -- paramètre de ‘cups-configuration’ : string page-log-format
     Spécifie le format des lignes PageLog. Les séquences qui commencent
     par un pourcent (‘%’) sont remplacées par l’information
     correspondante, tandis que les autres caractères sont copiés
     littéralement. Les séquences pourcent suivantes sont reconnues :

     ‘%%’
          insère un seul caractères pourcent

     ‘%{name}’
          insère la valeur de l’attribut IPP spécifié

     ‘%C’
          insère le nombre de copies pour la page actuelle

     ‘%P’
          insère le numéro de page actuelle

     ‘%T’
          insère la date et l’heure actuelle dans un format de journal
          commun

     ‘%j’
          insère l’ID du travail

     ‘%p’
          insère le nom de l’imprimante

     ‘%u’
          insère le nom d’utilisateur

     Si la valeur est la chaîne vide, le PageLog est désactivée. La
     chaîne ‘%p %u %j %T %P %C %{job-billing}
     %{job-originating-host-name} %{job-name} %{media} %{sides}’ crée un
     PageLog avec les entrées standards.

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

 -- paramètre de ‘cups-configuration’ : environment-variables
          environment-variables
     Passe les variables d’environnement spécifiées aux processus fils ;
     une liste de chaînes de caractères.

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

 -- paramètre de ‘cups-configuration’ : policy-configuration-list
          policies
     Spécifie des politiques de contrôle d’accès nommées.

     Les champs de ‘policy-configuration’ disponibles sont :

      -- paramètre de ‘policy-configuration’ : string name
          Nom de la politique.

      -- paramètre de ‘policy-configuration’ : string job-private-access
          Spécifie une liste d’accès pour les valeurs privées du
          travail. ‘@ACL’ correspond aux valeurs
          requesting-user-name-allowed ou requesting-user-name-denied de
          l’imprimante. ‘@OWNER’ correspond au propriétaire du travail.
          ‘@SYSTEM’ correspond aux groupes listés dans le champ
          ‘system-group’ de la configuration ‘files-config’, qui est
          réifié dans le fichier ‘cups-files.conf(5)’. Les autres
          éléments possibles de la liste d’accès sont des noms
          d’utilisateurs spécifiques et ‘@GROUP’ pour indiquer les
          membres d’un groupe spécifique. La liste d’accès peut aussi
          être simplement ‘all’ ou ‘default’.

          La valeur par défaut est ‘"@OWNER @SYSTEM"’.

      -- paramètre de ‘policy-configuration’ : string job-private-values
          Spécifie la liste des valeurs de travaux à rendre privée, ou
          ‘all’, ‘default’, ou ‘none’.

          La valeur par défaut est ‘"job-name job-originating-host-name
          job-originating-user-name phone"’.

      -- paramètre de ‘policy-configuration’ : string
               subscription-private-access
          Spécifie un liste d’accès pour les valeurs privées de la
          souscription. ‘@ACL’ correspond aux valeurs
          requesting-user-name-allowed ou requesting-user-name-denied de
          l’imprimante. ‘@OWNER’ correspond au propriétaire du travail.
          ‘@SYSTEM’ correspond aux groupes listés dans le champ
          ‘system-group’ de la configuration ‘files-config’, qui est
          réifié dans le fichier ‘cups-files.conf(5)’. Les autres
          éléments possibles de la liste d’accès sont des noms
          d’utilisateurs spécifiques et ‘@GROUP’ pour indiquer les
          membres d’un groupe spécifique. La liste d’accès peut aussi
          être simplement ‘all’ ou ‘default’.

          La valeur par défaut est ‘"@OWNER @SYSTEM"’.

      -- paramètre de ‘policy-configuration’ : string
               subscription-private-values
          Spécifie la liste des valeurs de travaux à rendre privée, ou
          ‘all’, ‘default’, ou ‘none’.

          La valeur par défaut est ‘"notify-events notify-pull-method
          notify-recipient-uri notify-subscriber-user-name
          notify-user-data"’.

      -- paramètre de ‘policy-configuration’ :
               operation-access-control-list access-controls
          Contrôle d’accès par les actions IPP.

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

 -- paramètre de ‘cups-configuration’ : boolean-or-non-negative-integer
          preserve-job-files
     Spécifie si les fichiers de travaux (les documents) sont préservés
     après qu’un travail est imprimé. Si une valeur numérique est
     spécifiée, les fichiers de travaux sont préservés pour le nombre de
     secondes indiquées après l’impression. Sinon, une valeur booléenne
     s’applique indéfiniment.

     La valeur par défaut est ‘86400’.

 -- paramètre de ‘cups-configuration’ : boolean-or-non-negative-integer
          preserve-job-history
     Spécifie si l’historique des travaux est préservé après qu’un
     travail est imprimé. Si une valeur numérique est spécifiée,
     l’historique des travaux est préservé pour le nombre de secondes
     indiquées après l’impression. Si la valeur est ‘#t’, l’historique
     des travaux est préservé jusqu’à atteindre la limite MaxJobs.

     La valeur par défaut est ‘#t’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer
          reload-timeout
     Spécifie la durée d’attente pour la fin des travaux avant de
     redémarrer l’ordonnanceur.

     La valeur par défaut est ‘30’.

 -- paramètre de ‘cups-configuration’ : string rip-cache
     Spécifie la quantité de mémoire maximale à utiliser pour convertir
     des documents en bitmaps pour l’imprimante.

     La valeur par défaut est ‘"128m"’.

 -- paramètre de ‘cups-configuration’ : string server-admin
     Spécifie l’adresse de courriel de l’administrateur système.

     La valeur par défaut est ‘"root@localhost.localdomain"’.

 -- paramètre de ‘cups-configuration’ : host-name-list-or-* server-alias
     La directive ServerAlias est utilisée pour la validation des
     en-tête HTTP Host lorsque les clients se connectent à
     l’ordonnanceur depuis des interfaces externes. Utiliser le nom
     spécial ‘*’ peut exposer votre système à des attaques connues de
     recombinaison DNS dans le navigateur, même lorsque vous accédez au
     site à travers un pare-feu. Si la découverte automatique des autres
     noms ne fonctionne pas, nous vous recommandons de lister chaque nom
     alternatif avec une directive SeverAlias plutôt que d’utiliser ‘*’.

     La valeur par défaut est ‘*’.

 -- paramètre de ‘cups-configuration’ : string server-name
     Spécifie le nom d’hôte pleinement qualifié du serveur.

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

 -- paramètre de ‘cups-configuration’ : server-tokens server-tokens
     Spécifie les informations incluses dans les en-têtes Server des
     réponses HTTP. ‘None’ désactive l’en-tête Server. ‘ProductOnly’
     rapporte ‘CUPS’. ‘Major’ rapporte ‘CUPS 2’. ‘Minor’ rapporte ‘CUPS
     2.0’. ‘Minimal’ rapporte ‘CUPS 2.0.0’. ‘OS’ rapporte ‘CUPS 2.0.0
     (UNAME)’ où UNAME est la sortie de la commande ‘uname’. ‘Full’
     rapporte ‘CUPS 2.0.0 (UNAME) IPP/2.0’.

     La valeur par défaut est ‘Minimal’.

 -- paramètre de ‘cups-configuration’ : multiline-string-list ssl-listen
     Écoute des connexions chiffrées sur les interfaces spécifiées. Les
     valeurs valides sont de la forme ADRESSE:PORT, où ADRESSE est soit
     une adresse IPv6 dans des crochets, soit une adresse IPv4, soit ‘*’
     pour indiquer toutes les interfaces.

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

 -- paramètre de ‘cups-configuration’ : ssl-options ssl-options
     Indique les options de chiffrement. Par défaut, CUPS ne supporte
     que le chiffrement avec TLS v1.0 ou plus avec des suites de
     chiffrement connues pour être sures. La sécurité peut être réduite
     en utilisant les options ‘Allow’, et améliorée en utilisant les
     options ‘Deny’. L’option ‘AllowRC4’ active les suites de
     chiffrement 128-bits RC4, qui sont requises pour certains vieux.
     L’option ‘AllowSSL3’ active SSL v3.0, qui est requis par certains
     vieux clients qui ne supportent pas TLS v1.0. L’option ‘DenyCBC’
     désactive toutes les suites CBC. L’option ‘DenyTLS1.0’ désactive la
     prise en charge de TLS v1.0 — la version minimale du protocole est
     donc TLS v1.1.

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

 -- paramètre de ‘cups-configuration’ : boolean strict-conformance?
     Spécifie si l’ordonnanceur demande aux clients d’adhérer aux
     spécifications IPP.

     La valeur par défaut est ‘#f’.

 -- paramètre de ‘cups-configuration’ : non-negative-integer timeout
     Spécifie le délai d’attente des requêtes HTTP, en secondes.

     La valeur par défaut est ‘300’.

 -- paramètre de ‘cups-configuration’ : boolean web-interface?
     Spécifie si l’interface web est activée.

     La valeur par défaut est ‘#f’.

   Maintenant, vous vous dîtes peut-être « oh là là, cher manuel de
Guix, je t’aime bien mais arrête maintenant avec ces options de
configuration »(1). En effet. cependant, encore un point supplémentaire
: vous pouvez avoir un fichier ‘cupsd.conf’ existant que vous pourriez
vouloir utiliser. Dans ce cas, vous pouvez passer un
‘opaque-cups-configuration’ en configuration d’un ‘cups-service-type’.

   Les champs de ‘opaque-cups-configuration’ disponibles sont :

 -- paramètre de ‘opaque-cups-configuration’ : package cups
     Le paquet CUPS.

 -- paramètre de ‘opaque-cups-configuration’ : string cupsd.conf
     Le contenu de ‘cupsd.conf’, en tant que chaîne de caractères.

 -- paramètre de ‘opaque-cups-configuration’ : string cups-files.conf
     Le contenu du fichier ‘cups-files.conf’, en tant que chaîne de
     caractères.

   Par exemple, si vos fichiers ‘cupsd.conf’ et ‘cups-files.conf’ sont
dans des chaînes du même nom, pouvez instancier un service CUPS de cette
manière :

     (service cups-service-type
              (opaque-cups-configuration
                (cupsd.conf cupsd.conf)
                (cups-files.conf cups-files.conf)))

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

   (1) NdT : je vous rassure, c’est aussi mon sentiment au moment de
traduire ces lignes. Et pour moi, c’est encore loin d’être fini.


File: guix.fr.info,  Node: Services de bureaux,  Next: Services de son,  Prev: Services d'impression,  Up: Services

10.8.8 Services de bureaux
--------------------------

Le module ‘(gnu services desktop)’ fournit des services qui sont
habituellement utiles dans le contexte d’une installation « de bureau »
— c’est-à-dire sur une machine qui fait tourner un service d’affichage
graphique, éventuellement avec des interfaces utilisateurs graphiques,
etc. Il définit aussi des services qui fournissent des environnements de
bureau spécifiques comme GNOME, Xfce et MATE.

   Pour simplifier les choses, le module définit une variable contenant
l’ensemble des services que les utilisateurs s’attendent en général à
avoir sur une machine avec un environnement graphique et le réseau :

 -- Variable Scheme : %desktop-services
     C’est la liste des services qui étend ‘%base-services’ en ajoutant
     ou en ajustant des services pour une configuration « de bureau »
     typique.

     En particulier, elle ajoute un gestionnaire de connexion graphique
     (*note ‘gdm-service-type’: Système de fenêtrage X.), des
     verrouilleurs d’écran, un outil de gestion réseau (*note
     ‘network-manager-service-type’: Services réseau.) avec la prise en
     charge des modems (*note ‘modem-manager-service-type’: Services
     réseau.), des services de gestion de l’énergie et des couleurs, le
     gestionnaire de connexion et de session ‘elogind’, le service de
     privilèges Polkit, le service de géolocalisation GeoClue, le démon
     AccountsService qui permet aux utilisateurs autorisés de changer
     les mots de passe du système, un client NTP (*note Services
     réseau::), le démon Avahi, et le service name service switch est
     configuré pour pouvoir utiliser ‘nss-mdns’ (*note mDNS: Name
     Service Switch.).

   La variable ‘%desktop-services’ peut être utilisée comme champ
‘services’ d’une déclaration ‘operating-system’ (*note ‘services’:
référence de système d'exploitation.).

   En plus, les procédures ‘gnome-desktop-service-type’,
‘xfce-desktop-service’, ‘mate-desktop-service-type’,
‘lxqt-desktop-service-type’ et ‘enlightenment-desktop-service-type’
peuvent ajouter GNOME, Xfce, MATE ou Enlightenment à un système. «
Ajouter GNOME » signifie que les services du système comme les
utilitaires d’ajustement de la luminosité et de gestion de l’énergie
sont ajoutés au système, en étendant ‘polkit’ et ‘dbus’ de la bonne
manière, ce qui permet à GNOME d’opérer avec des privilèges plus élevés
sur un nombre limité d’interfaces systèmes spécialisées. En plus,
ajouter un service construit par ‘gnome-desktop-service-type’ ajoute le
métapaquet GNOME au profil du système. De même, ajouter le service Xfce
ajoute non seulement le métapaquet ‘xfce’ au profil système, mais il
permet aussi au gestionnaire de fichiers Thunar d’ouvrir une fenêtre de
gestion des fichier « en mode root », si l’utilisateur s’authentifie
avec le mot de passe administrateur via l’interface graphique polkit
standard. « Ajouter MATE » signifie que ‘polkit’ et ‘dbus’ sont étendue
de la bonne manière, ce qui permet à MATE d’opérer avec des privilèges
plus élevés sur un nombre limité d’interface systèmes spécialisées. En
plus, ajouter un service de type ‘mate-desktop-service-type’ ajoute le
métapaquet MATE au profil du système. « Ajouter Enlightenment » signifie
que ‘dbus’ est étendu comme il faut et que plusieurs binaires
d’Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
d’écran d’Enlightenment et à d’autres fonctionnalités de fonctionner
correctement.

   Les environnement de bureau dans Guix utilisent le service
d’affichage Xorg par défaut. Si vous voulez utiliser le protocol de
serveur d’affichage plus récent Wayland, vous devez utiliser
‘sddm-service’ à la place de GDM comme gestionnaire de connexion
graphique. Vous devriez ensuite sélectionner la session « GNOME
(Wayland) » dans SDDM. Autrement, vous pouvez essayer de démarrer GNOME
sur Wayland manuellement depuis un TTY avec la commande
‘XDG_SESSION_TYPE=wayland exec dbus-run-session gnome-session’.
Actuellement seul GNOME support Wayland.

 -- Variable Scheme : gnome-desktop-service-type
     C’est le type de service qui ajoute l’environnement de bureau GNOME
     (https://www.gnome.org). Sa valeur est un objet
     ‘gnome-desktop-configuration’ (voir plus bas).

     Ce service ajoute le paquet ‘gnome’ au profil du système et étend
     polkit avec les actions de ‘gnome-settings-daemon’.

 -- Type de données : gnome-desktop-configuration
     Enregistrement de la configuration de l’environnement de bureau
     GNOME.

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

 -- Variable Scheme : xfce-desktop-service-type
     C’est le type de service qui lance l’environnement de bureau
     https://xfce.org/ (Xfce). Sa valeur est un objet
     ‘xfce-desktop-configuration’ (voir plus bas).

     Ce service ajoute le paquet ‘xfce’ au profil du système et étend
     polkit avec la possibilité pour ‘thunar’ de manipuler le système de
     fichier en root depuis une session utilisateur, après que
     l’utilisateur s’authentifie avec le mot de passe administrateur.

     Remarquez que ‘xfce4-panel’ et ses paquets de greffons devraient
     être installés dans le même profil pour assurer la compatibilité.
     Lorsque vous utilisez ce service, vous devriez ajouter les greffons
     supplémentaires (‘xfce4-whiskermenu-plugin’,
     ‘xfce4-weather-plugin’, etc) au champ ‘packages’ de votre
     ‘operating-system’.

 -- Type de données : xfce-desktop-configuration
     Enregistrement de la configuration de l’environnement de bureau
     Xfce.

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

 -- Variable Scheme : mate-desktop-service-type
     C’est le type de service qui lance l’environnement de bureau MATE
     (https://mate-desktop.org/). Sa valeur est un objet
     ‘mate-desktop-configuration’ (voir plus bas).

     Ce service ajoute le paquet ‘mate’ au profil du système, et étend
     polkit avec les actions de ‘mate-settings-daemon’.

 -- Type de données : mate-desktop-configuration
     Enregistrement de configuration pour l’environnement de bureau
     MATE.

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

 -- Variable Scheme : lxqt-desktop-service-type
     C’est le type de service qui lance l’environnement de bureau LXQt
     (https://lxqt.github.io). Sa valeur est un objet
     ‘lxqt-desktop-configuration’ (voir plus bas).

     Ce service ajoute le paquet ‘lxqt’ au profil du système.

 -- Type de données : lxqt-desktop-configuration
     Enregistrement de la configuration de l’environnement de bureau
     LXQt.

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

 -- Variable Scheme : enlightenment-desktop-service-type
     Renvoie un service qui ajoute le paquet ‘enlightenment’ et étend
     dbus avec les actions de ‘efl’.

 -- Type de données : enlightenment-desktop-service-configuration
     ‘enlightenment’ (par défaut : ‘enlightenment’)
          Le paquet enlightenment à utiliser.

   Comme les services de bureau GNOME, Xfce et MATE récupèrent tant de
paquet, la variable ‘%desktop-services’ par défaut n’inclut aucun
d’entre eux. Pour ajouter GNOME, Xfce ou MATE, utilisez ‘cons’ pour les
ajouter à ‘%desktop-services’ dans le champ ‘services’ de votre
‘operating-system’ :

     (use-modules (gnu))
     (use-service-modules desktop)
     (operating-system
       ...
       ;; cons* ajoute des éléments à la liste donnée en dernier argument.
       (services (cons* (service gnome-desktop-service-type)
                        (service xfce-desktop-service)
                        %desktop-services))
       ...)

   Ces environnements de bureau seront alors disponibles comme une
option dans la fenêtre de connexion graphique.

   Les définitions de service qui sont vraiment incluses dans
‘%desktop-services’ et fournies par ‘(gnu services dbus)’ et ‘(gnu
services desktop)’ sont décrites plus bas.

 -- Procédure Scheme : dbus-service [#:dbus DBUS] [#:services '()]
     Renvoie un service qui lance le « bus système », DBUS, avec le
     support de SERVICES.

     D-Bus (https://dbus.freedesktop.org/) est un utilitaire de
     communication inter-processus. Son bus système est utilisé pour
     permettre à des services systèmes de communiquer et d’être notifiés
     d’événements systèmes.

     SERVICES doit être une liste de paquets qui fournissent un
     répertoire ‘etc/dbus-1/system.d’ contenant de la configuration
     D-Bus supplémentaire et des fichiers de politiques. Par exemple,
     pour permettre à avahi-daemon d’utiliser le bus système, SERVICES
     doit être égal à ‘(list avahi)’.

 -- Procédure Scheme : elogind-service [#:config CONFIG]
     Renvoie un service qui lance le démon de gestion de connexion et de
     session ‘elogind’. Elogind (https://github.com/elogind/elogind)
     expose une interface D-Bus qui peut être utilisée pour connaître
     quels utilisateurs sont connectés, le type de session qu’ils sont
     ouverte, suspendre le système, désactiver la veille système,
     redémarrer le système et d’autre taches.

     Elogind gère la plupart des événements liés à l’énergie du système,
     par exemple mettre en veille le système quand l’écran est rabattu
     ou en l’éteignant quand le bouton de démarrage est appuyé.

     L’argument CONFIG spécifie la configuration d’elogind et devrait
     être le résultat d’une invocation de ‘(elogind-configuration
     (PARAMETER VALUE)...)’. Les paramètres disponibles et leur valeur
     par défaut sont :

     ‘kill-user-processes?’
          ‘#f’
     ‘kill-only-users’
          ‘()’
     ‘kill-exclude-users’
          ‘("root")’
     ‘inhibit-delay-max-seconds’
          ‘5’
     ‘handle-power-key’
          ‘poweroff’
     ‘handle-suspend-key’
          ‘suspend’
     ‘handle-hibernate-key’
          ‘hibernate’
     ‘handle-lid-switch’
          ‘suspend’
     ‘handle-lid-switch-docked’
          ‘ignore’
     ‘handle-lid-switch-external-power’
          ‘ignore’
     ‘power-key-ignore-inhibited?’
          ‘#f’
     ‘suspend-key-ignore-inhibited?’
          ‘#f’
     ‘hibernate-key-ignore-inhibited?’
          ‘#f’
     ‘lid-switch-ignore-inhibited?’
          ‘#t’
     ‘holdoff-timeout-seconds’
          ‘30’
     ‘idle-action’
          ‘ignore’
     ‘idle-action-seconds’
          ‘(* 30 60)’
     ‘runtime-directory-size-percent’
          ‘10’
     ‘runtime-directory-size’
          ‘#f’
     ‘remove-ipc?’
          ‘#t’
     ‘suspend-state’
          ‘("mem" "standby" "freeze")’
     ‘suspend-mode’
          ‘()’
     ‘hibernate-state’
          ‘("disk")’
     ‘hibernate-mode’
          ‘("platform" "shutdown")’
     ‘hybrid-sleep-state’
          ‘("disk")’
     ‘hybrid-sleep-mode’
          ‘("suspend" "platform" "shutdown")’

 -- Procédure Scheme : accountsservice-service [#:accountsservice
          ACCOUNTSSERVICE]
     Renvoie un service qui lance AccountsService, un service système
     qui peut lister les comptes disponibles, changer leur mot de passe,
     etc. AccountsService s’intègre à Polkit pour permettre aux
     utilisateurs non privilégiés de pouvoir modifier la configuration
     de leur système. le site de accountsservice
     (https://www.freedesktop.org/wiki/Software/AccountsService/) pour
     trouver plus d’informations.

     L’argument ACCOUNTSSERVICE est le paquet ‘accountsservice’ à
     exposer comme un service.

 -- Procédure Scheme : polkit-service [#:polkit POLKIT]
     Renvoie un service qui lance le service de gestion des privilèges
     Polkit (https://www.freedesktop.org/wiki/Software/polkit/), qui
     permet aux administrateurs systèmes de permettre l’accès à des
     opération privilégiées d’une manière structurée. En demandant au
     service Polkit, un composant système privilégié peut savoir
     lorsqu’il peut donner des privilèges supplémentaires à des
     utilisateurs normaux. Par exemple, un utilisateur normal peut
     obtenir le droit de mettre le système en veille si l’utilisateur
     est connecté localement.

 -- Variable Scheme : polkit-wheel-service
     Service qui ajoute le groupe ‘wheel’ comme administrateur au
     service Polkit. Cela fait en sorte qu’on demande le mot de passe
     des utilisateurs du groupe ‘wheel’ eux-mêmes pour effectuer des
     taches d’administration au lieu du mot de passe ‘root’, comme le
     fait ‘sudo’.

 -- Variable Scheme : upower-service-type
     Service qui lance ‘upowerd’ (https://upower.freedesktop.org/), un
     moniteur système de consommation d’énergie et de niveau de
     batterie, avec les paramètres de configuration donnés.

     Il implémente l’interface D-Bus ‘org.freedesktop.UPower’ et est
     notamment utilisé par GNOME.

 -- Type de données : upower-configuration
     Type de données représentant la configuration de UPower.

     ‘upower’ (par défaut : UPOWER)
          Paquet à utiliser pour ‘upower’.

     ‘watts-up-pro?’ (par défaut : ‘#f’)
          Active le périphérique Watts Up Pro.

     ‘poll-batteries?’ (par défaut : ‘#t’)
          Active les requêtes au noyau pour les changements de niveau de
          batterie.

     ‘ignore-lid?’ (par défaut : ‘#f’)
          Ignore l’état de l’écran, ce qui peut être utile s’il est
          incorrect sur un appareil.

     ‘use-percentage-for-policy?’ (par défaut : ‘#f’)
          Indique si la politique de batterie basée sur le pourcentage
          devrait être utilisée. La valeur par défaut est d’utiliser la
          durée restante, changez en ‘#t’ pour utiliser les
          pourcentages.

     ‘percentage-low’ (par défaut : ‘10’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#t’, cela indique à
          quel niveau la batterie est considérée comme faible.

     ‘percentage-critical’ (par défaut : ‘3’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#t’, cela indique à
          quel niveau la batterie est considérée comme critique.

     ‘percentage-action’ (par défaut : ‘2’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#t’, cela indique à
          quel niveau l’action sera prise.

     ‘time-low’ (par défaut : ‘1200’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#f’, cela indique à
          quelle durée restante en secondes la batterie est considérée
          comme faible.

     ‘time-critical’ (par défaut : ‘300’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#f’, cela indique à
          quelle durée restante en secondes la batterie est considérée
          comme critique.

     ‘time-action’ (par défaut : ‘120’)
          Lorsque ‘use-percentage-for-policy?’ est ‘#f’, cela indique à
          quelle durée restante en secondes l’action sera prise.

     ‘critical-power-action’ (par défaut : ‘'hybrid-sleep’)
          L’action à prendre lorsque ‘percentage-action’ ou
          ‘time-action’ est atteint (en fonction de la configuration de
          ‘use-percentage-for-policy?’).

          Les valeurs possibles sont :

             • ‘'power-off’

             • ‘'hibernate’

             • ‘'hybrid-sleep’.

 -- Procédure Scheme : udisks-service [#:udisks UDISKS]
     Renvoie un service pour UDisks
     (https://udisks.freedesktop.org/docs/latest/), un démon de “gestion
     de disques” qui fournit des notifications et la capacité de monter
     et démonter des disques à des interfaces utilisateurs. Les
     programmes qui parlent à UDisks sont par exemple la commande
     ‘udisksctl’, qui fait partie de UDisks, et GNOME Disks. Remarquez
     que Udisks s’appuie sur la commande ‘mount’, donc il ne sera
     capable d’utiliser que les utilitaires de systèmes de fichiers
     installés dans le profil du système. Par exemple si vous voulez
     monter des systèmes de fichiers NTFS en lecture-écriture, vous
     devrez ajouter ‘ntfs-3g’ aux paquets installés sur le système
     entier.

 -- Variable Scheme : colord-service-type
     C’est le type de service qui lance ‘colord’, un service système
     avec une interface D-Bus pour gérer les profils de couleur des
     périphériques d’entrées et de sorties comme les écrans et les
     scanners. Il est notamment utilisé par l’outil graphique GNOME
     Color Manager. Voir le site web de colord
     (https://www.freedesktop.org/software/colord/) pour plus
     d’informations.

 -- Variable Scheme : sane-service-type
     Ce service fournit un accès aux scanner via SANE
     (http://www.sane-project.org) en installant les règles udev
     nécessaires. Il est inclus dans ‘%desktop-services’ (*note Services
     de bureaux::) et s’appuie sur le paquet ‘sane-backends-minimal’ par
     défaut (voir plus bas) pour la prise en charge matérielle.

 -- Variable Scheme : sane-backends-minimal
     Le paquet par défaut installé par le ‘sane-service-type’. Il prend
     en charge beaucoup de scanners récents.

 -- Variable Scheme : sane-backends
     Ce paquet inclus la prise en charge de tous les scanners pris en
     charge par ‘sane-backends-minimal’, plus les scanners
     Hewlett-Packard plus anciens pris en charges par le paquet ‘hplip’.
     Pour l’utiliser sur un système qui utiliser les
     ‘%desktop-services’, vous pouvez utiliser ‘modify-services’ (*note
     ‘modify-services’: Référence de service.) comme montré ci-dessous :

          (use-modules (gnu))
          (use-service-modules
            ...
            desktop)
          (use-package-modules
            ...
            scanner)

          (define %my-desktop-services
            ;; Liste des services de bureau qui prennent en charge un plus grand nombre de scanners.
            (modify-services %desktop-services
              (sane-service-type _ => sane-backends)))

          (operating-system
            ;; ...
            (services %my-desktop-services))

 -- Procédure Scheme : geoclue-application name [#:allowed? #t]
          [#:system? #f] [#:users '()]
     Renvoie une configuration qui permet d’accéder aux données de
     localisation de GeoClue. NAME est l’ID Desktop de l’application,
     sans la partie en ‘.desktop’. Si ALLOWED? est vraie, l’application
     aura droit d’accéder aux informations de localisation par défaut.
     Le booléen SYSTEM? indique si une application est un composant
     système ou non. Enfin USERS est la liste des UID des utilisateurs
     pour lesquels cette application a le droit d’accéder aux
     informations de géolocalisation. Une liste d’utilisateurs vide
     indique que tous les utilisateurs sont autorisés.

 -- Variable Scheme : %standard-geoclue-applications
     La liste standard de configuration des application GeoClue connues,
     qui permet à l’utilitaire date-and-time de GNOME de demander
     l’emplacement actuel pour initialiser le fuseau horaire et aux
     navigateurs web IceCat et Epiphany de demander les informations de
     localisation. IceCat et Epiphany demandent tous deux à
     l’utilisateur avant de permettre à une page web de connaître
     l’emplacement de l’utilisateur.

 -- Procédure Scheme : geoclue-service [#:colord COLORD] [#:whitelist
          '()] [#:wifi-geolocation-url
     "https://location.services.mozilla.com/v1/geolocate?key=geoclue"]
      [#:submit-data? #f] [#:wifi-submission-url
     "https://location.services.mozilla.com/v1/submit?key=geoclue"]
      [#:submission-nick "geoclue"]  [#:applications
     %standard-geoclue-applications] Renvoie un service qui lance le
     service de géolocalisation GeoClue. Ce service fournit une
     interface D-Bus pour permettre aux applications de demande l’accès
     à la position de l’utilisateur et éventuellement d’ajouter des
     informations à des bases de données de géolocalisation en ligne.
     Voir le site web de GeoClue
     (https://wiki.freedesktop.org/www/Software/GeoClue/) pour plus
     d’informations.

 -- Procédure Scheme : bluetooth-service [#:bluez BLUEZ]
          [#:auto-enable? #f]
     Renvoie un service qui lance le démon ‘bluetoothd’ qui gère tous
     les appareils Bluetooth et fournit un certain nombre d’interfaces
     D-Bus. Lorsque AUTO-ENABLE? est vraie, le contrôler bluetooth est
     automatiquement alimenté au démarrage, ce qui peut être utile
     lorsque vous utilisez un clavier ou une souris bluetooth.

     Les utilisateurs doivent être dans le groupe ‘lp’ pour accéder au
     service D-Bus.

 -- Variable Scheme : gnome-keyring-service-type
     C’est le type de service qui ajoute GNOME Keyring
     (https://wiki.gnome.org/Projects/GnomeKeyring). Sa valeur est un
     objet ‘gnome-keyring-configuration’ (voir plus bas).

     Ce service ajoute le paquet ‘gnome-keyring’ au profil du système et
     étend PAM avec des entrées avec ‘pam_gnome_keyring.so’, permettant
     de déverrouiller un porteclé utilisateur à la connexion ou de
     spécifier son mot de passe avec passwd.

 -- Type de données : gnome-keyring-configuration
     Enregistrement de la configuration du service GNOME Keyring.

     ‘keyring’ (par défaut : ‘gnome-keyring’)
          Le paquet GNOME keyring à utiliser.

     ‘pam-services’
          Une liste de paires ‘(SERVICE . TYPE)’ dénotant des services
          PAM à étendre, où SERVICE est le nom d’un service existant à
          étendre et TYPE est ‘login’ ou ‘passwd’.

          S’il s’agit de ‘login’, cela ajoute un ‘pam_gnome_keyring.so’
          facultatif au bloc d’authentification sans argument et au bloc
          de session avec ‘auto_start’. S’il s’agit de ‘passwd’, cela
          ajoute un ‘pam_gnome_keyring.so’ facultatif au bloc de mot de
          passe sans argument.

          Par défaut, ce champ contient « gdm-password » avec la valeur
          ‘login’ et « passwd » avec la valeur ‘passwd’.


File: guix.fr.info,  Node: Services de son,  Next: Services de bases de données,  Prev: Services de bureaux,  Up: Services

10.8.9 Services de son
----------------------

Le module ‘(gnu services sound)’ fournit un service pour configurer le
système ALSA (architecture son linux avancée), qui fait de PulseAudio le
pilote de sortie préféré d’ALSA.

 -- Variable Scheme : alsa-service-type
     C’est le type pour le système Advanced Linux Sound Architecture
     (https://alsa-project.org/) (ALSA), qui génère le fichier de
     configuration ‘/etc/asound.conf’. La valeur de ce type est un
     enregistrement ‘alsa-configuration’ comme dans cet exemple :

          (service alsa-service-type)

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

 -- Type de données : alsa-configuration
     Type de données représentant la configuration pour ‘alsa-service’.

     ‘alsa-plugins’ (par défaut : ALSA-PLUGINS)
          Le paquet ‘alsa-plugins’ à utiliser.

     ‘pulseaudio?’ (par défaut : #T)
          Indique si les applications ALSA devraient utiliser le serveur
          de son PulseAudio (https://www.pulseaudio.org/) de manière
          transparente pour elles.

          Utiliser PulseAudio vous permet dans lancer plusieurs
          applications qui produisent du son en même temps et de les
          contrôler individuellement via ‘pavucontrol’ entre autres
          choses.

     ‘extra-options’ (par défaut : "")
          Chaîne à ajouter au fichier ‘/etc/asound.conf’.

   Les utilisateurs individuels qui veulent modifier la configuration
système d’ALSA peuvent le faire avec le fichier ‘~/.asoundrc’ :

     # Dans guix, il faut spécifier le chemin absolu des greffons.
     pcm_type.jack {
       lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
     }

     # Faire passer ALSA par Jack :
     # <http://jackaudio.org/faq/routing_alsa.html>.
     pcm.rawjack {
       type jack
       playback_ports {
         0 system:playback_1
         1 system:playback_2
       }

       capture_ports {
         0 system:capture_1
         1 system:capture_2
       }
     }

     pcm.!default {
       type plug
       slave {
         pcm "rawjack"
       }
     }

   Voir <https://www.alsa-project.org/main/index.php/Asoundrc> pour les
détails.

 -- Variable Scheme : pulseaudio-service-type
     C’est le type de service pour le serveur de son PulseAudio
     (https://www.pulseaudio.org/). Sa valeur est un
     ‘pulseaudio-configuration’ (voir plus bas).

          Attention : Ce service prend le pas sur les fichiers de
          configuration utilisateurs. Si vous voulez que PulseAudio
          utilise les fichiers de configuration de ‘~/.config/pulse’
          vous devez réinitialiser les variables d’environnement
          ‘PULSE_CONFIG’ et ‘PULSE_CLIENTCONFIG’ dans votre
          ‘~/.bash_profile’.

          Attention : Ce service seul ne s’assure pas que le paquet
          ‘pulseaudio’ existe sur votre machine. Il ajoute seulement des
          fichiers de configuration, comme décrit plus bas. Dans le cas
          (vraiment improbable) où vous n’auriez pas de paquet
          ‘pulseaudio’, vous pouvez l’activer à travers le service
          ‘alsa-service-type’ plus haut.

 -- Type de données : pulseaudio-configuration
     Type de données représentant la configuration pour
     ‘pulseaudio-service’.

     ‘client-conf’ (par défaut : ‘'()’)
          Liste les paramètres à indiquer dans ‘client.conf’. Accepte un
          liste de chaines ou de paires symboles-valeurs. Une chaine
          sera insérée telle quelle avec un saut de ligne. Une paire
          sera formatée en « clé = valeur » avec un saut de ligne.

     ‘daemon-conf’ (par défaut : ‘'((flat-volumes . no))’)
          Liste les paramètres à indiquer dans ‘daemon.conf’, formaté
          comme CLIENT-CONF.

     ‘script-file’ (par défaut : ‘(file-append pulseaudio "/etc/pulse/default.pa")’)
          Fichier de script à utiliser comme ‘default.pa’.

     ‘system-script-file’ (par défaut : ‘(file-append pulseaudio "/etc/pulse/system.pa")’)
          Fichier de script à utiliser comme ‘system.pa’.

 -- Variable Scheme : ladspa-service-type
     Ce service initialise la variable LADSPA_PATH pour que les
     programmes qui la respectent, p. ex. PulseAudio, puissent charger
     les greffons LADSPA.

     L’exemple suivant met en place le service pour activer les modules
     du paquet ‘swh-plugins’ :

          (service ladspa-service-type
                   (ladspa-configuration (plugins (list swh-plugins))))

     Voir <http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html> pour
     les détails.


File: guix.fr.info,  Node: Services de bases de données,  Next: Services de courriels,  Prev: Services de son,  Up: Services

10.8.10 Services de bases de données
------------------------------------

Le module ‘(gnu services databases)’ fournit les services suivants.

PostgreSQL
..........

L’exemple suivant décrit un service PostgreSQL avec la configuration par
défaut.

     (service postgresql-service-type
              (postgresql-configuration
               (postgresql postgresql-10)))

   Si les services ne démarrent pas, cela peut être dû à une grappe
incompatible déjà présente dans DATA-DIRECTORY. Ajustez-la (ou, si vous
n’avez plus besoin de la grappe, supprimez DATA-DIRECTORY) puis
redémarrez le service.

   L’authentification des pairs est utilisé par défaut et le compte
utilisateur ‘postgres’ n’a pas de shell, ce qui évite l’exécution
directe de ‘psql’ en tant que cet utilisateur. Pour utiliser ‘psql’,
vous pouvez vous authentifier temporairement en tant que ‘postgres’ avec
un shell, créer un superutilisateur PostgreSQL avec le même nom qu’un
des utilisateurs du système et créer la base de données associée.

     sudo -u postgres -s /bin/sh
     createuser --interactive
     createdb $MY_USER_LOGIN      # Remplacez comme vous voulez.

 -- Type de données : postgresql-configuration
     Type de données représentant la configuration de
     ‘postgresql-service-type’.

     ‘postgresql’
          Le paquet PostgreSQL à utiliser pour ce service.

     ‘port’ (par défaut : ‘5432’)
          Port sur lequel PostgreSQL écoutera.

     ‘locale’ (par défaut : ‘"en_US.utf8"’)
          Paramètre linguistique à utiliser par défaut lors de la
          création de la grappe de bases de données.

     ‘config-file’ (par défaut : ‘(postgresql-config-file)’)
          Le fichier de configuration à utiliser pour lancer PostgreSQL.
          Le comportement par défaut est d’utiliser l’enregistrement
          postgresql-config-file avec les valeurs par défaut pour les
          champs.

     ‘log-directory’ (default: ‘"/var/log/postgresql"’)
          Le répertoire où la sortie de ‘pg_ctl’ sera écrite, dans un
          fichier nommé ‘"pg_ctl.log"’. Ce fichier peut être utile pour
          déboguer les erreurs de configuration de PostgreSQL par
          exemple.

     ‘data-directory’ (par défaut : ‘"/var/lib/postgresql/data"’)
          Répertoire dans lequel stocker les données.

     ‘extension-packages’ (par défaut : ‘'()’)
          Des extensions supplémentaires peuvent être chargées à partir
          de paquets listés dans EXTENSION-PACKAGES. Les extensions sont
          disponibles à l’exécution. Par exemple, pour créer une base de
          données géographique avec l’extension ‘postgis’, on peut
          configurer postgresql-service de cette manière :

               (use-package-modules databases geo)

               (operating-system
                 ...
                 ;; postgresql est requis pour lancer `psql' mais postgis n'est pas requis pour son
                 ;; bon fonctionnement.
                 (packages (cons* postgresql %base-packages))
                 (services
                   (cons*
                     (service postgresql-service-type
                              (postgresql-configuration
                               (postgresql postgresql-10)
                               (extension-packages (list postgis))))
                     %base-services)))

          Ensuite l’extension devient visible et vous pouvez initialiser
          une base de données géographique de cette manière :

               psql -U postgres
               > create database postgistest;
               > \connect postgistest;
               > create extension postgis;
               > create extension postgis_topology;

          Vous n’avez pas besoin d’ajouter ce champ pour les extensions
          « contrib » comme hstore ou dblink comme elles sont déjà
          exploitables par postgresql. Ce champ n’est requis que pour
          ajouter des extensions fournies par d’autres paquets.

 -- Type de données : postgresql-config-file
     Type de données représentant le fichier de configuration de
     PostgreSQL. Comme montré dans l’exemple suivant, on peut l’utiliser
     pour personnaliser la configuration de PostgreSQL. Remarquez que
     vous pouvez utiliser n’importe quelle G-expression ou nom de
     fichier à la place de cet enregistrement, si par exemple vous avez
     déjà un fichier de configuration que vous voulez utiliser.

          (service postgresql-service-type
                   (postgresql-configuration
                    (config-file
                     (postgresql-config-file
                      (log-destination "stderr")
                      (hba-file
                       (plain-file "pg_hba.conf"
                                   "
          local	all	all			trust
          host	all	all	127.0.0.1/32 	md5
          host	all	all	::1/128 	md5"))
                      (extra-config
                       '(("session_preload_libraries"     "auto_explain")
                         ("random_page_cost"              2)
                         ("auto_explain.log_min_duration" "100 ms")
                         ("work_mem"                      "500 MB")
                         ("logging_collector"             #t)
                         ("log_directory"                 "/var/log/postgresql")))))))

     ‘log-destination’ (par défaut : ‘"syslog"’)
          La méthode de journalisation de PostgreSQL. Plusieurs valeurs
          sont possibles, séparées par des virgules.

     ‘hba-file’ (par défaut : ‘%default-postgres-hba’)
          Nom de fichier ou G-expression pour la configuration de
          l’authentification par hôte.

     ‘ident-file’ (par défaut : ‘%default-postgres-ident’)
          Nom de fichier ou G-expression pour la configuration de la
          correspondance de noms d’utilisateurs.

     ‘socket-directory’ (par défaut : ‘#false’)
          Spécifie le répertoire des sockets Unix-domain sur lesquels
          PostgreSQL écoutera les connexion d’applications clientes. Si
          la valeur est ‘""’, PostgreSQL n’écoute sur aucun socket
          Unix-domain, auquel cas seuls les socket TCP/IP permettent de
          se connecter au serveur.

          Par défaut, la valeur ‘#false’ signifie que la valeur par
          défaut de PostgreSQL sera utilisée, actuellement ‘/tmp’.

     ‘extra-config’ (par défaut : ‘'()’)
          Liste de clés et valeurs supplémentaires à inclure dans le
          fichier de configuration de PostgreSQL. Chaque entrée dans la
          liste devrait être une liste où le premier élément est la clé,
          et les autres éléments sont les valeurs.

          Les valeurs peuvent être des nombres, des booléens ou des
          chaînes et seront transformées en types de paramètres de
          PostgreSQL ‘Boolean’, ‘String’, ‘Numeric’, ‘Numeric with Unit’
          et ‘Enumerated’ décrits ici
          (https://www.postgresql.org/docs/current/config-setting.html).

 -- Variable Scheme : postgresql-role-service-type
     Ce service permet de créer des rôles PostgreSQL et des bases de
     données après le démarrage du service PostgreSQL. Voici un exemple
     d’utilisation.

          (service postgresql-role-service-type
                      (postgresql-role-configuration
                       (roles
                        (list (postgresql-role
                               (name "test")
                               (create-database? #t))))))

     Ce service peut être étendu avec des rôles supplémentaires, comme
     dans cet exemple :

          (service-extension postgresql-role-service-type
                             (const (postgresql-role
                                     (name "alice")
                                     (create-database? #t))))

 -- Type de données : postgresql-role
     PostgreSQL gère les permissions d’accès à la base de données en
     utilisant le concept de rôle. Un rôle est soit comme un utilisateur
     de la base de données, soit un groupe d’utilisateurs, en fonction
     du paramétrage du rôle. Les rôles peuvent posséder des objets de la
     base (par exemple des tables) et peuvent assigner des privilèges
     sur ces objets à d’autres rôles pour contrôler qui a accès à quels
     objets.

     ‘name’
          Le nom du rôle.

     ‘permissions’ (par défaut : ‘'(createdb login)’)
          La liste des permissions du rôle. Les permissions prises en
          charge sont ‘bypassrls’, ‘createdb’, ‘createrole’, ‘login’,
          ‘replication’ et ‘superuser’.

     ‘create-database?’ (par défaut : ‘#f’)
          Indique s’il faut créer une base de données avec le même nom
          que le rôle.

 -- Type de données : postgresql-role-configuration
     Type de données représentant la configuration de
     POSTGRESQL-ROLE-SERVICE-TYPE.

     ‘host’ (par défaut : ‘"/var/run/postgresql"’)
          L’hôte PostgreSQL sur lequel se connecter.

     ‘log’ (par défaut : ‘"/var/log/postgresql_roles.log"’)
          Nom du fichier du fichier de journal.

     ‘roles’ (par défaut : ‘'()’)
          Les rôles PostgreSQL initiaux à créer.

MariaDB/MySQL
.............

 -- Variable Scheme : mysql-service-type
     C’est le type du service pour une base de donnée MySQL ou MariaDB.
     Sa valeur est un objet ‘mysql-configuration’, qui spécifie le
     paquet à utiliser ainsi que divers paramètres pour le démon
     ‘mysqld’.

 -- Type de données : mysql-configuration
     Type de données représentant la configuration de
     MYSQL-SERVICE-TYPE.

     ‘mysql’ (par défaut : MARIADB)
          Objet paquet du serveur de base de données MySQL, qui peut
          être soit MARIADB, soit MYSQL.

          Pour MySQL, un mot de passe root temporaire sera affiché à
          l’activation. Pour MariaDB, le mot de passe root est vide.

     ‘bind-address’ (par défaut : ‘"127.0.0.1"’)
          L’IP sur laquelle écouter les connexions réseau. Utilisez
          ‘"0.0.0.0"’ pour écouter sur toutes les interfaces réseaux.

     ‘port’ (par défaut : ‘3306’)
          Port TCP sur lequel le serveur de base de données écoute les
          connexions entrantes.

     ‘socket’ (par défaut : ‘"/run/mysqld/mysqld.sock"’)
          Fichier de socket à utiliser pour les connexions locales (pas
          via le réseau).

     ‘extra-content’ (par défaut : ‘""’)
          Paramètres supplémentaires pour le fichier de configuration
          ‘my.cnf’.

     ‘auto-upgrade?’ (par défaut : ‘#t’)
          Indique s’il faut automatiquement lancer ‘mysql_upgrade’ après
          avoir démarré le service. C’est nécessaire pour mettre à jour
          le “schéma système” après une mise à jour « majeure » (comme
          de passer de MariaDB 10.4 à 10.5), mais peut être désactivé si
          vous voulez plutôt le faire manuellement.

Memcached
.........

 -- Variable Scheme : memcached-service-type
     C’est le type de service pour le service Memcached
     (https://memcached.org/) qui fournit un cache en mémoire distribué.
     La valeur pour le type de service est un objet
     ‘memcached-configuration’.

     (service memcached-service-type)

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

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

     ‘interfaces’ (par défaut : ‘'("0.0.0.0")’)
          Les interfaces réseaux sur lesquelles écouter.

     ‘tcp-port’ (par défaut : ‘11211’)
          Port sur lequel accepter les connexions.

     ‘udp-port’ (par défaut : ‘11211’)
          Port sur lequel accepter les connexions UDP, une valeur de 0
          désactive l’écoute en UDP.

     ‘additional-options’ (par défaut : ‘'()’)
          Options de la ligne de commande supplémentaires à passer à
          ‘memcached’.

Redis
.....

 -- Variable Scheme : redis-service-type
     C’est le type de service pour la base clef-valeur Redis
     (https://redis.io/) dont la valeur est un objet
     ‘redis-configuration’.

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

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

     ‘bind’ (par défaut : ‘"127.0.0.1"’)
          Interface réseau sur laquelle écouter.

     ‘port’ (par défaut : ‘6379’)
          Port sur lequel accepter les connexions, une valeur de 0
          désactive l’écoute sur un socket TCP.

     ‘working-directory’ (par défaut : ‘"/var/lib/redis"’)
          Répertoire dans lequel stocker la base de données et les
          fichiers liés.

