aboutsummaryrefslogtreecommitdiff
path: root/doc/guix.fr.texi
diff options
context:
space:
mode:
authorMiguel Ángel Arruga Vivas <rosen644835@gmail.com>2019-04-23 11:30:32 +0200
committerJulien Lepiller <julien@lepiller.eu>2019-04-26 11:21:32 +0200
commit9ca5ff882e2ac4eaab02eb0fde545bd784af478b (patch)
treed90dbbd89461422e407a9c6974ed046e16ba0617 /doc/guix.fr.texi
parent7342923d98cbefec61c2d67ce916d83d42f4bc3e (diff)
downloadpatches-9ca5ff882e2ac4eaab02eb0fde545bd784af478b.tar
patches-9ca5ff882e2ac4eaab02eb0fde545bd784af478b.tar.gz
bootstrap: Break automake dependency on generated files.
* bootstrap: Generate stub files for the manual translations whose generated files are not included in the VCS. * doc/contributing.de.texi: Remove file. * doc/contributing.es.texi: Remove file. * doc/contributing.fr.texi: Remove file. * doc/contributing.zh_CN.texi: Remove file. * doc/guix.de.texi: Remove file. * doc/guix.es.texi: Remove file. * doc/guix.fr.texi: Remove file. * doc/guix.zh_CN.texi: Remove file. * .gitignore: Add them. Signed-off-by: Julien Lepiller <julien@lepiller.eu>
Diffstat (limited to 'doc/guix.fr.texi')
-rw-r--r--doc/guix.fr.texi26504
1 files changed, 0 insertions, 26504 deletions
diff --git a/doc/guix.fr.texi b/doc/guix.fr.texi
deleted file mode 100644
index d961625d72..0000000000
--- a/doc/guix.fr.texi
+++ /dev/null
@@ -1,26504 +0,0 @@
-\input texinfo
-@c ===========================================================================
-@c
-@c This file was generated with po4a. Translate the source file.
-@c
-@c ===========================================================================
-@c -*-texinfo-*-
-
-@c %**start of header
-@setfilename guix.fr.info
-@documentencoding UTF-8
-@documentlanguage fr
-@frenchspacing on
-@settitle Manuel de référence de GNU Guix
-@c %**end of header
-
-@include version-fr.texi
-
-@c Identifier of the OpenPGP key used to sign tarballs and such.
-@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
-@set KEY-SERVER pool.sks-keyservers.net
-
-@c The official substitute server used by default.
-@set SUBSTITUTE-SERVER ci.guix.fr.info
-
-@copying
-Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019
-Ludovic Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
-Copyright @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014,
-2015, 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
-Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
-2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
-Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo
-Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
-2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018,
-2019 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@*
-Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017,
-2018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
-Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016,
-2017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018
-Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
-Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
-2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
-Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
-Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
-Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
-Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
-Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
-Andy Wingo@* Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@* Copyright
-@copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
-Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
-Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
-@copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
-Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
-2018 Alex Vong@*
-
-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 ».
-@end copying
-
-@dircategory Administration système
-@direntry
-* 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.
-@end direntry
-
-@dircategory Développement logiciel
-@direntry
-* 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 direntry
-
-@titlepage
-@title Manuel de référence de GNU Guix
-@subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
-@author Les développeurs de GNU Guix
-
-@page
-@vskip 0pt plus 1filll
-Édition @value{EDITION} @* @value{UPDATED} @*
-
-@insertcopying
-@end titlepage
-
-@contents
-
-@c *********************************************************************
-@node Top
-@top GNU Guix
-
-Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
-gestion de paquets fonctionnel écrit pour le système GNU@.
-
-@c TRANSLATORS: You can replace the following paragraph with information on
-@c how to join your own translation team and how to report issues with the
-@c translation.
-Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
-Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
-zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
-français, vous pouvez nous rejoindre sur le
-@uref{https://translationproject.org/domain/guix-manual.html, projet de
-traduction} et sur la liste de diffusion
-@uref{https://listes.traduc.org/mailman/listinfo/traduc/,
-traduc@@traduc.org}.
-
-@menu
-* Introduction:: Qu'est-ce que Guix ?
-* Installation:: Installer Guix.
-* Installation du système:: Installer le système d'exploitation complet.
-* Gestion de paquets:: Installation des paquets, mises à jour, etc.
-* Développement:: Développement logiciel simplifié par Guix.
-* Interface de programmation:: Utiliser Guix en Scheme.
-* Utilitaires:: Commandes de gestion de paquets.
-* Configuration système:: Configurer le système d'exploitation.
-* Documentation:: Visualiser les manuels d'utilisateur des
- logiciels.
-* Installer les fichiers de débogage:: Nourrir le débogueur.
-* Mises à jour de sécurité:: Déployer des correctifs de sécurité
- rapidement.
-* Bootstrapping:: GNU/Linux depuis zéro.
-* Porter:: Cibler une autre plateforme ou un autre noyau.
-* Contribuer:: Nous avons besoin de votre aide !
-
-* Remerciements:: Merci !
-* La licence GNU Free Documentation:: La licence de ce manuel.
-* Index des concepts:: Les concepts.
-* Index de programmation:: Types de données, fonctions et variables.
-
-@detailmenu
- --- Liste détaillée des nœuds ---
-
-
-
-Introduction
-
-
-
-* Gérer ses logiciels avec Guix:: Ce qui est spécial.
-* Distribution GNU:: Les paquets et les outils.
-
-Installation
-
-
-
-* Installation binaire:: Commencer à utiliser Guix en un rien de temps
- !
-* Prérequis:: Logiciels requis pour construire et lancer
- Guix.
-* Lancer la suite de tests:: Tester Guix.
-* Paramétrer le démon:: Préparer l'environnement du démon de
- construction.
-* Invoquer guix-daemon:: Lancer le démon de construction.
-* Réglages applicatifs:: Réglages spécifiques pour les application.
-
-Paramétrer le démon
-
-
-
-* Réglages de l'environnement de construction:: Préparer l'environnement
- de construction isolé.
-* Réglages du délestage du démon:: Envoyer des constructions à des
- machines distantes.
-* Support de SELinux:: Utiliser une politique SELinux pour le démon.
-
-Installation du système
-
-
-
-* Limitations:: Ce à quoi vous attendre.
-* Considérations matérielles:: Matériel supporté.
-* Installation depuis une clef USB ou un DVD:: Préparer le média
- d'installation.
-* Préparer l'installation:: Réseau, partitionnement, etc.
-* Installation graphique guidée:: Installation graphique facile.
-* Installation manuelle:: Installation manuelle pour les sorciers.
-* Après l'installation du système:: Une fois que l'installation a
- réussi.
-* Installer Guix dans une VM:: Jouer avec le système Guix.
-* Construire l'image d'installation:: D'où vient tout cela.
-
-Installation manuelle
-
-
-
-* Disposition du clavier réseau et partitionnement:: Paramètres initiaux.
-* Effectuer l'installation:: Installer.
-
-Gestion de paquets
-
-
-
-* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
-* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
-* Substituts:: Télécharger des binaire déjà construits.
-* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
- résultats.
-* Invoquer guix gc:: Lancer le ramasse-miettes.
-* Invoquer guix pull:: Récupérer la dernière version de Guix et de
- la distribution.
-* Canaux:: Personnaliser la collection des paquets.
-* Inférieurs:: Interagir avec une autre révision de Guix.
-* Invoquer guix describe:: Affiche des informations sur la révision Guix
- actuelle.
-* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
-
-Substituts
-
-
-
-* Serveur de substituts officiel:: Une source particulière de substituts.
-* Autoriser un serveur de substituts:: Comment activer ou désactiver les
- substituts.
-* Authentification des substituts:: Comment Guix vérifie les substituts.
-* Paramètres de serveur mandataire:: Comment récupérer des substituts à
- travers un serveur mandataire.
-* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
-* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
- un paquet binaire ?
-
-Développement
-
-
-
-* Invoquer guix environment:: Mettre en place des environnements de
- développement.
-* Invoquer guix pack:: Créer des lots de logiciels.
-
-Interface de programmation
-
-
-
-* Modules de paquets:: Les paquets du point de vu du programmeur.
-* Définition des paquets:: Définir de nouveaux paquets.
-* Systèmes de construction:: Spécifier comment construire les paquets.
-* Le dépôt:: Manipuler le dépôt de paquets.
-* Dérivations:: Interface de bas-niveau avec les dérivations
- de paquets.
-* La monade du dépôt:: Interface purement fonctionnelle avec le
- dépôt.
-* G-Expressions:: Manipuler les expressions de construction.
-* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
-
-Définition des paquets
-
-
-
-* Référence des paquets:: Le type de donnée des paquets.
-* Référence des origines:: Le type de données d'origine.
-
-Utilitaires
-
-
-
-* Invoquer guix build:: Construire des paquets depuis la ligne de
- commande.
-* Invoquer guix edit:: Modifier les définitions de paquets.
-* Invoquer guix download:: Télécharger un fichier et afficher son hash.
-* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
-* Invoquer guix import:: Importer des définitions de paquets.
-* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
-* Invoquer guix lint:: Trouver des erreurs dans les définitions de
- paquets.
-* Invoquer guix size:: Profiler l'utilisation du disque.
-* Invoquer guix graph:: Visualiser le graphe des paquets.
-* Invoquer guix publish:: Partager des substituts.
-* Invoquer guix challenge:: Défier les serveurs de substituts.
-* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
-* Invoquer guix container:: Isolation de processus.
-* Invoquer guix weather:: Mesurer la disponibilité des substituts.
-* Invoquer guix processes:: Lister les processus clients.
-
-Invoquer @command{guix build}
-
-
-
-* Options de construction communes:: Options de construction pour la
- plupart des commandes.
-* Options de transformation de paquets:: Créer des variantes de paquets.
-* Options de construction supplémentaires:: Options spécifiques à «
- guix build ».
-* Débogage des échecs de construction:: La vie d'un empaqueteur.
-
-Configuration système
-
-
-
-* 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.
-* Lancer Guix dans une VM:: Comment lancer Guix dans une machine virtuelle.
-* Définir des services:: Ajouter de nouvelles définitions de services.
-
-Services
-
-
-
-* 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.
-* 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 surveillance:: Services de surveillance.
-* Services Kerberos:: Services Kerberos.
-* 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:: Le service Cuirass.
-* 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.
-* Services divers:: D'autres services.
-
-Définir des services
-
-
-
-* Composition de services:: Le modèle de composition des services.
-* Types service et services:: Types et services.
-* Référence de service:: Référence de l'API@.
-* Services Shepherd:: Un type de service particulier.
-
-@end detailmenu
-@end menu
-
-@c *********************************************************************
-@node Introduction
-@chapter Introduction
-
-@cindex but
-GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
-« s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
-outil de gestion de paquets et une distribution pour le système GNU@. Guix
-facilite pour les utilisateurs non privilégiés l'installation, la mise à
-jour et la suppression de paquets, la restauration à un ensemble de paquets
-précédent, la construction de paquets depuis les sources et plus
-généralement aide à la création et à la maintenance d'environnements
-logiciels.
-
-@cindex Système Guix
-@cindex GuixSD, maintenant le système Guix
-@cindex Distribution Système Guix, maintenant le système Guix
-Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
-compléter les outils disponibles sans interférence (@pxref{Installation}) ou
-vous pouvez l'utiliser comme distribution système indépendante, @dfn{Guix
-System}@footnote{Nous appelions le système Guix « la distribution système
-Guix » ou « GuixSD ». nous considérons maintenant qu'il est plus pertinent
-de regrouper tout sous la bannière de « Guix » comme, après tout, Guix
-System est directement disponible sous la commande @command{guix system},
-meme si vous utilisez une autre distro en dessous !}. @xref{Distribution GNU}.
-
-@menu
-* Gérer ses logiciels avec Guix:: Ce qui est spécial.
-* Distribution GNU:: Les paquets et les outils.
-@end menu
-
-@node Gérer ses logiciels avec Guix
-@section Gérer ses logiciels avec Guix
-
-@cindex interfaces utilisateurs
-Guix fournit une interface de gestion des paquets par la ligne de commande
-(@pxref{Gestion de paquets}), des outils pour aider au développement
-logiciel (@pxref{Développement}), des utilitaires en ligne de commande pour
-des utilisations plus avancées (@pxref{Utilitaires}) ainsi que des interfaces
-de programmation Scheme (@pxref{Interface de programmation}).
-@cindex démon de construction
-Son @dfn{démon de construction} est responsable de la construction des
-paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
-téléchargement des binaires pré-construits depuis les sources autorisées
-(@pxref{Substituts}).
-
-@cindex extensibilité de la distribution
-@cindex personnalisation, des paquets
-Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
-respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
-libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
-peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
-indépendants (@pxref{Modules de paquets}). Il est aussi
-@emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
-définitions de paquets spécialisées à partir de définitions existantes, même
-depuis la ligne de commande (@pxref{Options de transformation de paquets}).
-
-@cindex gestion de paquet fonctionnelle
-@cindex isolation
-Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
-fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
-processus de construction et d'installation des paquets est vu comme une
-@emph{fonction} dans le sens mathématique du terme. Cette fonction a des
-entrées (comme des scripts de construction, un compilateur et des
-bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
-son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
-faire référence à des logiciels ou des scripts qui n'ont pas été
-explicitement passés en entrée. Une fonction de construction produit
-toujours le même résultat quand on lui donne le même ensemble d'entrée.
-Elle ne peut pas modifier l'environnement du système en cours d'exécution
-d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
-des fichiers en dehors de ses répertoires de construction et
-d'installation. Ce résultat s'obtient en lançant les processus de
-construction dans des environnements isolés (ou des @dfn{conteneurs}) où
-seules les entrées explicites sont visibles.
-
-@cindex dépôt
-Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
-dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
-(@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
-dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
-contient un hash de toutes les entrées utilisées pour construire le paquet ;
-ainsi, changer une entrée donnera un nom de répertoire différent.
-
-Cette approche est le fondement des fonctionnalités les plus importante de
-Guix : le support des mises à jour des paquets et des retours en arrière
-transactionnels, l'installation différenciée par utilisateur et le ramassage
-de miettes pour les paquets (@pxref{Fonctionnalités}).
-
-
-@node Distribution GNU
-@section Distribution GNU
-
-@cindex Système Guix
-Guix fournit aussi une distribution du système GNU contenant uniquement des
-logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
-@url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
-l'utilisateur de ces logiciels}.}. On peut installer la distribution
-elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
-comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
-(@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
-distribution autonome le « système Guix » ou Guix@tie{}System.
-
-La distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
-Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
-complète des paquets disponibles se trouve
-@url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
-@command{guix package} (@pxref{Invoquer guix package}) :
-
-@example
-guix package --list-available
-@end example
-
-Notre but est de fournir une distribution logicielle entièrement libre de
-GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
-et l'intégration étroite des composants GNU en insistant sur les programmes
-et les outils qui aident l'utilisateur à exercer ses libertés.
-
-Les paquets sont actuellement disponibles pour les plateformes suivantes :
-
-@table @code
-
-@item x86_64-linux
-l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
-
-@item i686-linux
-l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
-
-@item armhf-linux
-l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
-NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
-Linux-libre ;
-
-@item aarch64-linux
-les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
-Le support est actuellement expérimental et limité. @xref{Contribuer},
-pour savoir comment aider !
-
-@item mips64el-linux
-les processeurs MIPS 64-bits little-endian, spécifiquement la série
-Loongson, ABI n32, avec le noyau Linux-libre.
-
-@end table
-
-Avec Guix@tie{}System, vous @emph{déclarez} tous les aspects de la
-configuration du système d'exploitation et guix s'occupe d'instancier la
-configuration de manière transactionnelle, reproductible et sans état
-(@pxref{Configuration système}). Guix System utilise le noyau Linux-libre,
-le système d'initialisation Shepherd (@pxref{Introduction,,, shepherd, The
-GNU Shepherd Manual}), les outils GNU et la chaîne d'outils familière ainsi
-que l'environnement graphique et les services systèmes de votre choix.
-
-Guix System est disponible sur toutes les plateformes ci-dessus à part
-@code{mips64el-linux}.
-
-@noindent
-Pour des informations sur comment porter vers d'autres architectures et
-d'autres noyau, @pxref{Porter}.
-
-La construction de cette distribution est un effort collaboratif et nous
-vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
-sur la manière de nous aider.
-
-
-@c *********************************************************************
-@node Installation
-@chapter Installation
-
-@cindex installer Guix
-
-@quotation Remarque
-Nous vous recommandons d'utiliser ce
-@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
-script shell d'installation} pour installer Guix sur un système GNU/Linux
-fonctionnel, que nous appelons une @dfn{distro externe}@footnote{Cette
-section s'occupe de l'installation du gestionnaire de paquet, ce qui peut se
-faire sur un système GNU/Linux existant. Si vous voulez plutôt installer le
-système d'exploitation GNU complet, @pxref{Installation du système}.}. Le
-script automatise le téléchargement, l'installation et la configuration
-initiale de Guix. Vous devez l'exécuter en tant qu'utilisateur root.
-@end quotation
-
-@cindex distro externe
-@cindex répertoires liés aux distro externes
-Lorsqu'il est installé sur une distro externe, GNU@tie{}Guix complète les
-outils disponibles sans interférence. Ses données se trouvent exclusivement
-dans deux répertoires, typiquement @file{/gnu/store} et @file{/var/guix} ;
-les autres fichiers de votre système comme @file{/etc} sont laissés intacts.
-
-Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
-(@pxref{Invoquer guix pull}).
-
-Si vous préférez effectuer les étapes d'installation manuellement ou si vous
-voulez les personnaliser, vous trouverez les sections suivantes utile.
-Elles décrivent les prérequis logiciels pour Guix, ainsi que la manière de
-l'installer manuellement et de se préparer à l'utiliser.
-
-@menu
-* Installation binaire:: Commencer à utiliser Guix en un rien de temps
- !
-* Prérequis:: Logiciels requis pour construire et lancer
- Guix.
-* Lancer la suite de tests:: Tester Guix.
-* Paramétrer le démon:: Préparer l'environnement du démon de
- construction.
-* Invoquer guix-daemon:: Lancer le démon de construction.
-* Réglages applicatifs:: Réglages spécifiques pour les application.
-@end menu
-
-@node Installation binaire
-@section Installation binaire
-
-@cindex installer Guix depuis les binaires
-@cindex script d'installation
-Cette section décrit comment installer Guix sur un système quelconque depuis
-un archive autonome qui fournit les binaires pour Guix et toutes ses
-dépendances. C'est souvent plus rapide que d'installer depuis les sources,
-ce qui est décrit dans les sections suivantes. Le seul prérequis est
-d'avoir GNU@tie{}tar et Xz.
-
-L'installation se comme ceci :
-
-@enumerate
-@item
-@cindex téléchargement du Guix binaire
-Téléchargez l'archive binaire depuis
-@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
-où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
-laquelle tourne déjà le noyau Linux, etc.
-
-@c The following is somewhat duplicated in ``System Installation''.
-Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
-l'authenticité de l'archive avec, comme ceci :
-
-@example
-$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
-$ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
-@end example
-
-Si cette commande échoue parce que vous n'avez pas la clef publique requise,
-lancez cette commande pour l'importer :
-
-@example
-$ gpg --keyserver @value{KEY-SERVER} \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
-@end example
-
-@noindent
-@c end authentication part
-et relancez la commande @code{gpg --verify}.
-
-@item
-Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
-votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
-tant que @code{root}, lancez :
-
-@example
-# cd /tmp
-# tar --warning=no-timestamp -xf \
- guix-binary-@value{VERSION}.@var{système}.tar.xz
-# mv var/guix /var/ && mv gnu /
-@end example
-
-Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
-deuxième dossier contient un profil prêt à être utilisé pour @code{root}
-(voir les étapes suivantes).
-
-Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
-écraserait ses propres fichiers essentiels.
-
-L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
-pas d'avertissement disant que « l'horodatage est trop vieux pour être
-plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
-précédents ; les versions récentes n'ont pas ce problème). Cela vient du
-fait que les fichiers de l'archive ont pour date de modification zéro (ce
-qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
-contenu de l'archive ne dépende pas de la date de création, ce qui la rend
-reproductible.
-
-@item
-Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
-l'emplacement où @command{guix pull} installera les mises à jour
-(@pxref{Invoquer guix pull}) :
-
-@example
-# mkdir -p ~root/.config/guix
-# ln -sf /var/guix/profiles/per-user/root/current-guix \
- ~root/.config/guix/current
-@end example
-
-Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
-variables d'environnement nécessaires :
-
-@example
-# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
- source $GUIX_PROFILE/etc/profile
-@end example
-
-@item
-Créez le groupe et les comptes utilisateurs pour les utilisateurs de
-construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
-
-@item
-Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
-
-Si votre distribution hôte utilise le système d'initialisation systemd, cela
-peut se faire avec ces commandes :
-
-@c Versions of systemd that supported symlinked service files are not
-@c yet widely deployed, so we should suggest that users copy the service
-@c files into place.
-@c
-@c See this thread for more information:
-@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
-
-@example
-# cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
- /etc/systemd/system/
-# systemctl start guix-daemon && systemctl enable guix-daemon
-@end example
-
-Si votre distribution hôte utilise le système d'initialisation Upstart :
-
-@example
-# initctl reload-configuration
-# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
- /etc/init/
-# start guix-daemon
-@end example
-
-Sinon, vous pouvez toujours démarrer le démon manuellement avec :
-
-@example
-# ~root/.config/guix/current/bin/guix-daemon \
- --build-users-group=guixbuild
-@end example
-
-@item
-Rendez la commande @command{guix} disponible pour les autres utilisateurs
-sur la machine, par exemple avec :
-
-@example
-# mkdir -p /usr/local/bin
-# cd /usr/local/bin
-# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
-@end example
-
-C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
-ici :
-
-@example
-# mkdir -p /usr/local/share/info
-# cd /usr/local/share/info
-# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
- do ln -s $i ; done
-@end example
-
-Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
-de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
-Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
-changer le chemin de recherche de Info).
-
-@item
-@cindex substituts, autorisations
-Pour utiliser les substituts de @code{@value{SUBSTITUTE-SERVER}} ou l'un de
-ses miroirs (@pxref{Substituts}), autorisez-les :
-
-@example
-# guix archive --authorize < \
- ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
-@end example
-
-@item
-Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
-pour que leur environnement Guix soit prêt à être utilisé,
-@pxref{Réglages applicatifs}.
-@end enumerate
-
-Voilà, l'installation est terminée !
-
-Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
-dans le profil de root :
-
-@example
-# guix package -i hello
-@end example
-
-Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
-ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
-retrouveriez gravement handicapé par l'absence de la commande
-@command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
-@code{guix package -r guix}.
-
-L'archive d'installation binaire peut être (re)produite et vérifiée
-simplement en lançant la commande suivante dans l'arborescence des sources
-de Guix :
-
-@example
-make guix-binary.@var{system}.tar.xz
-@end example
-
-@noindent
-…@: ce qui à son tour lance :
-
-@example
-guix pack -s @var{system} --localstatedir \
- --profile-name=current-guix guix
-@end example
-
-@xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
-
-@node Prérequis
-@section Prérequis
-
-Cette section dresse la liste des prérequis pour la construction de Guix
-depuis les sources. La procédure de construction pour Guix est la même que
-pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
-fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
-Guix pour plus de détails.
-
-@cindex site officiel
-GNU Guix est disponible au téléchargement depuis son site web sur
-@url{http://www.gnu.org/software/guix/}.
-
-GNU Guix dépend des paquets suivants :
-
-@itemize
-@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.2.x,
-@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
-0.1.0 ou supérieure,
-@item
-@uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
-(@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
-gnutls-guile, GnuTLS-Guile}),
-@item
-@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
-version 0.1.0 ou supérieure,
-@item
-@c FIXME: Specify a version number once a release has been made.
-@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
-ultérieur,
-@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON},
-@item @url{http://zlib.net, zlib},
-@item @url{http://www.gnu.org/software/make/, GNU Make}.
-@end itemize
-
-Les dépendances suivantes sont facultatives :
-
-@itemize
-@item
-@c Note: We need at least 0.10.2 for 'channel-send-eof'.
-Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
-et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
-@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
-0.10.2 ou ultérieure.
-
-@item
-Lorsque @url{http://www.bzip.org, libbz2} est disponible,
-@command{guix-daemon} peut l'utiliser pour compresser les journaux de
-construction.
-@end itemize
-
-À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
-paquets suivants sont aussi requis :
-
-@itemize
-@item @url{http://gnupg.org/, GNU libgcrypt},
-@item @url{http://sqlite.org, SQLite 3},
-@item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
-standard C++11.
-@end itemize
-
-@cindex répertoire d'état
-Lorsque vous configurez Guix sur un système qui a déjà une installation de
-Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
-existante avec l'option @code{--localstatedir} du script @command{configure}
-(@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
-Standards}). Le script @command{configure} vous protège des mauvaises
-configurations involontaires de @var{localstatedir} pour éviter que vous ne
-corrompiez votre dépôt (@pxref{Le dépôt}).
-
-@cindex Nix, compatibilité
-Lorsque vous avez une installation fonctionnelle du
-@url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
-configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
-trois dépendances au dessus.
-
-Guix est compatible avec Nix, donc il est possible de partager le même dépôt
-entre les deux. Pour cela, vous devez passer à @command{configure} non
-seulement la même valeur de @code{--with-store-dir} mais aussi la même
-valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
-spécifie l'emplacement de la base de données qui stocke les métadonnées sur
-le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
-@code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
-Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
-partager le dépôt avec Nix.
-
-@node Lancer la suite de tests
-@section Lancer la suite de tests
-
-@cindex suite de tests
-Après avoir lancé @command{configure} et @code{make} correctement, c'est une
-bonne idée de lancer la suite de tests. Elle peut aider à trouver des
-erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
-lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
-d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
-
-@example
-make check
-@end example
-
-Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
-l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
-lancement peut prendre plusieurs minutes sur une machine récente ; les
-lancements suivants seront plus rapides car le dépôt créé pour les tests
-aura déjà plusieurs choses en cache.
-
-Il est aussi possible de lancer un sous-ensemble des tests en définissant la
-variable makefile @code{TESTS} comme dans cet exemple :
-
-@example
-make check TESTS="tests/store.scm tests/cpio.scm"
-@end example
-
-Par défaut, les résultats des tests sont affichés au niveau du fichier.
-Pour voir les détails de chaque cas de test individuel, il est possible de
-définir la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
-exemple :
-
-@example
-make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
-@end example
-
-Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
-le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
-ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
-dans votre message.
-
-Guix possède aussi une suite de tests de systèmes complets qui test des
-instances complètes du système Guix. Elle ne peut être lancée qui sur un
-système où Guix est déjà installé, avec :
-
-@example
-make check-system
-@end example
-
-@noindent
-ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
-des tests à lancer :
-
-@example
-make check-system TESTS="basic mcron"
-@end example
-
-Ces tests systèmes sont définis dans les modules @code{(gnu tests
-@dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
-avec une instrumentation légère dans une machine virtuelle (VM). Ils
-peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
-la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
-Certains requièrent beaucoup d'espace disque pour contenir les images des
-VM@.
-
-De nouveau, en cas d'échec, envoyez tous les détails à
-@email{bug-guix@@gnu.org}.
-
-@node Paramétrer le démon
-@section Paramétrer le démon
-
-@cindex démon
-Les opérations comme la construction d'un paquet ou le lancement du
-ramasse-miettes sont toutes effectuées par un processus spécialisé, le
-@dfn{démon de construction}, pour le compte des clients. Seul le démon peut
-accéder au dépôt et à sa base de données associée. Ainsi, toute opération
-manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
-commande comme @command{guix package} et @command{guix build} communiquent
-avec le démon (@i{via} des appels de procédures distantes) pour lui dire
-quoi faire.
-
-Les sections suivantes expliquent comment préparer l'environnement du démon
-de construction. Voir aussi @ref{Substituts} pour apprendre comment
-permettre le téléchargement de binaires pré-construits.
-
-@menu
-* Réglages de l'environnement de construction:: Préparer l'environnement
- de construction isolé.
-* Réglages du délestage du démon:: Envoyer des constructions à des
- machines distantes.
-* Support de SELinux:: Utiliser une politique SELinux pour le démon.
-@end menu
-
-@node Réglages de l'environnement de construction
-@subsection Réglages de l'environnement de construction
-
-@cindex environnement de construction
-Dans une installation standard multi-utilisateurs, Guix et son démon — le
-programme @command{guix-daemon} — sont installé par l'administrateur système
-; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
-lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
-outils Guix pour construire des paquets ou accéder au dépôt et le démon le
-fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
-permet le partage des paquets déjà construits entre les utilisateurs.
-
-@cindex utilisateurs de construction
-Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
-forcément envie que les processus de construction de paquets tournent aussi
-en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
-vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
-que les processus de construction démarrés par le démon utiliseront. Ces
-utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
-personnel ; ils seront seulement utilisés quand le démon délaissera ses
-privilèges @code{root} dans les processus de construction. En ayant
-plusieurs de ces utilisateurs, vous permettez au démon de lancer des
-processus de construction distincts sous des UID différent, ce qui garanti
-qu'aucune interférence n'ait lieu entre les uns et les autres — une
-fonctionnalité essentielle puisque les constructions sont supposées être des
-fonctions pures (@pxref{Introduction}).
-
-Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
-construction comme ceci (avec la syntaxe Bash et les commandes
-@code{shadow}) :
-
-@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
-@c for why `-G' is needed.
-@example
-# groupadd --system guixbuild
-# for i in `seq -w 1 10`;
- do
- useradd -g guixbuild -G guixbuild \
- -d /var/empty -s `which nologin` \
- -c "Utilisateur de construction Guix $i" --system \
- guixbuilder$i;
- done
-@end example
-
-@noindent
-Le nombre d'utilisateurs de construction détermine le nombre de tâches de
-constructions qui peuvent tourner en parallèle, tel que spécifié par
-l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
-@option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
-commandes liées, vous devrez ajouter les utilisateurs de construction au
-groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
-@code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
-
-Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
-la commande suivante@footnote{Si votre machine utilise le système
-d'initialisation systemd, copiez le fichier
-@file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
-@file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
-démarré automatiquement. De même, si votre machine utilise le système
-d'initialisation Upstart, copiez le fichier
-@file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
-@file{/etc/init}.} :
-
-@example
-# guix-daemon --build-users-group=guixbuild
-@end example
-
-@cindex chroot
-@noindent
-De cette façon, le démon démarre les processus de construction dans un
-chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
-défaut, l'environnement chroot ne contient rien d'autre que :
-
-@c Keep this list in sync with libstore/build.cc! -----------------------
-@itemize
-@item
-un répertoire @code{/dev} minimal, créé presque indépendamment du
-@code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
-fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
-l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
-a pas.} ;
-
-@item
-le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
-on utilise une espace de nom séparé pour les PID ;
-
-@item
-@file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
-pour l'utilisateur @file{nobody} ;
-
-@item
-@file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
-
-@item
-@file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
-@code{127.0.0.1} ;
-
-@item
-un répertoire @file{/tmp} inscriptible.
-@end itemize
-
-Vous pouvez influencer le répertoire où le démon stocke les arbres de
-construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
-l'arbre de construction dans le chroot sera toujours appelé
-@file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
-dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
-@code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
-ce qui évite des différences lorsque le processus de construction retient le
-nom de leur répertoire de construction.
-
-@vindex http_proxy
-Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
-pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
-fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
-
-Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
-toujours possible de lancer @command{guix-daemon} si vous passez
-@code{--disable-chroot}. Cependant, les processus de construction ne seront
-pas isolés les uns des autres ni du reste du système. Ainsi les processus
-de construction peuvent interférer les uns avec les autres, et peuvent
-accéder à des programmes, des bibliothèques et d'autres fichiers présents
-sur le système — ce qui rend plus difficile de les voir comme des fonctions
-@emph{pures}.
-
-
-@node Réglages du délestage du démon
-@subsection Utiliser le dispositif de déchargement
-
-@cindex déchargement
-@cindex crochet de construction
-Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
-constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
-de construction} @code{offload}@footnote{Cette fonctionnalité n'est
-disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
-Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
-lit une liste de machines de constructions spécifiée par l'utilisateur dans
-@file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
-demandée, par exemple par @code{guix build}, le démon essaie de la décharger
-sur une des machines qui satisfont les contraintes de la dérivation, en
-particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
-prérequis manquants pour la construction sont copiés par SSH sur la machine
-de construction qui procède ensuite à la construction ; si elle réussi, les
-sorties de la construction sont copiés vers la machine de départ.
-
-Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
-
-@example
-(list (build-machine
- (name "eightysix.example.org")
- (system "x86_64-linux")
- (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
- (user "bob")
- (speed 2.)) ;très rapide !
-
- (build-machine
- (name "meeps.example.org")
- (system "mips64el-linux")
- (host-key "ssh-rsa AAAAB3Nza@dots{}")
- (user "alice")
- (private-key
- (string-append (getenv "HOME")
- "/.ssh/identity-for-guix"))))
-@end example
-
-@noindent
-Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
-construction, une pour l'architecture @code{x86_64} et une pour
-l'architecture @code{mips64el}.
-
-En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
-fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
-valeur de retour doit être une liste d'objets @code{build-machine}. Même si
-cet exemple montre une liste fixée de machines de construction, on pourrait
-imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
-constructions potentielles découvertes sur le réseau local
-(@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
-Programs}). Le type de données @code{build-machine} est détaillé plus bas.
-
-@deftp {Type de données} build-machine
-Ce type de données représente les machines de construction sur lesquelles le
-démon peut décharger des constructions. Les champs importants sont :
-
-@table @code
-
-@item name
-Le nom d'hôte de la machine distante.
-
-@item system
-Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
-
-@item user
-Le compte utilisateur à utiliser lors de la connexion à la machine distante
-par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
-protégée par mot de passe pour permettre des connexions non-interactives.
-
-@item host-key
-Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
-OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
-connexion. C'est une longue chaîne qui ressemble à cela :
-
-@example
-ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
-@end example
-
-Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
-trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
-
-Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
-@file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
-convertie au format OpenSSH avec @command{lsh-export-key}
-(@pxref{Converting keys,,, lsh, LSH Manual}) :
-
-@example
-$ lsh-export-key --openssh < /etc/lsh/host-key.pub
-ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
-@end example
-
-@end table
-
-Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
-
-@table @asis
-
-@item @code{port} (par défaut : @code{22})
-Numéro de port du serveur SSH sur la machine.
-
-@item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
-Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
-au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
-passe.
-
-Remarquez que la valeur par défaut est la clef privée @emph{du compte
-root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
-
-@item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
-@itemx @code{compression-level} (par défaut : @code{3})
-Les méthodes de compression au niveau SSH et le niveau de compression
-demandé.
-
-Remarquez que le déchargement utilise la compression SSH pour réduire la
-bande passante utilisée lors du transfert vers et depuis les machines de
-construction.
-
-@item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
-Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
-écoute sur cette machine.
-
-@item @code{parallel-builds} (par défaut : @code{1})
-Le nombre de constructions qui peuvent tourner simultanément sur la machine.
-
-@item @code{speed} (par défaut : @code{1.0})
-Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
-à préférer les machines avec un plus grand facteur de vitesse.
-
-@item @code{features} (par défaut : @code{'()})
-Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
-par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
-module Linux KVM et le support matériel correspondant. Les dérivations
-peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
-les machines de construction correspondantes.
-
-@end table
-@end deftp
-
-La commande @code{guix} doit être dans le chemin de recherche des machines
-de construction. Vous pouvez vérifier si c'est le cas en lançant :
-
-@example
-ssh build-machine guix repl --version
-@end example
-
-Il reste une dernière chose à faire maintenant que @file{machines.scm} est
-en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
-transférés entre les dépôts des machines. Pour que cela fonctionne, vous
-devez d'abord générer une paire de clef sur chaque machine pour permettre au
-démon d'exporter des archives signées des fichiers de son dépôt
-(@pxref{Invoquer guix archive}) :
-
-@example
-# guix archive --generate-key
-@end example
-
-@noindent
-Chaque machine de construction doit autoriser la clef de la machine
-maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
-
-@example
-# guix archive --authorize < master-public-key.txt
-@end example
-
-@noindent
-De même, la machine maîtresse doit autoriser les clefs de chaque machine de
-construction.
-
-Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
-deux-à-deux entre le maître et les machines de construction. Concrètement,
-lorsque le maître reçoit des fichiers d'une machine de construction (et
-vice-versa), son démon de construction s'assure qu'ils sont authentiques,
-n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
-autorisée.
-
-@cindex test du déchargement
-Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
-nœud maître :
-
-@example
-# guix offload test
-@end example
-
-Cela essaiera de se connecter à toutes les machines de construction
-spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
-modules Guix sont disponibles sur toutes les machines et tentera d'exporter
-vers la machine et d'importer depuis elle, et rapportera toute erreur
-survenu pendant le processus.
-
-Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
-la ligne de commande :
-
-@example
-# guix offload test machines-qualif.scm
-@end example
-
-Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
-correspond à une expression rationnelle comme ceci :
-
-@example
-# guix offload test machines.scm '\.gnu\.org$'
-@end example
-
-@cindex statut du déchargement
-Pour afficher la charge actuelle de tous les hôtes de construction, lancez
-cette commande sur le nœud principal :
-
-@example
-# guix offload status
-@end example
-
-
-@node Support de SELinux
-@subsection Support de SELinux
-
-@cindex SELinux, politique du démon
-@cindex contrôle d'accès obligatoire, SELinux
-@cindex sécurité, guix-daemon
-Guix inclus un fichier de politique SELinux dans @file{etc/guix-daemon.cil}
-qui peut être installé sur un système où SELinux est activé pour que les
-fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
-démon. Comme Guix System ne fournit pas de politique SELinux de base, la
-politique du démon ne peut pas être utilisée sur le système Guix.
-
-@subsubsection Installer la politique SELinux
-@cindex SELinux, installation de la politique
-Pour installer la politique, lancez cette commande en root :
-
-@example
-semodule -i etc/guix-daemon.cil
-@end example
-
-Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
-mécanisme différent fournit par votre système.
-
-Une fois la politique installée, le système de fichier ré-étiqueté et le
-démon redémarré, il devrait être lancé dans le contexte
-@code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
-
-@example
-ps -Zax | grep guix-daemon
-@end example
-
-Surveillez les fichiers journaux de SELinux pendant que vous lancez une
-commande comme @code{guix build hello} pour vous convaincre que SELniux
-permet toutes les opérations nécessaires.
-
-@subsubsection Limitations
-@cindex SELinux, limites
-
-La politique n'est pas parfaite. Voici une liste de limitations et de
-bizarreries qui vous devriez prendre en compte avant de déployer la
-politique SELinux fournie pour le démon Guix.
-
-@enumerate
-@item
-@code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
-opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
-soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
-une étiquette inutilisée, mais il serait préférable de définir des règles
-sur les sockets uniquement pour cette étiquette.
-
-@item
-@code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
-Par conception, l'étiquette de fichier de la destination d'un lien
-symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
-les profils sous $localstatedir aient une étiquette, les liens vers ces
-profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
-Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
-Mais pour les liens du répertoire personnel de l'utilisateur root, ou
-@file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
-fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
-ces liens.
-
-@item
-La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
-fonctionner. Cela demande des règles supplémentaires car SELinux traite les
-sockets réseau différemment des fichiers.
-
-@item
-Actuellement tous les fichiers qui correspondent à l'expression rationnelle
-@code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
-@code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
-nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
-@code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
-un paquet qui fournit cet exécutable et convaincre un utilisateur de
-l'installer et de le lancer, ce qui l'élève dans le domaine
-@code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
-d'accéder à des fichiers autorisés pour les processus de ce domaine.
-
-Nous pourrions générer une politique bien plus restrictive à l'installation,
-pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
-@code{guix-daemon} actuellement installé soit étiqueté avec
-@code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
-plus large. L'inconvénient c'est que root devrait installer ou mettre à
-jour la politique à l'installation à chaque fois que le paquet Guix qui
-fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
-jour.
-@end enumerate
-
-@node Invoquer guix-daemon
-@section Invoquer @command{guix-daemon}
-
-Le programme @command{guix-daemon} implémente toutes les fonctionnalités
-d'accès au dépôt. Cela inclus le lancement des processus de construction,
-le lancement du ramasse-miettes, la demande de disponibilité des résultats
-de construction, etc. Il tourne normalement en @code{root} comme ceci :
-
-@example
-# guix-daemon --build-users-group=guixbuild
-@end example
-
-@noindent
-Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
-
-@cindex chroot
-@cindex conteneur, environnement de construction
-@cindex environnement de construction
-@cindex constructions reproductibles
-Par défaut, @command{guix-daemon} lance les processus de construction sous
-différents UID récupérés depuis le groupe de construction spécifié avec
-@code{--build-users-group}. En plus, chaque processus de construction est
-lancé dans un environnement chroot qui ne contient que le sous-ensemble du
-dépôt dont le processus de construction dépend, tel que spécifié par sa
-dérivation (@pxref{Interface de programmation, dérivation}), plus un
-ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
-contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
-l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
-propre arborescence du système de fichier, elle a un espace de montage
-séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
-obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
-
-Lorsque le démon effectue une construction pour le compte de l'utilisateur,
-il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
-variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
-conteneur pendant la durée de la construction, bien que dans le conteneur,
-l'arborescence de construction est toujours appelée
-@file{/tmp/guix-build-@var{name}.drv-0}.
-
-Le répertoire de construction est automatiquement supprimé à la fin, à moins
-que la construction n'ait échoué et que le client ait spécifié
-@option{--keep-failed} (@pxref{Invoquer guix build,
-@option{--keep-failed}}).
-
-Le démon écoute les connexions et démarre un sous-processus pour chaque
-session démarrée par un client (l'une des sous-commandes de
-@command{guix}). La commande @command{guix processes} vous permet d'obtenir
-un aperçu de l'activité sur votre système en affichant chaque session et
-client actif. @xref{Invoquer guix processes} pour plus d'informations.
-
-Les options en ligne de commande suivantes sont disponibles :
-
-@table @code
-@item --build-users-group=@var{groupe}
-Prendre les utilisateurs de @var{group} pour lancer les processus de
-construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
-
-@item --no-substitutes
-@cindex substituts
-Ne pas utiliser de substitut pour les résultats de la construction.
-C'est-à-dire, toujours construire localement plutôt que de permettre le
-téléchargement de binaires pré-construits (@pxref{Substituts}).
-
-Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
-toujours activer explicitement la substitution @i{via} l'appel de procédure
-distante @code{set-build-options} (@pxref{Le dépôt}).
-
-@item --substitute-urls=@var{urls}
-@anchor{daemon-substitute-urls}
-Considérer @var{urls} comme la liste séparée par des espaces des URL des
-sources de substituts par défaut. Lorsque cette option est omise,
-@indicateurl{https://@value{SUBSTITUTE-SERVER}} est utilisé.
-
-Cela signifie que les substituts sont téléchargés depuis les @var{urls},
-tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
-
-@cindex crochet de construction
-@item --no-build-hook
-Ne pas utiliser le @dfn{crochet de construction}.
-
-Le crochet de construction est un programme d'aide qui le démon peut
-démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
-utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
-
-@item --cache-failures
-Mettre les échecs de construction en cache. Par défaut, seules les
-constructions réussies sont mises en cache.
-
-Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
-être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
-échoués ; @command{guix gc --clear-failures} vide la liste des éléments
-aillant échoué. @xref{Invoquer guix gc}.
-
-@item --cores=@var{n}
-@itemx -c @var{n}
-Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
-signifie autant que possible.
-
-La valeur par défaut est @code{0}, mais elle peut être modifiée par les
-clients comme avec l'option @code{--cores} de @command{guix build}
-(@pxref{Invoquer guix build}).
-
-L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
-dans le processus de construction, qui peut ensuite l'utiliser pour
-exploiter le parallélisme en interne — par exemple en lançant @code{make
--j$NIX_BUILD_CORES}.
-
-@item --max-jobs=@var{n}
-@itemx -M @var{n}
-Permettre au plus @var{n} travaux de construction en parallèle. La valeur
-par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
-construction ne sera effectuée localement ; à la place, le démon déchargera
-les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
-
-@item --max-silent-time=@var{secondes}
-Lorsque le processus de construction ou de substitution restent silencieux
-pendant plus de @var{secondes}, le terminer et rapporter une erreur de
-construction.
-
-La valeur par défaut est @code{0}, ce qui désactive le délai.
-
-La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
-
-@item --timeout=@var{secondes}
-De même, lorsque le processus de construction ou de substitution dure plus
-de @var{secondes}, le terminer et rapporter une erreur de construction.
-
-La valeur par défaut est @code{0}, ce qui désactive le délai.
-
-La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
-
-@item --rounds=@var{N}
-Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
-si les résultats de construction consécutifs ne sont pas identiques
-bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
-comme @command{guix build} (@pxref{Invoquer guix build}).
-
-Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
-dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
-l'étude des différences entre les deux résultats.
-
-@item --debug
-Produire une sortie de débogage.
-
-Cela est utile pour déboguer des problèmes de démarrage du démon, mais
-ensuite elle peut être modifiée par les clients, par exemple par l'option
-@code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
-
-@item --chroot-directory=@var{rép}
-Ajouter @var{rép} au chroot de construction.
-
-Cela peut changer le résultat d'un processus de construction — par exemple
-s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
-est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
-d'utiliser cette option. À la place, assurez-vous que chaque dérivation
-déclare toutes les entrées dont elle a besoin.
-
-@item --disable-chroot
-Désactive les constructions dans un chroot.
-
-Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
-processus de construction d'accéder à des dépendances non déclarées. Elle
-est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
-qu'utilisateur non privilégié.
-
-@item --log-compression=@var{type}
-Compresser les journaux de construction suivant le @var{type}, parmi
-@code{gzip}, @code{bzip2} ou @code{none}.
-
-À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
-construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
-le démon les compresse automatiquement avec bzip2 par défaut.
-
-@item --disable-deduplication
-@cindex déduplication
-Désactiver la « déduplication » automatique des fichiers dans le dépôt.
-
-Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
-» : si un nouveau fichier est identique à un autre fichier trouvé dans le
-dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
-considérablement l'utilisation de l'espace disque au prix d'une charge en
-entrée/sortie plus grande à la fin d'un processus de construction. Cette
-option désactive cette optimisation.
-
-@item --gc-keep-outputs[=yes|no]
-Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
-utilisées.
-
-@cindex racines du GC
-@cindex racines du ramasse-miettes
-Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
-dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
-valeur par défaut est « no », ce qui signifie que les sorties des
-dérivations ne sont gardées que si elles sont accessibles à partir d'une
-racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
-racines du GC.
-
-@item --gc-keep-derivations[=yes|no]
-Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
-des sorties utilisées.
-
-Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
-dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
-leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
-trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
-peu d'espace disque.
-
-De cette manière, avec @code{--gc-keep-derivations} à « yes »,
-l'accessibilité des sorties s'étend des sorties aux dérivations et avec
-@code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
-sorties. Quand les deux options sont à « yes », le GC gardera tous les
-prérequis de construction (les sources, le compilateur, les bibliothèques,
-et les autres outils de construction) des objets accessibles dans le dépôt,
-indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
-GC. Cela est pratique pour les développeurs car ça leur fait gagner du
-temps de reconstruction et de téléchargement.
-
-@item --impersonate-linux-2.6
-Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
-signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
-numéro de version.
-
-Cela peut être utile pour construire des programmes qui dépendent
-(généralement sans fondement) du numéro de version du noyau.
-
-@item --lose-logs
-Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
-@code{@var{localstatedir}/guix/log}.
-
-@item --system=@var{système}
-Supposer que @var{système} est le type de système actuel. Par défaut c'est
-la paire architecture-noyau trouvée à la configuration, comme
-@code{x86_64-linux}.
-
-@item --listen=@var{extrémité}
-Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
-comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
-(barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
-domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
-
-@table @code
-@item --listen=/gnu/var/daemon
-Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
-le créant si besoin.
-
-@item --listen=localhost
-@cindex démon, accès distant
-@cindex accès distant au démon
-@cindex démon, paramètres de grappes
-@cindex grappes, paramètres du démon
-Écouter les connexions TCP sur l'interface réseau correspondant à
-@code{localhost} sur le port 44146.
-
-@item --listen=128.0.0.42:1234
-Écouter les connexions TCP sur l'interface réseau correspondant à
-@code{128.0.0.42} sur le port 1234.
-@end table
-
-Cette option peut être répétée plusieurs fois, auquel cas
-@command{guix-daemon} accepte des connexions sur toutes les extrémités
-spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
-extrémité se connecter en paramétrant la variable d'environnement
-@code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
-
-@quotation Remarque
-Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
-@code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
-grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
-démon de construction. Dans les autres cas où l'accès à distance au démon
-est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
-@end quotation
-
-Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
-connexions sur le socket Unix-domain situé à
-@file{@var{localstatedir}/guix/daemon-socket/socket}.
-@end table
-
-
-@node Réglages applicatifs
-@section Réglages applicatifs
-
-@cindex distro externe
-Lorsque vous utilisez Guix par dessus une distribution GNU/Linux qui n'est
-pas Guix System — ce qu'on appelle une @dfn{distro externe} — quelques
-étapes supplémentaires sont requises pour que tout soit en place. En voici
-certaines.
-
-@subsection Régionalisation
-
-@anchor{locales-and-locpath}
-@cindex régionalisation, en dehors de Guix System
-@vindex LOCPATH
-@vindex GUIX_LOCPATH
-Les paquets installés @i{via} Guix n'utiliseront pas les données de
-régionalisation du système hôte. À la place, vous devrez d'abord installer
-l'un des paquets linguistiques disponibles dans Guix puis définir la
-variable d'environnement @code{GUIX_LOCPATH} :
-
-@example
-$ guix package -i glibc-locales
-$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
-@end example
-
-Remarquez que le paquet @code{glibc-locales} contient les données pour tous
-les environnement linguistiques supportés par la GNU@tie{}libc et pèse
-environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
-petit mais limité à quelques environnements UTF-8.
-
-La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
-(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
-Manual}). Il y a deux différences importantes cependant :
-
-@enumerate
-@item
-@code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
-libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
-vous permet de vous assurer que les programmes de la distro externe ne
-chargeront pas de données linguistiques incompatibles.
-
-@item
-La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
-@code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
-@code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
-de programmes liés avec des versions différentes de la libc, chaque version
-de la libc essaiera de charger les environnements linguistiques dans le bon
-format.
-@end enumerate
-
-Cela est important car le format des données linguistiques utilisés par
-différentes version de la libc peuvent être incompatibles.
-
-@subsection Name Service Switch
-
-@cindex name service switch, glibc
-@cindex NSS (name service switch), glibc
-@cindex nscd (name service caching daemon)
-@cindex name service caching daemon (nscd)
-Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
-fortement} que ce système fasse tourner le @dfn{démon de cache de service de
-noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
-le socket @file{/var/run/nscd/socket}. Sans cela, les applications
-installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
-d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
-pourquoi.
-
-@cindex @file{nsswitch.conf}
-La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
-est un mécanisme d'extension pour les « résolutions de noms » en général :
-résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
-
-@cindex Network information service (NIS)
-@cindex NIS (Network information service)
-Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
-nouvelle implémentation de résolution de nom : par exemple le greffon
-@code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
-greffon @code{nis} permet la résolution de comptes utilisateurs avec le
-Network Information Service (NIS), etc. Ces « services de recherches »
-supplémentaires sont configurés au niveau du système dans
-@file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
-système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
-GNU C Reference Manual})
-
-Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
-appelant la fonction @code{getaddrinfo} en C — les applications essayent
-d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
-résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectuent
-la résolution eux-mêmes, en changeant les service de résolution dans leur
-propre espace d'adressage et en le lançant. Ce services de résolution de
-noms — les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils
-peuvent provenir de la bibliothèque C du système, plutôt que de la
-bibliothèque C à laquelle l'application est liée (la bibliothèque C de
-Guix).
-
-Et c'est là que se trouve le problème : si votre application est liée à la
-bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
-greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
-glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
-échoue de manière inattendue.
-
-Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
-problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
-chargés par le processus @command{nscd}, pas par l'application elle-même.
-
-@subsection Polices X11
-
-@cindex polices
-La majorité des applications graphiques utilisent fontconfig pour trouver et
-charger les police et effectuer le rendu côté client X11. Le paquet
-@code{fontconfig} dans Guix cherche les polices dans
-@file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
-applications graphiques installées avec Guix d'afficher des polices, vous
-devez aussi installer des polices avec Guix. Les paquets de polices
-essentiels sont @code{gs-fonts}, @code{font-dejavu} et
-@code{font-gnu-freefont-ttf}.
-
-Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
-les applications graphiques, installez @code{font-adobe-source-han-sans} ou
-@code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
-langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
-suivante installe les polices pour le chinois :
-
-@example
-guix package -i font-adobe-source-han-sans:cn
-@end example
-
-@cindex @code{xterm}
-Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
-s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
-spécifier le nom complet de la police en utilisant XLFD (X Logical Font
-Description), comme ceci :
-
-@example
--*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
-@end example
-
-Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
-dans votre profil Guix, vous devez étendre le chemin des polices du serveur
-X :
-
-@c Note: 'xset' does not accept symlinks so the trick below arranges to
-@c get at the real directory. See <https://bugs.gnu.org/30655>.
-@example
-xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
-@end example
-
-@cindex @code{xlsfonts}
-Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
-vous assurer que vos polices TrueType y sont listées.
-
-@cindex @code{fc-cache}
-@cindex cache de polices
-Après l'installation des polices vous devrez peut-être rafraîchir le cache
-des polices pour pouvoir les utiliser dans les applications. Ça s'applique
-aussi lorsque les applications installées avec Guix n'ont pas l'air de
-trouver les polices. Pour forcer la reconstruction du cache de polices
-lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
-paquet @code{fontconfig}.
-
-@subsection Certificats X.509
-
-@cindex @code{nss-certs}
-Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
-programmes d'authentifier les serveurs web par HTTPS@.
-
-Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
-installer ce paquet et définir les variables d'environnement adéquates pour
-que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
-
-@subsection Paquets emacs
-
-@cindex @code{emacs}
-Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
-peuvent être placés soit dans
-@file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
-sous-répertoires de
-@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
-car il existe potentiellement des milliers de paquets Emacs et stocker leurs
-fichiers dans un seul répertoire peut ne pas être fiable (à cause de
-conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
-bonne idée. C'est très similaire à la manière dont le système de paquet
-d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
-The GNU Emacs Manual}).
-
-Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
-donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
-ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
-installés avec Guix, vous pouvez le faire en lançant Emacs avec l'option
-@code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
-
-@subsection La chaîne d'outils GCC
-
-@cindex GCC
-@cindex ld-wrapper
-
-Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
-vous avez besoin d'une chaîne de compilation complète pour compiler et lier
-du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
-paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
-lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
-symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
-pour l'éditeur de liens.
-
-Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
-passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
-correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
-ensemble d'arguments. Vous pouvez dire à l'enveloppe de refuser de lier les
-programmes à des bibliothèques en dehors du dépôt en paramétrant la variable
-d'environnement @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} sur @code{no}.
-
-@c TODO What else?
-
-@c *********************************************************************
-@node Installation du système
-@chapter Installation du système
-
-@cindex installer Guix System
-@cindex Guix System, installation
-Cette section explique comment installer Guix System sur une machine. Guix,
-en tant que gestionnaire de paquets, peut aussi être installé sur un système
-GNU/Linux déjà installé, @pxref{Installation}.
-
-@ifinfo
-@quotation Remarque
-@c This paragraph is for people reading this from tty2 of the
-@c installation image.
-Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
-son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
-ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
-Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
-
-Autrement, lancez @command{info info} dans un autre tty pour garder ce
-manuel ouvert.
-@end quotation
-@end ifinfo
-
-@menu
-* Limitations:: Ce à quoi vous attendre.
-* Considérations matérielles:: Matériel supporté.
-* Installation depuis une clef USB ou un DVD:: Préparer le média
- d'installation.
-* Préparer l'installation:: Réseau, partitionnement, etc.
-* Installation graphique guidée:: Installation graphique facile.
-* Installation manuelle:: Installation manuelle pour les sorciers.
-* Après l'installation du système:: Une fois que l'installation a
- réussi.
-* Installer Guix dans une VM:: Jouer avec le système Guix.
-* Construire l'image d'installation:: D'où vient tout cela.
-@end menu
-
-@node Limitations
-@section Limitations
-
-We consider Guix System to be ready for a wide range of ``desktop'' and
-server use cases. The reliability guarantees it provides---transactional
-upgrades and rollbacks, reproducibility---make it a solid foundation.
-
-Nevertheless, before you proceed with the installation, be aware of the
-following noteworthy limitations applicable to version @value{VERSION}:
-
-@itemize
-@item
-LVM (gestionnaire de volumes logiques) n'est pas supporté.
-
-@item
-De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
-certains manquent toujours cruellement.
-
-@item
-GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Services de bureaux}), as well as a number of X11 window managers. However, KDE is
-currently missing.
-@end itemize
-
-More than a disclaimer, this is an invitation to report issues (and success
-stories!), and to join us in improving it. @xref{Contribuer}, for more
-info.
-
-
-@node Considérations matérielles
-@section Considérations matérielles
-
-@cindex prise en charge du matériel sur Guix System
-GNU@tie{}Guix se concentre sur le respect des libertés de ses utilisateurs.
-Il est construit autour du noyau Linux-libre, ce qui signifie que seuls les
-matériels pour lesquels des pilotes logiciels et des microgiciels libres
-sont disponibles sont pris en charge. De nos jours, une grande gamme de
-matériel qu'on peut acheter est prise en charge par GNU/Linux-libre — des
-claviers aux cartes graphiques en passant par les scanners et les
-contrôleurs Ethernet. Malheureusement, il reste des produit dont les
-fabricants refusent de laisser le contrôle aux utilisateurs sur leur propre
-utilisation de l'ordinateur, et ces matériels ne sont pas pris en charge par
-Guix System.
-
-@cindex WiFi, support matériel
-One of the main areas where free drivers or firmware are lacking is WiFi
-devices. WiFi devices known to work include those using Atheros chips
-(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
-driver, and those using Broadcom/AirForce chips (BCM43xx with Wireless-Core
-Revision 5), which corresponds to the @code{b43-open} Linux-libre driver.
-Free firmware exists for both and is available out-of-the-box on Guix
-System, as part of @code{%base-firmware} (@pxref{Référence de système d'exploitation,
-@code{firmware}}).
-
-@cindex RYF, Respects Your Freedom
-La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
-certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
-Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
-votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
-Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
-
-Une autre ressource utile est le site web @uref{https://www.h-node.org/,
-H-Node}. Il contient un catalogue d'appareils avec des informations sur
-leur support dans GNU/Linux.
-
-
-@node Installation depuis une clef USB ou un DVD
-@section Installation depuis une clef USB ou un DVD
-
-Une image d'installation ISO-9660 téléchargeable depuis
-@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{système}.iso.xz}
-peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
-l'une de ces valeurs :
-
-@table @code
-@item x86_64-linux
-pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
-
-@item i686-linux
-pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
-@end table
-
-@c start duplication of authentication part from ``Binary Installation''
-Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
-l'authenticité de l'image avec, de cette manière :
-
-@example
-$ wget https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
-$ gpg --verify guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
-@end example
-
-Si cette commande échoue parce que vous n'avez pas la clef publique requise,
-lancez cette commande pour l'importer :
-
-@example
-$ gpg --keyserver @value{KEY-SERVER} \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
-@end example
-
-@noindent
-@c end duplication
-et relancez la commande @code{gpg --verify}.
-
-Cette image contient les outils nécessaires à l'installation. Elle est
-faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
-un DVD.
-
-@unnumberedsubsec Copie sur une clef USB
-
-Pour copier l'image sur une clef USB, suivez ces étapes :
-
-@enumerate
-@item
-Décompressez l'image avec la commande @command{xz} :
-
-@example
-xz -d guix-system-install-@value{VERSION}.@var{système}.iso.xz
-@end example
-
-@item
-Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
-son nom d'appareil. En supposant que la clef usb est connue sous le nom de
-@file{/dev/sdX}, copiez l'image avec :
-
-@example
-dd if=guix-system-install-@value{VERSION}.@var{système}.iso of=/dev/sdX
-sync
-@end example
-
-Accéder à @file{/dev/sdX} requiert généralement les privilèges
-super-utilisateur.
-@end enumerate
-
-@unnumberedsubsec Graver sur un DVD
-
-Pour copier l'image sur un DVD, suivez ces étapes :
-
-@enumerate
-@item
-Décompressez l'image avec la commande @command{xz} :
-
-@example
-xz -d guix-system-install-@value{VERSION}.@var{système}.iso.xz
-@end example
-
-@item
-Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
-En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
-l'image avec :
-
-@example
-growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{système}.iso
-@end example
-
-Accéder à @file{/dev/srX} requiert généralement les privilèges
-super-utilisateur.
-@end enumerate
-
-@unnumberedsubsec Démarrage
-
-Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
-démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
-entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
-démarrer sur la clef USB.
-
-@xref{Installer Guix dans une VM}, si, à la place, vous souhaitez installer
-Guix System dans une machine virtuelle (VM).
-
-
-@node Préparer l'installation
-@section Préparer l'installation
-
-Une fois que vous avez démarré, vous pouvez utiliser l'installateur
-graphique, qui rend facile la prise en main (@pxref{Installation graphique guidée}). Autrement, si vous êtes déjà familier avec GNU/Linux et que
-vous voulez plus de contrôle que ce que l'installateur graphique ne fournit,
-vous pouvez choisir le processus d'installation « manuel » (@pxref{Installation manuelle}).
-
-L'installateur graphique est disponible sur le TTY1. Vous pouvez obtenir
-des shells root sur les TTY 3 à 6 en tapant @kbd{ctrl-alt-f3},
-@kbd{ctrl-alt-f4} etc. Le TTY2 affiche cette documentation que vous pouvez
-atteindre avec @kbd{ctrl-alt-f2}. On peut naviguer dans la documentation
-avec les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
-Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
-vous permet de sélectionner du texte avec le bouton gauche de la souris et
-de le coller en appuyant sur la molette.
-
-@quotation Remarque
-L'installation nécessite un accès au réseau pour que les dépendances
-manquantes de votre configuration système puissent être téléchargées. Voyez
-la section « réseau » plus bas.
-@end quotation
-
-@node Installation graphique guidée
-@section Installation graphique guidée
-
-L'installateur graphique est une interface utilisateur en mode texte. Il
-vous guidera, avec des boîtes de dialogue, le long des étapes requises pour
-installer GNU@tie{}Guix System.
-
-La première boîte de dialogue vous permet de paramétrer le système comme
-vous le souhaitez pendant l'installation : vous pouvez choisir la langue, la
-disposition du clavier et paramétrer le réseau, qui sera utilisé pendant
-l'installation. L'image ci-dessous montre le dialogue pour le réseau.
-
-@image{images/installer-network,5in,, paramétrage du réseau avec
-l'installateur graphique}
-
-Les étapes suivantes vous permettent de partitionner votre disque dur, comme
-le montre l'image ci-dessous, de choisir si vous voulez ou non utiliser des
-systèmes de fichiers chiffrés, de saisir le nom d'hôte et le mot de passe
-root et de créer un compte supplémentaire, entre autres choses.
-
-@image{images/installer-partitions,5in,, partitionnement du disque avec
-l'installateur graphique}
-
-Remarquez que, à tout moment, l'installateur vous permet de sortir de
-l'étape d'installation actuelle et de recommencer une étape précédente,
-comme le montre l'image ci-dessous.
-
-@image{images/installer-resume,5in,, reprise du processus d'installation}
-
-Une fois que vous avez fini, l'installateur produit une configuration de
-système d'exploitation et vous la montre (@pxref{Utiliser le système de configuration}). À ce moment, vous pouvez appuyer sur « OK » et l'installation
-continuera. Lorsqu'elle aura réussi, vous pourrez redémarrer sur le nouveau
-système et vous amuser. @xref{Après l'installation du système}, pour la suite des
-festivités !
-
-
-@node Installation manuelle
-@section Installation manuelle
-
-Cette section décrit comme vous pourriez installe « manuellement »
-GNU@tie{}Guix System sur votre machine. Cette option nécessite que vous
-soyez familier avec GNU/Linux, le shell et avec les outils d'administration
-usuels. Si vous pensez que ce n'est pas pour vous, pensez à utiliser
-l'installateur graphique (@pxref{Installation graphique guidée}).
-
-Le système d'installation fournit des shells root sur les TTY 3 à 6 ;
-appuyez sur @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4} etc pour y accéder. Il
-inclus plusieurs outils usuels pour requis pour cette tâche. Mais c'est
-aussi un système Guix complet, ce qui signifie que vous pouvez installer des
-paquets supplémentaires si vous en avez besoin, avec @command{guix package}
-(@pxref{Invoquer guix package}).
-
-@menu
-* Disposition du clavier réseau et partitionnement:: Paramètres initiaux.
-* Effectuer l'installation:: Installer.
-@end menu
-
-@node Disposition du clavier réseau et partitionnement
-@subsection Disposition du clavier réseau et partitionnement
-
-Avant que vous ne puissiez installer le système, vous voudrez sans doute
-ajuster la disposition du clavier, paramétrer le réseau et partitionner le
-disque dur cible. Cette section vous guidera à travers tout cela.
-
-@subsubsection Disposition du clavier
-
-@cindex disposition du clavier
-L'image d'installation utilise la disposition clavier qwerty (US). Si vous
-voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
-exemple, la commande suivante sélectionne la disposition Dvorak :
-
-@example
-loadkeys dvorak
-@end example
-
-Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
-pour trouver une liste des dispositions disponibles. Lancez @command{man
-loadkey} pour plus d'informations.
-
-@subsubsection Réseau
-
-Lancez la commande suivante pour voir comment vos interfaces réseau sont
-appelées :
-
-@example
-ifconfig -a
-@end example
-
-@noindent
-@dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
-
-@example
-ip a
-@end example
-
-@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
-Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
-l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
-est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
-@samp{w}, comme @samp{w1p2s0}.
-
-@table @asis
-@item Connexion filaire
-Pour configure une connexion filaire, lancez la commande suivante, en
-remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
-utiliser.
-
-@example
-ifconfig @var{interface} up
-@end example
-
-@item Connexion sans-fil
-@cindex sans-fil
-@cindex WiFi
-Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
-configuration pour l'outil de configuration @command{wpa_supplicant} (son
-emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
-@command{nano} :
-
-@example
-nano wpa_supplicant.conf
-@end example
-
-Par exemple, la déclaration qui suit peut aller dans ce fichier et
-fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
-la phrase de passe pour le réseau auquel vous vous connectez :
-
-@example
-network=@{
- ssid="@var{mon-ssid}"
- key_mgmt=WPA-PSK
- psk="la phrase de passe secrète du réseau"
-@}
-@end example
-
-Démarrez le service sans-fil et lancez-le en tache de fond avec la commande
-suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
-vous voulez utiliser) :
-
-@example
-wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
-@end example
-
-Lancez @command{man wpa_supplicant} pour plus d'informations.
-@end table
-
-@cindex DHCP
-À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
-où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
-
-@example
-dhclient -v @var{interface}
-@end example
-
-Essayez de pinger un serveur pour voir si le réseau fonctionne :
-
-@example
-ping -c 3 gnu.org
-@end example
-
-Mettre en place un accès réseau est presque toujours une nécessité parce que
-l'image ne contient pas tous les logiciels et les outils dont vous pourriez
-avoir besoin.
-
-@cindex installer par SSH
-Si vous le souhaitez, vous pouvez continuer l'installation à distance en
-démarrant un serveur SSH :
-
-@example
-herd start ssh-daemon
-@end example
-
-Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
-configurer l'authentification par clef OpenSSH avant de vous connecter.
-
-@subsubsection Partitionnement
-
-À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
-partitionner le disque puis à formater les partitions cibles.
-
-L'image d'installation inclus plusieurs outils de partitionnement, dont
-Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
-@command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
-disque avec le partitionnement qui vous convient :
-
-@example
-cfdisk
-@end example
-
-Si votre disque utilise le format des tables de partitions GUID (GPT) et que
-vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
-défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
-disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
-
-@cindex EFI, installation
-@cindex UEFI, installation
-@cindex ESP, partition système EFI
-Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
-avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition peut
-être montée dans @file{/boot/efi} par exemple et doit avoir le drapeau
-@code{esp}. P.@: ex.@: pour @command{parted} :
-
-@example
-parted /dev/sda set 1 esp on
-@end example
-
-@quotation Remarque
-@vindex grub-bootloader
-@vindex grub-efi-bootloader
-Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
-Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
-vous devriez probablement effectuer une installation EFI, avec
-@code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
-@code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
-d'information sur le chargeur d'amorçage.
-@end quotation
-
-Une fois que vous avez fini le partitionnement du disque dur cible, vous
-devez créer un système de fichier sur les partitions@footnote{Actuellement
-Guix System ne supporte que les systèmes de fichiers ext4 et btrfs. En
-particulier, le code qui lit les UUID des systèmes de fichiers et les
-étiquettes ne fonctionne que pour ces types de systèmes de fichiers.}. Pour
-l'ESP, si vous en avez une et en supposant que ce soit @file{/dev/sda1},
-lancez :
-
-@example
-mkfs.fat -F32 /dev/sda1
-@end example
-
-Préférez assigner une étiquette au système de fichier pour que vous puissiez
-vous y référer de manière fiable dans la déclaration @code{file-system}
-(@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
-de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
-partition racine soit sur @file{/dev/sda2}, on peut créer un système de
-fichier avec pour étiquette @code{my-root} avec :
-
-@example
-mkfs.ext4 -L my-root /dev/sda2
-@end example
-
-@cindex chiffrement du disque
-Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
-utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
-@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
-@code{man cryptsetup}} pour plus d'informations). En supposant que vous
-voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
-commandes suivante vous mènerait à ce résultat :
-
-@example
-cryptsetup luksFormat /dev/sda2
-cryptsetup open --type luks /dev/sda2 my-partition
-mkfs.ext4 -L my-root /dev/mapper/my-partition
-@end example
-
-Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
-avec une commande comme (de nouveau, en supposant que @code{my-root} est
-l'étiquette du système de fichiers racine) :
-
-@example
-mount LABEL=my-root /mnt
-@end example
-
-Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
-système cible relativement à ce chemin. Si vous avez choisi d'avoir un
-@file{/boot/efi} comme point de montage EFI par exemple, montez-la sur
-@file{/mnt/boot/efi} maintenant pour qu'elle puisse être trouvée par
-@code{guix system init} ensuite.
-
-Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
-(@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
-Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
-supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
-pouvez lancer :
-
-@example
-mkswap /dev/sda3
-swapon /dev/sda3
-@end example
-
-Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
-supposant que dans le nouveau système vous voulez utiliser le fichier
-@file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
-fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
-Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
-(COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
-détails, regardez les pages de manuel de @command{mkswap} et
-@command{swapon}.} :
-
-@example
-# Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
-dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
-# Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
-chmod 600 /mnt/swapfile
-mkswap /mnt/swapfile
-swapon /mnt/swapfile
-@end example
-
-Remarquez que si vous avez chiffré la partition racine et créé un fichier
-d'échange dans son système de fichier comme décrit ci-dessus, alors le
-chiffrement protégera aussi le fichier d'échange, comme n'importe quel
-fichier de ce système de fichiers.
-
-@node Effectuer l'installation
-@subsection Effectuer l'installation
-
-Lorsque la partition cible est prête et que les autres partitions sont
-montées, on est prêt à commencer l'installation. Commencez par :
-
-@example
-herd start cow-store /mnt
-@end example
-
-Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
-sorte que les paquets ajoutés pendant l'installation sont écrits sur le
-disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
-nécessaire parce que la première phase de la commande @command{guix system
-init} (voir plus bas) implique de télécharger ou de construire des éléments
-de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
-
-Ensuite, vous devrez modifier un fichier et fournir la déclaration du
-système à installer. Pour cela, le système d'installation propose trois
-éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
-Manual}), qui supporte la coloration syntaxique la correspondance de
-parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
-(un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
-vivement de stocker ce fichier sur le système de fichier racine cible,
-disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
-fichier de configuration une fois que vous aurez redémarré sur votre nouveau
-système.
-
-@xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
-fichier de configuration. Les exemples de configuration dont on parle dans
-cette section sont disponibles dans @file{/etc/configuration} sur l'image
-d'installation. Ainsi, pour commencer avec une configuration du système qui
-fournit un serveur d'affichage graphique (un système de « bureau »), vous
-pouvez lancer ce qui suit :
-
-@example
-# mkdir /mnt/etc
-# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
-# nano /mnt/etc/config.scm
-@end example
-
-Vous devriez faire attention à ce que contient votre fichier de
-configuration, en particulier :
-
-@itemize
-@item
-Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
-cible où vous voulez installer GRUB. Elle devrait aussi mentionner
-@code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
-ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
-anciens systèmes, le champs @code{target} contient un périphérique comme
-@code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
-partition EFI montée, comme @code{/boot/efi}, et assurez-vous bien que ce
-chemin est monté et qu'il y a une entrée @code{file-system} dans votre
-configuration.
-
-@item
-Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
-aux valeurs de leur champs @code{device} dans votre configuration
-@code{file-system}, en supposant que la configuration @code{file-system}
-utilise la procédure @code{file-system-label} dans son champ @code{device}.
-
-@item
-Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
-champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
-@end itemize
-
-Une fois que vous avez fini les préparatifs sur le fichier de configuration,
-le nouveau système peut être initialisé (rappelez-vous que le système de
-fichiers racine cible est dans @file{/mnt}) :
-
-@example
-guix system init /mnt/etc/config.scm /mnt
-@end example
-
-@noindent
-Cela copie tous les fichiers nécessaires et installe GRUB sur
-@file{/dev/sdX} à moins que vous ne passiez l'option
-@option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
-constructions pour les paquets manquants, ce qui peut prendre du temps.
-
-Une fois que cette commande a terminé — et on l'espère réussi ! — vous
-pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
-mot de passe @code{root} est d'abord vide ; les mots de passe des autres
-utilisateurs doivent être initialisés avec la commande @command{passwd} en
-tant que @code{root}, à mois que votre configuration ne spécifie autre chose
-(@pxref{user-account-password, mot de passe des comptes utilisateurs}).
-@xref{Après l'installation du système}, pour la suite !
-
-
-@node Après l'installation du système
-@section Après l'installation du système
-
-Bravo ! Vous avez maintenant redémarré sur votre système Guix ! À partir
-de maintenant, vous pouvez mettre à jour le système quand vous voudrez, avec
-:
-
-@example
-guix pull
-sudo guix system reconfigure /etc/config.scm
-@end example
-
-@noindent
-Cela crée une nouvelle génération du système avec les derniers paquets et
-services (@pxref{Invoquer guix system}). Nous vous recommandons de le faire
-régulièrement pour que votre système inclue les dernières misse à jour de
-sécurité (@pxref{Mises à jour de sécurité}).
-
-@c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
-@quotation Remarque
-@cindex sudo vs.@: @command{guix pull}
-Remarquez que @command{sudo guix} exécute la commande @command{guix} de
-votre utilisateur et @emph{non} celle de root, parce que @command{sudo} ne
-change pas @code{PATH}. Pour utiliser explicitement le @command{guix} de
-root, tapez @command{sudo -i guix @dots{}}.
-@end quotation
-
-Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
-@file{guix-devel@@gnu.org} pour partager votre expérience !
-
-
-@node Installer Guix dans une VM
-@section Installer Guix sur une machine virtuelle
-
-@cindex machine virtuelle, installation de Guix System
-@cindex serveur privé virtuel (VPS)
-@cindex VPS (serveur privé virtuel)
-Si vous souhaitez installer Guix System sur une machine virtuelle (VM) ou un
-serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
-section est faite pour vous.
-
-Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer Guix System
-sur une image disque, suivez ces étapes :
-
-@enumerate
-@item
-Tout d'abord récupérez et décompressez l'image d'installation du système
-Guix comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
-
-@item
-Créez une image disque qui contiendra le système installé. Pour créer une
-image qcow2, utilise la commande @command{qemu-img} :
-
-@example
-qemu-img create -f qcow2 guixsd.img 50G
-@end example
-
-Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
-moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
-grossira.
-
-@item
-Démarrez l'image d'installation USB dans une VM :
-
-@example
-qemu-system-x86_64 -m 1024 -smp 1 \
- -net user -net nic,model=virtio -boot menu=on \
- -drive file=guix-system-install-@value{VERSION}.@var{système}.iso \
- -drive file=guixsd.img
-@end example
-
-L'ordre des périphérique est important.
-
-Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
-le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
-pour valider votre choix.
-
-@item
-Vous êtes maintenant root dans la VM, continuez en suivant la procédure
-d'installation. @xref{Préparer l'installation}, et suivez les
-instructions.
-@end enumerate
-
-Une fois l'installation terminée, vous pouvez démarrer le système dans votre
-image @file{guixsd.img}. @xref{Lancer Guix dans une VM}, pour une manière de
-faire.
-
-@node Construire l'image d'installation
-@section Construire l'image d'installation
-
-@cindex image d'installation
-L'image d'installation décrite plus haut a été construite avec la commande
-@command{guix system}, plus précisément :
-
-@example
-guix system disk-image --file-system-type=iso9660 \
- gnu/system/install.scm
-@end example
-
-Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
-sources et regardez aussi @ref{Invoquer guix system} pour plus
-d'informations sur l'image d'installation.
-
-@section Construire l'image d'installation pour les cartes ARM
-
-De nombreuses cartes ARM requièrent une variante spécifique du chargeur
-d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
-
-Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
-disponible autrement (sur un autre périphérique d'amorçage etc), il est
-recommandé de construire une image qui inclus le chargeur d'amorçage, plus
-précisément :
-
-@example
-guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
-@end example
-
-@code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
-carte invalide, une liste de cartes possibles sera affichée.
-
-@c *********************************************************************
-@node Gestion de paquets
-@chapter Gestion de paquets
-
-@cindex paquets
-Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
-jour et supprimer facilement des paquets logiciels sans devoir connaître
-leur procédure de construction ou leurs dépendances. Guix va aussi plus
-loin que ces fonctionnalités évidentes.
-
-Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
-outils de gestion des paquets qu'il fournit. En plus de l'interface en
-ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
-@code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
-(@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
-avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
-guix-help} pour le démarrer) :
-
-@example
-guix package -i emacs-guix
-@end example
-
-@menu
-* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
-* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
-* Substituts:: Télécharger des binaire déjà construits.
-* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
- résultats.
-* Invoquer guix gc:: Lancer le ramasse-miettes.
-* Invoquer guix pull:: Récupérer la dernière version de Guix et de
- la distribution.
-* Canaux:: Personnaliser la collection des paquets.
-* Inférieurs:: Interagir avec une autre révision de Guix.
-* Invoquer guix describe:: Affiche des informations sur la révision Guix
- actuelle.
-* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
-@end menu
-
-@node Fonctionnalités
-@section Fonctionnalités
-
-Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
-paquets}, dans son propre répertoire — quelque chose comme
-@file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
-
-Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
-propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
-utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
-utilisateur dans @code{$HOME/.guix-profile}.
-
-Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
-@file{/home/alice/.guix-profile/bin/gcc} pointe vers
-@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
-machine, @code{bob} a déjà installé GCC 4.8.0. Le profil de @code{bob}
-continue simplement de pointer vers
-@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
-GCC coexistent surs le même système sans aucune interférence.
-
-La commande @command{guix package} est l'outil central pour gérer les
-paquets (@pxref{Invoquer guix package}). Il opère sur les profils
-utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
-normaux}.
-
-@cindex transactions
-La commande fournit les opérations évidentes d'installation, de suppression
-et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
-soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
-processus @command{guix package} est terminé pendant la transaction ou si
-une panne de courant arrive pendant la transaction, le profil de
-l'utilisateur reste dans son état précédent et reste utilisable.
-
-En plus, il est possible @emph{d'annuler} toute transaction sur les
-paquets. Donc si par exemple un mise à jour installe une nouvelle version
-d'un paquet qui révèle un bogue sérieux, vous pouvez revenir en arrière à
-l'instance précédente de votre profil que vous saviez bien fonctionner. De
-même, la configuration globale du système dans Guix est sujette aux mises à
-jour transactionnelles et aux annulations (@pxref{Utiliser le système de configuration}).
-
-Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
-déterminer quels paquets sont toujours référencés par les profils des
-utilisateurs et supprimer ceux qui ne sont plus référencés de manière
-prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
-explicitement supprimer les anciennes générations de leur profil pour que
-les paquets auxquels elles faisaient référence puissent être glanés.
-
-@cindex reproductibilité
-@cindex constructions reproductibles
-Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
-paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
-Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
-de toutes les entrées qui ont été utilisées pendant la construction de ce
-paquet — le compilateur, les bibliothèques, les scripts de construction,
-etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
-l'installation d'un paquet donné correspond à l'état actuel de leur
-distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
-aux environnements de construction utilisés, une construction donnée à de
-forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
-effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
-container}).
-
-@cindex substituts
-Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
-binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
-@file{/gnu/store} est disponible depuis une source externe (un
-@dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
-il construit le paquet depuis les sources localement (@pxref{Substituts}).
-Comme les résultats des constructions sont généralement reproductibles au
-bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
-fournissent les substituts : vous pouvez forcer une construction locale et
-@emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
-
-Le contrôle de l'environnement de construction est aussi une fonctionnalité
-utile pour les développeurs. La commande @command{guix environment} permet
-aux développeurs d'un paquet de mettre en place rapidement le bon
-environnement de développement pour leur paquet, sans avoir à installer
-manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
-
-@cindex réplication, des environnements logiciels
-@cindex suivi de la provenance, des artefacts logiciels
-La totalité de Guix et des définitions de paquets sont placés sous contrôle
-de version, et @command{guix pull} vous permet de « voyager dans le temps »
-de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
-rend possible la réplication d'une instance Guix sur une machine différente
-ou plus tard, ce qui vous permet de @emph{répliquer des environnements
-logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
-précis des logiciels.
-
-@node Invoquer guix package
-@section Invoquer @command{guix package}
-
-@cindex installer des paquets
-@cindex supprimer des paquets
-@cindex installation de paquets
-@cindex suppression de paquets
-La commande @command{guix package} est l'outil qui permet d'installer,
-mettre à jour et supprimer les paquets ainsi que de revenir à une
-configuration précédente. Elle n'opère que dans le profil de l'utilisateur
-et fonctionne avec les privilèges utilisateurs normaux
-(@pxref{Fonctionnalités}). Sa syntaxe est :
-
-@example
-guix package @var{options}
-@end example
-@cindex transactions
-@var{options} spécifie d'abord les opérations à effectuer pendant la
-transaction. À la fin, une nouvelle génération du profil est créée mais les
-@dfn{générations} précédentes du profil restent disponibles si l'utilisateur
-souhaite y revenir.
-
-Par exemple, pour supprimer @code{lua} et installer @code{guile} et
-@code{guile-cairo} en une seule transaction :
-
-@example
-guix package -r lua -i guile guile-cairo
-@end example
-
-@command{guix package} supporte aussi une @dfn{approche déclarative} où
-l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
-disponibles le passe @i{via} l'option @option{--manifest}
-(@pxref{profile-manifest, @option{--manifest}}).
-
-@cindex profil
-Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
-utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
-lien symbolique pointe toujours vers la génération actuelle du profil par
-défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
-@file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
-etc.
-@cindex chemins de recherche
-Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
-les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
-Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
-ensuite aient les bonnes définitions des variables d'environnement :
-
-@example
-GUIX_PROFILE="$HOME/.guix-profile" ; \
-source "$HOME/.guix-profile/etc/profile"
-@end example
-
-Dans un environnement multi-utilisateur, les profils utilisateurs sont
-stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
-@file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
-normalement
-@code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
-@var{localstatedir} est la valeur passée à @code{configure} avec
-@code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
-répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
-démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
-package}.
-
-Les @var{options} peuvent être les suivante :
-
-@table @code
-
-@item --install=@var{paquet} @dots{}
-@itemx -i @var{paquet} @dots{}
-Installer les @var{paquet}s spécifiés.
-
-Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
-@code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
-version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
-dernier cas, la version la plus récente commençant par @code{1.8} est
-utilisée).
-
-Si aucun numéro de version n'est spécifié, la version la plus récente
-disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
-suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
-@code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
-paquets avec un nom correspondant et (éventuellement une version) sont
-recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
-
-@cindex entrées propagées
-Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
-dépendances qui sont installées automatiquement avec le paquet demandé
-(@pxref{package-propagated-inputs, @code{propagated-inputs} in
-@code{package} objects} pour plus d'informations sur les entrées propagées
-dans les définitions des paquets).
-
-@anchor{package-cmd-propagated-inputs}
-Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
-réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
-ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
-bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
-MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
-installés explicitement par l'utilisateur.
-
-D'autre part, les paquets dépendent parfois de la définition de variables
-d'environnement pour leur chemin de recherche (voir les explications sur
-@code{--search-paths} plus bas). Toute définition de variable
-d'environnement manquante ou possiblement incorrecte est rapportée ici.
-
-@item --install-from-expression=@var{exp}
-@itemx -e @var{exp}
-Installer le paquet évalué par @var{exp}
-
-@var{exp} doit être une expression Scheme qui s'évalue en un objet
-@code{<package>}. Cette option est notamment utile pour distinguer les
-variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
-(gnu packages base) guile-final)}.
-
-Remarquez que cette option installe la première sortie du paquet, ce qui
-peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
-paquet à plusieurs sorties.
-
-@item --install-from-file=@var{fichier}
-@itemx -f @var{fichier}
-Installer le paquet évalué par le code dans le @var{fichier}.
-
-Par exemple, @var{fichier} peut contenir une définition comme celle-ci
-(@pxref{Définition des paquets}) :
-
-@example
-@verbatiminclude package-hello.scm
-@end example
-
-Les développeurs peuvent trouver utile d'inclure un tel fichier
-@file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
-pourrait être utilisé pour tester des versions de développement et créer des
-environnements de développement reproductibles (@pxref{Invoquer guix environment}).
-
-@item --remove=@var{paquet} @dots{}
-@itemx -r @var{paquet} @dots{}
-Supprimer les @var{paquet}s spécifiés.
-
-Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
-version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
-glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
-
-@item --upgrade[=@var{regexp} @dots{}]
-@itemx -u [@var{regexp} @dots{}]
-@cindex mettre à jour des paquets
-Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
-spécifiée, la mise à jour n'installera que les paquets dont le nom
-correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
-dessous.
-
-Remarquez que cela met à jour vers la dernière version des paquets trouvée
-dans la distribution actuellement installée. Pour mettre à jour votre
-distribution, vous devriez lancer régulièrement @command{guix pull}
-(@pxref{Invoquer guix pull}).
-
-@item --do-not-upgrade[=@var{regexp} @dots{}]
-Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
-mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
-exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
-de ceux qui contiennent la chaîne « emacs » :
-
-@example
-$ guix package --upgrade . --do-not-upgrade emacs
-@end example
-
-@item @anchor{profile-manifest}--manifest=@var{fichier}
-@itemx -m @var{fichier}
-@cindex déclaration de profil
-@cindex manifest de profil
-Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
-le code Scheme dans @var{fichier}.
-
-Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
-construire avec une série de @code{--install} et de commandes similaires.
-L'avantage étant que le @var{fichier} peut être placé sous contrôle de
-version, copié vers d'autres machines pour reproduire le même profil, etc.
-
-@c FIXME: Add reference to (guix profile) documentation when available.
-@var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
-liste de paquets :
-
-@findex packages->manifest
-@example
-(use-package-modules guile emacs)
-
-(packages->manifest
- (list emacs
- guile-2.0
- ;; Utiliser une sortie spécifique d'un paquet.
- (list guile-2.0 "debug")))
-@end example
-
-@findex specifications->manifest
-Dans cet exemple on doit savoir quels modules définissent les variables
-@code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
-@code{use-package-modules} ce qui peut être embêtant. On peut à la place
-fournir des spécifications de paquets normales et laisser
-@code{specifications->manifest} rechercher les objets de paquets
-correspondants, comme ceci :
-
-@example
-(specifications->manifest
- '("emacs" "guile@@2.2" "guile@@2.2:debug"))
-@end example
-
-@item --roll-back
-@cindex revenir en arrière
-@cindex défaire des transactions
-@cindex transactions, défaire
-Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
-dernière transaction.
-
-Lorsqu'elle est combinée avec des options comme @code{--install}, cette
-option revient en arrière avant toute autre action.
-
-Lorsque vous revenez de la première génération qui contient des fichiers, le
-profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
-fichier en dehors de ses propres métadonnées.
-
-Après être revenu en arrière, l'installation, la suppression et la mise à
-jour de paquets réécrit les futures générations précédentes. Ainsi,
-l'historique des générations dans un profil est toujours linéaire.
-
-@item --switch-generation=@var{motif}
-@itemx -S @var{motif}
-@cindex générations
-Basculer vers une génération particulière définie par le @var{motif}.
-
-Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
-de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
-d'un nombre donné de générations. Par exemple, si vous voulez retourner à
-la dernière génération après @code{--roll-back}, utilisez
-@code{--switch-generation=+1}.
-
-La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
-que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
-donc si la génération demandée n'existe pas la génération actuelle ne
-changera pas.
-
-@item --search-paths[=@var{genre}]
-@cindex chemins de recherche
-Rapporter les définitions des variables d'environnement dans la syntaxe Bash
-qui peuvent être requises pour utiliser l'ensemble des paquets installés.
-Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
-de recherche} de fichiers utilisés par les paquets installés.
-
-Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
-@code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
-profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
-Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
-installés dans le profil, alors @code{--search-paths} suggérera
-d'initialiser ces variables à @code{@var{profil}/include} et
-@code{@var{profil}/lib}, respectivement.
-
-Le cas d'utilisation typique est de définir ces variables d'environnement
-dans le shell :
-
-@example
-$ eval `guix package --search-paths`
-@end example
-
-@var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
-@code{suffix}, ce qui signifie que les définitions des variables
-d'environnement retournées seront soit les paramètres exactes, ou placés
-avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
-@var{genre} a pour valeur par défaut @code{exact}.
-
-Cette option peut aussi être utilisé pour calculer les chemins de recherche
-@emph{combinés} de plusieurs profils. Regardez cet exemple :
-
-@example
-$ guix package -p foo -i guile
-$ guix package -p bar -i guile-json
-$ guix package -p foo -p bar --search-paths
-@end example
-
-La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
-bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
-donné cette recommandation.
-
-
-@item --profile=@var{profil}
-@itemx -p @var{profil}
-Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
-
-@cindex collisions, dans un profil
-@cindex faire des collisions de paquets dans des profils
-@cindex profil, collisions
-@item --allow-collisions
-Permettre des collisions de paquets dans le nouveau profil. À utiliser à
-vos risques et périls !
-
-Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
-profil comme des erreurs. Les collisions ont lieu quand deux version ou
-variantes d'un paquet donné se retrouvent dans le profil.
-
-@item --bootstrap
-Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
-option n'est utile que pour les développeurs de la distribution.
-
-@end table
-
-En plus de ces actions, @command{guix package} supporte les options
-suivantes pour demander l'état actuel d'un profil ou la disponibilité des
-paquets :
-
-@table @option
-
-@item --search=@var{regexp}
-@itemx -s @var{regexp}
-@cindex chercher des paquets
-Lister les paquets disponibles dont le nom, le synopsis ou la description
-correspondent à la @var{regexp} (en étant insensible à la casse), triés par
-pertinence. Afficher toutes les métadonnées des paquets correspondants au
-format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils, GNU
-recutils manual}).
-
-Cela permet à des champs spécifiques d'être extraits avec la commande
-@command{recsel}, par exemple :
-
-@example
-$ guix package -s malloc | recsel -p name,version,relevance
-name: jemalloc
-version: 4.5.0
-relevance: 6
-
-name: glibc
-version: 2.25
-relevance: 1
-
-name: libgc
-version: 7.6.0
-relevance: 1
-@end example
-
-De manière similaire, pour montrer le nom de tous les paquets disponibles
-sous license GNU@tie{}LGPL version 3 :
-
-@example
-$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
-name: elfutils
-
-name: gmp
-@dots{}
-@end example
-
-Il est aussi possible de raffiner les résultats de la recherche avec
-plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
-liste des jeux de plateau :
-
-@example
-$ guix package -s '\<board\>' -s game | recsel -p name
-name: gnubg
-@dots{}
-@end example
-
-Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
-qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
-les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
-parlent de clavier (en anglais : key@emph{board}).
-
-Et maintenant un exemple plus élaboré. La commande suivante recherche les
-bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
-Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
-
-@example
-$ guix package -s crypto -s library | \
- recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
-@end example
-
-@noindent
-@xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
-d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
-
-@item --show=@var{paquet}
-Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
-au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
-GNU recutils manual}).
-
-@example
-$ guix package --show=python | recsel -p name,version
-name: python
-version: 2.7.6
-
-name: python
-version: 3.3.5
-@end example
-
-Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
-détails concernant une version spécifique :
-@example
-$ guix package --show=python@@3.4 | recsel -p name,version
-name: python
-version: 3.4.3
-@end example
-
-
-
-@item --list-installed[=@var{regexp}]
-@itemx -I [@var{regexp}]
-Liste les paquets actuellement installés dans le profil spécifié, avec les
-paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
-spécifié, liste uniquement les paquets installés dont le nom correspond à
-@var{regexp}.
-
-Pour chaque paquet installé, affiche les éléments suivants, séparés par des
-tabulations : le nom du paquet, sa version, la partie du paquet qui est
-installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
-pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
-
-@item --list-available[=@var{regexp}]
-@itemx -A [@var{regexp}]
-Lister les paquets actuellement disponibles dans la distribution pour ce
-système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
-liste uniquement les paquets dont le nom correspond à @var{regexp}.
-
-Pour chaque paquet, affiche les éléments suivants séparés par des
-tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
-
-@item --list-generations[=@var{motif}]
-@itemx -l [@var{motif}]
-@cindex générations
-Renvoyer la liste des générations avec leur date de création ; pour chaque
-génération, montre les paquets installés avec les paquets installés les plus
-récemment en dernier. Remarquez que la zéroième génération n'est jamais
-montrée.
-
-Pour chaque paquet installé, afficher les éléments suivants, séparés par des
-tabulations : le nom du paquet, sa version, la partie du paquet qui a été
-installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
-paquet dans le dépôt.
-
-Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
-correspondantes. Les motifs valides sont :
-
-@itemize
-@item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
-à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
-la première.
-
-Et @code{--list-generations=1,8,2} renvoie les trois générations dans
-l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
-
-@item @emph{Des intervalles}. @code{--list-generations=2..9} affiche les
-générations demandées et tout ce qui se trouvent entre elles. Remarquez que
-le début d'un intervalle doit être plus petit que sa fin.
-
-Il est aussi possible d'omettre le numéro final. Par exemple,
-@code{--list-generations=2..} renvoie toutes les générations à partir de la
-deuxième.
-
-@item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
-ou moins en passant un entier avec la première lettre de la durée (en
-anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
-générations qui sont âgées d'au plus 20 jours.
-@end itemize
-
-@item --delete-generations[=@var{motif}]
-@itemx -d [@var{motif}]
-Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
-l'actuelle.
-
-Cette commande accepte les même motifs que @option{--list-generations}.
-Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
-Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
-que la durée spécifiée correspondent. Par exemple
-@code{--delete-generations=1m} supprime les générations vieilles de plus
-d'un mois.
-
-Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
-zéroième génération n'est elle non plus jamais supprimée.
-
-Remarquez que supprimer des générations empêche de revenir en arrière vers
-elles. Ainsi, cette commande doit être utilisée avec précaution.
-
-@end table
-
-Enfin, comme @command{guix package} peut démarrer des processus de
-construction, elle supporte les options de construction communes
-(@pxref{Options de construction communes}). Elle supporte aussi les options de
-transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
-paquets sont perdues à la mise à jour ; pour les préserver à travers les
-mises à jours, vous devriez définir vos propres variantes des paquets dans
-une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
-
-@node Substituts
-@section Substituts
-
-@cindex substituts
-@cindex binaires pré-construits
-Guix gère le déploiement depuis des binaires ou des sources de manière
-transparente ce qui signifie qu'il peut aussi bien construire localement que
-télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
-appelons ces éléments pré-construits des @dfn{substituts} — ils se
-substituent aux résultats des constructions locales. Dans la plupart des
-cas, télécharger un substitut est bien plus rapide que de construire les
-choses localement.
-
-Les substituts peuvent être tout ce qui résulte d'une construction de
-dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
-de paquets binaires pré-construits, mais les archives des sources par
-exemple résultent aussi de la construction d'une dérivation qui peut aussi
-être disponible en tant que substitut.
-
-@menu
-* Serveur de substituts officiel:: Une source particulière de substituts.
-* Autoriser un serveur de substituts:: Comment activer ou désactiver les
- substituts.
-* Authentification des substituts:: Comment Guix vérifie les substituts.
-* Paramètres de serveur mandataire:: Comment récupérer des substituts à
- travers un serveur mandataire.
-* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
-* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
- un paquet binaire ?
-@end menu
-
-@node Serveur de substituts officiel
-@subsection Serveur de substituts officiel
-
-@cindex hydra
-@cindex ferme de construction
-Le serveur @code{@value{SUBSTITUTE-SERVER}} est une interface à la ferme de
-construction officielle qui construit des paquets pour Guix continuellement
-pour certaines architectures et les rend disponibles en tant que
-substituts. C'est la source par défaut des substituts ; elle peut être
-modifiée en passant l'option @option{--substitute-urls} soit à
-@command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
---substitute-urls}}) soit aux outils clients comme @command{guix package}
-(@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
-
-Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
-est recommandé parce que les communications sont chiffrées ; à l'inverse
-HTTP rend les communications visibles pour un espion qui peut utiliser les
-informations accumulées sur vous pour déterminer par exemple si votre
-système a des vulnérabilités de sécurités non corrigées.
-
-Les substituts de la ferme de construction officielle sont activés par
-défaut dans la distribution système Guix (@pxref{Distribution GNU}).
-Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
-distribution externe, à moins que vous ne les ayez explicitement activés via
-l'une des étapes d'installation recommandées (@pxref{Installation}). Les
-paragraphes suivants décrivent comment activer ou désactiver les substituts
-de la ferme de construction ; la même procédure peut être utilisée pour
-activer les substituts de n'importe quel autre serveur de substituts.
-
-@node Autoriser un serveur de substituts
-@subsection Autoriser un serveur de substituts
-
-@cindex sécurité
-@cindex substituts, autorisations
-@cindex liste de contrôle d'accès (ACL), pour les substituts
-@cindex ACL (liste de contrôle d'accès), pour les substituts
-Pour permettre à Guix de télécharger les substituts depuis
-@code{@value{SUBSTITUTE-SERVER}} ou un miroir, vous devez ajouter sa clef
-publique à la liste de contrôle d'accès (ACL) des imports d'archives, avec
-la commande @command{guix archive} (@pxref{Invoquer guix archive}). Cela
-implique que vous faîtes confiance à @code{@value{SUBSTITUTE-SERVER}} pour
-ne pas être compromis et vous servir des substituts authentiques.
-
-La clef publique pour @code{@value{SUBSTITUTE-SERVER}} est installée avec
-Guix, dans @code{@var{préfixe}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, où
-@var{préfixe} est le préfixe d'installation de Guix. Si vous avez installé
-Guix depuis les sources, assurez-vous d'avoir vérifié la signature GPG de
-@file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
-publique. Ensuite vous pouvez lancer quelque chose comme ceci :
-
-@example
-# guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
-@end example
-
-@quotation Remarque
-De même, le fichier @file{hydra.gnu.org.pub} contient la clef publique d'une
-ferme de construction indépendante qui appartient aussi au projet,
-disponible sur @indicateurl{https://mirror.hydra.gnu.org}.
-@end quotation
-
-Une fois que cela est en place, la sortie d'une commande comme @code{guix
-build} devrait changer de quelque chose comme :
-
-@example
-$ guix build emacs --dry-run
-Les dérivations suivantes seraient construites :
- /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
- /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
- /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
- /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
-@dots{}
-@end example
-
-@noindent
-à quelque chose comme :
-
-@example
-$ guix build emacs --dry-run
-112.3 Mo seraient téléchargés :
- /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
- /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
- /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
- /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
-@dots{}
-@end example
-
-@noindent
-Cela indique que les substituts de @code{@value{SUBSTITUTE-SERVER}} sont
-utilisables et seront téléchargés, si possible, pour les futures
-constructions.
-
-@cindex substituts, comment les désactiver
-Le mécanisme de substitution peut être désactivé globalement en lançant
-@code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
-l'option @code{--no-substitutes} à @command{guix package}, @command{guix
-build} et aux autres outils en ligne de commande.
-
-@node Authentification des substituts
-@subsection Authentification des substituts
-
-@cindex signatures numériques
-Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
-qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
-ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
-
-Il y a une exception cependant : si un serveur non autorisé fournit des
-substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
-serveur autorisé, alors le serveur non autorisé devient disponible pour les
-téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
-substituts avec cette option :
-
-@example
---substitute-urls="https://a.example.org https://b.example.org"
-@end example
-
-@noindent
-@cindex constructions reproductibles
-Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
-@code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
-téléchargera les substituts de @code{a.example.org} parce qu'il vient en
-premier dans la liste et peut être considéré comme un miroir de
-@code{b.example.org}. En pratique, des machines de constructions produisent
-souvent les mêmes binaires grâce à des construction reproductibles au bit
-près (voir plus bas).
-
-Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
-validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
-à ce que des clients HTTPS comme des navigateurs web font habituellement.
-Cela est dû au fait que Guix authentifie les informations sur les substituts
-eux-mêmes, comme expliqué plus haut, ce dont on se soucie réellement (alors
-que les certificats X.509 authentifie la relation entre nom de domaine et
-clef publique).
-
-@node Paramètres de serveur mandataire
-@subsection Paramètres de serveur mandataire
-
-@vindex http_proxy
-Les substituts sont téléchargés par HTTP ou HTTPS. La variable
-d'environnement @code{http_proxy} peut être initialisée dans l'environnement
-de @command{guix-daemon} et est respectée pour le téléchargement des
-substituts. Remarquez que la valeur de @code{http_proxy} dans
-l'environnement où tournent @command{guix build}, @command{guix package} et
-les autres clients n'a @emph{absolument aucun effet}.
-
-@node Échec de substitution
-@subsection Échec de substitution
-
-Même lorsqu'un substitut pour une dérivation est disponible, la substitution
-échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
-substitut peut être hors ligne, le substitut a récemment été supprimé du
-serveur, la connexion peut avoir été interrompue, etc.
-
-Lorsque les substituts sont activés et qu'un substitut pour une dérivation
-est disponible, mais que la tentative de substitution échoue, Guix essaiera
-de construire la dérivation localement si @code{--fallback} a été passé en
-argument (@pxref{option de repli,, common build option @code{--fallback}}).
-Plus spécifiquement, si cet option n'a pas été passée en argument, alors
-aucune construction locale n'est effectuée et la dérivation est considérée
-comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
-alors Guix essaiera de construire la dérivation localement et l'échec ou le
-succès de la dérivation dépend de l'échec ou du succès de la construction
-locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
-substitut n'est disponible pour la dérivation en question, une construction
-locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
-@code{--fallback} ait été ou non passé.
-
-Pour se donner une idée du nombre de substituts disponibles maintenant, vous
-pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
-fournis par un serveur.
-
-@node De la confiance en des binaires
-@subsection De la confiance en des binaires
-
-@cindex confiance, en des binaires pré-construits
-De nos jours, le contrôle individuel sur son utilisation propre de
-l'informatique est à la merci d'institutions, de sociétés et de groupes avec
-assez de pouvoir et de détermination pour contourner les infrastructures
-informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
-substituts de @code{@value{SUBSTITUTE-SERVER}} soit pratique, nous
-encourageons les utilisateurs à construire aussi par eux-mêmes, voir à faire
-tourner leur propre ferme de construction, pour que
-@code{@value{SUBSTITUTE-SERVER}} devienne une cible moins intéressante. Une
-façon d'aider est de publier les logiciels que vous construisez avec
-@command{guix publish} pour que les autres aient plus de choix de serveurs
-où télécharger les substituts (@pxref{Invoquer guix publish}).
-
-Guix possède les fondations pour maximiser la reproductibilité logicielle
-(@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
-indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
-résultats identiques au bit près. Ainsi, à travers un ensemble de
-constructions de paquets indépendantes il est possible de renforcer
-l'intégrité du système. La commande @command{guix challenge} a pour but
-d'aider les utilisateurs à tester les serveurs de substituts et à aider les
-développeurs à trouver les constructions de paquets non-déterministes
-(@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
-@command{guix build} permet aux utilisateurs de vérifier si les substituts
-précédemment installés sont authentiques en les reconstruisant localement
-(@pxref{vérification de la construction, @command{guix build --check}}).
-
-Dans le futur, nous aimerions que Guix puisse publier et recevoir des
-binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
-discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
-
-@node Des paquets avec plusieurs résultats
-@section Des paquets avec plusieurs résultats
-
-@cindex paquets avec plusieurs résultats
-@cindex sorties de paquets
-@cindex sorties
-
-Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
-c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
-dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
-la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
-@code{out} mais son nom peut être omis comme le montre cette commande. Dans
-ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
-fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
-statiques, la documentation Info et les autres fichiers de support.
-
-Parfois il est plus approprié de séparer les divers types de fichiers
-produits par un même paquet source en plusieurs sorties. Par exemple, la
-bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
-plus de 20 Mo de documentation de référence dans des pages HTML. Pour
-préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
-documentation va dans une sortie séparée nommée @code{doc}. Pour installer
-la sortie principale de GLib, qui contient tout sauf la documentation, on
-devrait lancer :
-
-@example
-guix package -i glib
-@end example
-
-@cindex documentation
-La commande pour installer la documentation est :
-
-@example
-guix package -i glib:doc
-@end example
-
-Certains paquets installent des programmes avec des « empreintes dépendances
-» différentes. Par exemple le paquet WordNet installe à la fois les outils
-en ligne de commande et les interfaces graphiques (GUI). La première ne
-dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
-et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
-en ligne de commande dans la sortie par défaut et l'interface graphique dans
-une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
-d'interface graphique de gagner de la place. La commande @command{guix
-size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
-
-Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
-D'autres noms de sorties conventionnels sont @code{lib} pour les
-bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
-programmes indépendants et @code{debug} pour les informations de débogage
-(@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
-dans la troisième colonne de la sortie de @command{guix package
---list-available} (@pxref{Invoquer guix package}).
-
-
-@node Invoquer guix gc
-@section Invoquer @command{guix gc}
-
-@cindex ramasse-miettes
-@cindex espace disque
-Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
-La commande @command{guix gc} permet aux utilisateurs de lancer
-explicitement le ramasse-miettes pour récupérer de l'espace dans le
-répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
-des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
-répertoires à la main peut le casser de manière impossible à réparer !
-
-@cindex racines du GC
-@cindex racines du ramasse-miettes
-Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
-dans @file{/gnu/store} atteignable depuis une racine est considéré comme
-@dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
-considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
-racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
-les profils par défaut des utilisateurs ; par défaut les liens symboliques
-sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
-racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
-exemple (@pxref{Invoquer guix build}). La commande @command{guix gc
---list-roots} permet de les lister.
-
-Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
-c'est souvent utile de supprimer les anciennes génération des profils
-utilisateurs ; de cette façon les anciennes constructions de paquets
-référencées par ces générations peuvent être glanées. Cela se fait en
-lançant @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
-
-Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
-avez besoin d'espace disque. Par exemple pour garantir qu'au moins
-5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
-
-@example
-guix gc -F 5G
-@end example
-
-Il est parfaitement possible de le lancer comme une tâche périodique
-non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
-paramétrer une telle tâche). Lancer @command{guix gc} sans argument
-ramassera autant de miettes que possible mais ça n'est pas le plus pratique
-: vous pourriez vous retrouver à reconstruire ou re-télécharger des
-logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
-construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
-
-La command @command{guix gc} a trois modes d'opération : il peut être
-utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
-fichiers spécifiques (l'option @code{--delete}), pour afficher des
-informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
-options du ramasse-miettes sont :
-
-@table @code
-@item --collect-garbage[=@var{min}]
-@itemx -C [@var{min}]
-Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
-@file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
-lorsqu'aucune option n'est spécifiée.
-
-Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
-collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
-d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
-(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
-
-Lorsque @var{min} est omis, tout glaner.
-
-@item --free-space=@var{libre}
-@itemx -F @var{libre}
-Glaner jusqu'à ce que @var{libre} espace soit disponible dans
-@file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
-comme @code{500MiB} comme décrit ci-dessus.
-
-Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
-faire et s'arrêter immédiatement.
-
-@item --delete-generations[=@var{durée}]
-@itemx -d [@var{durée}]
-Avant de commencer le glanage, supprimer toutes les générations plus vielles
-que @var{durée}, pour tous les profils utilisateurs ; lorsque cela est lancé
-en root, cela s'applique à tous les profils @emph{de tous les utilisateurs}.
-
-Par exemple, cette commande supprime toutes les générations de tous vos
-profils plus vieilles que 2 mois (sauf s'il s'agit de la génération
-actuelle) puis libère de l'espace jusqu'à atteindre au moins 10 Go d'espace
-libre :
-
-@example
-guix gc -d 2m -F 10G
-@end example
-
-@item --delete
-@itemx -D
-Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
-en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
-ou s'ils sont toujours utilisés.
-
-@item --list-failures
-Lister les éléments du dépôt qui correspondent à des échecs de construction.
-
-Cela n'affiche rien à moins que le démon n'ait été démarré avec
-@option{--cache-failures} (@pxref{Invoquer guix-daemon,
-@option{--cache-failures}}).
-
-@item --list-roots
-Lister les racines du GC appartenant à l'utilisateur ; lorsque la commande
-est lancée en root, lister @emph{toutes} les racines du GC.
-
-@item --clear-failures
-Supprimer les éléments du dépôt spécifiés du cache des constructions
-échouées.
-
-De nouveau, cette option ne fait de sens que lorsque le démon est démarré
-avec @option{--cache-failures}. Autrement elle ne fait rien.
-
-@item --list-dead
-Montrer la liste des fichiers et des répertoires inutilisés encore présents
-dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
-atteignables par aucune racine.
-
-@item --list-live
-Montrer la liste des fichiers et des répertoires du dépôt utilisés.
-
-@end table
-
-En plus, les références entre les fichiers existants du dépôt peuvent être
-demandés :
-
-@table @code
-
-@item --references
-@itemx --referrers
-@cindex dépendances des paquets
-Lister les références (respectivement les référents) des fichiers du dépôt
-en argument.
-
-@item --requisites
-@itemx -R
-@cindex closure
-Lister les prérequis des fichiers du dépôt passés en argument. Les
-prérequis sont le fichier du dépôt lui-même, leur références et les
-références de ces références, récursivement. En d'autre termes, la liste
-retournée est la @dfn{closure transitive} des fichiers du dépôt.
-
-@xref{Invoquer guix size} pour un outil pour surveiller la taille de la
-closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
-visualiser le graphe des références.
-
-@item --derivers
-@cindex dérivation
-Renvoie les dérivations menant aux éléments du dépôt donnés
-(@pxref{Dérivations}).
-
-Par exemple cette commande :
-
-@example
-guix gc --derivers `guix package -I ^emacs$ | cut -f4`
-@end example
-
-@noindent
-renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
-votre profil.
-
-Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
-ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
-@file{.drv} correspondant à cause de dérivations à sortie fixées.
-@end table
-
-Enfin, les options suivantes vous permettent de vérifier l'intégrité du
-dépôt et de contrôler l'utilisation du disque.
-
-@table @option
-
-@item --verify[=@var{options}]
-@cindex intégrité, du dépôt
-@cindex vérification d'intégrité
-Vérifier l'intégrité du dépôt.
-
-Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
-dans la base de données du démon existent bien dans @file{/gnu/store}.
-
-Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
-virgule de l'un ou plus parmi @code{contents} et @code{repair}.
-
-Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
-contenu de chaque élément du dépôt et le compare au hash de sa base de
-données. Les différences de hash sont rapportées comme des corruptions de
-données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
-commande peut prendre très longtemps pour terminer, surtout sur un système
-avec un disque lent.
-
-@cindex réparer le dépôt
-@cindex corruption, récupérer de
-Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
-que le démon essaie de réparer les objets du dépôt corrompus en récupérant
-leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
-atomique et donc potentiellement dangereuse, elle n'est disponible que pour
-l'administrateur système. Une alternative plus légère lorsque vous
-connaissez exactement quelle entrée est corrompue consiste à lancer
-@command{guix build --repair} (@pxref{Invoquer guix build}).
-
-@item --optimize
-@cindex déduplication
-Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
-@dfn{déduplication}.
-
-Le démon effectue une déduplication à chaque construction réussie ou import
-d'archive à moins qu'il n'ait été démarré avec
-@code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
-@code{--disable-deduplication}}). Ainsi, cette option est surtout utile
-lorsque le démon tourne avec @code{--disable-deduplication}.
-
-@end table
-
-@node Invoquer guix pull
-@section Invoquer @command{guix pull}
-
-@cindex mettre à niveau Guix
-@cindex mettre à jour Guix
-@cindex @command{guix pull}
-@cindex pull
-Les paquets sont installés ou mis à jour vers la dernière version disponible
-dans la distribution actuellement disponible sur votre machine locale. Pour
-mettre à jour cette distribution, en même temps que les outils Guix, vous
-devez lancer @command{guix pull} ; la commande télécharge le dernier code
-source de Guix et des descriptions de paquets et le déploie. Le code source
-est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
-le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
-
-À la fin, @command{guix package} utilisera les paquets et les versions des
-paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
-toutes les commandes Guix et les modules Scheme seront aussi récupérés
-depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
-ajoutés par la mise à jour sont aussi maintenant disponibles.
-
-Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
-pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
-pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
-pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
-vice-versa.
-
-Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
-disponible sous @file{~/.config/guix/current} contenant la dernière version
-de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
-recherche pour que vous utilisiez la dernière version. Le même conseil
-s'applique au manuel Info (@pxref{Documentation}) :
-
-@example
-export PATH="$HOME/.config/guix/current/bin:$PATH"
-export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
-@end example
-
-L'option @code{--list-generations} ou @code{-l} liste les anciennes
-générations produites par @command{guix pull}, avec des détails sur leur
-origine :
-
-@example
-$ guix pull -l
-Génération 1 10 juin 2018 00:18:18
- guix 65956ad
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
-
-Génération 2 11 juin 2018 11:02:49
- guix e0cc7f6
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
- 2 nouveaux paquets : keepalived, libnfnetlink
- 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
- guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
- heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
-
-Génération 3 13 juin 2018 23:31:07 (actuelle)
- guix 844cc1c
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : 844cc1c8f394f03b404c5bb3aee086922373490c
- 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
- 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
-@end example
-
-@xref{Invoquer guix describe, @command{guix describe}}, pour d'autres
-manières de décrire le statut actuel de Guix.
-
-Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
-créés par @command{guix package} (@pxref{Invoquer guix package}).
-C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
-une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
-
-@example
-$ guix package -p ~/.config/guix/current --roll-back
-passé de la génération 3 à 2
-$ guix package -p ~/.config/guix/current --delete-generations=1
-suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
-@end example
-
-La commande @command{guix pull} est typiquement invoquée sans arguments mais
-il supporte les options suivantes :
-
-@table @code
-@item --url=@var{url}
-@itemx --commit=@var{commit}
-@itemx --branch=@var{branche}
-Download code for the @code{guix} channel from the specified @var{url}, at
-the given @var{commit} (a valid Git commit ID represented as a hexadecimal
-string), or @var{branch}.
-
-@cindex @file{channels.scm}, fichier de configuration
-@cindex fichier de configuration pour les canaux
-Ces options sont fournies pour votre confort, mais vous pouvez aussi
-spécifier votre configuration dans le fichier
-@file{~/.config/guix/channels.scm} ou en utilisant l'option
-@option{--channels} (voir plus bas).
-
-@item --channels=@var{file}
-@itemx -C @var{file}
-Lit la liste des canaux dans @var{file} plutôt que dans
-@file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
-qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
-d'informations.
-
-@item --list-generations[=@var{motif}]
-@itemx -l [@var{motif}]
-Liste toutes les générations de @file{~/.config/guix/current} ou, si
-@var{motif} est fournit, le sous-ensemble des générations qui correspondent
-à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
-package --list-generations} (@pxref{Invoquer guix package}).
-
-@xref{Invoquer guix describe}, pour une manière d'afficher des informations
-sur la génération actuelle uniquement.
-
-@item --profile=@var{profil}
-@itemx -p @var{profil}
-Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
-
-@item --dry-run
-@itemx -n
-Montrer quels commits des canaux seraient utilisés et ce qui serait
-construit ou substitué mais ne pas le faire vraiment.
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
-plutôt que pour le type de système de l'hôte de construction.
-
-@item --verbose
-Produire une sortie verbeuse, en écrivant les journaux de construction sur
-la sortie d'erreur standard.
-
-@item --bootstrap
-Utiliser le programme d'amorçage Guile pour construire la dernière version
-de Guix. Cette option n'est utile que pour les développeurs de Guix.
-@end table
-
-Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
-répertoires et branches récupérer, ainsi que les dépôts
-@emph{supplémentaires} contenant des modules de paquets qui devraient être
-déployés. @xref{Canaux} pour plus d'information.
-
-En plus, @command{guix pull} supporte toutes les options de construction
-communes (@pxref{Options de construction communes}).
-
-@node Canaux
-@section Canaux
-
-@cindex canaux
-@cindex @file{channels.scm}, fichier de configuration
-@cindex fichier de configuration pour les canaux
-@cindex @command{guix pull}, fichier de configuration
-@cindex configuration de @command{guix pull}
-Guix et sa collection de paquets sont mis à jour en lançant @command{guix
-pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
-télécharge et déploie Guix lui-même depuis le dépôt officiel de
-GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
-dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
-et la branche d'un répertoire Git à déployer et on peut demander à
-@command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
-termes, les canaux peuvent être utilisés pour personnaliser et pour
-@emph{étendre} Guix, comme on le verra plus bas.
-
-@subsection Utiliser un canal Guix personnalisé
-
-Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
-de commande ainsi que sa collection de paquets — sera téléchargé. Par
-exemple, supposons que vous voulez effectuer les mises à jour depuis votre
-propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
-depuis la branche @code{super-hacks}. Vous pouvez écrire cette
-spécification dans @code{~/.config/guix/channels.scm} :
-
-@lisp
-;; Dit à « guix pull » d'utiliser mon propre dépôt.
-(list (channel
- (name 'guix)
- (url "https://example.org/my-guix.git")
- (branch "super-hacks")))
-@end lisp
-
-@noindent
-Maintenant, @command{guix pull} récupérera le code depuis la branche
-@code{super-hacks} du dépôt sur @code{example.org}.
-
-@subsection Spécifier des canaux supplémentaires
-
-@cindex étendre la collection de paquets (canaux)
-@cindex paquets personnels (canaux)
-@cindex canaux, pour des paquets personnels
-Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
-Disons que vous avez un ensemble de paquets personnels ou de variantes
-personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
-mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
-de commande. Vous écririez d'abord des modules contenant ces définitions de
-paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
-vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
-supplémentaire où trouver ces paquets. Sympa, non ?
-
-@c What follows stems from discussions at
-@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
-@c earlier discussions on guix-devel@gnu.org.
-@quotation Attention
-Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
-@emph{super génial} ! » et que vous ne publiez vos canaux personnels
-publiquement, nous voudrions vous donner quelques avertissements :
-
-@itemize
-@item
-Avant de publier un canal, envisagez de contribuer vos définitions de
-paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
-ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
-Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
-des processus d'assurance qualité du projet.
-
-@item
-Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
-les développeurs de Guix, considérons que @emph{la charge de la
-compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
-les définitions de paquets ne sont que du code Scheme qui utilise diverses
-interfaces de programmation (API). Nous souhaitons rester libres de changer
-ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
-casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
-ne nous engageons @emph{pas} à geler les API non plus.
-
-@item
-Corollaire : si vous utilisez un canal externe et que le canal est cassé,
-merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
-Guix.
-@end itemize
-
-Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
-sont une manière pratique d'exercer votre liberté pour augmenter la
-collection de paquets de Guix et de partager vos améliorations, qui sont les
-principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
-logiciel libre}. Contactez-nous par courriel sur
-@email{guix-devel@@gnu.org} si vous souhaitez discuter à ce propos.
-@end quotation
-
-Pour utiliser un canal, écrivez dans @code{~/.config/guix/channels.scm} pour
-dire à @command{guix pull} de récupérer votre canal personnel @emph{en plus}
-des canaux par défaut de Guix :
-
-@vindex %default-channels
-@lisp
-;; Ajouter mes paquets personnels à ceux fournis par Guix.
-(cons (channel
- (name 'my-personal-packages)
- (url "https://example.org/personal-packages.git"))
- %default-channels)
-@end lisp
-
-@noindent
-Remarquez que le bout de code au-dessus est (comme toujours !)@: du code
-Scheme ; nous utilisons @code{cons} pour ajouter un canal à la liste des
-canaux que la variable @code{%default-channels} représente (@pxref{Pairs,
-@code{cons} and lists,, guile, GNU Guile Reference Manual}). Avec ce
-fichier en place, @command{guix pull} construit non seulement Guix mais
-aussi les modules de paquets de votre propre dépôt. Le résultat dans
-@file{~/.config/guix/current} est l'union de Guix et de vos propres modules
-de paquets :
-
-@example
-$ guix pull --list-generations
-@dots{}
-Génération 19 Aug 27 2018 16:20:48
- guix d894ab8
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : master
- commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
- my-personal-packages dd3df5e
- URL du dépôt : https://example.org/personal-packages.git
- branche : master
- commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
- 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
- 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
-@end example
-
-@noindent
-La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
-contient aussi bien Guix que les paquets du canal
-@code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
-à jour qui sont listés, certains comme @code{my-gimp} et
-@code{my-emacs-with-cool-features} peuvent provenir de
-@code{my-personal-packages}, tandis que d'autres viennent du canal par
-défaut de Guix.
-
-Pour créer un canal, créez un dépôt Git contenant vos propres modules de
-paquets et rendez-le disponible. Le dépôt peut contenir tout ce que vous
-voulez, mais un canal utile contiendra des modules Guile qui exportent des
-paquets. Une fois que vous avez démarré un canal, Guix se comportera comme
-si le répertoire de la racine du dépôt Git de ce canal était ajouté au
-chemin de chargement de Guile (@pxref{Load Paths,,, guile, GNU Guile
-Reference Manual}). Par exemple, si votre canal contient un fichier
-@file{mes-paquets/mes-outils.scm} qui définit un module Guile, le module
-sera disponible sous le nom de @code{(mes-paquets mes-outils)} et vous
-pourrez l'utiliser comme les autres modules (@pxref{Modules,,, guile, GNU
-Guile Reference Manual}).
-
-@cindex dépendances, canaux
-@cindex métadonnées, canaux
-@subsection Déclarer des dépendances de canaux
-
-Les auteurs de canaux peuvent décider d'augmenter une collection de paquets
-fournie par d'autres canaux. Ils peuvent déclarer leur canal comme
-dépendant d'autres canaux dans le fichier de métadonnées
-@file{.guix-channel} qui doit être placé à la racine de dépôt du canal.
-
-Le fichier de métadonnées devrait contenir une S-expression simple comme
-cela :
-
-@lisp
-(channel
- (version 0)
- (dependencies
- (channel
- (name une-collection)
- (url "https://exemple.org/premiere-collection.git"))
- (channel
- (name some-autre-collection)
- (url "https://exemple.org/deuxieme-collection.git")
- (branch "testing"))))
-@end lisp
-
-Dans l'exemple ci-dessus, ce canal est déclaré comme dépendant de deux
-autres canaux, qui seront récupérés automatiquement. Les modules fournis
-par le canal seront compilés dans un environnement où les modules de tous
-les canaux déclarés sont disponibles.
-
-Pour des raisons de fiabilité et de maintenabilité, vous devriez éviter
-d'avoir des dépendances sur des canaux que vous ne maîtrisez pas et vous
-devriez ajouter le minimum de dépendances possible.
-
-@subsection Répliquer Guix
-
-@cindex épinglage, canaux
-@cindex répliquer Guix
-@cindex reproductibilité, de Guix
-La sortie de @command{guix pull --list-generations} ci-dessus montre
-précisément quels commits ont été utilisés pour construire cette instance de
-Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
-fournissant une spécification de canal dans
-@file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
-
-@lisp
-;; Déployer des commits précis de mes canaux préférés.
-(list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
- (channel
- (name 'my-personal-packages)
- (url "https://example.org/personal-packages.git")
- (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
-@end lisp
-
-La commande @command{guix describe --format=channels} peut même générer
-cette liste de canaux directement (@pxref{Invoquer guix describe}).
-
-À ce moment les deux machines font tourner @emph{exactement le même Guix},
-avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
-build gimp} sur une machine sera exactement la même, au bit près, que la
-sortie de la même commande sur l'autre machine. Cela signifie aussi que les
-deux machines ont accès à tous les codes sources de Guix, et transitivement,
-à tous les codes sources de tous les paquets qu'il définit.
-
-Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
-provenance des artefacts binaires avec un grain très fin et de reproduire
-les environnements logiciels à volonté — une sorte de capacité de «
-méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
-manière d'utiliser ces super-pouvoirs.
-
-@node Inférieurs
-@section Inférieurs
-
-@c TODO: Remove this once we're more confident about API stability.
-@quotation Remarque
-La fonctionnalité décrite ici est un « démonstrateur technique » à la
-version @value{VERSION}. Ainsi, l'interface est sujette à changements.
-@end quotation
-
-@cindex inférieurs
-@cindex composition de révisions de Guix
-Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
-avec des paquets disponibles dans une révision différente de Guix. Les
-@dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
-composant différentes versions de Guix de manière arbitraire.
-
-@cindex paquets inférieurs
-Techniquement, un « inférieur » est surtout un processus Guix séparé
-connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
-inférieurs et de communiquer avec eux. Il fournit aussi une interface de
-haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
-inférieurs} — et les manipuler.
-
-Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
-fournissent une manière simple d'interagir avec un révision de Guix
-séparée. Par exemple, disons que vous souhaitiez installer dans votre
-profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
-révision de Guix — peut-être parce que la nouvelle version de
-@code{guile-json} a une API incompatible et que vous voulez lancer du code
-avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
-utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
-; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
-Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
-l'inférieur :
-
-@lisp
-(use-modules (guix inferior) (guix channels)
- (srfi srfi-1)) ;pour « first »
-
-(define channels
- ;; L'ancienne révision depuis laquelle on veut
- ;; extraire guile-json.
- (list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit
- "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
-
-(define inferior
- ;; Un inférieur représentant la révision ci-dessus.
- (inferior-for-channels channels))
-
-;; Maintenant on crée un manifeste avec le paquet « guile » actuel
-;; et l'ancien paquet « guile-json ».
-(packages->manifest
- (list (first (lookup-inferior-packages inferior "guile-json"))
- (specification->package "guile")))
-@end lisp
-
-Durant la première exécution, @command{guix package --manifest} pourrait
-avoir besoin de construire le canal que vous avez spécifié avant de créer
-l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
-révision de Guix sera déjà en cache.
-
-Le module @code{(guix inferior)} fournit les procédures suivantes pour
-ouvrir un inférieur :
-
-@deffn {Procédure Scheme} inferior-for-channels @var{channels} @
- [#:cache-directory] [#:ttl]
-Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
-le cache dans @var{cache-directory}, où les entrées peuvent être glanées
-après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
-démon de construction.
-
-Elle a pour effet de bord de construire ou de substituer des binaires pour
-@var{channels}, ce qui peut prendre du temps.
-@end deffn
-
-@deffn {Procédure Scheme} open-inferior @var{directory} @
- [#:command "bin/guix"]
-Ouvre le Guix inférieur dans @var{directory} et lance
-@code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
-si l'inférieur n'a pas pu être lancé.
-@end deffn
-
-@cindex paquets inférieurs
-Les procédures listées plus bas vous permettent d'obtenir et de manipuler
-des paquets inférieurs.
-
-@deffn {Procédure Scheme} inferior-packages @var{inferior}
-Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
-@end deffn
-
-@deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
- [@var{version}]
-Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
-dans @var{inferior}, avec le plus haut numéro de version en premier. Si
-@var{version} est vrai, renvoie seulement les paquets avec un numéro de
-version préfixé par @var{version}.
-@end deffn
-
-@deffn {Procédure Scheme} inferior-package? @var{obj}
-Renvoie vrai si @var{obj} est un paquet inférieur.
-@end deffn
-
-@deffn {Procédure Scheme} inferior-package-name @var{package}
-@deffnx {Procédure Scheme} inferior-package-version @var{package}
-@deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
-@deffnx {Procédure Scheme} inferior-package-description @var{package}
-@deffnx {Procédure Scheme} inferior-package-home-page @var{package}
-@deffnx {Procédure Scheme} inferior-package-location @var{package}
-@deffnx {Procédure Scheme} inferior-package-inputs @var{package}
-@deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
-@deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
-@deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
-@deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
-@deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
-@deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
-Ces procédures sont la contrepartie des accesseurs des enregistrements de
-paquets (@pxref{Référence des paquets}). La plupart fonctionne en effectuant
-des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
-doit toujours être disponible lorsque vous appelez ces procédures.
-@end deffn
-
-Les paquets inférieurs peuvent être utilisés de manière transparente comme
-tout autre paquet ou objet simili-fichier dans des G-expressions
-(@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
-la procédure @code{packages->manifest}, qui est typiquement utilisée dans
-des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
-de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
-à peu près n'importe où vous utiliseriez un paquet normal : dans des
-manifestes, dans le champ @code{packages} de votre déclaration
-@code{operating-system}, etc.
-
-@node Invoquer guix describe
-@section Invoquer @command{guix describe}
-
-@cindex reproductibilité
-@cindex répliquer Guix
-Souvent vous voudrez répondre à des questions comme « quelle révision de
-Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
-information utile dans de nombreuses situations : si vous voulez
-@emph{répliquer} un environnement sur une machine différente ou un compte
-utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
-changement dans les canaux que vous utilisez l'a causé ou si vous voulez
-enregistrer l'état de votre système pour le reproduire. La commande
-@command{guix describe} répond à ces questions.
-
-Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
-@command{guix pull}, @command{guix describe} affiche les canaux qui ont été
-construits, avec l'URL de leur dépôt et l'ID de leur commit
-(@pxref{Canaux}) :
-
-@example
-$ guix describe
-Generation 10 03 sep. 2018 17:32:44 (actuelle)
- guix e0fa68c
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : master
- commit : e0fa68c7718fffd33d81af415279d6ddb518f727
-@end example
-
-Si vous connaissez bien le système de contrôle de version Git, cela
-ressemble en essence à @command{git describe} ; la sortie est aussi
-similaire à celle de @command{guix pull --list-generations}, mais limitée à
-la génération actuelle (@pxref{Invoquer guix pull, l'option
-@option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
-réfère sans aucune ambiguïté à un instantané de Guix, cette information est
-tout ce dont vous avez besoin pour décrire la révision de Guix que vous
-utilisez et pour la répliquer.
-
-Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
-aussi renvoyer une liste de canaux plutôt que la description lisible par un
-humain au-dessus :
-
-@example
-$ guix describe -f channels
-(list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit
- "e0fa68c7718fffd33d81af415279d6ddb518f727")))
-@end example
-
-@noindent
-Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
-pull -C} sur une autre machine ou plus tard, ce qui instantiera
-@emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
-l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
-révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
-logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
-espérons que vous aimerez ça aussi !
-
-Voici les détails des options supportées par @command{guix describe} :
-
-@table @code
-@item --format=@var{format}
-@itemx -f @var{format}
-Produire la sortie dans le @var{format} donné, parmi :
-
-@table @code
-@item human
-produire une sortie lisible par un humain,
-@item canaux
-produire une liste de spécifications de canaux qui peut être passée à
-@command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
-(@pxref{Invoquer guix pull}),
-@item json
-@cindex JSON
-produire une liste de spécifications de canaux dans le format JSON,
-@item recutils
-produire une liste de spécifications de canaux dans le format Recutils.
-@end table
-
-@item --profile=@var{profil}
-@itemx -p @var{profil}
-Afficher les informations sur le @var{profil}.
-@end table
-
-@node Invoquer guix archive
-@section Invoquer @command{guix archive}
-
-@cindex @command{guix archive}
-@cindex archive
-La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
-des fichiers du dépôt dans une simple archive puis ensuite de les
-@dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
-permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
-autre machine.
-
-@quotation Remarque
-Si vous chercher une manière de produire des archives dans un format adapté
-pour des outils autres que Guix, @pxref{Invoquer guix pack}.
-@end quotation
-
-@cindex exporter des éléments du dépôt
-Pour exporter des fichiers du dépôt comme une archive sur la sortie
-standard, lancez :
-
-@example
-guix archive --export @var{options} @var{spécifications}...
-@end example
-
-@var{spécifications} peut être soit des noms de fichiers soit des
-spécifications de paquets, comme pour @command{guix package}
-(@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
-archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
-principale de @code{emacs} :
-
-@example
-guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
-@end example
-
-Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
-les construit automatiquement. Le processus de construction peut être
-contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
-
-Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
-pourrait lancer :
-
-@example
-guix archive --export -r emacs | ssh la-machine guix archive --import
-@end example
-
-@noindent
-De même, on peut transférer un profil utilisateur complet d'une machine à
-une autre comme cela :
-
-@example
-guix archive --export -r $(readlink -f ~/.guix-profile) | \
- ssh la-machine guix-archive --import
-@end example
-
-@noindent
-Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
-profil ainsi que toutes leurs dépendances sont transférées (à cause de
-@code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
-de la machine cible. L'option @code{--missing} peut vous aider à comprendre
-les éléments qui manquent dans le dépôt de la machine cible. La commande
-@command{guix copy} simplifie et optimise ce processus, c'est donc ce que
-vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
-
-@cindex nar, format d'archive
-@cindex archive normalisée (nar)
-Les archives sont stockées au format « archive normalisé » ou « nar », qui
-est comparable dans l'esprit à « tar » mais avec des différences qui le
-rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
-stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
-mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
-les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
-Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
-toujours l'ordre des noms de fichier dans l'environnement linguistique C.
-Cela rend la production des archives entièrement déterministe.
-
-@c FIXME: Add xref to daemon doc about signatures.
-Lors de l'export, le démon signe numériquement le contenu de l'archive et
-cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
-vérifie la signature et rejette l'import en cas de signature invalide ou si
-la clef de signature n'est pas autorisée.
-
-Les principales options sont :
-
-@table @code
-@item --export
-Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
-l'archive résultante sur la sortie standard.
-
-Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
-@code{--recursive} ne soit passé.
-
-@item -r
-@itemx --recursive
-En combinaison avec @code{--export}, cette option demande à @command{guix
-archive} d'inclure les dépendances des éléments donnés dans l'archive.
-Ainsi, l'archive résultante est autonome : elle contient la closure des
-éléments du dépôt exportés.
-
-@item --import
-Lire une archive depuis l'entrée standard et importer les fichiers inclus
-dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
-signée par une clef publique qui ne se trouve pas dans le clefs autorisées
-(voir @code{--authorize} plus bas.)
-
-@item --missing
-Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
-ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
-manquent dans le dépôt.
-
-@item --generate-key[=@var{paramètres}]
-@cindex signature, archives
-Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
-avant que les archives ne puissent être exportées avec @code{--export}.
-Remarquez que cette opération prend généralement du temps parce qu'elle doit
-récupère suffisamment d'entropie pour générer la paire de clefs.
-
-La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
-dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
-privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
-clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
-libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
-@var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
-libgcrypt (@pxref{General public-key related Functions,
-@code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
-
-@item --authorize
-@cindex autorisation, archives
-Autoriser les imports signés par la clef publique passée sur l'entrée
-standard. La clef publique doit être au « format avancé s-expression » —
-c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
-
-La liste des clefs autorisées est gardée dans un fichier modifiable par des
-humains dans @file{/etc/guix/acl}. Le fichier contient des
-@url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
-avancé »} et est structuré comme une liste de contrôle d'accès dans
-l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
-simple (SPKI)}.
-
-@item --extract=@var{répertoire}
-@itemx -x @var{répertoire}
-Lit une archive à un seul élément telle que servie par un serveur de
-substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
-une opération de bas niveau requise seulement dans de rares cas d'usage ;
-voir plus loin.
-
-Par exemple, la commande suivante extrait le substitut pour Emacs servi par
-@code{@value{SUBSTITUTE-SERVER}} dans @file{/tmp/emacs} :
-
-@example
-$ wget -O - \
- https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
- | bunzip2 | guix archive -x /tmp/emacs
-@end example
-
-Les archives à un seul élément sont différentes des archives à plusieurs
-éléments produites par @command{guix archive --export} ; elles contiennent
-un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
-Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
-devrait être considérée comme non sûre.
-
-Le but principal de cette opération est de faciliter l'inspection du contenu
-des archives venant de serveurs auxquels on ne fait potentiellement pas
-confiance.
-
-@end table
-
-
-@c *********************************************************************
-@node Développement
-@chapter Développement
-
-@cindex développement logiciel
-Si vous êtes développeur de logiciels, Guix fournit des outils que vous
-devriez trouver utiles — indépendamment du langage dans lequel vous
-développez. C'est ce dont parle ce chapitre.
-
-La commande @command{guix environment} permet de créer des
-@dfn{environnements de développement} confortables contenant toutes les
-dépendances et les outils nécessaires pour travailler sur le paquet logiciel
-de votre choix. La commande @command{guix pack} vous permet de créer des
-@dfn{lots applicatifs} qui peuvent facilement être distribués à des
-utilisateurs qui n'utilisent pas Guix.
-
-@menu
-* Invoquer guix environment:: Mettre en place des environnements de
- développement.
-* Invoquer guix pack:: Créer des lots de logiciels.
-@end menu
-
-@node Invoquer guix environment
-@section Invoquer @command{guix environment}
-
-@cindex environnements de construction reproductibles
-@cindex environnement de développement
-@cindex @command{guix environment}
-@cindex environnement de construction de paquets
-Le but de @command{guix environment} est d'assister les hackers dans la
-création d'environnements de développement reproductibles sans polluer leur
-profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
-paquets, construit leurs entrées et crée un environnement shell pour pouvoir
-les utiliser.
-
-La syntaxe générale est :
-
-@example
-guix environment @var{options} @var{paquet}@dots{}
-@end example
-
-L'exemple suivant crée un nouveau shell préparé pour le développement de
-GNU@tie{}Guile :
-
-@example
-guix environment guile
-@end example
-
-Si les dépendances requises ne sont pas déjà construites, @command{guix
-environment} les construit automatiquement. L'environnement du nouveau
-shell est une version améliorée de l'environnement dans lequel @command{guix
-environment} a été lancé. Il contient les chemins de recherche nécessaires
-à la construction du paquet donné en plus des variables d'environnement
-existantes. Pour créer un environnement « pur », dans lequel les variables
-d'environnement de départ ont été nettoyées, utilisez l'option
-@code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
-supplémentaires dans les variables comme @code{PATH} dans leur
-@file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
-Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
-variables d'environnement. C'est une erreur de définir ces variables
-d'environnement dans @file{.bashrc} ; à la place, elles devraient être
-définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
-de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
-Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
-
-@vindex GUIX_ENVIRONMENT
-@command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
-le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
-environnement. Cela permet aux utilisateur, disons, de définir un prompt
-spécifique pour les environnement de développement dans leur @file{.bashrc}
-(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
-
-@example
-if [ -n "$GUIX_ENVIRONMENT" ]
-then
- export PS1="\u@@\h \w [dev]\$ "
-fi
-@end example
-
-@noindent
-…@: ou de naviguer dans le profil :
-
-@example
-$ ls "$GUIX_ENVIRONMENT/bin"
-@end example
-
-En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
-des paquets données est utilisée. Par exemple, la commande ci-dessous crée
-un shell où toutes les dépendances de Guile et Emacs sont disponibles :
-
-@example
-guix environment guile emacs
-@end example
-
-Parfois, une session shell interactive est inutile. On peut invoquer une
-commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
-du reste des arguments :
-
-@example
-guix environment guile -- make -j4
-@end example
-
-Dans d'autres situations, il est plus pratique de spécifier la liste des
-paquets requis dans l'environnement. Par exemple, la commande suivante
-lance @command{python} dans un environnement contenant Python@tie{}2.7 et
-NumPy :
-
-@example
-guix environment --ad-hoc python2-numpy python-2.7 -- python
-@end example
-
-En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
-supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
-construction, mais qui sont utiles au développement tout de même. À cause
-de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
-apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
-les dépendances seront ajoutées à l'environnement. Les paquets qui
-apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
-ajouter à l'environnement directement. Par exemple, la commande suivante
-crée un environnement de développement pour Guix avec les paquets Git et
-strace en plus :
-
-@example
-guix environment guix --ad-hoc git strace
-@end example
-
-Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
-une pureté et une reproductibilité maximale. En particulier, lorsque vous
-utilisez Guix sur une distribution hôte qui n'est pas le système Guix, il
-est souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
-système depuis les environnements de développement. Par exemple, la
-commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
-et le répertoire de travail actuel sont montés :
-
-@example
-guix environment --ad-hoc --container guile -- guile
-@end example
-
-@quotation Remarque
-L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
-@end quotation
-
-Les options disponibles sont résumées ci-dessous.
-
-@table @code
-@item --root=@var{fichier}
-@itemx -r @var{fichier}
-@cindex environnement persistent
-@cindex racine du ramasse-miettes, pour les environnements
-Fait de @var{fichier} un lien symbolique vers le profil de cet
-environnement, et l'enregistre comme une racine du ramasse-miettes.
-
-C'est utile si vous souhaitez protéger votre environnement du
-ramasse-miettes, pour le rendre « persistent ».
-
-Lorsque cette option est omise, l'environnement n'est protégé du
-ramasse-miettes que le temps de la session @command{guix environment}. Cela
-signifie que la prochaine fois que vous créerez le même environnement, vous
-pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
-
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Crée un environnement pour le paquet ou la liste de paquets en lesquels
-s'évalue @var{expr}.
-
-Par exemple, lancer :
-
-@example
-guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
-@end example
-
-démarre un shell avec l'environnement pour cette variante spécifique du
-paquet PETSc.
-
-Lancer :
-
-@example
-guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
-@end example
-
-démarre un shell où tous les paquets de base du système sont disponibles.
-
-Les commande au-dessus n'utilisent que les sorties par défaut des paquets
-donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
-
-@example
-guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
-@end example
-
-@item --load=@var{fichier}
-@itemx -l @var{fichier}
-Crée un environnement pour le paquet ou la liste de paquets en lesquels
-@var{fichier} s'évalue.
-
-Par exemple, @var{fichier} peut contenir une définition comme celle-ci
-(@pxref{Définition des paquets}) :
-
-@example
-@verbatiminclude environment-gdb.scm
-@end example
-
-@item --manifest=@var{fichier}
-@itemx -m @var{fichier}
-Crée un environnement pour les paquets contenus dans l'objet manifeste
-renvoyé par le code Scheme dans @var{fichier}.
-
-C'est similaire à l'option de même nom de @command{guix package}
-(@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
-manifestes.
-
-@item --ad-hoc
-Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
-si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
-Cette option est utile pour créer un environnement rapidement sans avoir à
-écrire une expression de paquet contenant les entrées désirées.
-
-Par exemple la commande :
-
-@example
-guix environment --ad-hoc guile guile-sdl -- guile
-@end example
-
-lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
-disponibles.
-
-Remarquez que cet exemple demande implicitement la sortie par défaut de
-@code{guile} et @code{guile-sdl}, mais il est possible de demander une
-sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
-de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
-
-Cette option peut être composée avec le comportement par défaut de
-@command{guix environment}. Les paquets qui apparaissent avant
-@code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
-seront ajoutées à l'environnement, le comportement par défaut. Les paquets
-qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
-ajouter à l'environnement directement.
-
-@item --pure
-Nettoie les variables d'environnement existantes lors de la construction du
-nouvel environnement, sauf celles spécifiées par @option{--preserve} (voir
-ci-dessous). Cela a pour effet de créer un environnement dans lequel les
-chemins de recherche ne contiennent que des entrées de paquets.
-
-@item --preserve=@var{regexp}
-@itemx -E @var{regexp}
-Lorsque vous utilisez @option{--pure}, préserver les variables
-d'environnement qui correspondent à @var{regexp} — en d'autres termes, cela
-les met en « liste blanche » de variables d'environnement qui doivent être
-préservées. Cette option peut être répétée plusieurs fois.
-
-@example
-guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
- -- mpirun @dots{}
-@end example
-
-Cet exemple exécute @command{mpirun} dans un contexte où les seules
-variables d'environnement défines sont @code{PATH}, les variables
-d'environnement dont le nom commence par @code{SLURM}, ainsi que les
-variables « importante » habituelles (@code{HOME}, @code{USER}, etc).
-
-@item --search-paths
-Affiche les définitions des variables d'environnement qui composent
-l'environnement.
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
-
-@item --container
-@itemx -C
-@cindex conteneur
-Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
-actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
-de le changer avec @code{--user}, un répertoire personnel fictif est créé
-pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwd} est
-configuré en conséquence.
-
-Le processus est lancé en tant que l'utilisateur actuel en dehors du
-conteneur. Dans le conteneur, il a le même UID et GID que l'utilisateur
-actuel, à moins que vous ne passiez @option{--user} (voir ci-dessous).
-
-@item --network
-@itemx -N
-Pour les conteneurs, partage l'espace de nom du réseau avec le système
-hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
-de boucle locale.
-
-@item --link-profile
-@itemx -P
-Pour les conteneurs, lie le profil de l'environnement à
-@file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
-commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
-conteneur. La liaison échouera et annulera l'environnement si le répertoire
-existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
-invoqué dans le répertoire personnel de l'utilisateur.
-
-Certains paquets sont configurés pour chercher des fichiers de configuration
-et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
-@code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
-des polices supplémentaires.} ; @code{--link-profile} permet à ces
-programmes de se comporter comme attendu dans l'environnement.
-
-@item --user=@var{utilisateur}
-@itemx -u @var{utilisateur}
-Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
-place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwd}
-dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
-personnel sera @file{/home/@var{utilisateur}} ; et aucune donnée GECOS ne
-sera copiée. En plus, l'UID et le GID dans le conteneur seront 1000.
-@var{user} n'a pas besoin d'exister sur le système.
-
-En plus, tous les chemins partagés ou exposés (voir @code{--share} et
-@code{--expose} respectivement) dont la cible est dans le répertoire
-personnel de l'utilisateur seront remontés relativement à
-@file{/home/UTILISATEUR} ; cela comprend le montage automatique du
-répertoire de travail actuel.
-
-@example
-# exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
-cd $HOME/wd
-guix environment --container --user=foo \
- --expose=$HOME/test \
- --expose=/tmp/target=$HOME/target
-@end example
-
-Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
-chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
-qu'un composant utile pour une solution d'anonymisation ou de préservation
-de la vie privée — pas une solution en elle-même.
-
-@item --expose=@var{source}[=@var{cible}]
-Pour les conteneurs, expose le système de fichiers @var{source} du système
-hôte comme un système de fichiers en lecture seule @var{cible} dans le
-conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
-comme point de montage dans le conteneur.
-
-L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
-répertoire personnel de l'utilisateur est accessible en lecture-seule via le
-répertoire @file{/exchange} :
-
-@example
-guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
-@end example
-
-@item --share=@var{source}[=@var{cible}]
-Pour les conteneurs, partage le système de fichiers @var{source} du système
-hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
-conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
-comme point de montage dans le conteneur.
-
-L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
-répertoire personnel de l'utilisateur est accessible en lecture-écriture via
-le répertoire @file{/exchange} :
-
-@example
-guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
-@end example
-@end table
-
-En plus, @command{guix environment} prend en charge toutes les options de
-construction communes prises en charge par @command{guix build}
-(@pxref{Options de construction communes}) et toutes les options de transformation de
-paquets (@pxref{Options de transformation de paquets}).
-
-@node Invoquer guix pack
-@section Invoquer @command{guix pack}
-
-Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
-la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
-package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
-C'est là que @command{guix pack} entre en jeu.
-
-@quotation Remarque
-Si vous cherchez comment échanger des binaires entre des machines où Guix
-est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
-et @ref{Invoquer guix archive}.
-@end quotation
-
-@cindex pack
-@cindex lot
-@cindex lot d'applications
-@cindex lot de logiciels
-La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
-: elle crée une archive tar ou un autre type d'archive contenant les
-binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
-L'archive qui en résulte peut être utilisée sur toutes les machines qui
-n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
-ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
-reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
-contient bien les résultats que vous prétendez proposer.
-
-Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
-leurs dépendances, vous pouvez lancer :
-
-@example
-$ guix pack guile emacs geiser
-@dots{}
-/gnu/store/@dots{}-pack.tar.gz
-@end example
-
-Le résultat ici est une archive tar contenant un répertoire
-@file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
-résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
-; le profil est le même qui celui qui aurait été créé avec @command{guix
-package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
-binaires indépendantes de Guix (@pxref{Installation binaire}).
-
-Les utilisateurs de ce pack devraient lancer
-@file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
-pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
-symbolique @file{/opt/gnu/bin} vers le profil :
-
-@example
-guix pack -S /opt/gnu/bin=bin guile emacs geiser
-@end example
-
-@noindent
-De cette façon, les utilisateurs peuvent joyeusement taper
-@file{/opt/gnu/bin/guile} et profiter.
-
-@cindex binaires repositionnables, avec @command{guix pack}
-Et si le destinataire de votre pack n'a pas les privilèges root sur sa
-machine, et ne peut donc pas le décompresser dans le système de fichiers
-racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
-(voir plus bas). Cette option produite des @dfn{binaire repositionnables},
-ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
-du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
-décompresser votre archive dans leur répertoire personnel et lancer
-directement @file{./opt/gnu/bin/guile}.
-
-@cindex Docker, construire une image avec guix pack
-Autrement, vous pouvez produire un pack au format d'image Docker avec la
-commande suivante :
-
-@example
-guix pack -f docker guile emacs geiser
-@end example
-
-@noindent
-Le résultat est une archive tar qui peut être passée à la commande
-@command{docker load}. Voir la
-@uref{https://docs.docker.com/engine/reference/commandline/load/,
-documentation de Docker} pour plus d'informations.
-
-@cindex Singularity, construire une image avec guix pack
-@cindex SquashFS, construire une image avec guix pack
-Autrement, vous pouvez produire une image SquashFS avec la commande suivante
-:
-
-@example
-guix pack -f squashfs guile emacs geiser
-@end example
-
-@noindent
-Le résultat est une image de système de fichiers SquashFS qui peut soit être
-montée directement soit être utilisée comme image de conteneur de système de
-fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
-conteneurisé Singularity}, avec des commandes comme @command{singularity
-shell} ou @command{singularity exec}.
-
-Diverses options en ligne de commande vous permettent de personnaliser votre
-pack :
-
-@table @code
-@item --format=@var{format}
-@itemx -f @var{format}
-Produire un pack dans le @var{format} donné.
-
-Les formats disponibles sont :
-
-@table @code
-@item tarball
-C'est le format par défaut. Il produit une archive tar contenant tous les
-binaires et les liens symboliques spécifiés.
-
-@item docker
-Cela produit une archive tar qui suit la
-@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
-spécification des images Docker}.
-
-@item squashfs
-Cela produit une image SquashFS contenant tous les binaires et liens
-symboliques spécifiés, ainsi que des points de montages vides pour les
-systèmes de fichiers virtuels comme procfs.
-@end table
-
-@cindex binaires repositionnables
-@item --relocatable
-@itemx -R
-Produire des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
-vous pouvez placer n'importe où dans l'arborescence du système de fichiers
-et les lancer à partir de là.
-
-Lorsque vous passez cette option une fois, les binaires qui en résultent
-demandent le support des @dfn{espaces de nom utilisateurs} dans le noyau
-Linux ; lorsque vous la passez @emph{deux} fois@footnote{Il y a une astuce
-pour s'en rappeler : on peut envisager @code{RR}, qui ajoute le support
-PRoot, comme étant l'abréviation de « Réellement Repositionnable ». Pas
-mal, hein ?}, les binaires repositionnables utilisent PRoot si les espaces
-de noms ne sont pas utilisables, et ça fonctionne partout — voir plus bas
-pour comprendre les implications.
-
-Par exemple, si vous créez un pack contenant Bash avec :
-
-@example
-guix pack -RR -S /mybin=bin bash
-@end example
-
-@noindent
-…@: vous pouvez copier ce pack sur une machine qui n'a pas Guix et depuis
-votre répertoire personnel en tant qu'utilisateur non-privilégié, lancer :
-
-@example
-tar xf pack.tar.gz
-./mybin/sh
-@end example
-
-@noindent
-Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
-@file{/gnu/store} apparaît et contient toutes les dépendances de
-@code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
-C'est sans doute la manière la plus simple de déployer du logiciel construit
-avec Guix sur une machine sans Guix.
-
-@quotation Remarque
-Par défaut ,les binaires repositionnables s'appuient sur les @dfn{espaces de
-noms utilisateurs} du noyau Linux, qui permet à des utilisateurs
-non-privilégiés d'effectuer des montages et de changer de racine. Les
-anciennes versions de Linux ne le supportait pas et certaines distributions
-GNU/Linux le désactive.
-
-Pour produire des binaires repositionnables qui fonctionnent même sans
-espace de nom utilisateur, passez @option{--relocatable} ou @option{-R}
-@emph{deux fois}. Dans ce cas, les binaires testeront la prise en charge
-des espaces de noms utilisateurs et utiliseront PRoot s'ils ne sont pas pris
-en charge.
-
-Le programme @uref{https://proot-me.github.io/, PRoot} fournit la prise en
-charge nécessaire pour la virtualisation du système de fichier. Il y arrive
-en utilisant l'appel système @code{ptrace} sur le programme. Cette approche
-a l'avantage de fonctionner sans demander de support spécial de la part du
-noyau, mais occasionne un coût supplémentaire en temps pour chaque appel
-système effectué.
-@end quotation
-
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Considérer le paquet évalué par @var{expr}.
-
-Cela a le même but que l'option de même nom de @command{guix build}
-(@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
-build}}).
-
-@item --manifest=@var{fichier}
-@itemx -m @var{fichier}
-Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
-Scheme dans @var{fichier}
-
-Elle a un but similaire à l'option de même nom dans @command{guix package}
-(@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
-fichiers manifeste. Ils vous permettent de définir une collection de
-paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
-créer des archives pour des machines qui n'ont pas Guix d'installé.
-Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
-@emph{soit} une liste de paquet, mais pas les deux.
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
-plutôt que pour le type de système de l'hôte de construction.
-
-@item --target=@var{triplet}
-@cindex compilation croisée
-Effectuer une compilation croisée pour @var{triplet} qui doit être un
-triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
-target triplets, GNU configuration triplets,, autoconf, Autoconf}).
-
-@item --compression=@var{outil}
-@itemx -C @var{outil}
-Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
-@code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
-
-@item --symlink=@var{spec}
-@itemx -S @var{spec}
-Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
-option peut apparaître plusieurs fois.
-
-@var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
-le lien symbolique qui sera créé et @var{cible} est la cible du lien.
-
-Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
-@file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
-
-@item --save-provenance
-Sauvegarder les informations de provenance des paquets passés sur la ligne
-de commande. Les informations de provenance contiennent l'URL et le commit
-des canaux utilisés (@pxref{Canaux}).
-
-Les informations de provenance sont sauvegardées dans le fichier
-@file{/gnu/store/@dots{}-profile/manifest} du pack, avec les métadonnées de
-paquets habituelles — le nom et la version de chaque paquet, leurs entrées
-propagées, etc. Ce sont des informations utiles pour le destinataire du
-pack, qui sait alors comment le pack a (normalement) été obtenu.
-
-Cette option n'est pas activée par défaut car, comme l'horodatage, les
-informations de provenance ne contribuent en rien au processus de
-construction. En d'autres termes, il y a une infinité d'URL et d'ID de
-commit qui permettent d'obtenir le même pack. Enregistrer de telles
-métadonnées « silencieuses » dans la sortie casse donc éventuellement la
-propriété de reproductibilité au bit près.
-
-@item --localstatedir
-@itemx --profile-name=@var{nom}
-Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
-résulte, et notamment le profil
-@file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
-@code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
-
-@file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
-ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
-fournir dans le pack signifie que le dépôt et « complet » et gérable par
-Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
-aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
-
-Un cas d'utilisation est l'archive binaire indépendante de Guix
-(@pxref{Installation binaire}).
-
-@item --bootstrap
-Utiliser les programmes d'amorçage pour construire le pack. Cette option
-n'est utile que pour les développeurs de Guix.
-@end table
-
-En plus, @command{guix pack} supporte toutes les options de construction
-communes (@pxref{Options de construction communes}) et toutes les options de
-transformation de paquets (@pxref{Options de transformation de paquets}).
-
-
-@c *********************************************************************
-@node Interface de programmation
-@chapter Interface de programmation
-
-GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
-définir, construire et faire des requêtes sur des paquets. La première
-interface permet aux utilisateurs d'écrire des définitions de paquets de
-haut-niveau. Ces définitions se réfèrent à des concepts de création de
-paquets familiers, comme le nom et la version du paquet, son système de
-construction et ses dépendances. Ces définitions peuvent ensuite être
-transformées en actions concrètes lors de la construction.
-
-Les actions de construction sont effectuées par le démon Guix, pour le
-compte des utilisateurs. Dans un environnement standard, le démon possède
-les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
-pas les utilisateurs. La configuration recommandée permet aussi au démon
-d'effectuer la construction dans des chroots, avec un utilisateur de
-construction spécifique pour minimiser les interférences avec le reste du
-système.
-
-@cindex dérivation
-Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
-Pour demander au démon d'effectuer une action de construction, les
-utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
-une représentation à bas-niveau des actions de construction à entreprendre
-et l'environnement dans lequel elles devraient avoir lieu — les dérivations
-sont aux définitions de paquets ce que l'assembleur est aux programmes C.
-Le terme de « dérivation » vient du fait que les résultats de la
-construction en @emph{dérivent}.
-
-Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
-paquets à haut-niveau.
-
-@menu
-* Modules de paquets:: Les paquets du point de vu du programmeur.
-* Définition des paquets:: Définir de nouveaux paquets.
-* Systèmes de construction:: Spécifier comment construire les paquets.
-* Le dépôt:: Manipuler le dépôt de paquets.
-* Dérivations:: Interface de bas-niveau avec les dérivations
- de paquets.
-* La monade du dépôt:: Interface purement fonctionnelle avec le
- dépôt.
-* G-Expressions:: Manipuler les expressions de construction.
-* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
-@end menu
-
-@node Modules de paquets
-@section Modules de paquets
-
-D'un point de vue programmatique, les définitions de paquets de la
-distribution GNU sont fournies par des modules Guile dans l'espace de noms
-@code{(gnu packages @dots{})}@footnote{Remarquez que les paquets sous
-l'espace de nom @code{(gnu packages @dots{})} ne sont pas nécessairement des
-« paquets GNU ». Le nom de ce module suit la convention de nommage usuelle
-de Guile : @code{gnu} signifie que ces modules sont distribués dans le
-système GNU, et @code{packages} identifie les modules qui définissent les
-paquets.} (@pxref{Modules, Guile modules,, guile, GNU Guile Reference
-Manual}). Par exemple, le module @code{(gnu packages emacs)} exporte une
-variable nommée @code{emacs}, qui est liée à un objet @code{<package>}
-(@pxref{Définition des paquets}).
-
-L'espace de nom @code{(gnu packages @dots{})} est automatiquement scanné par
-les outils en ligne de commande. Par exemple, lorsque vous lancez
-@code{guix package -i emacs}, tous les modules @code{(gnu packages @dots{})}
-sont scannés jusqu'à en trouver un qui exporte un objet de paquet dont le
-nom est @code{emacs}. Cette capacité à chercher des paquets est implémentée
-dans le module @code{(gnu packages)}.
-
-@cindex personnalisation, des paquets
-@cindex chemin de recherche des modules de paquets
-Les utilisateurs peuvent stocker des définitions dans des modules avec des
-noms différents — p.@: ex.@: @code{(my-packages emacs)}@footnote{Remarquez
-que le nom de fichier et de module doivent être identiques. Par exemple, le
-module @code{(my-packages emacs)} doit être stocké dans un fichier
-@file{my-packages/emacs.scm} relativement au chemin de chargement spécifié
-avec @option{--load-path} ou @code{GUIX_PACKAGE_PATH}. @xref{Modules and
-the File System,,, guile, GNU Guile Reference Manual} pour plus de
-détails}. Il y a deux manières de rendre ces définitions visibles aux
-interfaces utilisateurs :
-
-@enumerate
-@item
-En ajoutant le répertoire contenant vos modules de paquets au chemin de
-recherche avec le drapeau @code{-L} de @command{guix package} et des autres
-commandes (@pxref{Options de construction communes}) ou en indiquant la variable
-d'environnement @code{GUIX_PACKAGE_PATH} décrite plus bas.
-
-@item
-En définissant un @dfn{canal} et en configurant @command{guix pull} pour
-qu'il l'utilise. Un canal est essentiellement un dépôt Git contenant des
-modules de paquets. @xref{Canaux}, pour plus d'informations sur comment
-définir et utiliser des canaux.
-@end enumerate
-
-@code{GUIX_PACKAGE_PATH} fonctionne comme les autres variables de chemins de
-recherche :
-
-@defvr {Variable d'environnement} GUIX_PACKAGE_PATH
-C'est une liste séparée par des deux-points de répertoires dans lesquels
-trouver des modules de paquets supplémentaires. Les répertoires listés dans
-cette variable sont prioritaires par rapport aux paquets de la distribution.
-@end defvr
-
-La distribution est entièrement @dfn{bootstrappée} et @dfn{auto-contenue} :
-chaque paquet est construit uniquement à partir d'autres paquets de la
-distribution. La racine de ce graphe de dépendance est un petit ensemble de
-@dfn{binaires de bootstrap} fournis par le module @code{(gnu packages
-bootstrap)}. Pour plus d'informations sur le bootstrap,
-@pxref{Bootstrapping}.
-
-@node Définition des paquets
-@section Définition des paquets
-
-L'interface de haut-niveau pour les définitions de paquets est implémentée
-dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
-exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
-ressemble à cela :
-
-@example
-(define-module (gnu packages hello)
- #:use-module (guix packages)
- #:use-module (guix download)
- #:use-module (guix build-system gnu)
- #:use-module (guix licenses)
- #:use-module (gnu packages gawk))
-
-(define-public hello
- (package
- (name "hello")
- (version "2.10")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/hello/hello-" version
- ".tar.gz"))
- (sha256
- (base32
- "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
- (build-system gnu-build-system)
- (arguments '(#:configure-flags '("--enable-silent-rules")))
- (inputs `(("gawk" ,gawk)))
- (synopsis "Hello, GNU world: An example GNU package")
- (description "Guess what GNU Hello prints!")
- (home-page "http://www.gnu.org/software/hello/")
- (license gpl3+)))
-@end example
-
-@noindent
-Sans être un expert Scheme, le lecteur peut comprendre la signification des
-différents champs présents. Cette expression lie la variable @code{hello} à
-un objet @code{<package>}, qui est essentiellement un enregistrement
-(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
-peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
-le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
-renvoie — oh surprise ! — @code{"hello"}.
-
-Avec un peu de chance, vous pourrez importer tout ou partie de la définition
-du paquet qui vous intéresse depuis un autre répertoire avec la commande
-@code{guix import} (@pxref{Invoquer guix import}).
-
-Dans l'exemple précédent, @var{hello} est défini dans un module à part,
-@code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
-nécessaire, mais c'est pratique : tous les paquets définis dans des modules
-sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
-ligne de commande (@pxref{Modules de paquets}).
-
-Il y a quelques points à remarquer dans la définition de paquet précédente :
-
-@itemize
-@item
-Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence des origines}, pour la référence complète). Ici, on utilise la méthode
-@code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
-est un fichier à télécharger par FTP ou HTTP.
-
-Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
-des miroirs GNU définis dans @code{(guix download)}.
-
-Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
-téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
-fichier. La forme @code{(base32 @dots{})} introduit a représentation en
-base32 du hash. Vous pouvez obtenir cette information avec @code{guix
-download} (@pxref{Invoquer guix download}) et @code{guix hash}
-(@pxref{Invoquer guix hash}).
-
-@cindex correctifs
-Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
-@code{patches} qui liste les correctifs à appliquer et un champ
-@code{snippet} qui donne une expression Scheme pour modifier le code source.
-
-@item
-@cindex Système de construction GNU
-Le champ @code{build-system} spécifie la procédure pour construire le paquet
-(@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
-de construction GNU familier, où les paquets peuvent être configurés,
-construits et installés avec la séquence @code{./configure && make && make
-check && make install} habituelle.
-
-@item
-Le champ @code{arguments} spécifie des options pour le système de
-construction (@pxref{Systèmes de construction}). Ici il est interprété par
-@var{gnu-build-system} comme une demande de lancer @file{configure} avec le
-drapeau @code{--enable-silent-rules}.
-
-@cindex quote
-@cindex quoting
-@findex '
-@findex quote
-Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
-introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
-@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
-des détails. Ice la valeur du champ @code{arguments} est une liste
-d'arguments passés au système de construction plus tard, comme avec
-@code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
-Reference Manual}).
-
-La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
-(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
-@code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
-système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
-Reference Manual}).
-
-@item
-Le champ @code{inputs} spécifie les entrées du processus de construction —
-c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
-on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
-@var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
-
-@cindex accent grave (quasiquote)
-@findex `
-@findex quasiquote
-@cindex virgule (unquote)
-@findex ,
-@findex unquote
-@findex ,@@
-@findex unquote-splicing
-De nouveau, @code{`} (un accent grave, synonyme de la fonction
-@code{quasiquote}) nous permet d'introduire une liste littérale dans le
-champ @code{inputs}, tandis que @code{,} (une virgule, synonyme de la
-fonction @code{unquote}) nous permet d'insérer une valeur dans cette liste
-(@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
-
-Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
-besoin d'être spécifiés en tant qu'entrées ici. À la place, le
-@var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
-(@pxref{Systèmes de construction}).
-
-Cependant, toutes les autres dépendances doivent être spécifiées dans le
-champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
-simplement indisponible pour le processus de construction, ce qui peut mener
-à un échec de la construction.
-@end itemize
-
-@xref{Référence des paquets}, pour une description complète des champs
-possibles.
-
-Lorsqu'une définition de paquet est en place, le paquet peut enfin être
-construit avec l'outil en ligne de commande @code{guix build}
-(@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
-vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
-aisément revenir à la définition du paquet avec la commande @command{guix
-edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
-d'informations sur la manière de tester des définitions de paquets et
-@ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
-que la définition respecte les conventions de style.
-@vindex GUIX_PACKAGE_PATH
-Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
-distribution en ajoutant vos propres définitions de paquets dans un « canal
-».
-
-Finalement, la mise à jour de la définition du paquet à une nouvelle version
-amont peut en partie s'automatiser avec la commande @command{guix refresh}
-(@pxref{Invoquer guix refresh}).
-
-Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
-d'abord calculé par la procédure @code{package-derivation}. Cette
-dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
-Les actions de construction qu'il prescrit peuvent ensuite être réalisées
-par la procédure @code{build-derivation} (@pxref{Le dépôt}).
-
-@deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
-Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
-(@pxref{Dérivations}).
-
-@var{paquet} doit être un objet @code{<package>} valide et @var{système} une
-chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
-pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
-connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
-@end deffn
-
-@noindent
-@cindex compilation croisée
-De manière identique, il est possible de calculer une dérivation qui
-effectue une compilation croisée d'un paquet pour un autre système :
-
-@deffn {Procédure Scheme} package-cross-derivation @var{store} @
- @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
-du @var{paquet} construit depuis @var{système} pour @var{cible}.
-
-@var{cible} doit être un triplet GNU valide indiquant le matériel cible et
-le système d'exploitation, comme @code{"mips64el-linux-gnu"}
-(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
-Configure and Build System}).
-@end deffn
-
-@cindex transformations de paquets
-@cindex réécriture d'entrées
-@cindex réécriture de l'arbre des dépendances
-On peut manipuler les paquets de manière arbitraire. Une transformation
-utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
-dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
-d'autres :
-
-@deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
- [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
-paquet, remplace des dépendances directes et indirectes (mais pas ses
-entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
-est une liste de paires de paquets ; le premier élément de chaque pair est
-le paquet à remplacer, le second son remplaçant.
-
-De manière facultative, @var{nom-réécrit} est une procédure à un argument
-qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
-réécrit.
-@end deffn
-
-@noindent
-Regardez cet exemple :
-
-@example
-(define libressl-instead-of-openssl
- ;; Cette procédure remplace OPENSSL par LIBRESSL,
- ;; récursivement.
- (package-input-rewriting `((,openssl . ,libressl))))
-
-(define git-with-libressl
- (libressl-instead-of-openssl git))
-@end example
-
-@noindent
-Ici nous définissons d'abord une procédure de réécriture qui remplace
-@var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
-@dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
-@var{openssl}. cela est exactement ce que l'option en ligne de commande
-@option{--with-input} fait (@pxref{Options de transformation de paquets,
-@option{--with-input}}).
-
-La variante suivante de @code{package-input-rewriting} peut repérer les
-paquets à remplacer par nom à la place de leur identité.
-
-@deffn {Procédure Scheme} package-input-rewriting/spec @var{remplacements}
-Renvoie une procédure qui, étant donné un paquet, applique les
-@var{remplacements} à tous le graphe du paquet (en dehors des entrées
-implicites). @var{remplacements} est une liste de paires de spécifications
-et de procédures ; chaque spécification est une spécification de paquet
-comme @code{"gcc"} ou @code{"guile@@2"}, et chaque procédure prend un paquet
-correspondant et renvoie un remplaçant pour ce paquet.
-@end deffn
-
-L'exemple ci-dessus pourrait être réécrit de cette manière :
-
-@example
-(define libressl-instead-of-openssl
- ;; Remplace tous les paquets nommés « openssl » par LibreSSL.
- (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
-@end example
-
-Le différence clef est que, cette fois-ci, les paquets correspondent à la
-spécification et non à l'identité. En d'autres termes, tout paquet dans le
-graphe qui est appelé @code{openssl} sera remplacé.
-
-Une procédure plus générique pour réécrire un graphe de dépendance d'un
-paquet est @code{package-mapping} : elle supporte n'importe quel changement
-dans les nœuds du graphe.
-
-@deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
-Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
-paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
-arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
-@end deffn
-
-@menu
-* Référence des paquets:: Le type de donnée des paquets.
-* Référence des origines:: Le type de données d'origine.
-@end menu
-
-
-@node Référence des paquets
-@subsection Référence de @code{package}
-
-Cette section résume toutes les options disponibles dans les déclarations
-@code{package} (@pxref{Définition des paquets}).
-
-@deftp {Type de données} package
-C'est le type de donnée représentant une recette de paquets.
-
-@table @asis
-@item @code{name}
-Le nom du paquet, comme une chaîne de caractères.
-
-@item @code{version}
-La version du paquet, comme une chaîne de caractères.
-
-@item @code{source}
-Un objet qui indique comment le code source du paquet devrait être
-récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
-fichier récupéré depuis internet (@pxref{Référence des origines}). Il peut aussi
-s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
-indique un fichier du système de fichier local (@pxref{G-Expressions,
-@code{local-file}}).
-
-@item @code{build-system}
-Le système de construction qui devrait être utilisé pour construire le
-paquet (@pxref{Systèmes de construction}).
-
-@item @code{arguments} (par défaut : @code{'()})
-Les arguments à passer au système de construction. C'est une liste qui
-contient typiquement une séquence de paires de clefs-valeurs.
-
-@item @code{inputs} (par défaut : @code{'()})
-@itemx @code{native-inputs} (par défaut : @code{'()})
-@itemx @code{propagated-inputs} (par défaut : @code{'()})
-@cindex entrées, des paquets
-Ces champs listent les dépendances du paquet. Chacune est une liste de
-tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
-caractères) comme premier élément, un paquet, une origine ou une dérivation
-comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
-est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
-plus d'informations sur les sorties des paquets). Par exemple, la liste
-suivante spécifie trois entrées :
-
-@example
-`(("libffi" ,libffi)
- ("libunistring" ,libunistring)
- ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
-@end example
-
-@cindex compilation croisée, dépendances des paquets
-La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
-lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
-les dépendances listées dans @code{inputs} sont construites pour
-l'architecture @emph{cible} ; inversement, les dépendances listées dans
-@code{native-inputs} sont construites pour l'architecture de la machine de
-@emph{construction}.
-
-@code{native-inputs} est typiquement utilisé pour lister les outils requis à
-la construction mais pas à l'exécution, comme Autoconf, Automake,
-pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
-erreurs de ce type (@pxref{Invoquer guix lint}).
-
-@anchor{package-propagated-inputs}
-Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
-paquets spécifiés seront automatiquement installés avec le paquet auquel ils
-appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
-package}}, pour des informations sur la manière dont @command{guix package}
-traite les entrées propagées).
-
-Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
-d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
-pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
-
-Un autre exemple où @code{propagated-inputs} est utile est pour les langages
-auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
-cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
-et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
-peuvent trouver le code des bibliothèques dont elles dépendent à
-l'exécution, les dépendances à l'exécution doivent être listées dans
-@code{propagated-inputs} plutôt que @code{inputs}.
-
-@item @code{outputs} (par défaut : @code{'("out")})
-La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
-supplémentaires.
-
-@item @code{native-search-paths} (par défaut : @code{'()})
-@itemx @code{search-paths} (par défaut : @code{'()})
-Une liste d'objets @code{search-path-specification} décrivant les variables
-d'environnement de recherche de chemins que ce paquet utilise.
-
-@item @code{replacement} (par défaut : @code{#f})
-Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
-comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
-plus de détails.
-
-@item @code{synopsis}
-Une description sur une ligne du paquet.
-
-@item @code{description}
-Une description plus détaillée du paquet.
-
-@item @code{license}
-@cindex licence, des paquets
-La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
-liste de ces valeurs.
-
-@item @code{home-page}
-L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
-
-@item @code{supported-systems} (par défaut : @var{%supported-systems})
-La liste des systèmes supportés par le paquet, comme des chaînes de
-caractères de la forme @code{architecture-noyau}, par exemple
-@code{"x86_64-linux"}.
-
-@item @code{maintainers} (par défaut : @code{'()})
-La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
-
-@item @code{location} (par défaut : emplacement de la source de la forme @code{package})
-L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
-hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
-corrigé.
-@end table
-@end deftp
-
-@deffn {Scheme Syntax} this-package
-When used in the @emph{lexical scope} of a package field definition, this
-identifier resolves to the package being defined.
-
-The example below shows how to add a package as a native input of itself
-when cross-compiling:
-
-@example
-(package
- (name "guile")
- ;; ...
-
- ;; When cross-compiled, Guile, for example, depends on
- ;; a native version of itself. Add it here.
- (native-inputs (if (%current-target-system)
- `(("self" ,this-package))
- '())))
-@end example
-
-It is an error to refer to @code{this-package} outside a package definition.
-@end deffn
-
-@node Référence des origines
-@subsection Référence de @code{origin}
-
-Cette section résume toutes les options disponibles dans le déclarations
-@code{origin} (@pxref{Définition des paquets}).
-
-@deftp {Type de données} origin
-C'est le type de donnée qui représente l'origine d'un code source.
-
-@table @asis
-@item @code{uri}
-Un objet contenant l'URI de la source. Le type d'objet dépend de la
-@code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
-de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
-représentée par une chaîne de caractères, ou une liste de chaînes de
-caractères.
-
-@item @code{method}
-Un procédure qui gère l'URI.
-
-Quelques exemples :
-
-@table @asis
-@item @var{url-fetch} de @code{(guix download)}
-télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
-champ @code{uri} ;
-
-@vindex git-fetch
-@item @var{git-fetch} de @code{(guix git-download)}
-clone le dépôt sous contrôle de version Git et récupère la révision
-spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
-un objet @code{git-reference} ressemble à cela :
-
-@example
-(git-reference
- (url "git://git.debian.org/git/pkg-shadow/shadow")
- (commit "v4.1.5.1"))
-@end example
-@end table
-
-@item @code{sha256}
-Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
-@code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
-de caractères en base-32.
-
-Vous pouvez obtenir cette information avec @code{guix download}
-(@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
-
-@item @code{file-name} (par défaut : @code{#f})
-Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
-@code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
-des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
-fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
-contrôle de version, il est recommandé de fournir un nom de fichier
-explicitement parce que le nom par défaut n'est pas très descriptif.
-
-@item @code{patches} (par défaut : @code{'()})
-Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
-(@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
-à appliquer sur la source.
-
-Cette liste de correctifs doit être inconditionnelle. En particulier, elle
-ne peut pas dépendre des valeurs de @code{%current-system} ou
-@code{%current-target-system}.
-
-@item @code{snippet} (par défaut : @code{#f})
-Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
-dans le répertoire des sources. C'est une manière pratique de modifier la
-source, parfois plus qu'un correctif.
-
-@item @code{patch-flags} (par défaut : @code{'("-p1")})
-Une liste de drapeaux à passer à la commande @code{patch}.
-
-@item @code{patch-inputs} (par défaut : @code{#f})
-Paquets d'entrées ou dérivations pour le processus de correction.
-Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
-pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
-
-@item @code{modules} (par défaut : @code{'()})
-Une liste de modules Guile qui devraient être chargés pendant le processus
-de correction et pendant que le lancement du code du champ @code{snippet}.
-
-@item @code{patch-guile} (par défaut : @code{#f})
-Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
-à @code{#f}, une valeur par défaut raisonnable est utilisée.
-@end table
-@end deftp
-
-
-@node Systèmes de construction
-@section Systèmes de construction
-
-@cindex système de construction
-Chaque définition de paquet définie un @dfn{système de construction} et des
-arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
-champ @code{build-system} représente la procédure de construction du paquet,
-ainsi que des dépendances implicites pour cette procédure de construction.
-
-Les systèmes de construction sont des objets
-@code{<build-system>}. L'interface pour les créer et les manipuler est
-fournie par le module @code{(guix build-system)} et les systèmes de
-construction eux-mêmes sont exportés par des modules spécifiques.
-
-@cindex sac (représentation à bas-niveau des paquets)
-Sous le capot, les systèmes de construction compilent d'abord des objets
-paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
-décoration — en d'autres mots, un sac est une représentation à bas-niveau
-d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
-été implicitement ajoutées par le système de construction. Cette
-représentation intermédiaire est ensuite compilée en une dérivation
-(@pxref{Dérivations}).
-
-Les systèmes de construction acceptent une liste d'@dfn{arguments}
-facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
-champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
-arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
-Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
-habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
-un processus Guile lancé par le démon (@pxref{Dérivations}).
-
-Le système de construction principal est le @var{gnu-build-system} qui
-implémente les procédures de construction standard pour les paquets GNU et
-de nombreux autres. Il est fournit par le module @code{(guix build-system
-gnu)}.
-
-@defvr {Variable Scheme} gnu-build-system
-@var{gnu-build-system} représente le système de construction GNU et ses
-variantes (@pxref{Configuration, configuration and makefile conventions,,
-standards, GNU Coding Standards}).
-
-@cindex phases de construction
-En résumé, les paquets qui l'utilisent sont configurés, construits et
-installés avec la séquence @code{./configure && make && make check && make
-install} habituelle. En pratique, des étapes supplémentaires sont souvent
-requises. Toutes ces étapes sont séparées dans des @dfn{phases}
-différentes, notamment@footnote{Regardez les modules @code{(guix build
-gnu-build-system)} pour plus de détails sur les phases de construction.}:
-
-@table @code
-@item unpack
-Décompresse l'archive des sources et se déplace dans l'arborescence des
-sources fraîchement extraites. Si la source est en fait un répertoire, le
-copie dans l'arborescence de construction et entre dans ce répertoire.
-
-@item patch-source-shebangs
-Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
-réfèrent aux bons noms de fichiers. Par exemple, elle change
-@code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
-
-@item configure
-Lance le script @code{configure} avec un certain nombre d'options par
-défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
-spécifiées par l'argument @code{#:configure-flags}.
-
-@item build
-Lance @code{make} avec la liste des drapeaux spécifiés avec
-@code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
-défaut), construit avec @code{make -j}.
-
-@item check
-Lance @code{make check}, ou une autre cible spécifiée par
-@code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
-l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
-check -j}.
-
-@item install
-Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
-
-@item patch-shebangs
-Corrige les shebangs des fichiers exécutables installés.
-
-@item strip
-Nettoie les symboles de débogage dans les fichiers ELF (à moins que
-@code{#:strip-binaries?} ne soit faux), les copie dans la sortie
-@code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
-@end table
-
-@vindex %standard-phases
-Le module du côté du constructeur @code{(guix build gnu-build-system)}
-définie @var{%standard-phases} comme la liste par défaut des phases de
-construction. @var{%standard-phases} est une liste de paires de symboles
-et de procédures, où la procédure implémente la phase en question.
-
-La liste des phases utilisées par un paquet particulier peut être modifiée
-avec le paramètre @code{#:phases}. Par exemple, en passant :
-
-@example
-#:phases (modify-phases %standard-phases (delete 'configure))
-@end example
-
-signifie que toutes les procédures décrites plus haut seront utilisées, sauf
-la phase @code{configure}.
-
-En plus, ce système de construction s'assure que l'environnement « standard
-» pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
-libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
-@code{(guix build-system gnu)} pour une liste complète). Nous les appelons
-les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
-ne les mentionne pas.
-@end defvr
-
-D'autres objets @code{<build-system>} sont définis pour supporter d'autres
-conventions et outils utilisés par les paquets de logiciels libres. Ils
-héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
-l'ensemble des entrées implicites ajoutées au processus de construction et
-dans la liste des phases exécutées. Certains de ces systèmes de
-construction sont listés ci-dessous.
-
-@defvr {Variable Scheme} ant-build-system
-Cette variable est exportée par @code{(guix build-system ant)}. Elle
-implémente la procédure de construction pour les paquets Java qui peuvent
-être construits avec @url{http://ant.apache.org/, l'outil de construction
-Ant}.
-
-Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
-(JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
-paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
-et @code{#:jdk} respectivement.
-
-Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
-acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
-fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
-construire l'archive jar spécifiée. Dans ce cas, le paramètre
-@code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
-sources, par défaut « src ».
-
-Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
-construction minimal pour spécifier la classe principale du jar. Cela rend
-le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
-utilisé pour spécifier la liste des tests junits à lancer. Il vaut par
-défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
-peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
-@code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
-peuvent pas être utilisées comme des tests.
-
-Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
-Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
-tâche « jar » sera lancée.
-
-@end defvr
-
-@defvr {Variable Scheme} android-ndk-build-system
-@cindex Distribution android
-@cindex système de construction Android NDK
-Cette variable est exportée par @code{(guix build-system android-ndk)}.
-Elle implémente une procédure de construction pour les paquets du NDK
-Android (@i{native development kit}) avec des processus de construction
-spécifiques à Guix.
-
-Le système de construction suppose que les paquets installent leur interface
-publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
-« out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
-« out ».
-
-Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
-pas de fichiers en conflit.
-
-Pour l'instant, la compilation croisée n'est pas supportées — donc pour
-l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
-des outils de l'hôte.
-
-@end defvr
-
-@defvr {Variable Scheme} asdf-build-system/source
-@defvrx {Variable Scheme} asdf-build-system/sbcl
-@defvrx {Variable Scheme} asdf-build-system/ecl
-
-Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
-les procédures de constructions pour les paquets en Common Lisp qui
-utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
-un dispositif de définition de systèmes pour les programmes et les
-bibliothèques en Common Lisp.
-
-Le système @code{asdf-build-system/source} installe les paquets au format
-source qui peuvent être chargés avec n'importe quelle implémentation de
-common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
-installent des binaires au format qu'un implémentation particulière
-comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
-produire des programmes exécutables ou des images lisp qui contiennent un
-ensemble de paquets pré-chargés.
-
-Le système de construction utilise des conventions de nommage. Pour les
-paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
-lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
-
-En plus, le paquet source correspondant devrait étiquetté avec la même
-convention que les paquets python (voir @ref{Modules python}), avec le
-préfixe @code{cl-}.
-
-Pour les paquets binaires, chaque système devrait être défini comme un
-paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
-peut créer des variantes du paquet pour construire tous les systèmes. Les
-paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
-contenir plusieurs systèmes.
-
-Pour créer des programmes exécutables et des images, les procédures côté
-construction @code{build-program} et @code{build-image} peuvent être
-utilisées. Elles devraient être appelées dans une phase de construction
-après la phase @code{create-symlinks} pour que le système qui vient d'être
-construit puisse être utilisé dans l'image créée. @code{build-program}
-requiert une liste d'expressions Common Lisp dans l'argument
-@code{#:entry-program}.
-
-Si le système n'est pas défini dans son propre fichier @code{.asd} du même
-nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
-spécifier dans quel fichier le système est défini. De plus, si le paquet
-défini un système pour ses tests dans un fichier séparé, il sera chargé
-avant que les tests ne soient lancés s'il est spécifié par le paramètre
-@code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
-@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
-@code{test.asd} seront testés.
-
-Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
-différente de ce que la convention de nommage suggère, le paramètre
-@code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
-
-@end defvr
-
-@defvr {Variable Scheme} cargo-build-system
-@cindex Langage de programmation Rust
-@cindex Cargo (système de construction Rust)
-Cette variable est exportée par @code{(guix build-system cargo)}. Elle
-supporte les construction de paquets avec Cargo, le système de construction
-du @uref{https://www.rust-lang.org, langage de programmation Rust}.
-
-Dans sa phase @code{configure}, ce système de construction remplace les
-dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
-Guix. La phase @code{install} installe les binaires et installe aussi le
-code source et le fichier @file{Cargo.toml}.
-@end defvr
-
-@cindex Clojure (langage de programmation)
-@cindex système de construction Clojure simple
-@defvr {Variable Scheme} clojure-build-system
-Cette variable est exportée par @code{(guix build-system clojure)}. Elle
-implémente une procédure de construction des paquets simple qui utilise le
-bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
-encore supportée.
-
-Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
-entrées. Des paquets différents peuvent être spécifiés avec les paramètres
-@code{#:clojure}, @code{#:jdk} et @code{#:zip}.
-
-Une liste de répertoires sources, de répertoires de tests et de noms de jar
-peuvent être spécifiés avec les paramètres @code{#:source-dirs},
-@code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
-la classe principale peuvent être spécifiés avec les paramètres
-@code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
-documentés plus bas.
-
-Ce système de construction est une extension de @var{ant-build-system}, mais
-avec les phases suivantes modifiées :
-
-@table @code
-
-@item build
-Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
-sources et lance @command{jar} pour créer les fichiers jar à partir des
-fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
-d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
-La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
-consistent en des symboles représentant des bibliothèque Clojure ou le mot
-clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
-trouvées dans les répertoires des sources. Le paramètre
-@code{#:omit-source?} décide si les sources devraient être incluses dans les
-fichiers jar.
-
-@item check
-Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
-spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
-signification est analogue à celle de @code{#:aot-include} et
-@code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
-maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
-tests. Le paramètre @code{#:tests?} décide si les tests devraient être
-lancés.
-
-@item install
-Cette phase installe tous les fichiers jar précédemment construits.
-@end table
-
-En dehors de cela, le système de construction contient aussi la phase
-suivante :
-
-@table @code
-
-@item install-doc
-Cette phase installe tous les fichiers dans le répertoire de plus haut
-niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
-regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
-(récursivement) dans les répertoires de documentations spécifiés dans
-@code{#:doc-dirs} sont aussi installés.
-@end table
-@end defvr
-
-@defvr {Variable Scheme} cmake-build-system
-Cette variable est exportée par @code{(guix build-system cmake)}. Elle
-implémente la procédure de construction des paquets qui utilisent
-l'@url{http://www.cmake.org, outil de construction CMake}.
-
-Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
-entrées. Le paquet utilisé peut être spécifié par le paramètre
-@code{#:cmake}.
-
-Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
-passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
-spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
-par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
-les informations de débogage » en plus court), ce qui signifie en gros que
-le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
-défaut.
-@end defvr
-
-@defvr {Variable Scheme} dune-build-system
-Cette variable est exportée par @code{(guix build-system dune)}. Elle prend
-en charge la construction des paquets qui utilisent
-@uref{https://dune.build/, Dune}, un outil de construction pour le langage
-de programmation OCaml. Elle est implémentée comme une extension de
-@code{ocaml-build-system} décrit plus bas. En tant que tel, les paramètres
-@code{#:ocaml} et @code{#:findlib} peuvent être passés à ce système de
-construction.
-
-Elle ajoute automatiquement le paquet @code{dune} à l'ensemble des entrées.
-Le paquet utilisé peut être spécifié par le paramètre @code{#:dune}.
-
-Il n'y a pas de phase @code{configure} parce que les paquets dune n'ont
-habituellement pas besoin d'être configurés. Le paramètre
-@code{#:build-flags} est interprété comme une liste de drapeaux pour la
-commande @code{dune} pendant la construction.
-
-Le paramètre @code{#:jbuild?} peut être passé pour utiliser la commande
-@code{jbuild} à la place de la commande @code{dune} plus récente pour la
-construction d'un paquet. Sa valeur par défaut est @code{#f}.
-
-Le paramètre @code{#:package} peut être passé pour spécifié un nom de
-paquet, ce qui est utile lorsqu'un paquet contient plusieurs paquets et que
-vous voulez n'en construire qu'un. C'est équivalent à passer l'argument
-@code{-p} à @code{dune}.
-@end defvr
-
-@defvr {Variable Scheme} go-build-system
-Cette variable est exportée par @code{(guix build-system go)}. Elle
-implémente la procédure pour les paquets Go utilisant les
-@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
-mécanismes de construction Go} standard.
-
-L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
-dans certains cas, @code{#:unpack-path}. Le
-@url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
-correspond au chemin dans le système de fichiers attendu par le script de
-construction du paquet et les paquets qui s'y réfèrent et fournit une
-manière unique de se référer à un paquet Go. Il est typiquement basé sur
-une combinaison de l'URI du code source du paquet et d'une structure
-hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
-le code source du paquet dans une structure de répertoires différente que
-celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
-utilisé dans ces cas-là.
-
-Les paquets qui fournissent des bibliothèques Go devraient installer leur
-code source dans la sortie du paquet. La clef @code{#:install-source?}, qui
-vaut @code{#t} par défaut, contrôle l'installation du code source. Elle
-peut être mise à @code{#f} pour les paquets qui ne fournissent que des
-fichiers exécutables.
-@end defvr
-
-@defvr {Variable Scheme} glib-or-gtk-build-system
-Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
-Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
-GTK+.
-
-Ce système de construction ajoute les deux phases suivantes à celles
-définies par @var{gnu-build-system} :
-
-@table @code
-@item glib-or-gtk-wrap
-La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
-@file{bin/} sont capable de trouver les « schemas » GLib et les
-@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
-GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
-lancement qui initialisent correctement les variables d'environnement
-@code{XDG_DATA_DIRS} et @code{GTK_PATH}.
-
-Il est possible d'exclure des sorties spécifiques de ce processus
-d'enveloppage en listant leur nom dans le paramètre
-@code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
-est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
-ajouterait une dépendance inutile vers GLib et GTK+.
-
-@item glib-or-gtk-compile-schemas
-La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
-@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
-schémas GSettings} de GLib sont compilés. La compilation est effectuée par
-le programme @command{glib-compile-schemas}. Il est fournit par le paquet
-@code{glib:bin} qui est automatiquement importé par le système de
-construction. Le paquet @code{glib} qui fournit
-@command{glib-compile-schemas} peut être spécifié avec le paramètre
-@code{#:glib}.
-@end table
-
-Ces deux phases sont exécutées après la phase @code{install}.
-@end defvr
-
-@defvr {Variable Scheme} guile-build-system
-Ce système de construction sert aux paquets Guile qui consistent
-exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
-makefile, sans parler d'un script @file{configure}. Il compile le code
-Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
-GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
-@file{.go} aux bons emplacements. Il installe aussi la documentation.
-
-Ce système de construction supporte la compilation croisée en utilisant
-l'option @code{--target} de @command{guild compile}.
-
-Les paquets construits avec @code{guile-build-system} doivent fournir un
-paquet Guile dans leur champ @code{native-inputs}.
-@end defvr
-
-@defvr {Variable Scheme} minify-build-system
-Cette variable est exportée par @code{(guix build-system minify)}. Elle
-implémente une procédure de minification pour des paquets JavaScript
-simples.
-
-Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
-compresser tous les fichiers JavaScript du répertoire @file{src}. Un
-minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
-mais il est attendu que ce paquet écrive le code minifié sur la sortie
-standard.
-
-Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
-répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
-utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
-@end defvr
-
-@defvr {Variable Scheme} ocaml-build-system
-Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
-implémente une procédure de construction pour les paquets
-@uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
-commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
-des commandes diverses pour être construit. Ce système de construction en
-essaye certaines.
-
-Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
-haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
-setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
-construction supposera que ces fichiers ont été générés par
-@uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
-d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
-désactivés. Vous pouvez passer des drapeaux de configuration et de
-construction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
-@code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
-utilisés pour activer les tests. La clef @code{#:use-make?} peut être
-utilisée pour outrepasser ce système dans les phases de construction et
-d'installation.
-
-Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
-d'un script configure écrit à la main qui demande un format différent de
-celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
-la clef @code{#:configure-flags}.
-
-Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
-@code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
-construction et l'installation avec la clef @code{#:make-flags}.
-
-Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
-plus ou moins standard pour leur système de construction. Dans ce cas, le
-système de construction lancera @code{ocaml pkg/pkg.ml} ou
-@code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
-requis. Des drapeaux supplémentaires peuvent être passés via la clef
-@code{#:bulid-flags}. L'installation se fait avec
-@command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
-ajouté au champ @code{native-inputs} de la définition du paquet.
-
-Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
-dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
-dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
-leur propre répertoire de module, ce qui est normalement correct puisqu'il
-s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
-bibliothèques ne peuvent pas y être trouvées et on utilise
-@code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
-@file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
-@file{.so} devraient être installées.
-@end defvr
-
-@defvr {Variable Scheme} python-build-system
-Cette variable est exportée par @code{(guix build-system python)}. Elle
-implémente la procédure de construction plus ou moins standard utilisée pour
-les paquets Python, qui consiste à lancer @code{python setup.py build} puis
-@code{python setup.py install --prefix=/gnu/store/@dots{}}.
-
-Pour les paquets qui installent des programmes autonomes dans @code{bin/},
-elle prend soin d'envelopper ces binaires pour que leur variable
-d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
-Python dont ils dépendent.
-
-Le paquet Python utilisé pour effectuer la construction peut être spécifié
-avec le paramètre @code{#:python}. C'est une manière utile de forcer un
-paquet à être construit avec une version particulière de l'interpréteur
-python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
-une version de l'interpréteur.
-
-Par défaut Guix appelle @code{setup.py} sous le contrôle de
-@code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
-pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
-en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
-@end defvr
-
-@defvr {Variable Scheme} perl-build-system
-Cette variable est exportée par @code{(guix build-system perl)}. Elle
-implémente la procédure de construction standard des paquets Perl, qui
-consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
-suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
-Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
-install}, en fonction de la présence de @code{Build.PL} ou
-@code{Makefile.PL} dans la distribution du paquet. Le premier a la
-préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
-la distribution du paquet. Cette préférence peut être inversée en
-spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
-
-L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
-passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
-@code{#:module-build-flags}, respectivement.
-
-Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
-@end defvr
-
-@defvr {Variable Scheme} r-build-system
-Cette variable est exportée par @code{(guix build-system r)}. Elle
-implémente la procédure de construction utilisée par les paquets
-@uref{http://r-project.org, R} qui consiste à lancer à peine plus que
-@code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
-@code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
-sont lancés après l'installation avec la fonction R
-@code{tools::testInstalledPackage}.
-@end defvr
-
-@defvr {Variable Scheme} rakudo-build-system
-Cette variable est exportée par @code{(guix build-system rakudo)}. Elle
-implémente la procédure de construction utilisée par
-@uref{https://rakudo.org/, Rakudo} pour les paquets
-@uref{https://perl6.org/, Perl6}. Elle installe le paquet dans
-@code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} et installe les binaires,
-les fichiers de bibliothèques et les ressources, et enveloppe les fichiers
-dans le répertoire @code{bin/}. Les tests peuvent être passés en indiquant
-@code{#f} au paramètres @code{tests?}.
-
-Le paquet rakudo utilisé peut être spécifié avec @code{rakudo}. Le paquet
-perl6-tap-harness utilisé pour les tests peut être spécifié avec
-@code{#:prove6} ou supprimé en passant @code{#f} au paramètre
-@code{with-prove6?}. Le paquet perl6-zef utilisé pour les tests et
-l'installation peut être spécifié avec @code{#:ef} ou supprimé en passant
-@code{#f} au paramètre @code{with-zef?}.
-@end defvr
-
-@defvr {Variable Scheme} texlive-build-system
-Cette variable est exportée par @code{(guix build-system texlive)}. Elle
-est utilisée pour construire des paquets TeX en mode batch avec le moteur
-spécifié. Le système de construction initialise la variable
-@code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
-
-Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
-par @code{ins}. Un moteur et un format différent peuvent être spécifiés
-avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
-peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
-liste de noms de fichiers. Le système de construction ajoute uniquement
-@code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
-tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
-arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
-respectivement.
-
-Le paramètre @code{#:tex-directory} dit au système de construction où
-installer les fichiers construit dans l'arbre texmf.
-@end defvr
-
-@defvr {Variable Scheme} ruby-build-system
-Cette variable est exportée par @code{(guix build-system ruby)}. Elle
-implémenter la procédure de construction RubyGems utilisée par les paquets
-Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
-
-Le champ @code{source} d'un paquet qui utilise ce système de construction
-référence le plus souvent une archive gem, puisque c'est le format utilisé
-par les développeurs Ruby quand ils publient leur logiciel. Le système de
-construction décompresse l'archive gem, éventuellement en corrigeant les
-sources, lance la suite de tests, recompresse la gemme et l'installe. En
-plus, des répertoires et des archives peuvent être référencés pour permettre
-de construire des gemmes qui n'ont pas été publiées depuis Git ou une
-archive de sources traditionnelle.
-
-Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
-Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
-peut être spécifiée avec le paramètre @code{#:gem-flags}.
-@end defvr
-
-@defvr {Variable Scheme} waf-build-system
-Cette variable est exportée par @code{(guix build-system waf)}. Elle
-implémente une procédure de construction autour du script @code{waf}. Les
-phases usuelles — @code{configure}, @code{build} et @code{install} — sont
-implémentée en passant leur nom en argument au script @code{waf}.
-
-Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
-Python utilisé pour lancer le script peut être spécifié avec le paramètre
-@code{#:python}.
-@end defvr
-
-@defvr {Variable Scheme} scons-build-system
-Cette variable est exportée par @code{(guix build-system scons)}. Elle
-implémente la procédure de construction utilisée par l'outil de construction
-SCons. Ce système de construction lance @code{scons} pour construire le
-paquet, @code{scons test} pour lancer les tests puis @code{scons install}
-pour installer le paquet.
-
-On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
-avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
-lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
-avec le paramètre @code{#:scons}.
-@end defvr
-
-@defvr {Variable Scheme} haskell-build-system
-Cette variable est exportée par @code{(guix build-system haskell)}. Elle
-implémente la procédure de construction Cabal utilisée par les paquets
-Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
---prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
-que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
-pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
-dépôt en lecture-seule du compilateur, le système de construction utilise
-@code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
-register}. En plus, le système de construction génère la documentation du
-paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
-@code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
-peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
-fichier @code{Setup.hs} n'est pas trouvé, le système de construction
-cherchera @code{Setup.lhs} à la place.
-
-Le compilateur Haskell utilisé peut être spécifié avec le paramètre
-@code{#:haskell} qui a pour valeur par défaut @code{ghc}.
-@end defvr
-
-@defvr {Variable Scheme} dub-build-system
-Cette variable est exportée par @code{(guix build-system dub)}. Elle
-implémente la procédure de construction Dub utilisée par les paquets D qui
-consiste à lancer @code{dub build} et @code{dub run}. L'installation est
-effectuée en copiant les fichiers manuellement.
-
-Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
-qui vaut par défaut @code{ldc}.
-@end defvr
-
-@defvr {Variable Scheme} emacs-build-system
-Cette variable est exportée par @code{(guix build-system emacs)}. Elle
-implémente une procédure d'installation similaire au système de gestion de
-paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
-
-Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
-tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
-gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
-dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
-paquet est installé dans son propre répertoire dans
-@file{share/emacs/site-lisp/guix.d}.
-@end defvr
-
-@defvr {Variable Scheme} font-build-system
-Cette variable est exportée par @code{(guix build-system font)}. Elle
-implémente une procédure d'installation pour les paquets de polices où des
-fichiers de polices TrueType, OpenType, etc.@: sont fournis en amont et
-n'ont qu'à être copiés à leur emplacement final. Elle copie les fichiers de
-polices à l'emplacement standard dans le répertoire de sortie.
-@end defvr
-
-@defvr {Variable Scheme} meson-build-system
-Cette variable est exportée par @code{(guix build-system meson)}. Elle
-implémente la procédure de construction des paquets qui utilisent
-@url{http://mesonbuild.com, Meson} comme système de construction.
-
-Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
-l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
-@code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
-@code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
-@code{RUNPATH} des binaires et les bibliothèques qu'il installe.
-
-Ce système de construction est une extension de @var{gnu-build-system}, mais
-avec les phases suivantes modifiées pour Meson :
-
-@table @code
-
-@item configure
-La phase lance @code{meson} avec les drapeaux spécifiés dans
-@code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
-initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
-dans @code{#:build-type}.
-
-@item build
-La phase lance @code{ninja} pour construire le paquet en parallèle par
-défaut, mais cela peut être changé avec @code{#:parallel-build?}.
-
-@item check
-La phase lance @code{ninja} avec la cible spécifiée dans
-@code{#:test-target}, qui est @code{"test"} par défaut.
-
-@item install
-La phase lance @code{ninja install} et ne peut pas être changée.
-@end table
-
-En dehors de cela, le système de construction ajoute aussi la phase suivante
-:
-
-@table @code
-
-@item fix-runpath
-Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
-dont ils ont besoin. Elle cherche les bibliothèques requises dans les
-sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
-là où c'est nécessaire. Elle supprime aussi les références aux
-bibliothèques laissées là par la phase de construction par
-@code{meson-for-build} comme les dépendances des tests, qui ne sont pas
-vraiment requises pour le programme.
-
-@item glib-or-gtk-wrap
-Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
-n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
-
-@item glib-or-gtk-compile-schemas
-Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
-n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
-@end table
-@end defvr
-
-@defvr {Scheme Variable} linux-module-build-system
-@var{linux-module-build-system} allows building Linux kernel modules.
-
-@cindex phases de construction
-This build system is an extension of @var{gnu-build-system}, but with the
-following phases changed:
-
-@table @code
-
-@item configure
-This phase configures the environment so that the Linux kernel's Makefile
-can be used to build the external kernel module.
-
-@item build
-This phase uses the Linux kernel's Makefile in order to build the external
-kernel module.
-
-@item install
-This phase uses the Linux kernel's Makefile in order to install the external
-kernel module.
-@end table
-
-It is possible and useful to specify the Linux kernel to use for building
-the module (in the "arguments" form of a package using the
-linux-module-build-system, use the key #:linux to specify it).
-@end defvr
-
-Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
-système de construction « trivial » est disponible. Il est trivial dans le
-sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
-implicite, et n'a pas de notion de phase de construction.
-
-@defvr {Variable Scheme} trivial-build-system
-Cette variable est exportée par @code{(guix build-system trivial)}.
-
-Ce système de construction requiert un argument @code{#:builder}. Cet
-argument doit être une expression Scheme qui construit la sortie du paquet —
-comme avec @code{build-expression->derivation} (@pxref{Dérivations,
-@code{build-expression->derivation}}).
-@end defvr
-
-@node Le dépôt
-@section Le dépôt
-
-@cindex dépôt
-@cindex éléments du dépôt
-@cindex chemins dans le dépôt
-
-Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
-bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
-sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
-parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
-qui contient des informations comme les chemins du dépôt auxquels se
-réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
-@emph{valides} — les résultats d'une construction réussie. Cette base de
-données se trouve dans @file{@var{localstatedir}/guix/db} où
-@var{localstatedir} est le répertoire d'états spécifié @i{via} @option
-{--localstatedir} à la configuration, typiquement @file{/var}.
-
-C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
-clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
-clients se connectent au démon par un socket Unix-domain, envoient une
-requête dessus et lisent le résultat — ce sont des appels de procédures
-distantes, ou RPC.
-
-@quotation Remarque
-Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
-@file{/gnu/store} directement. Cela entraînerait des incohérences et
-casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
-(@pxref{Introduction}).
-
-@xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
-sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
-modifications accidentelles.
-@end quotation
-
-Le module @code{(guix store)} fournit des procédures pour se connecter au
-démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
-@code{open-connection}, et donc toutes les commandes @command{guix} se
-connectent au démon local ou à l'URI spécifiée par la variable
-d'environnement @code{GUIX_DAEMON_SOCKET}.
-
-@defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
-Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
-de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
-nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
-des noms de fichiers, les schémas d'URI supportés sont :
-
-@table @code
-@item file
-@itemx unix
-Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
-est équivalent à @file{/var/guix/daemon-socket/socket}.
-
-@item guix
-@cindex démon, accès distant
-@cindex accès distant au démon
-@cindex démon, paramètres de grappes
-@cindex grappes, paramètres du démon
-Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
-authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
-éventuellement un numéro de port (par défaut 44146) :
-
-@example
-guix://master.guix.example.org:1234
-@end example
-
-Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
-de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
-construction sur @code{master.guix.example.org}.
-
-L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
-dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
-@code{--listen}}).
-
-@item ssh
-@cindex accès SSH au démon de construction
-Ces URI vous permettent de vous connecter au démon à distance à travers
-SSH@footnote{Cette fonctionnalité requiert Guile-SSH
-(@pxref{Prérequis}).}. Une URL typique pourrait ressembler à ceci :
-
-@example
-ssh://charlie@@guix.example.org:22
-@end example
-
-Comme pour @command{guix copy}, les fichiers de configuration du client
-OpenSSH sont respectés (@pxref{Invoquer guix copy}).
-@end table
-
-Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
-
-@c XXX: Remove this note when the protocol incurs fewer round trips
-@c and when (guix derivations) no longer relies on file system access.
-@quotation Remarque
-La capacité de se connecter à un démon de construction distant est considéré
-comme expérimental à la version @value{VERSION}. Contactez-nous pour
-partager vos problèmes ou des suggestions que vous pourriez avoir
-(@pxref{Contribuer}).
-@end quotation
-@end defvr
-
-@deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
-Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
-de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
-réserver un peu de place supplémentaire sur le système de fichiers pour que
-le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
-un objet serveur.
-
-@var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
-l'emplacement normal en fonction des options données à @command{configure}.
-@end deffn
-
-@deffn {Procédure Scheme} close-connection @var{server}
-Ferme la connexion au @var{serveur}.
-@end deffn
-
-@defvr {Variable Scheme} current-build-output-port
-Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
-journaux de construction et d'erreur envoyés par le démon devraient être
-écrits.
-@end defvr
-
-Les procédures qui font des RPC prennent toutes un objet serveur comme
-premier argument.
-
-@deffn {Procédure Scheme} valid-path? @var{server} @var{path}
-@cindex éléments du dépôt invalides
-Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
-@code{#f} sinon (un élément invalide peut exister sur le disque mais rester
-invalide, par exemple parce que c'est le résultat d'une construction annulée
-ou échouée).
-
-Une condition @code{&store-protocol-error} est levée si @var{path} n'est pas
-préfixée par le répertoire du dépôt (@file{/gnu/store}).
-@end deffn
-
-@deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
-Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
-chemin. @var{references} est la liste des chemins du dépôt référencés par
-le chemin du dépôt qui en résulte.
-@end deffn
-
-@deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
-Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
-chemins de dérivations) et retourne quand le travailleur a fini de les
-construire. Renvoie @code{#t} en cas de réussite.
-@end deffn
-
-Remarque que le module @code{(guix monads)} fournit une monade ainsi que des
-version monadiques des procédures précédentes, avec le but de rendre plus
-facile de travailler avec le code qui accède au dépôt (@pxref{La monade du dépôt}).
-
-@c FIXME
-@i{Cette section est actuellement incomplète.}
-
-@node Dérivations
-@section Dérivations
-
-@cindex dérivations
-Les actions de construction à bas-niveau et l'environnement dans lequel
-elles sont effectuées sont représentés par des @dfn{dérivations}. Une
-dérivation contient cet ensemble d'informations :
-
-@itemize
-@item
-Les sorties de la dérivation — les dérivations produisent au moins un
-fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
-
-@item
-@cindex dépendances à la construction
-@cindex construction, dépendances
-Les entrées de la dérivation — c.-à-d.@: ses dépendances à la construction —
-qui peuvent être d'autres dérivations ou des fichiers dans le dépôt
-(correctifs, scripts de construction, etc).
-
-@item
-Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
-
-@item
-Le nom de fichier d'un script de construction dans le dépôt avec les
-arguments à lui passer.
-
-@item
-Une liste de variables d'environnement à définir.
-
-@end itemize
-
-@cindex chemin de dérivation
-Les dérivations permettent aux client du démon de communiquer des actions de
-construction dans le dépôt. Elles existent sous deux formes : en tant que
-représentation en mémoire, à la fois côté client et démon, et en tant que
-fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
-des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
-passés à la procédure @code{build-derivations} pour effectuer les actions de
-construction qu'ils prescrivent (@pxref{Le dépôt}).
-
-@cindex dérivations à sortie fixe
-Des opérations comme le téléchargement de fichiers et la récupération de
-sources gérés par un logiciel de contrôle de version pour lesquels le hash
-du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
-sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
-dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
-source téléchargé produit le même résultat quelque soit la méthode de
-téléchargement utilisée.
-
-@cindex references
-@cindex dépendances à l'exécution
-@cindex exécution, dépendances
-Les sorties des dérivations — c.-à-d.@: les résultats de la construction —
-ont un ensemble de @dfn{références}, comme le rapporte le RPC
-@code{references} ou la commande @command{guix gc --references}
-(@pxref{Invoquer guix gc}). Les références sont l'ensemble des dépendances
-à l'exécution des résultats de la construction. Les références sont un
-sous-ensemble des entrées de la dérivation ; ce sous-ensemble est
-automatiquement calculé par le démon de construction en scannant tous les
-fichiers dans les sorties.
-
-Le module @code{(guix derivations)} fournit une représentation des
-dérivations comme des objets Scheme, avec des procédures pour créer et
-manipuler des dérivations. La primitive de plus bas-niveau pour créer une
-dérivation est la procédure @code{derivation} :
-
-@deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
- @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
-[#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
-[#:system (%current-system)] [#:references-graphs #f] @
-[#:allowed-references #f] [#:disallowed-references #f] @
-[#:leaked-env-vars #f] [#:local-build? #f] @
-[#:substitutable? #t] [#:properties '()]
-Construit une dérivation avec les arguments donnés et renvoie l'objet
-@code{<derivation>} obtenu.
-
-Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
-sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
-à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
-@var{recursive?} est vrai, alors la sortie fixe peut être un fichier
-exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
-contenant la sortie.
-
-Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
-paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
-des références de chaque chemin du dépôt est exporté dans l'environnement de
-construction dans le fichier correspondant, dans un simple format texte.
-
-Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
-d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
-peut faire référence. De même, @var{disallowed-references}, si vrai, doit
-être une liste de choses que la sortie ne doit @emph{pas} référencer.
-
-Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
-chaînes de caractères qui désignent les variables d'environnements qui
-peuvent « fuiter » de l'environnement du démon dans l'environnement de
-construction. Ce n'est possible que pour les dérivations à sortie fixe —
-c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
-permettre à des variables comme @code{http_proxy} d'être passées aux
-dérivations qui téléchargent des fichiers.
-
-Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
-bon candidat pour le déchargement et devrait plutôt être construit
-localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
-dérivations où le coût du transfert de données est plus important que les
-bénéfices.
-
-Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
-sortie de la dérivation ne devraient pas être utilisés
-(@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
-qui utilisent des détails du jeu d'instruction du CPU hôte.
-
-@var{properties} doit être une liste d'association décrivant les «
-propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
-interprétée, dans la dérivation.
-@end deffn
-
-@noindent
-Voici un exemple avec un script shell comme constructeur, en supposant que
-@var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
-exécutable Bash dans le dépôt :
-
-@lisp
-(use-modules (guix utils)
- (guix store)
- (guix derivations))
-
-(let ((builder ; ajoute le script Bash au dépôt
- (add-text-to-store store "my-builder.sh"
- "echo hello world > $out\n" '())))
- (derivation store "foo"
- bash `("-e" ,builder)
- #:inputs `((,bash) (,builder))
- #:env-vars '(("HOME" . "/homeless"))))
-@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
-@end lisp
-
-Comme on pourrait s'en douter, cette primitive est difficile à utiliser
-directement. Une meilleure approche est d'écrire les scripts de
-construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
-le code de construction comme une « G-expression » et de la passer à
-@code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
-
-Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
-une dérivation donc le code de construction était écrit en Scheme se faisait
-avec @code{build-expression->derivation}, documenté plus bas. Cette
-procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
-est meilleure.
-
-@deffn {Procédure Scheme} build-expression->derivation @var{store} @
- @var{name} @var{exp} @
-[#:system (%current-system)] [#:inputs '()] @
-[#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
-[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
-[#:references-graphs #f] [#:allowed-references #f] @
-[#:disallowed-references #f] @
-[#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
-Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
-constructeur pour la dérivation @var{name}. @var{inputs} doit être une
-liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
-omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
-modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
-compilés et rendus disponibles dans le chemin de chargement pendant
-l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
-gnu-build-system))}.
-
-@var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
-une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
-une liste de paires de chaînes de caractères et de chemin de sortie
-construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
-liste de paires de chaînes de caractères spécifiant le nom et la valeur de
-variables d'environnement visibles pour le constructeur. Le constructeur
-termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
-@var{exp} renvoie @code{#f}, la construction est considérée en échec.
-
-@var{exp} est construite avec @var{guile-for-build} (une dérivation).
-Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
-@code{%guile-for-build} est utilisée à la place.
-
-Voir la procédure @code{derivation} pour la signification de
-@var{references-graph}, @var{allowed-references},
-@var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
-@end deffn
-
-@noindent
-Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
-un fichier :
-
-@lisp
-(let ((builder '(let ((out (assoc-ref %outputs "out")))
- (mkdir out) ; create /gnu/store/@dots{}-goo
- (call-with-output-file (string-append out "/test")
- (lambda (p)
- (display '(hello guix) p))))))
- (build-expression->derivation store "goo" builder))
-
-@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
-@end lisp
-
-
-@node La monade du dépôt
-@section La monade du dépôt
-
-@cindex monad
-
-Les procédures qui travaillent sur le dépôt décrites dans les sections
-précédentes prennent toutes une connexion ouverte au démon de construction
-comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
-elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
-
-Le premier point est embêtant : on doit se balader avec la connexion au
-démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
-des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
-prennent. Le deuxième point est problématique : comme les opérations sur le
-dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
-être enchaînés correctement.
-
-@cindex valeurs monadiques
-@cindex fonctions monadiques
-C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
-module fournit un cadre pour travailler avec des @dfn{monads}, en
-particulier une monade très utile pour notre usage, la @dfn{monade du
-dépôt}. Les monades sont des constructions qui permettent deux choses :
-associer un « contexte » avec une valeur (dans notre cas, le contexte est le
-dépôt) et construire une séquence de calculs (ici les calculs comprennent
-des accès au dépôt). Les valeurs dans une monade — les valeurs qui
-contiennent ce contexte supplémentaire — sont appelées des @dfn{valeurs
-monadiques} ; les procédures qui renvoient ce genre de valeur sont appelées
-des @dfn{procédures monadiques}.
-
-Considérez cette procédure « normale » :
-
-@example
-(define (sh-symlink store)
- ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
- (let* ((drv (package-derivation store bash))
- (out (derivation->output-path drv))
- (sh (string-append out "/bin/bash")))
- (build-expression->derivation store "sh"
- `(symlink ,sh %output))))
-@end example
-
-En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
-en une fonction monadique :
-
-@example
-(define (sh-symlink)
- ;; Pareil, mais renvoie une valeur monadique.
- (mlet %store-monad ((drv (package->derivation bash)))
- (gexp->derivation "sh"
- #~(symlink (string-append #$drv "/bin/bash")
- #$output))))
-@end example
-
-Il y a plusieurs choses à remarquer avec cette deuxième version : le
-paramètre @code{store} est maintenant implicitement « enfilé » dans les
-appels aux procédures monadiques @code{package->derivation} et
-@code{gexp->derivation}, et la valeur monadique renvoyée par
-@code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
-simple @code{let}.
-
-Il se trouve que l'appel à @code{package->derivation} peut même être omis
-puisqu'il aura lieu implicitement, comme nous le verrons plus tard
-(@pxref{G-Expressions}) :
-
-@example
-(define (sh-symlink)
- (gexp->derivation "sh"
- #~(symlink (string-append #$bash "/bin/bash")
- #$output)))
-@end example
-
-@c See
-@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
-@c for the funny quote.
-L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. Comme
-on pourrait le dire, « on sort d'une monade comme de la monarchie : en
-l'exécutant »@footnote{NdT : il y a là un jeu de mot en anglais qui se base
-sur un double sens de « run », qui peut se traduire par « exécuter » dans ce
-contexte.}. Donc, pour sortir de la monade et obtenir l'effet escompté, on
-doit utiliser @code{run-with-store}.
-
-@example
-(run-with-store (open-connection) (sh-symlink))
-@result{} /gnu/store/...-sh-symlink
-@end example
-
-Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
-de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
-procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
-première est utilisée pour « lancer » une seule valeur monadique à travers
-le dépôt :
-
-@example
-scheme@@(guile-user)> ,run-in-store (package->derivation hello)
-$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
-@end example
-
-La deuxième entre dans une console récursive, où toutes les valeurs de
-retour sont automatiquement lancées à travers le dépôt :
-
-@example
-scheme@@(guile-user)> ,enter-store-monad
-store-monad@@(guile-user) [1]> (package->derivation hello)
-$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
-store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
-$3 = "/gnu/store/@dots{}-foo"
-store-monad@@(guile-user) [1]> ,q
-scheme@@(guile-user)>
-@end example
-
-@noindent
-Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
-@code{store-monad}.
-
-Les formes syntaxiques principales pour utiliser des monades en général sont
-disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
-
-@deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
-Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
-comme une @var{monad}.
-@end deffn
-
-@deffn {Syntaxe Scheme} return @var{val}
-Renvoie une valeur monadique qui encapsule @var{val}.
-@end deffn
-
-@deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
-@dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
-procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
-souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
-voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
-langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
-cet exemple :
-
-@example
-(run-with-state
- (with-monad %state-monad
- (>>= (return 1)
- (lambda (x) (return (+ 1 x)))
- (lambda (x) (return (* 2 x)))))
- 'some-state)
-
-@result{} 4
-@result{} some-state
-@end example
-@end deffn
-
-@deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
- @var{body} ...
-@deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
- @var{body} ...
-Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
-@var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
-on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
-» dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
-cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
-(@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
-comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
-vers la droite. La dernière expression de @var{body} doit être une
-expression monadique et son résultat deviendra le résultat de @code{mlet} ou
-@code{mlet*} lorsque lancé dans la @var{monad}.
-
-@code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
-(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
-@end deffn
-
-@deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
-Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
-renvoie le résultat de la dernière expression. Chaque expression dans la
-séquence doit être une expression monadique.
-
-Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
-des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
-@code{begin}, mais appliqué à des expressions monadiques.
-@end deffn
-
-@deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
-Lorsque la @var{condition} est vraie, évalue la séquence des expressions
-monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
-@var{condition} est fausse, renvoie @code{*unspecified*} dans la monade
-actuelle. Chaque expression dans la séquence doit être une expression
-monadique.
-@end deffn
-
-@deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
-Lorsque la @var{condition} est fausse, évalue la séquence des expressions
-monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
-@var{condition} est vraie, renvoie @code{*unspecified*} dans la monade
-actuelle. Chaque expression dans la séquence doit être une expression
-monadique.
-@end deffn
-
-@cindex monade d'état
-Le module @code{(guix monads)} fournit la @dfn{monade d'état} qui permet à
-une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
-procédures.
-
-@defvr {Variable Scheme} %state-monad
-La monade d'état. les procédure dans la monade d'état peuvent accéder et
-modifier l'état qui est enfilé.
-
-Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
-valeur dans la monade d'état. Elle renvoie le carré de son argument, mais
-incrémente aussi la valeur actuelle de l'état :
-
-@example
-(define (square x)
- (mlet %state-monad ((count (current-state)))
- (mbegin %state-monad
- (set-current-state (+ 1 count))
- (return (* x x)))))
-
-(run-with-state (sequence %state-monad (map square (iota 3))) 0)
-@result{} (0 1 4)
-@result{} 3
-@end example
-
-Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
-d'état supplémentaire, qui est le nombre d'appels à @code{square}.
-@end defvr
-
-@deffn {Procédure monadique} current-state
-Renvoie l'état actuel dans une valeur monadique.
-@end deffn
-
-@deffn {Procédure monadique} set-current-state @var{value}
-Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
-valeur monadique.
-@end deffn
-
-@deffn {Procédure monadique} state-push @var{value}
-Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
-renvoie l'état précédent dans une valeur monadique.
-@end deffn
-
-@deffn {Procédure monadique} state-pop
-Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
-monadique. L'état est supposé être une liste.
-@end deffn
-
-@deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
-Lance la valeur monadique @var{mval} avec @var{state} comme valeur
-initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
-résultat.
-@end deffn
-
-L'interface principale avec la monade du dépôt, fournit par le module
-@code{(guix store)}, est la suivante.
-
-@defvr {Variable Scheme} %store-monad
-La monade du dépôt — un alias pour @var{%state-monad}.
-
-Les valeurs dans la monade du dépôt encapsulent des accès au dépôt. Lorsque
-son effet est requis, une valeur de la monade du dépôt doit être « évaluée »
-en la passant à la procédure @code{run-with-store} (voir plus bas).
-@end defvr
-
-@deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
-Lance @var{mval}, une valeur monadique dans la monade du dépôt, dans
-@var{store}, une connexion ouvert au dépôt.
-@end deffn
-
-@deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
-Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
-du fichier contenant @var{text}, une chaîne de caractères. @var{references}
-est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
-réfère ; c'est la liste vide par défaut.
-@end deffn
-
-@deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
-Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
-dépôt du fichier contenant @var{data}, un vecteur d'octets.
-@var{references} est une liste d'éléments du dépôt auxquels le fichier
-binaire en résultat se réfère ; c'est la liste vide par défaut.
-@end deffn
-
-@deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
- [#:recursive? #t] [#:select? (const #t)]
-Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
-comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
-omis.
-
-Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
-récursivement ; si @var{file} désigne un fichier simple et que
-@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
-sont préservés.
-
-Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
-@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
-absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
-l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
-
-L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
-
-@example
-(run-with-store (open-connection)
- (mlet %store-monad ((a (interned-file "README"))
- (b (interned-file "README" "LEGU-MIN")))
- (return (list a b))))
-
-@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
-@end example
-
-@end deffn
-
-Le module @code{(guix packages)} exporte les procédures monadiques liées aux
-paquets suivantes :
-
-@deffn {Procédure monadique} package-file @var{package} [@var{file}] @
- [#:system (%current-system)] [#:target #f] @
-[#:output "out"]
-Renvoie une valeur monadique qui contient le nom de fichier absolu de
-@var{file} dans le répertoire @var{output} de @var{package}. Lorsque
-@var{file} est omis, renvoie le nom du répertoire @var{output} de
-@var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
-cible pour la compilation croisée.
-@end deffn
-
-@deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
-@deffnx {Procédure monadique} package->cross-derivation @var{package} @
- @var{target} [@var{system}]
-Version monadique de @code{package-derivation} et
-@code{package-cross-derivation} (@pxref{Définition des paquets}).
-@end deffn
-
-
-@node G-Expressions
-@section G-Expressions
-
-@cindex G-expression
-@cindex quoting du code de construction
-On a donc des « dérivations » qui représentent une séquence d'actions de
-construction à effectuer pour produire un élément du dépôt
-(@pxref{Dérivations}). Ces actions de construction sont effectuées
-lorsqu'on demande au démon de construire effectivement les dérivations ;
-elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
-
-@cindex strate de code
-Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
-construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
-de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
-par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
-sur Hop. Oleg Kiselyov, qui a écrit des
-@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
-et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
-genre de génération de code.} : le « code hôte » — le code qui défini les
-paquets, parle au démon, etc — et le « code côté construction » — le code
-qui effectue effectivement les actions de construction, comme créer des
-répertoires, invoquer @code{make}, etc.
-
-Pour décrire une dérivation et ses actions de construction, on a typiquement
-besoin d'intégrer le code de construction dans le code hôte. Ça revient à
-manipuler le code de construction comme de la donnée, et l'homoiconicité de
-Scheme — le code a une représentation directe en tant que donnée — est très
-utile pour cela. Mais on a besoin de plus que le mécanisme de
-@code{quasiquote} en Scheme pour construire des expressions de construction.
-
-Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
-de S-expression adaptée aux expressions de construction. Les G-expression,
-ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
-@code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
-@code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
-@code{quasiquote}, @code{unquote} et @code{unquote-splicing} respectivement
-(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
-Manual}). Cependant il y a des différences majeures :
-
-@itemize
-@item
-Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
-manipulées par d'autres processus.
-
-@item
-Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
-unquotée dans une gexp, le résultat est comme si le nom de fichier de son
-résultat avait été introduit.
-
-@item
-Les gexps transportent des informations sur les paquets ou les dérivations
-auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
-comme des entrées du processus de construction qui les utilise.
-@end itemize
-
-@cindex abaissement, des objets haut-niveau dans les gepxs
-Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
-définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
-haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
-aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
-utiles qui pourraient être insérées dans une gexp sont les « objets
-simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
-les références vers eux dans les dérivations et autres (voir
-@code{local-file} et @code{plain-file} ci-dessous).
-
-Pour illustrer cette idée, voici un exemple de gexp :
-
-@example
-(define build-exp
- #~(begin
- (mkdir #$output)
- (chdir #$output)
- (symlink (string-append #$coreutils "/bin/ls")
- "list-files")))
-@end example
-
-Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
-dérivation qui construit une répertoire contenant exactement un lien
-symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
-
-@example
-(gexp->derivation "the-thing" build-exp)
-@end example
-
-Comme on pourrait s'y attendre, la chaîne
-@code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
-référence au paquet @var{coreutils} dans le code de construction final, et
-@var{coreutils} est automatiquement devenu une entrée de la dérivation. De
-même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
-une chaîne de caractères contenant le nom du répertoire de la sortie de la
-dérivation.
-
-@cindex compilation croisée
-Dans le contexte d'une compilation croisée, il est utile de distinguer entre
-des références à la construction @emph{native} d'un paquet — qui peut être
-lancé par l'hôte — et des références à la construction croisée d'un paquet.
-Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
-construction native d'un paquet :
-
-@example
-(gexp->derivation "vi"
- #~(begin
- (mkdir #$output)
- (system* (string-append #+coreutils "/bin/ln")
- "-s"
- (string-append #$emacs "/bin/emacs")
- (string-append #$output "/bin/vi")))
- #:target "mips64el-linux-gnu")
-@end example
-
-@noindent
-Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
-utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
-mais ensuite la construction croisée d'@var{emacs} est utilisée.
-
-@cindex modules importés, pour les gexps
-@findex with-imported-modules
-Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
-voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
-dans la gexp, donc ces modules devraient être importés dans «
-l'environnement de construction ». La forme @code{with-imported-modules}
-vous permet d'exprimer ça :
-
-@example
-(let ((build (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (guix build utils))
- (mkdir-p (string-append #$output "/bin"))))))
- (gexp->derivation "empty-dir"
- #~(begin
- #$build
- (display "success!\n")
- #t)))
-@end example
-
-@noindent
-Dans cet exemple, le module @code{(guix build utils)} est automatiquement
-récupéré dans l'environnement de construction isolé de notre gexp, pour que
-@code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
-
-@cindex closure de module
-@findex source-module-closure
-Typiquement, vous voudriez que la @emph{closure} complète du module soit
-importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
-plutôt que seulement le module ; sinon, une tentative de chargement du
-module échouera à cause des modules dépendants manquants. La procédure
-@code{source-module-closure} calcule la closure d'un module en cherchant
-dans ses en-têtes sources, ce qui est pratique dans ce cas :
-
-@example
-(use-modules (guix modules)) ;pour 'source-module-closure'
-
-(with-imported-modules (source-module-closure
- '((guix build utils)
- (gnu build vm)))
- (gexp->derivation "something-with-vms"
- #~(begin
- (use-modules (guix build utils)
- (gnu build vm))
- @dots{})))
-@end example
-
-@cindex extensions, des gexps
-@findex with-extensions
-Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
-modules en Scheme pur, mais aussi des « extensions » comme des liaisons
-Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
-voulez utiliser le paquet @code{guile-json} du côté de la construction,
-voici comme procéder :
-
-@example
-(use-modules (gnu packages guile)) ;pour 'guile-json'
-
-(with-extensions (list guile-json)
- (gexp->derivation "something-with-json"
- #~(begin
- (use-modules (json))
- @dots{})))
-@end example
-
-La forme syntaxique pour construire des gexps est résumée ci-dessous.
-
-@deffn {Syntaxe Scheme} #~@var{exp}
-@deffnx {Syntaxe Scheme} (gexp @var{exp})
-Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
-ou plusieurs de ces formes :
-
-@table @code
-@item #$@var{obj}
-@itemx (ungexp @var{obj})
-Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
-supportés, par exemple un paquet ou une dérivation, auquel cas la forme
-@code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
-@code{"/gnu/store/@dots{}-coreutils-8.22}.
-
-Si @var{boj} est une liste, elle est traversée et les références aux objets
-supportés sont substitués de manière similaire.
-
-Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
-sont ajoutées à celle de la gexp qui l'entoure.
-
-Si @var{obj} est un autre type d'objet, il est inséré tel quel.
-
-@item #$@var{obj}:@var{output}
-@itemx (ungexp @var{obj} @var{output})
-Cette forme est similaire à la précédente, mais se réfère explicitement à la
-sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
-produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
-
-@item #+@var{obj}
-@itemx #+@var{obj}:output
-@itemx (ungexp-native @var{obj})
-@itemx (ungexp-native @var{obj} @var{output})
-Comme @code{ungexp}, mais produit une référence à la construction
-@emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
-croisée.
-
-@item #$output[:@var{output}]
-@itemx (ungexp output [@var{output}])
-Insère une référence à la sortie @var{output} de la dérivation, ou à la
-sortie principale lorsque @var{output} est omis.
-
-Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
-
-@item #$@@@var{lst}
-@itemx (ungexp-splicing @var{lst})
-Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
-liste qui la contient.
-
-@item #+@@@var{lst}
-@itemx (ungexp-native-splicing @var{lst})
-Comme au dessus, mais se réfère à la construction native des objets listés
-dans @var{lst}.
-
-@end table
-
-Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
-l'exécution du type @code{gexp?} (voir plus bas).
-@end deffn
-
-@deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
-Marque les gexps définies dans @var{body}@dots{} comme requérant
-@var{modules} dans leur environnement d'exécution.
-
-Chaque élément dans @var{module} peut être le nom d'un module, comme
-@code{(guix build utils)} ou le nom d'un module suivi d'une flèche, suivie
-d'un objet simili-fichier :
-
-@example
-`((guix build utils)
- (guix gcrypt)
- ((guix config) => ,(scheme-file "config.scm"
- #~(define-module @dots{}))))
-@end example
-
-@noindent
-Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
-chemin de recherche, et le dernier est créé à partir d'un objet
-simili-fichier.
-
-Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
-directement définies dans @var{body}@dots{}, mais pas sur celles définies
-dans des procédures appelées par @var{body}@dots{}.
-@end deffn
-
-@deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
-Marque les gexps définies dans @var{body}@dots{} comme requérant
-@var{extensions} dans leur environnement de construction et d'exécution.
-@var{extensions} est typiquement une liste d'objets paquets comme définis
-dans le module @code{(gnu packages guile)}.
-
-Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
-chemin de chargement lors de la compilation des modules importés dans
-@var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
-gexp renvoyée par @var{body}@dots{}.
-@end deffn
-
-@deffn {Procédure Scheme} gexp? @var{obj}
-Renvoie @code{#t} si @var{obj} est une G-expression.
-@end deffn
-
-Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
-que code pour construire une dérivation, soit en tant que fichier normal
-dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
-cela (@pxref{La monade du dépôt}, pour plus d'information sur les monads).
-
-@deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
- [#:system (%current-system)] [#:target #f] [#:graft? #t] @
-[#:hash #f] [#:hash-algo #f] @
-[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
-[#:module-path @var{%load-path}] @
-[#:effective-version "2.2"] @
-[#:references-graphs #f] [#:allowed-references #f] @
-[#:disallowed-references #f] @ [#:leaked-env-vars #f] @
-[#:script-name (string-append @var{name} "-builder")] @
-[#:deprecation-warnings #f] @
-[#:local-build? #f] [#:substitutable? #t] @
-[#:properties '()] [#:guile-for-build #f]
-Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
-@var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
-stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
-vraie, elle est utilisée comme triplet de cible de compilation croisée pour
-les paquets référencés par @var{exp}.
-
-@var{modules} est devenu obsolète en faveur de
-@code{with-imported-modules}. Sa signification est de rendre @var{modules}
-disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
-une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
-pour les copier dans le dépôt, les compiler et les rendre disponibles dans
-le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
-@code{((guix build utils) (guix build gnu-build-system))}.
-
-@var{effective-version} détermine la chaîne à utiliser lors d'ajout
-d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
-recherche — p.@: ex.@: @code{"2.2"}.
-
-@var{graft?} détermine si les paquets référencés par @var{exp} devraient
-être greffés si possible.
-
-Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
-tuples de la forme suivante :
-
-@example
-(@var{file-name} @var{package})
-(@var{file-name} @var{package} @var{output})
-(@var{file-name} @var{derivation})
-(@var{file-name} @var{derivation} @var{output})
-(@var{file-name} @var{store-item})
-@end example
-
-La partie droite des éléments de @var{references-graphs} est automatiquement
-transformée en une entrée du processus de construction @var{exp}. Dans
-l'environnement de construction, chaque @var{file-name} contient le graphe
-des références de l'élément correspondant, dans un format texte simple.
-
-@var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
-sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
-dépôt auxquels le résultat a le droit de faire référence. Toute référence à
-un autre élément du dépôt conduira à une erreur à la construction. Comme
-pour @var{disallowed-references}, qui peut lister des éléments qui ne
-doivent pas être référencés par les sorties.
-
-@var{deprecation-warnings} détermine s'il faut afficher les avertissement
-d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
-@code{t} ou @code{'detailed}.
-
-Les autres arguments sont les mêmes que pour @code{derivation}
-(@pxref{Dérivations}).
-@end deffn
-
-@cindex objets simili-fichiers
-Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
-@code{program-file} et @code{scheme-file} ci-dessous renvoient des
-@dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
-une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
-cette G-expression :
-
-@example
-#~(system* #$(file-append glibc "/sbin/nscd") "-f"
- #$(local-file "/tmp/my-nscd.conf"))
-@end example
-
-Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
-dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
-G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
-modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
-fait la G-expression. @code{plain-file} peut être utilisé de la même
-manière ; elle est seulement différente par le fait que le contenu du
-fichier est passé directement par une chaîne de caractères.
-
-@deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
- [#:recursive? #f] [#:select? (const #t)]
-Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
-; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
-fichier relatif, il est récupéré à partir de la position du fichier source
-dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
-@var{name} — par défaut le nom de base de @var{file}.
-
-Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
-récursivement ; si @var{file} désigne un fichier simple et que
-@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
-sont préservés.
-
-Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
-@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
-absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
-l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
-
-C'est la version déclarative de la procédure monadique @code{interned-file}
-(@pxref{La monade du dépôt, @code{interned-file}}).
-@end deffn
-
-@deffn {Procédure Scheme} plain-file @var{name} @var{content}
-Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
-contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
-ajouter un dépôt.
-
-C'est la version déclarative de @code{text-file}.
-@end deffn
-
-@deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
- [#:options '(#:local-build? #t)]
-Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
-un répertoire calculé par @var{gexp}. @var{options} est une liste
-d'arguments supplémentaires à passer à @code{gexp->derivation}.
-
-C'est la version déclarative de @code{gexp->derivation}.
-@end deffn
-
-@deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
- [#:guile (default-guile)] [#:module-path %load-path]
-Renvoie un script exécutable @var{name} qui lance @var{exp} avec
-@var{guile}, avec les modules importés de @var{exp} dans son chemin de
-recherche. Cherche les modules de @var{exp} dans @var{module-path}.
-
-L'exemple ci-dessous construit un script qui invoque simplement la commande
-@command{ls} :
-
-@example
-(use-modules (guix gexp) (gnu packages base))
-
-(gexp->script "list-files"
- #~(execl #$(file-append coreutils "/bin/ls")
- "ls"))
-@end example
-
-Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monade du dépôt,
-@code{run-with-store}}), on obtient une dérivation qui produit une fichier
-exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
-
-@example
-#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
-!#
-(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
-@end example
-@end deffn
-
-@deffn {Procédure Scheme} program-file @var{name} @var{exp} @
- [#:guile #f] [#:module-path %load-path]
-Renvoie un objet représentant un élément du dépôt @var{name} qui lance
-@var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
-script. Les modules importés par @var{gexp} sont recherchés dans
-@var{module-path}.
-
-C'est la version déclarative de @code{gexp->script}.
-@end deffn
-
-@deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
- [#:set-load-path? #t] [#:module-path %load-path] @
-[#:splice? #f] @
-[#:guile (default-guile)]
-Renvoie une dérivation qui construit un fichier @var{name} contenant
-@var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
-une liste d'expressions qui seront splicée dans le fichier qui en résulte.
-
-Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
-résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
-pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
-sont trouvés dans @var{module-path}.
-
-Le fichier qui en résulte retient les références à toutes les dépendances de
-@var{exp} ou un sous-ensemble.
-@end deffn
-
-@deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
-Renvoie un objet représentant le fichier Scheme @var{name} qui contient
-@var{exp}.
-
-C'est la version déclarative de @code{gexp->file}.
-@end deffn
-
-@deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
-Renvoie une valeur monadique qui construit un ficher texte contenant
-@var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
-objet de n'importe quel type qui peut être utilisé dans une gexp : des
-paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
-dépôt qui en résulte en retient toutes les références.
-
-Cette variante devrait être préférée à @code{text-file} lorsque vous
-souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
-typiquement lorsque vous construisez un fichier de configuration qui
-contient des noms de fichiers du dépôt, comme ceci :
-
-@example
-(define (profile.sh)
- ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
- ;; la variable d'environnement « PATH ».
- (text-file* "profile.sh"
- "export PATH=" coreutils "/bin:"
- grep "/bin:" sed "/bin\n"))
-@end example
-
-Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
-résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
-empêche d'être glanés tant que le script est accessible.
-@end deffn
-
-@deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
-Renvoie un objet représentant le fichier du dépôt @var{name} contenant
-@var{text}. @var{text} est une séquence de chaînes de caractères et de
-fichiers simili-objets, comme dans :
-
-@example
-(mixed-text-file "profile"
- "export PATH=" coreutils "/bin:" grep "/bin")
-@end example
-
-C'est la version déclarative de @code{text-file*}.
-@end deffn
-
-@deffn {Procédure Scheme} file-union @var{name} @var{files}
-Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
-tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
-une paire où le premier élément est le nom de fichier à utiliser dans le
-nouveau répertoire et le second élément est une gexp dénotant le fichier
-cible. Voici un exemple :
-
-@example
-(file-union "etc"
- `(("hosts" ,(plain-file "hosts"
- "127.0.0.1 localhost"))
- ("bashrc" ,(plain-file "bashrc"
- "alias ls='ls --color=auto'"))))
-@end example
-
-Cela crée un répertoire @code{etc} contenant ces deux fichiers.
-@end deffn
-
-@deffn {Procédure Scheme} directory-union @var{name} @var{things}
-Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
-une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
-:
-
-@example
-(directory-union "guile+emacs" (list guile emacs))
-@end example
-
-crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
-@end deffn
-
-@deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
-Renvoie un objet simili-fichier qui correspond à la concaténation de
-@var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
-@var{suffix} est une chaîne de caractères.
-
-Par exemple, considérez cette gexp :
-
-@example
-(gexp->script "run-uname"
- #~(system* #$(file-append coreutils
- "/bin/uname")))
-@end example
-
-On peut obtenir le même effet avec :
-
-@example
-(gexp->script "run-uname"
- #~(system* (string-append #$coreutils
- "/bin/uname")))
-@end example
-
-Il y a une différence cependant : dans le cas @code{file-append}, le script
-qui en résulte contient le nom de fichier absolu comme une chaîne de
-caractère alors que dans le deuxième cas, le script contient une expression
-@code{(string-append @dots{})} pour construire le nom de fichier @emph{à
-l'exécution}.
-@end deffn
-
-
-Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
-contiennent des outils de construction. Pour savoir facilement qu'ils sont
-à utiliser dans la strate de construction, ces modules sont gardés dans
-l'espace de nom @code{(guix build @dots{})}.
-
-@cindex abaissement, des objets haut-niveau dans les gepxs
-En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
-compilateur, soit en des dérivations, soit en des objets du dépôt. Par
-exemple, abaisser un paquet crée une dérivation, et abaisser un
-@code{plain-file} crée un élément du dépôt. Cela est effectué par la
-procédure monadique @code{lower-object}.
-
-@deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
- [#:target #f]
-Renvoie la dérivation ou l'élément du dépôt comme une valeur de
-@var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
-compilant de manière croisée pour @var{target} si @var{target} est vrai.
-@var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
-@code{<package>}.
-@end deffn
-
-@node Invoquer guix repl
-@section Invoquer @command{guix repl}
-
-@cindex REPL, read-eval-print loop
-La commande @command{guix repl} démarre un @dfn{boucle
-lecture-évaluation-affichage} Guile pour la programmation interactive
-(@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
-Comparé au lancement de la commande @command{guile}, @command{guix repl}
-garanti que tous les modules Guix et toutes ses dépendances sont disponibles
-dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
-
-@example
-$ guix repl
-scheme@@(guile-user)> ,use (gnu packages base)
-scheme@@(guile-user)> coreutils
-$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
-@end example
-
-@cindex inférieurs
-En plus, @command{guix repl} implémente un protocole REPL simple lisible par
-une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
-interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
-une version potentiellement différente de Guix.
-
-Les options disponibles sont les suivante :
-
-@table @code
-@item --type=@var{type}
-@itemx -t @var{type}
-Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
-
-@table @code
-@item guile
-C'est la valeur par défaut. Elle démarre un REPL Guile standard
-fonctionnel.
-@item machine
-Démarre un REPL qui utilise le protocole lisible par machine. C'est le
-protocole que parle le module @code{(guix inferior)}.
-@end table
-
-@item --listen=@var{extrémité}
-Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
-sortie standard. Lorsque cette option est passée, il écoutera plutôt les
-connexions sur @var{endpoint}. Voici un exemple d'options valides :
-
-@table @code
-@item --listen=tcp:37146
-Accepte les connexions sur localhost, sur le port 31.
-
-@item --listen=unix:/tmp/socket
-Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
-@end table
-@end table
-
-@c *********************************************************************
-@node Utilitaires
-@chapter Utilitaires
-
-Cette section décrit les utilitaires en ligne de commande de Guix. certains
-sont surtout faits pour les développeurs qui écrivent de nouvelles
-définitions de paquets tandis que d'autres sont plus utiles pour une
-utilisation générale. Ils complètent l'interface de programmation Scheme de
-Guix d'une manière pratique.
-
-@menu
-* Invoquer guix build:: Construire des paquets depuis la ligne de
- commande.
-* Invoquer guix edit:: Modifier les définitions de paquets.
-* Invoquer guix download:: Télécharger un fichier et afficher son hash.
-* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
-* Invoquer guix import:: Importer des définitions de paquets.
-* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
-* Invoquer guix lint:: Trouver des erreurs dans les définitions de
- paquets.
-* Invoquer guix size:: Profiler l'utilisation du disque.
-* Invoquer guix graph:: Visualiser le graphe des paquets.
-* Invoquer guix publish:: Partager des substituts.
-* Invoquer guix challenge:: Défier les serveurs de substituts.
-* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
-* Invoquer guix container:: Isolation de processus.
-* Invoquer guix weather:: Mesurer la disponibilité des substituts.
-* Invoquer guix processes:: Lister les processus clients.
-@end menu
-
-@node Invoquer guix build
-@section Invoquer @command{guix build}
-
-@cindex construction de paquets
-@cindex @command{guix build}
-La commande @command{guix build} construit des paquets ou des dérivations et
-leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
-qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
-commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
-elle est surtout utile pour les développeurs de la distribution.
-
-La syntaxe générale est :
-
-@example
-guix build @var{options} @var{package-or-derivation}@dots{}
-@end example
-
-Par exemple, la commande suivante construit la dernière version d'Emacs et
-de Guile, affiche leur journaux de construction et enfin affiche les
-répertoires des résultats :
-
-@example
-guix build emacs guile
-@end example
-
-De même, la commande suivante construit tous les paquets disponibles :
-
-@example
-guix build --quiet --keep-going \
- `guix package -A | cut -f1,2 --output-delimiter=@@`
-@end example
-
-@var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
-distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
-soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
-Dans le premier cas, la commande cherchera un paquet avec le nom
-correspondant (et éventuellement la version) dans les modules de la
-distribution GNU (@pxref{Modules de paquets}).
-
-Autrement, l'option @code{--expression} peut être utilisée pour spécifier
-une expression Scheme qui s'évalue en un paquet ; c'est utile pour
-différencier des paquets avec le même nom ou des variantes de paquets.
-
-Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
-disponibles sont décrites dans les sous-sections ci-dessous.
-
-@menu
-* Options de construction communes:: Options de construction pour la
- plupart des commandes.
-* Options de transformation de paquets:: Créer des variantes de paquets.
-* Options de construction supplémentaires:: Options spécifiques à «
- guix build ».
-* Débogage des échecs de construction:: La vie d'un empaqueteur.
-@end menu
-
-@node Options de construction communes
-@subsection Options de construction communes
-
-Un certain nombre d'options qui contrôlent le processus de construction sont
-communes avec @command{guix build} et les autres commandes qui peuvent
-générer des constructions, comme @command{guix package} ou @command{guix
-archive}. Voici ces options :
-
-@table @code
-
-@item --load-path=@var{répertoire}
-@itemx -L @var{répertoire}
-Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
-(@pxref{Modules de paquets}).
-
-Cela permet à des utilisateurs de définir leur propres paquets et les rendre
-disponibles aux outils en ligne de commande.
-
-@item --keep-failed
-@itemx -K
-Garde l'arborescence de construction des constructions en échec. Ainsi, si
-une construction échoue, son arborescence de construction est préservée dans
-@file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
-de construction. Cela est utile pour déboguer des échecs de construction.
-@xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
-des problèmes de construction.
-
-Cette option n'a pas d'effet lors de la connexion à un démon distant avec
-l'URI @code{guix://} (@pxref{Le dépôt, la variable
-@code{GUIX_DAEMON_SOCKET}}).
-
-@item --keep-going
-@itemx -k
-Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
-toutes les constructions ont soit réussies, soit échouées.
-
-Le comportement par défaut est de s'arrêter dès qu'une des dérivations
-spécifiées échoue.
-
-@item --dry-run
-@itemx -n
-Ne pas construire les dérivations.
-
-@anchor{option de repli}
-@item --fallback
-Lorsque la substitution d'un binaire pré-compilé échoue, construit les
-paquets localement à la place (@pxref{Échec de substitution}).
-
-@item --substitute-urls=@var{urls}
-@anchor{client-substitute-urls}
-Considère @var{urls} comme une liste d'URL de sources de substituts séparés
-par des espaces, et remplace la liste par défaut d'URL de
-@command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
-URLs}).
-
-Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
-tant qu'ils sont signés par une clef autorisée par l'administrateur système
-(@pxref{Substituts}).
-
-Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
-substitution.
-
-@item --no-substitutes
-Ne pas utiliser de substitut pour les résultats de la construction.
-C'est-à-dire, toujours construire localement plutôt que de permettre le
-téléchargement de binaires pré-construits (@pxref{Substituts}).
-
-@item --no-grafts
-Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
-jour des paquets disponibles comme des greffes ne sont pas appliquées.
-@xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
-
-@item --rounds=@var{n}
-Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
-les constructions consécutives ne sont pas identiques bit-à-bit.
-
-Cela est une manière utile pour détecter des processus de construction non
-déterministes. Les processus de construction non déterministes sont
-problématiques car ils rendent pratiquement impossible la
-@emph{vérification} par les utilisateurs de l'authenticité de binaires
-tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
-
-Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
-devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
-résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
-puis en reconstruisant, et enfin en comparant les deux résultats.
-
-@item --no-build-hook
-N'essaye pas de décharger les constructions via le « crochet de construction
-» du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
-construit localement plutôt que de décharger les constructions à une machine
-distante.
-
-@item --max-silent-time=@var{secondes}
-Lorsque le processus de construction ou de substitution restent silencieux
-pendant plus de @var{secondes}, le terminer et rapporter une erreur de
-construction.
-
-Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
-
-@item --timeout=@var{secondes}
-De même, lorsque le processus de construction ou de substitution dure plus
-de @var{secondes}, le terminer et rapporter une erreur de construction.
-
-Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
-
-@c Note: This option is actually not part of %standard-build-options but
-@c most programs honor it.
-@cindex verbosité, des outils en ligne de commande
-@cindex journaux de construction, verbosité
-@item -v [@var{niveau}]
-@itemx --verbosity=@var{niveau}
-Utiliser le @var{niveau} de verbosité, en tant qu'entier. 0 signifie
-qu'aucune sortie n'est produite, 1 signifie une sortie silencieuse et 2
-montre tous les journaux de construction sur la sortie d'erreur standard.
-
-@item --cores=@var{n}
-@itemx -c @var{n}
-Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
-valeur spéciale @code{0} signifie autant de cœurs que possible.
-
-@item --max-jobs=@var{n}
-@itemx -M @var{n}
-Permet au plus @var{n} travaux de construction en parallèle. @xref{Invoquer guix-daemon, @code{--max-jobs}}, pour plus de détails sur cette option et
-l'option équivalente pour @command{guix-daemon}.
-
-@item --debug=@var{niveau}
-Produire une sortie de débogage qui provient du démon de construction.
-@var{niveau} doit être un entier entre 0 et 5 ; plus grand est ce nombre,
-plus verbeuse sera la sortie. Indiquer un niveau de 4 ou plus peut être
-utile pour déboguer des problèmes d'installation avec le démon de
-construction.
-
-@end table
-
-Sous le capot, @command{guix build} est surtout un interface à la procédure
-@code{package-derivation} du module @code{(guix packages)}, et à la
-procédure @code{build-derivations} du module @code{(guix derivations)}.
-
-En plus des options passées explicitement par la ligne de commande,
-@command{guix build} et les autres commande @command{guix} qui peuvent
-effectuer des construction honorent la variable d'environnement
-@code{GUIX_BUILD_OPTIONS}.
-
-@defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
-Les utilisateurs peuvent définir cette variable à une liste d'options de la
-ligne de commande qui seront automatiquement utilisées par @command{guix
-build} et les autres commandes @command{guix} qui peuvent effectuer des
-constructions, comme dans l'exemple suivant :
-
-@example
-$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
-@end example
-
-Ces options sont analysées indépendamment, et le résultat est ajouté aux
-options de la ligne de commande analysées.
-@end defvr
-
-
-@node Options de transformation de paquets
-@subsection Options de transformation de paquets
-
-@cindex variantes de paquets
-Un autre ensemble d'options de la ligne de commande supportés par
-@command{guix build} et aussi @command{guix package} sont les @dfn{options
-de transformation de paquets}. Ce sont des options qui rendent possible la
-définition de @dfn{variantes de paquets} — par exemple, des paquets
-construit à partir de sources différentes. C'est une manière simple de
-créer des paquets personnalisés à la volée sans avoir à taper les
-définitions de variantes de paquets (@pxref{Définition des paquets}).
-
-@table @code
-
-@item --with-source=@var{source}
-@itemx --with-source=@var{paquet}=@var{source}
-@itemx --with-source=@var{paquet}@@@var{version}=@var{source}
-Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
-son numéro de version. @var{source} doit être un nom de fichier ou une URL,
-comme pour @command{guix download} (@pxref{Invoquer guix download}).
-
-Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
-spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
-@code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
-
-De même, lorsque @var{version} est omis, la chaîne de version est inférée à
-partir de @var{source} ; dans l'exemple précédent, il s'agit de
-@code{2.0.10}.
-
-Cette option permet aux utilisateurs d'essayer des version des paquets
-différentes de celles fournies par la distribution. L'exemple ci-dessous
-télécharge @file{ed-1.7.tar.g} depuis un miroir GNU et l'utilise comme
-source pour le paquet @code{ed} :
-
-@example
-guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
-@end example
-
-En tant que développeur, @code{--with-source} permet de tester facilement
-des version bêta :
-
-@example
-guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
-@end example
-
-@dots{} ou pour construire un dépôt de gestion de version dans un
-environnement vierge :
-
-@example
-$ git clone git://git.sv.gnu.org/guix.git
-$ guix build guix --with-source=guix@@1.0=./guix
-@end example
-
-@item --with-input=@var{paquet}=@var{remplaçant}
-Remplace la dépendance sur @var{paquet} par une dépendance à
-@var{remplaçant}. @var{paquet} doit être un nom de paquet et
-@var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
-@code{guile@@1.8}.
-
-Par exemple, la commande suivante construit Guix, mais remplace sa
-dépendance à la version stable actuelle de Guile par une dépendance à une
-ancienne version de Guile, @code{guile@@2.0} :
-
-@example
-guix build --with-input=guile=guile@@2.0 guix
-@end example
-
-C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
-@code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
-@code{guile}) sont reconstruits avec @code{guile@@2.0}.
-
-Cette option est implémentée avec la procédure Scheme
-@code{package-input-rewriting} (@pxref{Définition des paquets,
-@code{package-input-rewriting}}).
-
-@item --with-graft=@var{paquet}=@var{remplaçant}
-Cette option est similaire à @code{--with-input} mais avec une différence
-importante : plutôt que de reconstruire la chaîne de dépendance complète,
-@var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
-référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
-d'information sur les greffes.
-
-Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
-Wget et toutes ses dépendances, en remplaçant les références à la version
-actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
-
-@example
-guix build --with-graft=gnutls=gnutls@@3.5.4 wget
-@end example
-
-Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
-y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
-sont strictement compatibles — par exemple, s'ils fournissent une
-bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
-doivent être compatibles. Si @var{remplaçant} est incompatible avec
-@var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
-utilisez avec précaution !
-
-@item --with-git-url=@var{paquet}=@var{url}
-@cindex Git, utiliser le dernier commit
-@cindex dernier commit, construction
-Construire @var{paquet} depuis le dernier commit de la branche @code{master}
-du dépôt sur @var{url}. Les sous-modules Git du dépôt sont récupérés,
-récursivement.
-
-Par exemple, la commande suivante construit la bibliothèque Python NumPy
-avec le dernier commit de la branche master de Python lui-même :
-
-@example
-guix build python-numpy \
- --with-git-url=python=https://github.com/python/cpython
-@end example
-
-Cette option peut aussi être combinée avec @code{--with-branch} ou
-@code{--with-commit} (voir plus bas).
-
-@cindex intégration continue
-Évidemment, comme cela utilise le dernier commit d'une branche donnée, le
-résultat d'une telle commande varie avec le temps. Néanmoins c'est une
-manière pratique pour reconstruire des piles logicielles entières avec le
-dernier commit d'un ou plusieurs paquets. C'est particulièrement pratique
-dans le contexte d'une intégration continue.
-
-Les clones sont gardés dans un cache dans @file{~/.cache/guix/checkouts}
-pour accélérer les accès consécutifs au même dépôt. Vous pourriez vouloir
-le nettoyer de temps en temps pour récupérer de l'espace disque.
-
-@item --with-branch=@var{paquet}=@var{branche}
-Construire @var{paquet} à partir du dernier commit de la @var{branche}. Si
-le champ @code{source} de @var{paquet} est une origine avec la méthode
-@code{git-fetch} (@pxref{Référence des origines}) ou un objet @code{git-checkout},
-l'URL du dépôt est récupérée à partir de cette @code{source}. Sinon, vous
-devez utiliser @code{--with-git-url} pour spécifier l'URL du dépôt Git.
-
-Par exemple, la commande suivante construit @code{guile-sqlite3} à partir du
-dernier commit de sa branche @code{master}, puis construit @code{guix} (qui
-en dépend) et @code{cuirass} (qui dépend de @code{guix}) avec cette
-construction spécifique de @code{guile-sqlite3} :
-
-@example
-guix build --with-branch=guile-sqlite3=master cuirass
-@end example
-
-@item --with-commit=@var{paquet}=@var{commit}
-Cela est similaire à @code{--with-branch}, sauf qu'elle construite à partir
-de @var{commit} au lieu du sommet d'une branche. @var{commit} doit être un
-identifiant SHA1 de commit Git valide.
-@end table
-
-@node Options de construction supplémentaires
-@subsection Options de construction supplémentaires
-
-Les options de la ligne de commande ci-dessous sont spécifiques à
-@command{guix build}.
-
-@table @code
-
-@item --quiet
-@itemx -q
-Construire en silence, sans afficher les journaux de construction ; c'est
-équivalent à @code{--verbosity=0}. À la fin, le journal de construction est
-gardé dans @file{/var} (ou similaire) et on peut toujours l'y trouver avec
-l'option @option{--log-file}.
-
-@item --file=@var{fichier}
-@itemx -f @var{fichier}
-Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
-code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
-
-Par exemple, @var{file} peut contenir une définition de paquet comme ceci
-(@pxref{Définition des paquets}) :
-
-@example
-@verbatiminclude package-hello.scm
-@end example
-
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
-
-Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
-guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
-version 1.8 de Guile.
-
-Autrement, @var{exp} peut être une G-expression, auquel cas elle est
-utilisée comme un programme de construction passé à @code{gexp->derivation}
-(@pxref{G-Expressions}).
-
-Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
-argument (@pxref{La monade du dépôt}). La procédure doit renvoyer une
-dérivation comme une valeur monadique, qui est ensuite lancée à travers
-@code{run-with-store}.
-
-@item --source
-@itemx -S
-Construit les dérivation source des paquets, plutôt que des paquets
-eux-mêmes.
-
-Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
-@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
-de GCC.
-
-L'archive des sources renvoyée est le résultat de l'application des
-correctifs et des extraits de code éventuels spécifiés dans le champ
-@code{origin} du paquet (@pxref{Définition des paquets}).
-
-@item --sources
-Récupère et renvoie la source de @var{package-or-derivation} et toute ses
-dépendances, récursivement. C'est pratique pour obtenir une copie locale de
-tous les codes sources requis pour construire @var{packages}, ce qui vous
-permet de les construire plus tard même sans accès réseau. C'est une
-extension de l'option @code{--source} et peut accepter l'un des arguments
-facultatifs suivants :
-
-@table @code
-@item package
-Cette valeur fait que l'option @code{--sources} se comporte comme l'option
-@code{--source}.
-
-@item all
-Construit les dérivations des sources de tous les paquets, dont les sources
-qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
-
-@example
-$ guix build --sources tzdata
-The following derivations will be built:
- /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
- /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
-@end example
-
-@item transitive
-Construire les dérivations des sources de tous les paquets, ainsi que toutes
-celles des entrées transitives des paquets. On peut par exemple utiliser
-cette option pour précharger les sources des paquets pour les construire
-plus tard hors ligne.
-
-@example
-$ guix build --sources=transitive tzdata
-The following derivations will be built:
- /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
- /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
- /gnu/store/@dots{}-grep-2.21.tar.xz.drv
- /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
- /gnu/store/@dots{}-make-4.1.tar.xz.drv
- /gnu/store/@dots{}-bash-4.3.tar.xz.drv
-@dots{}
-@end example
-
-@end table
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of the
-system type of the build host. The @command{guix build} command allows you
-to repeat this option several times, in which case it builds for all the
-specified systems; other commands ignore extraneous @option{-s} options.
-
-@quotation Remarque
-Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
-ne doit pas être confondu avec une compilation croisée. Voir
-@code{--target} ci-dessous pour des informations sur la compilation croisée.
-@end quotation
-
-Par exemple, passer @code{--system=i686-linux} sur un système
-@code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
-@code{aarch64-linux} vous permet de construire des paquets dans un
-environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
-option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
-
-@quotation Remarque
-La possibilité de construire pour un système @code{armhf-linux} est activé
-sans condition sur les machines @code{aarch64-linux}, bien que certaines
-puces aarch64 n'en soient pas capables, comme les ThunderX.
-@end quotation
-
-De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
-est activée (@pxref{Services de virtualisation,
-@code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
-quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
-installé.
-
-Les constructions pour un autre système que celui de la machine que vous
-utilisez peuvent aussi être déchargées à une machine distante de la bonne
-architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
-déchargement.
-
-@item --target=@var{triplet}
-@cindex compilation croisée
-Effectuer une compilation croisée pour @var{triplet} qui doit être un
-triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
-target triplets, GNU configuration triplets,, autoconf, Autoconf}).
-
-@anchor{vérification de la construction}
-@item --check
-@cindex déterminisme, vérification
-@cindex reproductibilité, vérification
-Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
-le dépôt et lève une erreur si les résultats des constructions ne sont pas
-identiques bit-à-bit.
-
-Ce mécanisme vous permet de vérifier si les substituts précédemment
-installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
-construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
-pour plus d'informations et pour les outils.
-
-Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
-dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
-l'étude des différences entre les deux résultats.
-
-@item --repair
-@cindex réparer les éléments du dépôt
-@cindex corruption, récupérer de
-Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
-les téléchargeant ou en les construisant à nouveau.
-
-Cette opération n'est pas atomique et donc restreinte à l'utilisateur
-@code{root}
-
-@item --derivations
-@itemx -d
-Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
-donnés.
-
-@item --root=@var{fichier}
-@itemx -r @var{fichier}
-@cindex racines du GC, ajout
-@cindex ajout de racines au ramasse-miettes
-Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
-en tant que racine du ramasse-miettes.
-
-En conséquence, les résultats de cette invocation de @command{guix build}
-sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
-supprimé. Lorsque cette option est omise, les constructions sont
-susceptibles d'être glanées.
-
-@item --log-file
-@cindex journaux de construction, accès
-Renvoie les noms des journaux de construction ou les URL des
-@var{package-or-derivation} donnés ou lève une erreur si les journaux de
-construction sont absents.
-
-Cela fonctionne indépendamment de la manière dont les paquets ou les
-dérivations sont spécifiées. Par exemple, les invocations suivantes sont
-équivalentes :
-
-@example
-guix build --log-file `guix build -d guile`
-guix build --log-file `guix build guile`
-guix build --log-file guile
-guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
-@end example
-
-Si un journal n'est pas disponible localement, à moins que
-@code{--no-substitutes} ne soit passé, la commande cherche un journal
-correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
-@code{--substitute-urls}.)
-
-Donc par exemple, imaginons que vous souhaitiez voir le journal de
-construction de GDB sur MIPS, mais que vous n'avez qu'une machine
-@code{x86_64} :
-
-@example
-$ guix build --log-file gdb -s mips64el-linux
-https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
-@end example
-
-Vous pouvez accéder librement à un vaste bibliothèque de journaux de
-construction !
-@end table
-
-@node Débogage des échecs de construction
-@subsection Débogage des échecs de construction
-
-@cindex échecs de construction, débogage
-Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
-passerez probablement du temps à déboguer et modifier la construction
-jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
-construction vous-même dans un environnement le plus proche possible de
-celui qu'utilise le démon de construction.
-
-Pour cela, la première chose à faire est d'utiliser l'option
-@option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
-l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
-par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
-
-À partir de là, vous pouvez vous déplacer dans l'arborescence de
-construction et sourcer le fichier @file{environment-variables}, qui
-contient toutes les variables d'environnement qui étaient définies lorsque
-la construction a échoué. Disons que vous déboguez un échec de construction
-dans le paquet @code{foo} ; une session typique ressemblerait à cela :
-
-@example
-$ guix build foo -K
-@dots{} @i{build fails}
-$ cd /tmp/guix-build-foo.drv-0
-$ source ./environment-variables
-$ cd foo-1.2
-@end example
-
-Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
-(presque) et corriger le processus de construction.
-
-Parfois il arrive que, par exemple, les tests d'un paquet réussissent
-lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
-le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
-contrairement à notre environnement au-dessus, l'accès réseau est
-indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
-
-Dans ce cas, vous pourriez avoir besoin de lancer le processus de
-construction dans un conteneur similaire à celui que le démon crée :
-
-@example
-$ guix build -K foo
-@dots{}
-$ cd /tmp/guix-build-foo.drv-0
-$ guix environment --no-grafts -C foo --ad-hoc strace gdb
-[env]# source ./environment-variables
-[env]# cd foo-1.2
-@end example
-
-Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
-shell dedans (@pxref{Invoquer guix environment}). La partie
-@command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
-@command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
-débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
-environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
-plus d'informations sur les greffes).
-
-Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
-de construction, on peut enlever @file{/bin/sh} :
-
-@example
-[env]# rm /bin/sh
-@end example
-
-Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
-conteneur jetable créé par @command{guix environment}.
-
-La commande @command{strace} n'est probablement pas dans le chemin de
-recherche, mais on peut lancer :
-
-@example
-[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
-@end example
-
-De cette manière, non seulement vous aurez reproduit les variables
-d'environnement utilisées par le démon, mais vous lancerez aussi le
-processus de construction dans un conteneur similaire à celui utilisé par le
-démon.
-
-
-@node Invoquer guix edit
-@section Invoquer @command{guix edit}
-
-@cindex @command{guix edit}
-@cindex définition de paquets, modification
-Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
-facilite la vie des utilisateurs et des empaqueteurs en plaçant leur éditeur
-sur le fichier source qui contient la définition des paquets spécifiés. Par
-exemple :
-
-@example
-guix edit gcc@@4.9 vim
-@end example
-
-@noindent
-lance le programme spécifié dans la variable d'environnement @code{VISUAL}
-ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et celle de
-Vim.
-
-Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
-ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
-(@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
-Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
-actuellement dans le dépôt.
-
-
-@node Invoquer guix download
-@section Invoquer @command{guix download}
-
-@cindex @command{guix download}
-@cindex télécharger les sources des paquets
-En écrivant des définitions de paquets, les développeurs ont généralement
-besoin de télécharger une archive des sources, calculer son hash SHA256 et
-écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
-L'outil @command{guix download} aide à cette tâche : il télécharge un
-fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
-le dépôt et son hash SHA56.
-
-Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
-passante : lorsque les développeurs finissent par construire le paquet
-nouvellement défini avec @command{guix build}, l'archive des sources n'aura
-pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
-le dépôt. C'est aussi une manière pratique de garder des fichiers
-temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
-
-La commande @command{guix download} supporte les mêmes URI que celles
-utilisées dans les définitions de paquets. En particulier, elle supporte
-les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
-supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
-l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
-erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
-bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
-
-@command{guix download} vérifie les certificats du serveur HTTPS en
-chargeant les autorités de certification X.509 depuis le répertoire vers
-lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
-
-Les options suivantes sont disponibles :
-
-@table @code
-@item --format=@var{fmt}
-@itemx -f @var{fmt}
-Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
-d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
-
-@item --no-check-certificate
-Ne pas valider les certificats HTTPS des serveurs.
-
-Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
-garanti} que vous communiquez avec le serveur authentique responsable de
-l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
-milieu ».
-
-@item --output=@var{fichier}
-@itemx -o @var{fichier}
-Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
-au dépôt.
-@end table
-
-@node Invoquer guix hash
-@section Invoquer @command{guix hash}
-
-@cindex @command{guix hash}
-La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
-surtout un outil pour simplifier la vie des contributeurs de la distribution
-: il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
-la définition d'un paquet (@pxref{Définition des paquets}).
-
-La syntaxe générale est :
-
-@example
-guix hash @var{option} @var{fichier}
-@end example
-
-Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
-hash des données lues depuis l'entrée standard. @command{guix hash} a les
-options suivantes :
-
-@table @code
-
-@item --format=@var{fmt}
-@itemx -f @var{fmt}
-Écrit le hash dans le format spécifié par @var{fmt}.
-
-Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
-(@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
-
-Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
-affichera le hash en @code{nix-base32}. Cette représentation est utilisée
-dans les définitions des paquets.
-
-@item --recursive
-@itemx -r
-Calcule le hash sur @var{fichier} récursivement.
-
-@c FIXME: Replace xref above with xref to an ``Archive'' section when
-@c it exists.
-Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
-dont ses enfants si c'est un répertoire. Certaines métadonnées de
-@var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
-est un fichier normal, le hash est différent que le @var{fichier} soit
-exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
-sur le hash (@pxref{Invoquer guix archive}).
-
-@item --exclude-vcs
-@itemx -x
-Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
-système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
-
-@vindex git-fetch
-Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
-avec la méthode @code{git-fetch} (@pxref{Référence des origines}) :
-
-@example
-$ git clone http://example.org/foo.git
-$ cd foo
-$ guix hash -rx .
-@end example
-@end table
-
-@node Invoquer guix import
-@section Invoquer @command{guix import}
-
-@cindex importer des paquets
-@cindex paquets importés
-@cindex conversion de paquets
-@cindex Invoquer @command{guix import}
-La commande @command{guix import} est utile pour les gens qui voudraient
-ajouter un paquet à la distribution avec aussi peu de travail que possible —
-une demande légitime. La commande connaît quelques dépôts logiciels d'où
-elle peut « importer » des métadonnées de paquets. Le résultat est une
-définition de paquet, ou un modèle de définition, dans le format reconnu par
-Guix (@pxref{Définition des paquets}).
-
-La syntaxe générale est :
-
-@example
-guix import @var{importer} @var{options}@dots{}
-@end example
-
-@var{importer} spécifie la source depuis laquelle importer des métadonnées
-de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
-options spécifiques à @var{importer}. Actuellement les « importateurs »
-disponibles sont :
-
-@table @code
-@item gnu
-Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
-la dernière version de ce paquet GNU, avec le hash de son archive, le
-synopsis et la description canonique.
-
-Les informations supplémentaires comme les dépendances du paquet et sa
-licence doivent être renseignées manuellement.
-
-Par exemple, la commande suivante renvoie une définition de paquets pour
-GNU@tie{}Hello :
-
-@example
-guix import gnu hello
-@end example
-
-Les options spécifiques sont :
-
-@table @code
-@item --key-download=@var{politique}
-Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
-OpenPGP manquantes lors de la vérification de la signature d'un paquet.
-@xref{Invoquer guix refresh, @code{--key-download}}.
-@end table
-
-@item pypi
-@cindex pypi
-Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
-paquets Python}. Les informations sont récupérées à partir de la
-description en JSON disponible sur @code{pypi.python.org} et inclus
-généralement toutes les informations utiles, dont les dépendances des
-paquets. Pour une efficacité maximale, il est recommandé d'installer
-l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
-wheels Python et récupérer les informations contenues à l'intérieur.
-
-La commande ci-dessous importe les métadonnées du paquet Python
-@code{itsdangerous} :
-
-@example
-guix import pypi itsdangerous
-@end example
-
-@table @code
-@item --recursive
-@itemx -r
-Traverse le graphe des dépendances du paquet amont donné et génère les
-expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
-@end table
-
-@item gem
-@cindex gem
-Importe des métadonnées de @uref{https://rubygems.org/, RubyGems}. Les
-informations sont récupérées au format JSON disponible sur
-@code{rubygems.org} et inclut les informations les plus utiles, comme les
-dépendances à l'exécution. Il y a des cependant quelques restrictions. Les
-métadonnées ne distinguent pas synopsis et description, donc la même chaîne
-est utilisée pour les deux champs. En plus, les détails des dépendances non
-Ruby requises pour construire des extensions natives sont indisponibles et
-laissé en exercice à l'empaqueteur.
-
-La commande ci-dessous importe les métadonnées pour le paquet Ruby
-@code{rails} :
-
-@example
-guix import gem rails
-@end example
-
-@table @code
-@item --recursive
-@itemx -r
-Traverse le graphe des dépendances du paquet amont donné et génère les
-expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
-@end table
-
-@item cpan
-@cindex CPAN
-Importe des métadonnées de @uref{https://www.metacpan.org/, MetaCPAN}. Les
-informations sont récupérées au format JSON disponible à travers
-@uref{https://fastapi.metacpan.org/, l'API de MetaCPAN} et inclus les
-informations les plus utiles, comme les dépendances des modules.
-L'information sur les licences doit être vérifiée avec attention. Si Perl
-est disponible dans le dépôt, alors l'utilitaire @code{corelist} sera
-utiliser pour exclure les modules du cœur de la distribution Perl de la
-liste des dépendances.
-
-La commande ci-dessous importe les métadonnées du module Perl
-@code{Acme::Boolean} :
-
-@example
-guix import cpan Acme::Boolean
-@end example
-
-@item cran
-@cindex CRAN
-@cindex Bioconductor
-Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
-dépôt central de @uref{http://r-project.org, l'environnement statistique et
-graphique GUN@tie{}R}.
-
-Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
-
-La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
-
-@example
-guix import cran Cairo
-@end example
-
-Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
-le graphe des dépendances du paquet amont récursivement et générera des
-expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
-
-Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
-sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
-répertoire de paquets R pour l'analyse et la compréhension de données
-génomiques volumineuses en bioinformatique.
-
-Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
-publié sur l'interface web du dépôt SVN de Bioconductor.
-
-La commande ci-dessous importe les métadonnées du paquet R
-@code{GenomicRanges} :
-
-@example
-guix import cran --archive=bioconductor GenomicRanges
-@end example
-
-@item texlive
-@cindex TeX Live
-@cindex CTAN
-Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
-réseau complète pour les paquets TeX qui font partie de la
-@uref{https://www.tug.org/texlive/, distribution TeX Live}.
-
-Les informations sur les paquets sont obtenues à travers l'API XML fournie
-par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
-projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
-d'archives versionnées.
-
-La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
-:
-
-@example
-guix import texlive fontspec
-@end example
-
-Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
-n'est pas téléchargé depuis le sous-répertoire @file{latex} du
-l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
-depuis le répertoire voisin spécifié sous la même racine.
-
-La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
-depuis CTAN en récupérant les sources depuis le répertoire
-@file{texmf/source/generic} :
-
-@example
-guix import texlive --archive=generic ifxetex
-@end example
-
-@item json
-@cindex JSON, import
-Importe des métadonnées d'un fichier JSON local. Considérez l'exemple
-suivant d'une définition de paquet au format JSON :
-
-@example
-@{
- "name": "hello",
- "version": "2.10",
- "source": "mirror://gnu/hello/hello-2.10.tar.gz",
- "build-system": "gnu",
- "home-page": "https://www.gnu.org/software/hello/",
- "synopsis": "Hello, GNU world: An example GNU package",
- "description": "GNU Hello prints a greeting.",
- "license": "GPL-3.0+",
- "native-inputs": ["gcc@@6"]
-@}
-@end example
-
-Les noms des champs sont les mêmes que pour les enregistrements de
-@code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
-paquets sont fournies comme des listes JSON de chaînes de spécifications de
-paquets comme @code{guile} ou @code{guile@@2.0}.
-
-L'importateur supporte aussi une définition plus explicite des sources avec
-les champs habituels pour les enregistrements @code{<origin>} :
-
-@example
-@{
- @dots{}
- "source": @{
- "method": "url-fetch",
- "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
- "sha256": @{
- "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
- @}
- @}
- @dots{}
-@}
-@end example
-
-La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
-et renvoie une expression de paquet :
-
-@example
-guix import json hello.json
-@end example
-
-@item nix
-Importe les métadonnées d'une copie locale des source de
-@uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
-repose sur la commande @command{nix-instantiate} de
-@uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
-Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
-Bash. Cette commande n'importe que la structure de haut-niveau du paquet
-qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
-de base de la définition d'un paquet.
-
-Lorsque vous importez un paquet GNU, le synopsis et la description sont
-replacés par la version canonique en amont.
-
-Normalement, vous devrez d'abord faire :
-
-@example
-export NIX_REMOTE=daemon
-@end example
-
-@noindent
-pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
-de Nix.
-
-Par exemple, la commande ci-dessous importe la définition du paquet de
-LibreOffice (plus précisément, elle importe la définition du paquet lié à
-l'attribut de plus haut-niveau @code{libreoffice}) :
-
-@example
-guix import nix ~/path/to/nixpkgs libreoffice
-@end example
-
-@item hackage
-@cindex hackage
-Importe les métadonnées de l'archive de paquets centrale de la communauté
-Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
-sont récupérées depuis les fichiers Cabal et incluent toutes les
-informations utiles, dont les dépendances des paquets.
-
-Les options spécifiques sont :
-
-@table @code
-@item --stdin
-@itemx -s
-Lit un fichier Cabal depuis l'entrée standard.
-@item --no-test-dependencies
-@itemx -t
-N'inclut pas les dépendances requises uniquement par les suites de tests.
-@item --cabal-environment=@var{alist}
-@itemx -e @var{alist}
-@var{alist} est une alist Scheme qui définie l'environnement dans lequel les
-conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
-@code{arch}, @code{impl} et une représentation sous forme de chaîne de
-caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
-le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
-doivent se conformer avec la définition du format de fichiers Cabal. La
-valeur par défaut associée avec les clefs @code{os}, @code{arch} et
-@code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
-@item --recursive
-@itemx -r
-Traverse le graphe des dépendances du paquet amont donné et génère les
-expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
-@end table
-
-La commande ci-dessous importe les métadonnées de la dernière version du
-paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
-spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
-:
-
-@example
-guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
-@end example
-
-Une version spécifique du paquet peut éventuellement être spécifiée en
-faisant suivre le nom du paquet par un arobase et un numéro de version comme
-dans l'exemple suivant :
-
-@example
-guix import hackage mtl@@2.1.3.1
-@end example
-
-@item stackage
-@cindex stackage
-L'importateur @code{stackage} est une enveloppe autour de l'importateur
-@code{hackage}. Il prend un nom de paquet, recherche la version incluse
-dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
-Stackage} et utilise l'importateur @code{hackage} pour récupérer les
-métadonnées. Remarquez que c'est à vous de choisir une version LTS
-compatible avec le compilateur GHC utilisé par Guix.
-
-Les options spécifiques sont :
-
-@table @code
-@item --no-test-dependencies
-@itemx -t
-N'inclut pas les dépendances requises uniquement par les suites de tests.
-@item --lts-version=@var{version}
-@itemx -l @var{version}
-@var{version} est la version LTS désirée. Si elle est omise, la dernière
-version est utilisée.
-@item --recursive
-@itemx -r
-Traverse le graphe des dépendances du paquet amont donné et génère les
-expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
-@end table
-
-La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
-inclus dans la version LTS 7.18 de Stackage :
-
-@example
-guix import stackage --lts-version=7.18 HTTP
-@end example
-
-@item elpa
-@cindex elpa
-Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
-Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
-
-Les options spécifiques sont :
-
-@table @code
-@item --archive=@var{repo}
-@itemx -a @var{repo}
-@var{repo} identifie le dépôt d'archive depuis lequel récupérer les
-informations. Actuellement les dépôts supportés et leurs identifiants sont
-:
-@itemize -
-@item
-@uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
-l'identifiant @code{gnu}. C'est la valeur par défaut.
-
-Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
-porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
-similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
-package signatures,, emacs, The GNU Emacs Manual}).
-
-@item
-@uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
-sélectionner avec l'identifiant @code{melpa-stable}.
-
-@item
-@uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
-l'identifiant @code{melpa}.
-@end itemize
-
-@item --recursive
-@itemx -r
-Traverse le graphe des dépendances du paquet amont donné et génère les
-expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
-@end table
-
-@item crate
-@cindex crate
-Importe les métadonnées du répertoire des paquets Rust
-@uref{https://crates.io, crates.io}.
-
-@item opam
-@cindex OPAM
-@cindex OCaml
-Importe les métadonnées du répertoire de paquets
-@uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml.
-@end table
-
-La structure du code de @command{guix import} est modulaire. Il serait
-utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
-aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
-
-@node Invoquer guix refresh
-@section Invoquer @command{guix refresh}
-
-@cindex @command{guix refresh}
-L'audience première de la commande @command{guix refresh} est l'ensemble des
-développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
-les paquets fournis par la distribution qui sont en retard par rapport aux
-dernières versions disponibles en amont, comme ceci :
-
-@example
-$ guix refresh
-gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
-gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
-@end example
-
-Autrement, on peut spécifier les paquets à considérer, auquel cas un
-avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
-mise à jour associé :
-
-@example
-$ guix refresh coreutils guile guile-ssh
-gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
-gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
-@end example
-
-@command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
-le numéro de version le plus élevé parmi les versions publiées. La commande
-sait comment mettre à jour certains types de paquets : les paquets GNU, les
-paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
-Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
-déterminer si une nouvelle version est disponible en amont. Cependant, le
-mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
-une nouvelle méthode !
-
-@table @code
-
-@item --recursive
-Considère les paquets spécifiés et tous les paquets dont ils dépendent.
-
-@example
-$ guix refresh --recursive coreutils
-gnu/packages/acl.scm:35:2: warning: no updater for acl
-gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
-gnu/packages/xml.scm:68:2: warning: no updater for expat
-gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
-@dots{}
-@end example
-
-@end table
-
-Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
-@command{guix refresh} a besoin d'un peu d'aide. La plupart des
-gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
-les définitions de paquets, ce qui peut être utilisé à cette fin :
-
-@example
-(define-public network-manager
- (package
- (name "network-manager")
- ;; @dots{}
- (properties '((upstream-name . "NetworkManager")))))
-@end example
-
-Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
-source de la distribution pour mettre à jour le numéro de version et le hash
-de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
-Cela est effectué en téléchargeant la dernière version de l'archive des
-sources de chaque paquet et des signatures associées, en authentifiant
-l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
-calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
-manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
-récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
-clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
-refresh} rapporte une erreur.
-
-Les options suivantes sont supportées :
-
-@table @code
-
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Considérer le paquet évalué par @var{expr}.
-
-C'est utile pour précisément se référer à un paquet, comme dans cet exemple
-:
-
-@example
-guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
-@end example
-
-Cette commande liste les paquets qui dépendent de la libc « finale » (en
-gros tous les paquets).
-
-@item --update
-@itemx -u
-Met à jour les fichiers source de la distribution (les recettes de paquets)
-en place. Cette option est généralement utilisée depuis une copie du dépôt
-git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
-
-@example
-$ ./pre-inst-env guix refresh -s non-core -u
-@end example
-
-@xref{Définition des paquets}, pour plus d'information sur les définitions des
-paquets.
-
-@item --select=[@var{subset}]
-@itemx -s @var{subset}
-Choisi tous les paquets dans @var{subset}, entre @code{core} et
-@code{non-core}.
-
-Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
-distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
-tout le reste ». Cela comprend GCC, libc, Binutils, Bash, etc.
-Habituellement, changer l'un de ces paquets dans la distribution implique de
-reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
-pour les utilisateurs, en terme de temps de compilation et de bande passante
-utilisés pour effectuer la mise à jour.
-
-Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
-habituellement utile dans les cas où une mise à jour des paquets du cœur
-serait dérangeante.
-
-@item --manifest=@var{fichier}
-@itemx -m @var{fichier}
-Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
-vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
-jour.
-
-@item --type=@var{updater}
-@itemx -t @var{updater}
-Chois uniquement les paquets pris en charge par @var{updater}
-(éventuellement une liste de gestionnaires de mise à jour séparés par des
-virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
-:
-
-@table @code
-@item gnu
-le gestionnaire de mise à jour pour les paquets GNU ;
-@item gnome
-le gestionnaire de mise à jour pour les paquets GNOME ;
-@item kde
-le gestionnaire de mise à jour pour les paquets KDE ;
-@item xorg
-le gestionnaire de mise à jour pour les paquets X.org ;
-@item kernel.org
-le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
-@item elpa
-le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
-ELPA} ;
-@item cran
-le gestionnaire de mise à jour pour les paquets
-@uref{https://cran.r-project.org/, CRAN} ;
-@item bioconductor
-le gestionnaire de mise à jour pour les paquets
-@uref{https://www.bioconductor.org/, Bioconductor} ;
-@item cpan
-le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
-CPAN} ;
-@item pypi
-le gestionnaire de mise à jour pour les paquets
-@uref{https://pypi.python.org, PyPI} ;
-@item gem
-le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
-RubyGems} ;
-@item github
-le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
-GitHub} ;
-@item hackage
-le gestionnaire de mise à jour pour les paquets
-@uref{https://hackage.haskell.org, Hackage} ;
-@item stackage
-le gestionnaire de mise à jour pour les paquets
-@uref{https://www.stackage.org, Stackage} ;
-@item crate
-le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
-Crates} ;
-@item launchpad
-le gestionnaire de mise à jour pour les paquets @uref{https://launchpad.net,
-Launchpad}
-@end table
-
-Par exemple, la commande suivante ne vérifie que les mises à jour des
-paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
-
-@example
-$ guix refresh --type=elpa,cran
-gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
-gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
-@end example
-
-@end table
-
-En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
-paquets, comme dans cet exemple :
-
-@example
-$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
-@end example
-
-@noindent
-La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
-@code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
-
-Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
-de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
-vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
-avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
-
-@table @code
-
-@item --list-updaters
-@itemx -L
-Liste les gestionnaires de mise à jour et quitte (voir l'option
-@option{--type} plus haut).
-
-Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
-la fin, affiche le pourcentage de paquets couverts par tous les
-gestionnaires.
-
-@item --list-dependent
-@itemx -l
-Liste les paquets de plus haut-niveau qui devraient être reconstruits après
-la mise à jour d'un ou plusieurs paquets.
-
-@xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
-graph}}, pour des informations sur la manière de visualiser la liste des
-paquets dépendant d'un autre.
-
-@end table
-
-Soyez conscients que l'option @code{--list-dependent} ne fait
-@emph{qu'approximer} les reconstructions qui seraient requises par une mise
-à jour. Plus de reconstructions pourraient être requises dans certaines
-circonstances.
-
-@example
-$ guix refresh --list-dependent flex
-Building the following 120 packages would ensure 213 dependent packages are rebuilt:
-hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
-@end example
-
-La commande ci-dessus liste un ensemble de paquets qui peuvent être
-construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
-
-@table @code
-
-@item --list-transitive
-Lister tous les paquets dont un paquet ou plus dépendent.
-
-@example
-$ guix refresh --list-transitive flex
-flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
-bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{}
-@end example
-
-@end table
-
-La commande ci-dessus liste un ensemble de paquets qui, lorsqu'ils sont
-modifiés, causent la reconstruction de @code{flex}.
-
-Les options suivante peuvent être utilisées pour personnaliser les
-opérations avec GnuPG :
-
-@table @code
-
-@item --gpg=@var{commande}
-Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
-recherchée dans @code{PATH}.
-
-@item --keyring=@var{fichier}
-Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
-doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
-un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
-manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
-Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
-fichiers keybox).
-
-Lorsque cette option est omise, @command{guix refresh} utilise
-@file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
-clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
-clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
-(voir @option{--key-download} plus bas).
-
-Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
-fichier keybox avec une commande telle que :
-
-@example
-gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
-@end example
-
-De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
-comme ceci :
-
-@example
-gpg --no-default-keyring --keyring mykeyring.kbx \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
-@end example
-
-@ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
-Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
-GPG.
-
-@item --key-download=@var{politique}
-Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
-l'une des suivantes :
-
-@table @code
-@item always
-Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
-ajouter au porte-clefs de l'utilisateur.
-
-@item never
-Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
-place.
-
-@item interactive
-Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
-à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
-par défaut.
-@end table
-
-@item --key-server=@var{host}
-Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
-clef publique.
-
-@end table
-
-Le gestionnaire de mises à jour @code{github} utilise
-@uref{https://developer.github.com/v3/, l'API de GitHub} pour faire des
-requêtes sur les nouvelles versions. Lorsqu'elle est utilisé de manière
-répétée, p.@: ex.@: lorsque vous vérifiez tous les paquets, GitHub finira
-par refuser de répondre à d'autres requêtes de l'API. Par défaut 60
-requêtes à l'heure sont autorisées, et une vérification complète de tous les
-paquets GitHub dans Guix requiert bien plus que cela. L'authentification
-avec GitHub à travers l'utilisation d'un jeton d'API lève ces limites. Pour
-utiliser un jeton de l'API, initialisez la variable d'environnement
-@code{GUIX_GITHUB_TOKEN} avec un jeton que vous vous serez procuré sur
-@uref{https://github.com/settings/tokens} ou autrement.
-
-
-@node Invoquer guix lint
-@section Invoquer @command{guix lint}
-
-@cindex @command{guix lint}
-@cindex paquets, chercher des erreurs
-La commande @command{guix lint} est conçue pour aider les développeurs à
-éviter des erreurs commune et à utiliser un style cohérent lors de
-l'écriture de recettes de paquets. Elle lance des vérifications sur un
-ensemble de paquets donnés pour trouver des erreurs communes dans leur
-définition. Les @dfn{vérifieurs} disponibles comprennent (voir
-@code{--list-checkers} pour une liste complète) :
-
-@table @code
-@item synopsis
-@itemx description
-Vérifie certaines règles typographiques et stylistiques dans les
-descriptions et les synopsis.
-
-@item inputs-should-be-native
-Identifie les entrées qui devraient sans doute plutôt être des entrées
-natives.
-
-@item source
-@itemx home-page
-@itemx mirror-url
-@itemx github-url
-@itemx source-file-name
-Sonde les URL @code{home-page} et @code{source} et rapporte celles qui sont
-invalides. Suggère une URL en @code{mirror://} lorsque c'est possible. Si
-l'URL de @code{source} redirige vers une URL GitHub, recommande d'utiliser
-l'URL GitHub. Vérifie que le nom du fichier source a un sens, p.@: ex.@:
-qu'il ne s'agisse pas juste d'un numéro de version ou « git-checkout », sans
-avoir déclaré un @code{file-name} (@pxref{Référence des origines}).
-
-@item source-unstable-tarball
-Analyse l'URL @code{source} pour déterminer si une archive de GitHub est
-autogénérée ou s'il s'agit d'une archive de publication. Malheureusement
-les archives autogénérées de GitHub sont parfois régénérées.
-
-@item cve
-@cindex vulnérabilités
-@cindex CVE, Common Vulnerabilities and Exposures
-Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
-(Common Vulnerabilities and Exposures) de l'année en cours et des années
-précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
-NIST américain}.
-
-Pour voir les informations sur une vulnérabilité en particulier, visitez les
-pages :
-
-@itemize
-@item
-@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
-@item
-@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
-@end itemize
-
-@noindent
-où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
-@code{CVE-2015-7554}.
-
-Les développeurs de paquets peuvent spécifier dans les recettes des paquets
-le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
-et la version du paquet s'ils diffèrent du nom et de la version que Guix
-utilise, comme dans cet exemple :
-
-@example
-(package
- (name "grub")
- ;; @dots{}
- ;; CPE calls this package "grub2".
- (properties '((cpe-name . "grub2")
- (cpe-version . "2.3")))
-@end example
-
-@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
-Certaines entrées dans la base de données CVE ne spécifient pas la version
-du paquet auquel elles s'appliquent et lui restera donc attachée pour
-toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
-qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
-
-@example
-(package
- (name "t1lib")
- ;; @dots{}
- ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
- (properties `((lint-hidden-cve . ("CVE-2011-0433"
- "CVE-2011-1553"
- "CVE-2011-1554"
- "CVE-2011-5244")))))
-@end example
-
-@item formatting
-Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
-source évident : des espaces en fin de ligne, des tabulations, etc.
-@end table
-
-La syntaxe générale est :
-
-@example
-guix lint @var{options} @var{package}@dots{}
-@end example
-
-Si aucun paquet n'est donné par la ligne de commande, tous les paquets
-seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
-options suivantes :
-
-@table @code
-@item --list-checkers
-@itemx -l
-Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
-paquets puis quitte.
-
-@item --checkers
-@itemx -c
-N'active que les vérificateurs spécifiés dans une liste de noms séparés par
-des virgules parmi la liste renvoyée par @code{--list-checkers}.
-
-@end table
-
-@node Invoquer guix size
-@section Invoquer @command{guix size}
-
-@cindex taille
-@cindex paquet, taille
-@cindex closure
-@cindex @command{guix size}
-La commande @command{guix size} aide les développeurs à dresser un profil de
-l'utilisation du disque que font les paquets. C'est facile de négliger
-l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
-l'utilisation d'une sortie unique pour un paquet qui pourrait être
-facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
-problèmes que @command{guix size} peut typiquement mettre en valeur.
-
-On peut passer un ou plusieurs spécifications de paquets à la commande,
-comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
-dépôt. Regardez cet exemple :
-
-@example
-$ guix size coreutils
-store item total self
-/gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
-/gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
-/gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
-/gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
-/gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
-/gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
-/gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
-/gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
-total: 78.9 MiB
-@end example
-
-@cindex closure
-Les éléments du dépôt listés ici constituent la @dfn{clôture transitive} de
-Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
-comme ce qui serait renvoyé par :
-
-@example
-$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
-@end example
-
-Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
-première colonne, nommée « total », montre la taille en mébioctet (Mio) de
-la clôture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
-taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
-la taille de l'élément lui-même. La dernière colonne montre le ration de la
-taille de l'élément lui-même par rapport à celle de tous les éléments
-montrés.
-
-Dans cet exemple, on voit que la clôture de Coreutils pèse 79@tie{}Mio, dont
-la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
-n'est pas un problème en soit que la libc et les bibliothèques de GCC
-représentent une grande part de la clôture parce qu'elles sont toujours
-disponibles sur le système de toute façon).
-
-Lorsque les paquets passés à @command{guix size} sont disponibles dans le
-dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
-@emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
-@code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
-informations sur les greffes}, @command{guix size} demande au démon de
-déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
-@command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
-Coreutils}).
-
-Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
-size} rapporte les informations en se basant sur les substituts disponibles
-(@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
-éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
-distance.
-
-Vous pouvez aussi spécifier plusieurs noms de paquets :
-
-@example
-$ guix size coreutils grep sed bash
-store item total self
-/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
-/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
-/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
-/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
-@dots{}
-total: 102.3 MiB
-@end example
-
-@noindent
-Dans cet exemple on voit que la combinaison des quatre paquets prend
-102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clôtures
-puisqu'ils ont beaucoup de dépendances en commun.
-
-Les options disponibles sont :
-
-@table @option
-
-@item --substitute-urls=@var{urls}
-Utilise les informations de substituts de @var{urls}.
-@xref{client-substitute-urls, the same option for @code{guix build}}.
-
-@item --sort=@var{clef}
-Trie les lignes en fonction de la @var{clef}, l'une des options suivantes :
-
-@table @code
-@item self
-la taille de chaque élément (par défaut) ;
-@item closure
-la taille totale de la clôture de l'élément.
-@end table
-
-@item --map-file=@var{fichier}
-Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
-
-Pour l'exemple au-dessus, le schéma ressemble à ceci :
-
-@image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
-Coreutils produit par @command{guix size}}
-
-Cette option requiert l'installation de
-@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
-soit visible dans le chemin de recherche des modules Guile. Lorsque ce
-n'est pas le cas, @command{guix size} plante en essayant de le charger.
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
-
-@end table
-
-@node Invoquer guix graph
-@section Invoque @command{guix graph}
-
-@cindex DAG
-@cindex @command{guix graph}
-@cindex dépendances des paquets
-Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
-un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
-une représentation mentale du DAG d'un paquet, donc la commande
-@command{guix graph} fournit une représentation visuelle du DAG. Par
-défaut, @command{guix graph} émet un représentation du DAG dans le format
-d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
-puisse être passée directement à la commande @command{dot} de Graphviz.
-Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
-un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
-@uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
-construire un graphe dans une base de donnée de graphes supportant le
-langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
-syntaxe générale est :
-
-@example
-guix graph @var{options} @var{paquet}@dots{}
-@end example
-
-Par exemple, la commande suivante génère un fichier PDF représentant le DAG
-du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
-compilation :
-
-@example
-guix graph coreutils | dot -Tpdf > dag.pdf
-@end example
-
-La sortie ressemble à ceci :
-
-@image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
-
-Joli petit graphe, non ?
-
-Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
-graphe des objets paquets, en omettant les entrées implicites comme GCC,
-libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
-parfois on veut voir plus de détails. @command{guix graph} supporte
-plusieurs types de graphes, qui vous permettent de choisir le niveau de
-détails :
-
-@table @code
-@item package
-C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
-des objets paquets, sans les dépendances implicites. C'est concis, mais
-omet pas mal de détails.
-
-@item reverse-package
-Cela montre le DAG @emph{inversé} des paquets. Par exemple :
-
-@example
-guix graph --type=reverse-package ocaml
-@end example
-
-…@: crée le graphe des paquets qui dépendent @emph{explicitement} d'OCaml
-(si vous vous intéressez aussi au cas où OCaml est une dépendance implicite,
-voir @code{reverse-bag} plus bas).
-
-Remarquez que pour les paquets du cœur de la distribution, cela crée des
-graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
-dépendent d'un paquet donnés, utilisez @command{guix refresh
---list-dependent} (@pxref{Invoquer guix refresh,
-@option{--list-dependent}}).
-
-@item bag-emerged
-C'est le DAG du paquet, @emph{avec} les entrées implicites.
-
-Par exemple, la commande suivante :
-
-@example
-guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
-@end example
-
-…@: montre ce graphe plus gros :
-
-@image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
-GNU Coreutils}
-
-En bas du graphe, on voit toutes les entrées implicites de
-@var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
-
-Maintenant, remarquez que les dépendances de ces entrées implicites —
-c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
-sont pas affichées, pour rester concis.
-
-@item bag
-Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
-bootstrap.
-
-@item bag-with-origins
-Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
-
-@item reverse-bag
-Cela montre le DAG @emph{inverse} des paquets. Contrairement à
-@code{reverse-package}, il montre aussi les dépendance implicites. Par
-exemple :
-
-@example
-guix graph -t reverse-bag dune
-@end example
-
-@noindent
-…@: crée le graphe des tous les paquets qui dépendent de Dune, directement
-ou indirectement. Comme Dune est une dépendance @emph{implicite} de
-nombreux paquets @i{via} @code{dune-build-system}, cela montre un plus grand
-nombre de paquets, alors que @code{reverse-package} en montrerait très peu,
-voir aucun.
-
-@item dérivation
-C'est la représentation lu plus détaillée : elle montre le DAG des
-dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
-représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
-scripts de construction, les correctifs, les modules Guile, etc.
-
-Pour ce type de graphe, il est aussi possible de passer un nom de fichier
-@file{.drv} à la place d'un nom de paquet, comme dans :
-
-@example
-guix graph -t derivation `guix system build -d my-config.scm`
-@end example
-
-@item module
-C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
-exemple, la commande suivante montre le graphe des modules de paquets qui
-définissent le paquet @code{guile} :
-
-@example
-guix graph -t module guile | dot -Tpdf > module-graph.pdf
-@end example
-@end table
-
-Tous les types ci-dessus correspondent aux @emph{dépendances à la
-construction}. Le type de graphe suivant représente les @emph{dépendances à
-l'exécution} :
-
-@table @code
-@item references
-C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
-renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
-
-Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
-@command{guix graph} essayera d'obtenir les informations sur les dépendances
-à travers les substituts.
-
-Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
-paquet. Par exemple, la commande ci-dessous produit le graphe des
-références de votre profile (qui peut être gros !) :
-
-@example
-guix graph -t references `readlink -f ~/.guix-profile`
-@end example
-
-@item referrers
-C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
-par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
-
-Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
-supposons que Inkscape est actuellement disponible dans 10 profils sur votre
-machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
-la racine est Inkscape avec 10 profils qui y sont liés.
-
-Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
-glané.
-
-@end table
-
-Les options disponibles sont les suivante :
-
-@table @option
-@item --type=@var{type}
-@itemx -t @var{type}
-Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
-des types au-dessus.
-
-@item --list-types
-Liste les types de graphes supportés.
-
-@item --backend=@var{moteur}
-@itemx -b @var{moteur}
-Produit un graphe avec le @var{moteur} choisi.
-
-@item --list-backends
-Liste les moteurs de graphes supportés.
-
-Actuellement les moteurs disponibles sont Graphviz et d3.js.
-
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Considérer le paquet évalué par @var{expr}.
-
-C'est utile pour précisément se référer à un paquet, comme dans cet exemple
-:
-
-@example
-guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
-@end example
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
-
-Le graphe de dépendance des paquets est la plupart du temps indépendant de
-l'architecture, mais il y a quelques parties qui dépendent de l'architecture
-que cette option vous permet de visualiser.
-@end table
-
-
-
-@node Invoquer guix publish
-@section Invoquer @command{guix publish}
-
-@cindex @command{guix publish}
-Le but de @command{guix publish} est de vous permettre de partager
-facilement votre dépôt avec d'autres personnes qui peuvent ensuite
-l'utiliser comme serveur de substituts (@pxref{Substituts}).
-
-Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
-à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
-signifie que toutes les machines qui font tourner Guix peuvent aussi agir
-comme une ferme de construction, puisque l'interface HTTP est compatible
-avec Hydra, le logiciel derrière la ferme de construction
-@code{@value{SUBSTITUTE-SERVER}}.
-
-Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
-destinataires de vérifier leur authenticité et leur intégrité
-(@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
-signature du système, qui n'est lisible que par l'administrateur système, il
-doit être lancé en root ; l'option @code{--user} lui fait baisser ses
-privilèges le plus tôt possible.
-
-La pair de clefs pour les signatures doit être générée avant de lancer
-@command{guix publish}, avec @command{guix archive --generate-key}
-(@pxref{Invoquer guix archive}).
-
-La syntaxe générale est :
-
-@example
-guix publish @var{options}@dots{}
-@end example
-
-Lancer @command{guix publish} sans arguments supplémentaires lancera un
-serveur HTTP sur le port 8080 :
-
-@example
-guix publish
-@end example
-
-Une fois qu'un serveur de publication a été autorisé (@pxref{Invoquer guix archive}), le démon peut télécharger des substituts à partir de lui :
-
-@example
-guix-daemon --substitute-urls=http://example.org:8080
-@end example
-
-Par défaut, @command{guix publish} compresse les archives à la volée quand
-il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
-aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
-s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
-@option{--cache}, qui active le cache des archives avant de les envoyer aux
-clients — voir les détails plus bas. La commande @command{guix weather}
-fournit un manière pratique de vérifier ce qu'un serveur fournit
-(@pxref{Invoquer guix weather}).
-
-En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
-des fichiers source référencées dans les enregistrements @code{origin}
-(@pxref{Référence des origines}). Par exemple, en supposant que @command{guix
-publish} tourne sur @code{example.org}, l'URL suivante renverra le fichier
-brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
-format @code{nix-base32}, @pxref{Invoquer guix hash}) :
-
-@example
-http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
-@end example
-
-Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
-dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
-
-@cindex journaux de construction, publication
-Les journaux de construction sont disponibles à partir des URL @code{/log}
-comme ceci :
-
-@example
-http://example.org/log/gwspk@dots{}-guile-2.2.3
-@end example
-
-@noindent
-Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
-construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
-avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
-Nous recommandons de lancer @command{guix-daemon} avec
-@code{--log-compression=gzip} parce que les navigateurs web les
-décompressent automatiquement, ce qui n'est pas le cas avec la compression
-bzip2.
-
-Les options suivantes sont disponibles :
-
-@table @code
-@item --port=@var{port}
-@itemx -p @var{port}
-Écoute les requêtes HTTP sur le @var{port}
-
-@item --listen=@var{hôte}
-Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
-accepte les connexions de n'importe quelle interface.
-
-@item --user=@var{utilisateur}
-@itemx -u @var{utilisateur}
-Charge les privilèges de @var{utilisateur} le plus vite possible —
-c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
-signature a été lue.
-
-@item --compression[=@var{niveau}]
-@itemx -C [@var{niveau}]
-Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
-zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
-différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
-meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
-
-À moins que @option{--cache} ne soit utilisé, la compression se fait à la
-volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
-charge sur la machine qui fait tourner @command{guix publish}, c'est une
-bonne idée de choisir un niveau de compression faible, de lancer
-@command{guix publish} derrière un serveur de cache ou d'utiliser
-@option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
-@command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
-réponse.
-
-@item --cache=@var{répertoire}
-@itemx -c @var{répertoire}
-Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
-@var{répertoire} et ne sert que les archives dans ce cache.
-
-Lorsque cette option est omise, les archives et les métadonnées sont crées à
-la volée. Cela réduit la bande passante disponible, surtout quand la
-compression est activée puisqu'elle pourrait être limitée par le CPU. Un
-autre inconvénient au mode par défaut est que la taille des archives n'est
-pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
-@code{Content-Length} à ses réponses, ce qui empêche les clients de savoir
-la quantité de données à télécharger.
-
-À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
-un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
-déclenche la création de l'archive — en calculant son @code{.narinfo} et en
-compressant l'archive au besoin. Une fois l'archive cachée dans
-@var{répertoire}, les requêtes suivantes réussissent et sont servies
-directement depuis le cache, ce qui garanti que les clients ont la meilleure
-bande passante possible.
-
-Le processus de création est effectué par des threads de travail. Par
-défaut, un thread par cœur du CPU est créé, mais cela peut être
-personnalisé. Voir @option{--workers} plus bas.
-
-Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
-automatiquement supprimées lorsqu'elles expirent.
-
-@item --workers=@var{N}
-Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
-thread de travail pour créer les archives.
-
-@item --ttl=@var{ttl}
-Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
-vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
-signifie 5 jours, @code{1m} signifie un mois, etc.
-
-Cela permet au Guix de l'utilisateur de garder les informations en cache
-pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
-pas lui-même que les éléments du dépôt qu'il fournit seront toujours
-disponible pendant la durée @var{ttl}.
-
-En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
-n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
-dans le dépôt peuvent être supprimées.
-
-@item --nar-path=@var{chemin}
-Utilise @var{chemin} comme préfixe des URL de fichier « nar »
-(@pxref{Invoquer guix archive, normalized archives}).
-
-Par défaut, les nars sont présents à l'URL comme
-@code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
-changer la partie @code{/nar} en @var{chemin}.
-
-@item --public-key=@var{fichier}
-@itemx --private-key=@var{fichier}
-Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
-signer les éléments avant de les publier.
-
-Les fichiers doivent correspondre à la même pair de clefs (la clef privée
-est utilisée pour signer et la clef publique est seulement ajouté aux
-métadonnées de la signature). Ils doivent contenir les clefs dans le format
-s-expression canonique produit par @command{guix archive --generate-key}
-(@pxref{Invoquer guix archive}). Par défaut,
-@file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
-utilisés.
-
-@item --repl[=@var{port}]
-@itemx -r [@var{port}]
-Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
-Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
-pour déboguer un serveur @command{guix publish} qui tourne.
-@end table
-
-Activer @command{guix publish} sur un système Guix est vraiment une seule
-ligne : instanciez simplement un service @code{guix-publish-service-type}
-dans le champs @code{services} de votre déclaration @code{operating-system}
-(@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
-
-Si vous avez installé Guix sur une « distro externe », suivez ces
-instructions :
-
-@itemize
-@item
-Si votre distro hôte utilise le système d'init systemd :
-
-@example
-# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
- /etc/systemd/system/
-# systemctl start guix-publish && systemctl enable guix-publish
-@end example
-
-@item
-Si votre distribution hôte utilise le système d'initialisation Upstart :
-
-@example
-# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
-# start guix-publish
-@end example
-
-@item
-Sinon, procédez de manière similaire avec votre système d'init de votre
-distro.
-@end itemize
-
-@node Invoquer guix challenge
-@section Invoquer @command{guix challenge}
-
-@cindex constructions reproductibles
-@cindex constructions vérifiables
-@cindex @command{guix challenge}
-@cindex défi
-Est-ce que les binaires fournis par ce serveur correspondent réellement au
-code source qu'il dit avoir construit ? Est-ce que le processus de
-construction d'un paquet est déterministe ? Ce sont les question auxquelles
-la commande @command{guix challenge} essaye de répondre.
-
-La première question est évidemment importante : avant d'utiliser un serveur
-de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
-fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
-permet la première : si les constructions des paquets sont déterministes
-alors des constructions indépendantes du paquet devraient donner le même
-résultat, bit à bit ; si un serveur fournit un binaire différent de celui
-obtenu localement, il peut être soit corrompu, soit malveillant.
-
-On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
-toutes les entrées du processus qui construit le fichier ou le répertoire —
-les compilateurs, les bibliothèques, les scripts de construction,
-etc. (@pxref{Introduction}). En supposant que les processus de construction
-sont déterministes, un nom de fichier dans le dépôt devrait correspondre
-exactement à une sortie de construction. @command{guix challenge} vérifie
-si il y a bien effectivement une seule correspondance en comparant les
-sorties de plusieurs constructions indépendantes d'un élément du dépôt
-donné.
-
-La sortie de la commande ressemble à :
-
-@smallexample
-$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
-mise à jour de la liste des substituts depuis 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
-mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
-le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
- empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
- https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
- https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
-le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
- empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
- https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
- https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
-le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
- empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
- https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
- https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
-
-@dots{}
-
-6,406 éléments du dépôt ont été analysés :
- - 4,749 (74.1%) étaient identiques
- - 525 (8.2%) étaient différents
- - 1,132 (17.7%) étaient impossibles à évaluer
-@end smallexample
-
-@noindent
-Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
-déterminer l'ensemble des dérivations construites localement — en opposition
-aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
-demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
-les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
-différent de la construction locale.
-
-@cindex non-déterminisme, dans les constructions des paquets
-Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
-différente. Inversement, @code{@value{SUBSTITUTE-SERVER}} est d'accord avec
-les constructions locale, sauf dans le cas de Git. Cela peut indiquer que
-le processus de construction de Git est non-déterministe, ce qui signifie
-que sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
-parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
-sources les plus communes de non-déterminisme comprennent l'ajout
-d'horodatage dans les résultats des constructions, l'inclusion de nombres
-aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
-@uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
-
-Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
-chose comme cela (@pxref{Invoquer guix archive}) :
-
-@example
-$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
- | guix archive -x /tmp/git
-$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
-@end example
-
-Cette commande montre les différences entre les fichiers qui résultent de la
-construction locale et des fichiers qui résultent de la construction sur
-@code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging
-Files,, diffutils, Comparing and Merging Files}). La commande
-@command{diff} fonctionne bien avec des fichiers texte. Lorsque des
-fichiers binaires diffèrent cependant, @uref{https://diffoscope.org/,
-Diffoscope} est une meilleure option. C'est un outil qui aide à visualiser
-les différences entre toute sorte de fichiers.
-
-Une fois que vous avez fait ce travail, vous pourrez dire si les différences
-sont dues au non-déterminisme du processus de construction ou à la
-malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
-les sources de non-déterminisme dans les paquets pour rendre plus facile la
-vérification des substituts, mais bien sûr, c'est un processus qui
-n'implique pas que Guix, mais une grande partie de la communauté des
-logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
-pour aider à corriger le problème.
-
-Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
-@code{@value{SUBSTITUTE-SERVER}} et d'autres serveurs de substituts
-obtiennent le même résultat que vous avec :
-
-@example
-$ guix challenge @var{paquet}
-@end example
-
-@noindent
-où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
-@code{glibc:debug}.
-
-La syntaxe générale est :
-
-@example
-guix challenge @var{options} [@var{paquets}@dots{}]
-@end example
-
-Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
-localement et celle d'un substitut fournit par un serveur, ou parmi les
-substituts fournis par différents serveurs, la commande l'affiche comme dans
-l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
-différentes de 0 indiquent d'autres sortes d'erreurs).
-
-L'option qui compte est :
-
-@table @code
-
-@item --substitute-urls=@var{urls}
-Considère @var{urls} comme la liste des URL des sources de substituts
-séparés par des espaces avec lesquels comparer les paquets locaux.
-
-@item --verbose
-@itemx -v
-Montre des détails sur les correspondances (contenu identique) en plus des
-informations sur différences.
-
-@end table
-
-@node Invoquer guix copy
-@section Invoquer @command{guix copy}
-
-@cindex copier des éléments du dépôt par SSH
-@cindex SSH, copie d'éléments du dépôt
-@cindex partager des éléments du dépôt entre plusieurs machines
-@cindex transférer des éléments du dépôt entre plusieurs machines
-La commande @command{guix copy} copie des éléments du dépôt d'une machine
-vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
-commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
-pour des détails}. Par exemple, la commande suivante copie le paquet
-@code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
-@var{hôte}, en tant qu'utilisateur @var{utilisateur} :
-
-@example
-guix copy --to=@var{utilisateur}@@@var{hôte} \
- coreutils `readlink -f ~/.guix-profile`
-@end example
-
-Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
-pas envoyés.
-
-La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
-@var{hôte}, en supposant qu'ils y sont présents :
-
-@example
-guix copy --from=@var{hôte} libreoffice gimp
-@end example
-
-La connexion SSH est établie avec le client Guile-SSH, qui set compatible
-avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
-et utilise l'agent SSH pour l'authentification.
-
-La clef utilisée pour signer les éléments qui sont envoyés doit être
-acceptée par la machine distante. De même, la clef utilisée pour la machine
-distante depuis laquelle vous récupérez des éléments doit être dans
-@file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
-@xref{Invoquer guix archive}, pour plus d'informations sur
-l'authentification des éléments du dépôt.
-
-La syntaxe générale est :
-
-@example
-guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
-@end example
-
-Vous devez toujours spécifier l'une des options suivantes :
-
-@table @code
-@item --to=@var{spec}
-@itemx --from=@var{spec}
-Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
-être une spécification SSH comme @code{example.org},
-@code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
-@end table
-
-L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
-éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
-
-Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
-construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
-options de construction communes sont supportées (@pxref{Options de construction communes}).
-
-
-@node Invoquer guix container
-@section Invoquer @command{guix container}
-@cindex conteneur
-@cindex @command{guix container}
-@quotation Remarque
-À la version @value{VERSION}, cet outil est toujours expérimental.
-L'interface est sujette à changement radicaux dans le futur.
-@end quotation
-
-Le but de @command{guix container} est de manipuler des processus qui
-tournent dans un environnement séparé, connus sous le nom de « conteneur »,
-typiquement créés par les commandes @command{guix environment}
-(@pxref{Invoquer guix environment}) et @command{guix system container}
-(@pxref{Invoquer guix system}).
-
-La syntaxe générale est :
-
-@example
-guix container @var{action} @var{options}@dots{}
-@end example
-
-@var{action} spécifie les opérations à effectuer avec un conteneur, et
-@var{options} spécifie les arguments spécifiques au contexte pour l'action.
-
-Les actions suivantes sont disponibles :
-
-@table @code
-@item exec
-Exécute une commande dans le contexte d'un conteneur lancé.
-
-La syntaxe est :
-
-@example
-guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
-@end example
-
-@var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
-nom du fichier exécutable dans le système de fichiers racine du conteneur.
-@var{arguments} sont les options supplémentaires à passer à @var{programme}.
-
-La commande suivante lance un shell de connexion interactif dans un
-conteneur Guix System, démarré par @command{guix system container} et dont
-le PID est 9001 :
-
-@example
-guix container exec 9001 /run/current-system/profile/bin/bash --login
-@end example
-
-Remarquez que @var{pid} ne peut pas être le processus parent d'un
-conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
-fils.
-
-@end table
-
-@node Invoquer guix weather
-@section Invoquer @command{guix weather}
-
-Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
-et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
-commande @command{guix weather} rapporte la disponibilité des substituts sur
-les serveurs spécifiés pour que vous sachiez si vous allez raller
-aujourd'hui. Cela peut parfois être une information utile pour les
-utilisateurs, mais elle est surtout utile pour les personnes qui font
-tourner @command{guix publish} (@pxref{Invoquer guix publish}).
-
-@cindex statistiques sur les substituts
-@cindex disponibilité des substituts
-@cindex substituts, disponibilité
-@cindex weather, disponibilité des substituts
-Voici un exemple :
-
-@example
-$ guix weather --substitute-urls=https://guix.example.org
-calcul de 5,872 dérivations de paquets pour x86_64-linux…
-recherche de 6,128 éléments du dépôt sur https://guix.example.org…
-mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
-https://guix.example.org
- 43.4% substituts disponibles (2,658 sur 6,128)
- 7,032.5 Mo de fichiers nar (compressés)
- 19,824.2 Mo sur le disque (décompressés)
- 0.030 secondes par requêtes (182.9 secondes au total)
- 33.5 requêtes par seconde
-
- 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
- 867 constructions dans la queue
- x86_64-linux : 518 (59.7%)
- i686-linux : 221 (25.5%)
- aarch64-linux : 128 (14.8%)
- vitesse de construction : 23.41 constructions par heure
- x86_64-linux : 11.16 constructions par heure
- i686-linux : 6.03 constructions par heure
- aarch64-linux : 6.41 constructions par heure
-@end example
-
-@cindex intégration continue, statistiques
-Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
-lesquels des substituts sont disponibles sur le serveur — indépendamment du
-fait que les substituts soient activés, et indépendamment du fait que la
-clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
-des archives compressées (« nars ») fournies par le serveur, la taille des
-éléments du dépôt correspondant dans le dépôt (en supposant que la
-déduplication soit désactivée) et la vitesse du serveur. La deuxième partie
-donne des statistiques sur l'intégration continue (CI), si le serveur le
-supporte. En plus, avec l'option @option{--coverage}, @command{guix
-weather} peut lister les substituts de paquets « importants » qui font
-défaut sur le serveur (voir plus bas).
-
-Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
-(@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
-@command{guix challenge}, il ignore les signatures de ces substituts, ce qui
-n'est pas dangereux puisque la commande ne fait que récupérer des
-statistiques et n'installe pas ces substituts.
-
-Entre autres choses, il est possible de demander des types de système
-particuliers et des ensembles de paquets particuliers. Les options
-disponibles sont listées plus bas.
-
-@table @code
-@item --substitute-urls=@var{urls}
-@var{urls} est la liste des URL des serveurs de substituts séparés par des
-espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
-de substituts par défaut est utilisé.
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
-@code{aarch64-linux}. Cette option peut être répétée, auquel cas
-@command{guix weather} demandera les substituts de plusieurs types de
-systèmes.
-
-@item --manifest=@var{fichier}
-Plutôt que de demander des substituts pour tous les paquets, demande
-uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
-contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
-package} (@pxref{Invoquer guix package}).
-
-@item --coverage[=@var{count}]
-@itemx -c [@var{count}]
-Rapporte la couverture des substituts pour les paquets : liste les paquets
-avec au moins @var{count} autres paquets qui en dépendent (zéro par défaut)
-pour lesquels il n'y a pas de substitut. Les paquets qui en dépendent ne
-sont pas listés : si @var{b} dépend de @var{a} et que @var{a} n'a pas de
-substitut, seul @var{a} est listé, même si @var{b} n'a habituellement pas de
-substitut non plus. Le résultat ressemble à cela :
-
-@example
-$ guix weather --substitute-urls=https://ci.guix.fr.info -c 10
-calcul de 8 983 dérivations de paquets pour x86_64-linux…
-recherche de 9 343 éléments du dépôt sur https://ci.guix.fr.info…
-mise à jour des substituts depuis « https://ci.guix.fr.info »… 100,0 %
-https://ci.guix.fr.info
- 64.7 % des substituts sont disponibles (6,047 sur 9,343)
-@dots{}
-2502 paquets ne sont pas sur « https://ci.guix.fr.info » pour « x86_64-linux », parmi lesquels :
- 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
- 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
- 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
- @dots{}
-@end example
-
-Ce que montre cet exemple est que @code{kcoreaddons} et probablement les 58
-paquets qui en dépendent n'ont pas de substituts sur @code{ci.guix.fr.info} ;
-de même pour @code{qgpgme} et les 46 paquets qui en dépendent.
-
-Si vous êtes un développeur de Guix, ou si vous prenez soin de cette ferme
-de construction, vous voudrez sans doute inspecter plus finement ces paquets
-: ils peuvent simplement avoir échoué à la construction.
-@end table
-
-@node Invoquer guix processes
-@section Invoquer @command{guix processes}
-
-La commande @command{guix processes} peut être utile pour les développeurs
-et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
-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@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
-démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
-@emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
-
-@example
-$ 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 @dots{}
-
-SessionPID: 19444
-ClientPID: 19419
-ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
-LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
-LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
-LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
-ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
-ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
-ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
-@end example
-
-Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
-: @command{guix environment}, @command{guix publish} et l'outil
-d'intégration continue Cuirass ; leur identifiant de processus (PID) est
-donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
-PID du sous-processus @command{guix-daemon} de cette session particulière.
-
-Les champs @code{LockHeld} montrent 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
-@code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
-en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
-ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
-
-La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
-@command{recsel} pour sélectionner les sessions qui nous intéressent
-(@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
-exemple, la commande montre la ligne de commande et le PID du client qui
-effectue la construction d'un paquet Perl :
-
-@example
-$ sudo guix processes | \
- recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
-ClientPID: 19419
-ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
-@end example
-
-
-@node Configuration système
-@chapter Configuration système
-
-@cindex configuration du système
-La distribution système Guix 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, des fuseaux horaires, des paramètres linguistiques, des comptes
-utilisateurs — sont déclarés à un seul endroit. Une telle
-@dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
-en vigueur.
-
-@c Yes, we're talking of Puppet, Chef, & co. here. ↑
-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 (@pxref{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.
-* Lancer Guix dans une VM:: Comment lancer Guix dans une machine virtuelle.
-* Définir des services:: Ajouter de nouvelles définitions de services.
-@end menu
-
-@node Utiliser le système de configuration
-@section Utiliser le système de configuration
-
-Le système d'exploitation est configuré en fournissant une déclaration
-@code{operating-system} dans un fichier qui peut être passé à la command
-@command{guix system} (@pxref{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
-:
-
-@findex operating-system
-@lisp
-@include os-config-bare-bones.texi
-@end lisp
-
-Cet exemple devrait se comprendre de lui-même. Certains champs définis
-ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
-D'autres comme @code{packages} et @code{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 (@pxref{Référence de système d'exploitation}, pour des détails sur tous
-les champs disponibles) et comment @dfn{instancier} le système
-d'exploitation avec @command{guix system}.
-
-@unnumberedsubsec Bootloader
-
-@cindex ancien système de démarrage, sur les machines Intel
-@cindex démarrage BIOS, sur les machines Intel
-@cindex démarrage UEFI
-@cindex démarrage EFI
-Le champ @code{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 (@dfn{Unified
-Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
-@code{bootloader} devrait contenir quelque chose comme cela :
-
-@example
-(bootloader-configuration
- (bootloader grub-efi-bootloader)
- (target "/boot/efi"))
-@end example
-
-@xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
-configuration disponibles.
-
-@unnumberedsubsec Paquets visibles sur tout le système
-
-@vindex %base-packages
-Le champ @code{packages} liste les paquets qui seront visibles sur tout le
-système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
-d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
-utilisateurs (@pxref{Invoquer guix package}). La variable
-@var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
-les taches de base de l'administrateur et de l'utilisateur — dont les GNU
-Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
-Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
-GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
-screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
-@code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
-
-@lisp
-(use-modules (gnu packages))
-(use-modules (gnu packages dns))
-
-(operating-system
- ;; ...
- (packages (cons (list bind "utils")
- %base-packages)))
-@end lisp
-
-@findex specification->package
-Se référer aux paquets par le nom de leur variable, comme @code{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 @code{use-package-modules} en
-conséquence. Pour éviter cela, on peut utiliser la procédure
-@code{specification->package} du module @code{(gnu packages)}, qui renvoie
-le meilleur paquet pour un nom donné ou un nom et une version :
-
-@lisp
-(use-modules (gnu packages))
-
-(operating-system
- ;; ...
- (packages (append (map specification->package
- '("tcpdump" "htop" "gnupg@@2.0"))
- %base-packages)))
-@end lisp
-
-@unnumberedsubsec Services systèmes
-
-@cindex services
-@vindex %base-services
-Le champ @code{services} liste les @dfn{services système} à rendre
-disponible lorsque le système démarre (@pxref{Services}). La déclaration
-@code{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
-(@pxref{Services réseau, @code{openssh-service-type}}). Sous le capot,
-@code{openssh-service-type} s'arrange pour que @code{sshd} soit lancé avec
-les bonnes options de la ligne de commande, éventuellement en générant des
-fichiers de configuration (@pxref{Définir des services}).
-
-@cindex personnalisation des services
-@findex modify-services
-Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
-vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
-(@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
-
-Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
-Mingetty (l'écran de connexion en console) dans la liste
-@var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
-cela, vous pouvez écrire ce qui suit dans votre déclaration de système
-d'exploitation :
-
-@lisp
-(define %my-services
- ;; Ma propre liste de services.
- (modify-services %base-services
- (guix-service-type config =>
- (guix-configuration
- (inherit config)
- (use-substitutes? #f)
- (extra-options '("--gc-keep-derivations"))))
- (mingetty-service-type config =>
- (mingetty-configuration
- (inherit config)))))
-(operating-system
- ;; @dots{}
- (services %my-services))
-@end lisp
-
-Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
-l'instance de @code{guix-service-type}, et de toutes les instances de
-@code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
-comment on fait cela : d'abord, on s'arrange pour que la configuration de
-départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
-@var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
-remarquez comment on utilise @code{inherit} pour créer une nouvelle
-configuration qui a les même valeurs que l'ancienne configuration, avec
-seulement quelques modifications.
-
-@cindex chiffrement du disque
-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 @kbd{F1}), la gestion du réseau, la gestion de
-l'énergie, et bien plus, ressemblerait à ceci :
-
-@lisp
-@include os-config-desktop.texi
-@end lisp
-
-Un système graphique avec un choix de gestionnaires de fenêtres légers
-plutôt que des environnement de bureaux complets ressemblerait à cela :
-
-@lisp
-@include os-config-lightweight-desktop.texi
-@end lisp
-
-Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
-@code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
-renvoyé par la commande @command{blkid}.
-
-@xref{Services de bureaux}, pour la liste exacte des services fournis par
-@var{%desktop-services}. @xref{Certificats X.509}, pour des informations
-sur le paquet @code{nss-certs} utilisé ici.
-
-Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
-service. Si vous voulez en supprimer des services, vous pouvez le faire
-avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
-Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
-l'expression suivante renvoie une liste qui contient tous les services dans
-@var{%desktop-services} sauf le service Avahi :
-
-@example
-(remove (lambda (service)
- (eq? (service-kind service) avahi-service-type))
- %desktop-services)
-@end example
-
-@unnumberedsubsec Instancier le système
-
-En supposant que la déclaration @code{operating-system} est stockée dans le
-fichier @file{my-system-config.scm}, la commande @command{guix system
-reconfigure my-system-config.scm} instancie cette configuration et en fait
-l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
-
-Pour changer la configuration du système, on met normalement à jour ce
-fichier et on relance @command{guix system reconfigure}. On ne devrait
-jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
-commandes qui modifient l'état du système comme @command{useradd} ou
-@command{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.
-
-@cindex revenir en arrière dans la configuration du système
-En parlant de revenir en arrière, à chaque fois que vous lancez
-@command{guix system reconfigure}, une nouvelle @dfn{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 @command{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 @command{guix system roll-back} et
-@command{guix system switch-generation}.
-
-Bien que la commande @command{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é @command{guix
-system roll-back}), puisque l'opération pourrait remplacer une génération
-suivante (@pxref{Invoquer guix system}).
-
-@unnumberedsubsec L'interface de programmation
-
-Au niveau Scheme, la grosse déclaration @code{operating-system} est
-instanciée avec la procédure monadique suivante (@pxref{La monade du dépôt}) :
-
-@deffn {Procédure monadique} operating-system-derivation os
-Renvoie une dérivation qui construit @var{os}, un objet
-@code{operating-system} (@pxref{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 @var{os}.
-@end deffn
-
-Cette procédure est fournie par le module @code{(gnu system)}. Avec
-@code{(gnu services)} (@pxref{Services}), ce module contient les entrailles
-du système Guix. Ouvrez-le un jour !
-
-
-@node Référence de système d'exploitation
-@section Référence de @code{operating-system}
-
-Cette section résume toutes les options disponibles dans les déclarations
-@code{operating-system} (@pxref{Utiliser le système de configuration}).
-
-@deftp {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 (@pxref{Utiliser le système de configuration}).
-
-@table @asis
-@item @code{kernel} (par défaut : @var{linux-libre})
-L'objet paquet d'un noyau de système d'exploitation à
-utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
-le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
-
-@item @code{kernel-arguments} (par défaut : @code{'()})
-Liste de chaînes ou de gexps représentant des arguments supplémentaires à
-passer sur la ligne de commande du noyau — p.@: ex.@:
-@code{("console=ttyS0")}.
-
-@item @code{bootloader}
-L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
-
-@item @code{label}
-This is the label (a string) as it appears in the bootloader's menu entry.
-The default label includes the kernel name and version.
-
-@item @code{keyboard-layout} (par défaut : @code{#f})
-Ce champ spécifie la disposition du clavier à utiliser dans la console. Il
-peut être soit @code{#f}, auquel cas la disposition par défaut est utilisée
-(habituellement anglais américain), ou un enregistrement
-@code{<keyboard-layout>}.
-
-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 @code{luks-device-mapping} (@pxref{Périphériques mappés}).
-
-@quotation Remarque
-Cela ne spécifie @emph{pas} la disposition clavier utilisée par le chargeur
-d'amorçage, ni celle utilisée par le serveur d'affichage graphique.
-@xref{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. @xref{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.
-@end quotation
-
-@item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
-@cindex initrd
-@cindex disque de RAM initial
-La liste des modules du noyau linux requis dans l'image disque de RAM
-initiale. @xref{Disque de RAM initial}.
-
-@item @code{initrd} (par défaut : @code{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. @xref{Disque de RAM initial}.
-
-@item @code{firmware} (par défaut : @var{%base-firmware})
-@cindex 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 @code{ath9k} et @code{b43-open} de
-Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
-d'info sur les périphériques supportés.
-
-@item @code{host-name}
-Le nom d'hôte.
-
-@item @code{hosts-file}
-@cindex fichier hosts
-Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
-utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
-Library Reference Manual}). La valeur par défaut est un fichier avec des
-entrées pour @code{localhost} et @var{host-name}.
-
-@item @code{mapped-devices} (par défaut : @code{'()})
-Une liste de périphériques mappés. @xref{Périphériques mappés}.
-
-@item @code{file-systems}
-Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
-
-@item @code{swap-devices} (par défaut : @code{'()})
-@cindex espaces d'échange
-Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
-pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
-Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
-@code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
-sur un périphérique mappé, tant que le périphérique nécessaire et le système
-de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
-
-@item @code{users} (par défaut : @code{%base-user-accounts})
-@itemx @code{groups} (par défaut : @var{%base-groups})
-Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
-
-Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
-root » avec l'UID@tie{}0 est automatiquement ajouté.
-
-@item @code{skeletons} (par défaut : @code{(default-skeletons)})
-Une liste de couples composés d'un nom de fichier cible et d'un objet
-simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
-fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
-utilisateurs nouvellement créés.
-
-Par exemple, un valeur valide ressemblerait à cela :
-
-@example
-`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
- (".guile" ,(plain-file "guile"
- "(use-modules (ice-9 readline))
- (activate-readline)")))
-@end example
-
-@item @code{issue} (par défaut : @var{%default-issue})
-Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
-affiché lorsqu'un utilisateur se connecte sur la console.
-
-@item @code{packages} (par défaut : @var{%base-packages})
-L'ensemble des paquets installés dans le profil global, qui est accessible à
-partir de @file{/run/current-system/profile}.
-
-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 (@pxref{Invoquer guix package}).
-
-@item @code{timezone}
-Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
-
-Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
-horaire correspondant à votre région. Si vous choisissez un nom de fuseau
-horaire invalide, @command{guix system} échouera.
-
-@item @code{locale} (par défaut : @code{"en_US.utf8"})
-Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
-GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
-
-@item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
-La liste des définitions de locales à compiler et qui devraient être
-utilisées à l'exécution. @xref{Régionalisation}.
-
-@item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
-La liste des paquets GNU@tie{}libc dont les données des paramètres
-linguistiques sont utilisées pour construire les définitions des paramètres
-linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
-qui justifient cette option.
-
-@item @code{name-service-switch} (par défaut : @var{%default-nss})
-La configuration de NSS de la libc (name service switch) — un objet
-@code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
-
-@item @code{services} (par défaut : @var{%base-services})
-Une liste d'objets services qui dénotent les services du système.
-@xref{Services}.
-
-@cindex services essentiels
-@item @code{essential-services} (par défaut : …)
-La liste des « services essentiels » — c.-à-d.@: les services comme des
-instance de @code{system-service-type} et @code{host-name-service-type}
-(@pxref{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
-@emph{jamais} toucher à ce champ.
-
-@item @code{pam-services} (par défaut : @code{(base-pam-services)})
-@cindex PAM
-@cindex pluggable authentication modules
-@c FIXME: Add xref to PAM services section.
-Services PAM (@dfn{pluggable authentication module}) Linux.
-
-@item @code{setuid-programs} (par défaut : @var{%setuid-programs})
-Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
-les programmes setuid. @xref{Programmes setuid}.
-
-@item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
-@cindex fichier sudoers
-Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
-(@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
-
-Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
-@command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
-peuvent gagner. La valeur par défaut est que seul @code{root} et les
-membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
-
-@end table
-
-@deffn {Scheme Syntax} this-operating-system
-When used in the @emph{lexical scope} of an operating system field
-definition, this identifier resolves to the operating system being defined.
-
-The example below shows how to refer to the operating system being defined
-in the definition of the @code{label} field:
-
-@example
-(use-modules (gnu) (guix))
-
-(operating-system
- ;; ...
- (label (package-full-name
- (operating-system-kernel this-operating-system))))
-@end example
-
-It is an error to refer to @code{this-operating-system} outside an operating
-system definition.
-@end deffn
-
-@end deftp
-
-@node Systèmes de fichiers
-@section Systèmes de fichiers
-
-La liste des systèmes de fichiers à monter est spécifiée dans le champ
-@code{file-systems} de la déclaration de système d'exploitation
-(@pxref{Utiliser le système de configuration}). Chaque système de fichier est
-déclaré avec la forme @code{file-system}, comme ceci :
-
-@example
-(file-system
- (mount-point "/home")
- (device "/dev/sda3")
- (type "ext4"))
-@end example
-
-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.
-
-@deftp {Type de données} file-system
-Les objets de ce type représentent des systèmes de fichiers à monter. Ils
-contiennent les membres suivants :
-
-@table @asis
-@item @code{type}
-C'est une chaîne de caractères spécifiant le type du système de fichier —
-p.@: ex.@: @code{"ext4"}.
-
-@item @code{mount-point}
-Désigne l'emplacement où le système de fichier sera monté.
-
-@item @code{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 @file{/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@footnote{Remarquez que, s'il est tentant
-d'utiliser @file{/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.}.
-
-@findex file-system-label
-Les étiquettes de systèmes de fichiers sont crées avec la procédure
-@code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
-@file{/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
-@command{e2label} :
-
-@example
-(file-system
- (mount-point "/home")
- (type "ext4")
- (device (file-system-label "my-home")))
-@end example
-
-@findex uuid
-Les UUID sont convertis à partir de leur représentation en chaîne de
-caractères (montrée par la command @command{tune2fs -l}) en utilisant la
-forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
-octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
-RFC@tie{}4122}. 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},
-comme ceci :
-
-@example
-(file-system
- (mount-point "/home")
- (type "ext4")
- (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
-@end example
-
-Lorsque la source d'un système de fichiers est un périphérique mappé
-(@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
-nom du périphérique mappé — p.@: ex.@: @file{"/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.
-
-@item @code{flags} (par défaut : @code{'()})
-C'est une liste de symboles qui dénotent des drapeaux de montage. Les
-drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
-(interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
-setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
-
-@item @code{options} (par défaut : @code{#f})
-C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
-montage.
-
-@item @code{mount?} (par défaut : @code{#t})
-Cette valeur indique s'il faut monter automatiquement le système de fichier
-au démarrage du système. Lorsque la valeur est @code{#f}, le système de
-fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
-@command{mount}) mais n'est pas monté automatiquement.
-
-@item @code{needed-for-boot?} (par défaut : @code{#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.
-
-@item @code{check?} (par défaut : @code{#t})
-Cette valeur booléenne indique si le système de fichier doit être vérifié
-avant de le monter.
-
-@item @code{create-mount-point?} (par défaut : @code{#f})
-Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
-pas déjà.
-
-@item @code{dependencies} (par défaut : @code{'()})
-C'est une liste d'objets @code{<file-system>} ou @code{<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 : @file{/sys/fs/cgroup}
-est une dépendance de @file{/sys/fs/cgroup/cpu} et
-@file{/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 (@pxref{Périphériques mappés}).
-@end table
-@end deftp
-
-Le module @code{(gnu system file-systems)} exporte les variables utiles
-suivantes.
-
-@defvr {Variable Scheme} %base-file-systems
-Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
-normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
-(voir plus bas). Les déclarations de systèmes d'exploitation devraient au
-moins les contenir.
-@end defvr
-
-@defvr {Variable Scheme} %pseudo-terminal-file-system
-C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
-@dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
-(@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
-pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
-@command{xterm}.
-@end defvr
-
-@defvr {Variable Scheme} %shared-memory-file-system
-Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
-partage de mémoire entre processus (@pxref{Memory-mapped I/O,
-@code{shm_open},, libc, The GNU C Library Reference Manual}).
-@end defvr
-
-@defvr {Variable Scheme} %immutable-store
-Ce système de fichiers effectue un « montage lié » en lecture-seule de
-@file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
-les utilisateurs dont @code{root}. Cela évite que des logiciels qui
-tournent en @code{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 ».
-@end defvr
-
-@defvr {Variable Scheme} %binary-format-file-system
-Le système de fichiers @code{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 @code{binfmt.ko} soit chargé.
-@end defvr
-
-@defvr {Variable Scheme} %fuse-control-file-system
-Le système de fichiers @code{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 @code{fuse.ko} soit
-chargé.
-@end defvr
-
-@node Périphériques mappés
-@section Périphériques mappés
-
-@cindex mappage de périphériques
-@cindex périphériques mappés
-Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
-périphérique bloc, comme une partition sur un disque dur, peut être
-@dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
-avec des calculs supplémentaires sur les données qui naviguent entre les
-deux@footnote{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 @emph{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 @dfn{traducteurs} générique (@pxref{Translators,,,
-hurd, The GNU Hurd Reference Manual}).}. 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 @dfn{transformés} d'une certaine
-manière créent un nouveau périphérique ; par exemple, les périphériques RAID
-sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
-disque ou des partitions, en un nouveau périphérique en tant qu'unique
-partition. Un autre exemple, qui n'est pas encore disponible, sont les
-volumes logiques LVM.
-
-Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
-définie comme suit ; par exemple, voir ci-dessous.
-
-@deftp {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.
-
-@table @code
-@item source
-C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
-comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
-assembler pour en créer un nouveau.
-
-@item 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
-@code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
-périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
-de type @code{raid-device-mapping}, il faut donner le nom complet comme
-@code{"/dev/md0"}.
-
-@item type
-Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
-@var{source} est mappés sur @var{target}.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} luks-device-mapping
-Cela définie les périphériques blocs chiffrés en LUKS avec
-@command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
-noyau Linux @code{dm-crypt}.
-@end defvr
-
-@defvr {Variable Scheme} raid-device-mapping
-Cela définie un périphérique RAID qui est assemblé avec la commande
-@code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
-approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
-RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
-@end defvr
-
-@cindex chiffrement du disque
-@cindex LUKS
-L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
-@file{/dev/mapper/home} avec LUKS —
-@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
-mécanisme standard pour chiffrer les disques. Le périphérique
-@file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
-déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
-
-@example
-(mapped-device
- (source "/dev/sda3")
- (target "home")
- (type luks-device-mapping))
-@end example
-
-Autrement, pour devenir indépendant du numéro de périphérique, on peut
-obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
-une commande comme :
-
-@example
-cryptsetup luksUUID /dev/sda3
-@end example
-
-et l'utiliser ainsi :
-
-@example
-(mapped-device
- (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
- (target "home")
- (type luks-device-mapping))
-@end example
-
-@cindex chiffrement de l'espace d'échange
-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é.
-@xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
-
-Un périphérique RAID formé des partitions @file{/dev/sda1} et
-@file{/dev/sdb1} peut être déclaré ainsi :
-
-@example
-(mapped-device
- (source (list "/dev/sda1" "/dev/sdb1"))
- (target "/dev/md0")
- (type raid-device-mapping))
-@end example
-
-Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
-@code{device} d'une déclaration @code{file-system} (@pxref{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.
-
-
-@node Comptes utilisateurs
-@section Comptes utilisateurs
-
-@cindex utilisateurs
-@cindex comptes
-@cindex comptes utilisateurs
-Les comptes utilisateurs et les groupes sont gérés entièrement par la
-déclaration @code{operating-system}. Ils sont spécifiés avec les formes
-@code{user-account} et @code{user-group} :
-
-@example
-(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")
- (home-directory "/home/alice"))
-@end example
-
-Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
-système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
-dans la déclaration @code{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
-@command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
-permet de s'assurer que le système reste exactement tel que déclaré.
-
-@deftp {Type de données} user-account
-Les objets de se type représentent les comptes utilisateurs. Les membres
-suivants peuvent être spécifiés :
-
-@table @asis
-@item @code{name}
-Le nom du compte utilisateur.
-
-@item @code{group}
-@cindex groupes
-C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
-utilisateur auquel ce compte appartient.
-
-@item @code{supplementary-groups} (par défaut : @code{'()})
-Éventuellement, cela peut être définie comme une liste de noms de groupes
-auxquels ce compte appartient.
-
-@item @code{uid} (par défaut : @code{#f})
-C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
-dernier cas, le nombre est choisi automatiquement par le système à la
-création du compte.
-
-@item @code{comment} (par défaut : @code{""})
-Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
-
-@item @code{home-directory}
-C'est le nom du répertoire personnel du compte.
-
-@item @code{create-home-directory?} (par défaut : @code{#t})
-Indique si le répertoire personnel du compte devrait être créé s'il n'existe
-pas déjà.
-
-@item @code{shell} (par défaut : Bash)
-C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
-comme shell (@pxref{G-Expressions}).
-
-@item @code{system?} (par défaut : @code{#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.
-
-@anchor{user-account-password}
-@cindex mot de passe, pour les comptes utilisateurs
-@item @code{password} (par défaut : @code{#f})
-Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
-de passe utilisateurs en tant que @code{root} avec la commande
-@command{passwd}, puis laisseriez l'utilisateur le changer avec
-@command{passwd}. Les mots de passes définis avec @command{passwd} sont
-bien sûr préservés après redémarrage et reconfiguration.
-
-Si vous voulez @emph{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 @code{crypt} pour cela :
-
-@example
-(user-account
- (name "charlie")
- (group "users")
-
- ;; Spécifie un mot de passe initial hashé avec sha512.
- (password (crypt "InitialPassword!" "$6$abc")))
-@end example
-
-@quotation Remarque
-Le hash de ce mot de passe initial sera disponible dans un fichier dans
-@file{/gnu/store}, lisible par tous les utilisateurs, donc cette méthode est
-à utiliser avec soin.
-@end quotation
-
-@xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, pour
-plus d'information sur le chiffrement des mots de passe et
-@ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
-sur la procédure @code{crypt} de Guile.
-
-@end table
-@end deftp
-
-@cindex groupes
-Les déclarations de groupes sont encore plus simple :
-
-@example
-(user-group (name "students"))
-@end example
-
-@deftp {Type de données} user-group
-C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
-quelques champs :
-
-@table @asis
-@item @code{name}
-Le nom du groupe.
-
-@item @code{id} (par défaut : @code{#f})
-L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
-est alloué automatiquement lorsque le groupe est créé.
-
-@item @code{system?} (par défaut : @code{#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.
-
-@item @code{password} (par défaut : @code{#f})
-Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
-bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
-passe du groupe.
-
-@end table
-@end deftp
-
-Par simplicité, une variable liste les groupes utilisateurs de base auxquels
-on pourrait s'attendre :
-
-@defvr {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 ».
-@end defvr
-
-@defvr {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.
-@end defvr
-
-@node Disposition du clavier
-@section Disposition du clavier
-
-@cindex disposition du clavier
-@cindex disposition clavier
-Pour spécifier ce que fait chaque touche de votre clavier, vous devez dire
-au système d'exploitation quel @dfn{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.
-
-@cindex disposition du clavier, définition
-Il y a trois composants qui devront connaître votre disposition du clavier :
-
-@itemize
-@item
-Le @emph{chargeur d'amorçage} peut avoir besoin de connaître la disposition
-clavier que vous voulez utiliser (@pxref{Configuration du chargeur d'amorçage,
-@code{keyboard-layout}}). 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.
-
-@item
-Le @emph{noyau du système d'exploitation}, Linux, en aura besoin pour
-configurer correctement la console (@pxref{Référence de système d'exploitation,
-@code{keyboard-layout}}).
-
-@item
-Le @emph{serveur d'affichage graphique}, habituellement Xorg, a aussi sa
-propre idée sur la disposition du clavier à utiliser (@pxref{Système de fenêtrage X,
-@code{keyboard-layout}}).
-@end itemize
-
-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.
-
-@cindex XKB, disposition du clavier
-Les dispositions de clavier sont représentées par des enregistrements créés
-par la procédure @code{keyboard-layout} de @code{(gnu system keyboard)}. En
-suivant l'extension clavier de X (XKB), chaque disposition a trois 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. Voici quelques exemples :
-
-@example
-;; 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")
-
-;; 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")
-@end example
-
-Voir le répertoire @file{share/X11/xkb} du paquet @code{xkeyboard-config}
-pour une liste complète des disposition, des variantes et des modèles pris
-en charge.
-
-@cindex disposition du clavier, configuration
-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 :
-
-@findex set-xorg-configuration
-@lisp
-;; 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)))
-@end lisp
-
-Dans l'exemple ci-dessus, pour GRUB et pour Xorg, nous nous référons
-simplement au champ @code{keyboard-layout} au dessus, mais on pourrait aussi
-bien se référer à une autre disposition. La procédure
-@code{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
-@emph{par défaut} lorsque votre système démarre, mais vous pouvez aussi
-l'ajuster à l'exécution :
-
-@itemize
-@item
-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.
-
-@item
-Sous Xorg, la commande @command{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 :
-
-@example
-setxkbmap us dvorak
-@end example
-
-@item
-La commande @code{loadkey} change la disposition du clavier dans la console
-Linux. Cependant, remarque que @code{loadkeys} n'utilise @emph{pas} la
-catégorisation des dispositions XKB décrite plus haut. La commande suivante
-charge la disposition bépo française :
-
-@example
-loadkeys fr-bepo
-@end example
-@end itemize
-
-@node Régionalisation
-@section Régionalisation
-
-@cindex paramètres linguistiques
-Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
-langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
-Library Reference Manual}). Chaque paramètre linguistique a un nom de la
-forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
-ex.@: @code{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.
-
-@cindex définition des paramètres linguistiques
-Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
-pour la machine en utilisant le champ @code{locale} de la déclaration
-@code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
-
-Les paramètres régionaux choisis sont automatiquement ajoutés aux
-définitions des @dfn{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.@:
-@code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
-@code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
-le champ @code{locale-definitions} de @code{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 :
-
-@example
-(cons (locale-definition
- (name "fy_DE.utf8") (source "fy_DE"))
- %default-locale-definitions)
-@end example
-
-De me, pour gagner de la place, on peut vouloir lister dans
-@code{locale-definitions} seulement les paramètres qui sont vraiment
-utilisés, comme dans :
-
-@example
-(list (locale-definition
- (name "ja_JP.eucjp") (source "ja_JP")
- (charset "EUC-JP")))
-@end example
-
-@vindex LOCPATH
-Les définitions des paramètres linguistiques compilées sont disponibles dans
-@file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
-libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
-Guix cherche les données de régionalisation. Cet emplacement peut être
-modifié avec la variable d'environnement @code{LOCPATH}
-(@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
-
-La forme @code{locale-definition} est fournie par le module @code{(gnu
-system locale)}. Des détails sont disponibles plus bas.
-
-@deftp {Type de données} locale-definition
-C'est le type de données d'une définition de paramètres linguistiques.
-
-@table @asis
-
-@item @code{name}
-Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
-Library Reference Manual}, pour en savoir plus sur les noms de paramètres
-linguistiques.
-
-@item @code{source}
-Le nom de la source pour ce paramètre linguistique. C'est typiquement la
-partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
-
-@item @code{charset} (par défaut : @code{"UTF-8"})
-Le « jeu de caractères » d'un paramètre linguistique,
-@uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
-
-@end table
-@end deftp
-
-@defvr {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 @code{locale-definitions} des
-déclarations @code{operating-system}.
-
-@cindex nom de paramètre linguistique
-@cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
-Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
-caractère normalisé} pour la partie qui suit le point dans le nom
-(@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
-Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
-@emph{pas}, disons, @code{uk_UA.UTF-8}.
-@end defvr
-
-@subsection Considérations sur la compatibilité des données linguistiques
-
-@cindex incompatibilité, des données linguistiques
-Les déclaration @code{operating-system} fournissent un champ
-@code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
-compiler les déclarations de paramètres linguistiques
-(@pxref{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.
-
-@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
-@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
-Par exemple, un programme lié à la libc version 2.21 est incapable de lire
-les données linguistiques produites par la libc 2.22 ; pire, ce programme
-@emph{plante} plutôt que d'ignorer les données linguistiques
-incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
-sauteront simplement les données linguistiques incompatibles, ce qui est
-déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
-mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
-les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
-@code{setlocale} peuvent échouer, mais les programmes ne plantent 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 utilisateurs non privilégiés peuvent aussi installer leur
-propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
-(@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
-
-Cependant, c'est encore mieux si les données linguistiques du système dans
-@file{/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 @code{locale-libcs} de @code{operating-system} :
-
-@example
-(use-package-modules base)
-
-(operating-system
- ;; @dots{}
- (locale-libcs (list glibc-2.21 (canonical-package glibc))))
-@end example
-
-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
-@file{/run/current-system/locale}.
-
-
-@node Services
-@section Services
-
-@cindex services systèmes
-Une part importante de la préparation d'une déclaration
-@code{operating-system} est la liste des @dfn{services systèmes} et de leur
-configuration (@pxref{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 » (@pxref{Composition de services}),
-mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
-(@pxref{Services Shepherd}). Sur un système lancé, la commande
-@command{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 (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
-exemple :
-
-@example
-# herd status
-@end example
-
-La commande ci-dessus, lancée en @code{root}, liste les services
-actuellement définis. La commande @command{herd doc} montre un synopsis du
-service donné et ses actions associées :
-
-@example
-# 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.
-@end example
-
-Les sous-commandes @command{start}, @command{stop} et @command{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 :
-
-@example
-# herd stop nscd
-Service nscd has been stopped.
-# herd restart xorg-server
-Service xorg-server has been stopped.
-Service xorg-server has been started.
-@end example
-
-Les sections suivantes documentent les services disponibles, en commençant
-par les services de base qui peuvent être utilisés avec une déclaration
-@code{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.
-* 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 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:: Le service Cuirass.
-* 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.
-* Services divers:: D'autres services.
-@end menu
-
-@node Services de base
-@subsection Services de base
-
-Le module @code{(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.
-
-@defvr {Variable Scheme} %base-services
-Cette variable contient une liste de services de base (@pxref{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 @code{services} des déclarations
-@code{operating-system}. Habituellement, lors de la personnalisation d'un
-système, vous voudrez ajouter des services à ceux de @var{%base-services},
-comme ceci :
-
-@example
-(append (list (service avahi-service-type)
- (service openssh-service-type))
- %base-services)
-@end example
-@end defvr
-
-@defvr {Variable Scheme} special-files-service-type
-C'est le service qui met en place des « fichiers spéciaux » comme
-@file{/bin/sh} ; une instance de ce service fait partie de
-@code{%base-services}.
-
-La valeur associée avec les services @code{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 :
-
-@cindex @file{/bin/sh}
-@cindex @file{sh}, dans @file{/bin}
-@example
-`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
-@end example
-
-@cindex @file{/usr/bin/env}
-@cindex @file{env}, dans @file{/usr/bin}
-Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
-pouvez changer cela en :
-
-@example
-`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
- ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
-@end example
-
-Comme il fait parti de @code{%base-services}, vous pouvez utiliser
-@code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
-(@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
-simple d'ajouter un fichier spécial est d'utiliser la procédure
-@code{extra-special-file} (voir plus bas).
-@end defvr
-
-@deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
-Utilise @var{target} comme « fichier spécial » @var{file}.
-
-Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
-votre déclaration de système d'exploitation crée un lien symbolique
-@file{/usr/bin/env} :
-
-@example
-(extra-special-file "/usr/bin/env"
- (file-append coreutils "/bin/env"))
-@end example
-@end deffn
-
-@deffn {Procédure Scheme} host-name-service @var{name}
-Renvoie un service qui paramètre le nom d'hôte à @var{name}.
-@end deffn
-
-@deffn {Procédure Scheme} login-service @var{config}
-Renvoie un service pour lancer login en suivant @var{config}, un objet
-@code{<login-configuration>} qui spécifie le message du jour, entre autres
-choses.
-@end deffn
-
-@deftp {Type de données} login-configuration
-Le type de données qui représente la configuration de login.
-
-@table @asis
-
-@item @code{motd}
-@cindex message du jour
-Un objet simili-fichier contenant le « message du jour ».
-
-@item @code{allow-empty-passwords?} (par défaut : @code{#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.
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} mingetty-service @var{config}
-Renvoie un service qui lance mingetty en suivant @var{config}, un objet
-@code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
-choses.
-@end deffn
-
-@deftp {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.
-
-@table @asis
-
-@item @code{tty}
-Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
-@code{"tty1"}.
-
-@item @code{auto-login} (par défaut : @code{#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 @code{#f}, il faut entrer un nom
-d'utilisateur et un mot de passe pour se connecter.
-
-@item @code{login-program} (par défaut : @code{#f})
-Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
-est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
-dénotant le nom d'un programme de connexion.
-
-@item @code{login-pause?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
-devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
-
-@item @code{mingetty} (par défaut : @var{mingetty})
-Le paquet Mingetty à utiliser.
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} agetty-service @var{config}
-Renvoie un service pour lancer agetty en suivant @var{config}, un objet
-@code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
-choses.
-@end deffn
-
-@deftp {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 @code{agetty(8)} pour plus d'informations.
-
-@table @asis
-
-@item @code{tty}
-Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
-@code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
-raisonnable d'un port série utilisé par le noyau Linux.
-
-Pour cela, s'il y a une valeur pour une option @code{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 @code{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.
-
-@item @code{baud-rate} (par défaut : @code{#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.
-
-@item @code{term} (par défaut : @code{#f})
-Une chaîne contenant la valeur utilisée pour la variable d'environnement
-@code{TERM}.
-
-@item @code{eight-bits?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
-caractères 8-bit et la détection de parité est désactivée.
-
-@item @code{auto-login} (par défaut : @code{#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.
-
-@item @code{no-reset?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
-de contrôle).
-
-@item @code{host} (par défaut : @code{#f})
-Cette option accepte une chaîne contenant le « login_host », qui sera écrit
-dans le fichier @file{/var/run/utmpx}.
-
-@item @code{remote?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
-une option fakehost @code{-r} à la ligne de commande du programme de
-connexion spécifié dans @var{login-program}.
-
-@item @code{flow-control?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
-(RTS/CTS).
-
-@item @code{no-issue?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
-sera pas affiché avant de présenter l'écran de connexion.
-
-@item @code{init-string} (par défaut : @code{#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.
-
-@item @code{no-clear?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
-montrer l'écran de connexion.
-
-@item @code{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
-@command{login} de la suite d'outils Shadow.
-
-@item @code{local-line} (par défaut : @code{#f})
-Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
-comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
-est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}.
-
-@item @code{extract-baud?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
-de baud depuis les messages de statut produits par certains modems.
-
-@item @code{skip-login?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
-peut être utilisée avec le champ @var{login-program} pour utiliser des
-systèmes de connexion non standards.
-
-@item @code{no-newline?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
-d'afficher le fichier @file{/etc/issue}.
-
-@c Is this dangerous only when used with login-program, or always?
-@item @code{login-options} (par défaut : @code{#f})
-Cette option accepte une chaîne de caractères contenant des options passées
-au programme login. Lorsqu'utilisé avec @var{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.
-
-@item @code{login-pause} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
-montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
-pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
-
-@item @code{chroot} (par défaut : @code{#f})
-Change de racine dans le répertoire donné. Cette option accepte un chemin
-en tant que chaîne de caractères.
-
-@item @code{hangup?} (par défaut : @code{#f})
-Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
-le terminal spécifié.
-
-@item @code{keep-baud?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
-Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
-caractères @key{BREAK}.
-
-@item @code{timeout} (par défaut : @code{#f})
-Lorsque la valeur est un nombre entier, termine la session si aucun nom
-d'utilisateur n'a pu être lu après @var{timeout} secondes.
-
-@item @code{detect-case?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#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.
-
-@item @code{wait-cr?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
-un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
-l'écran de connexion. Cela est typiquement utilisé avec l'option
-@var{init-string}.
-
-@item @code{no-hints?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
-verrouillages numériques, majuscule et défilement.
-
-@item @code{no-hostname?} (par défaut : @code{#f})
-Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
-aucun nom d'hôte ne sera affiché.
-
-@item @code{long-hostname?} (par défaut : @code{#f})
-Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
-la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
-@code{gethostname} ou @code{getaddrinfo} sera affiché.
-
-@item @code{erase-characters} (par défaut : @code{#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.
-
-@item @code{kill-characters} (par défaut : @code{#f})
-Cette option accepte une chaîne de caractères qui devrait être interprété
-comme signifiant « ignore tous les caractères précédent » (aussi appelé un
-caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
-
-@item @code{chdir} (par défaut : @code{#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.
-
-@item @code{delay} (par défaut : @code{#f})
-Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
-avant d'ouvrir le tty et afficher l'écran de connexion.
-
-@item @code{nice} (par défaut : @code{#f})
-Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
-programme @command{login} tourne.
-
-@item @code{extra-options} (par défaut : @code{'()})
-Cette option fournie un « mécanisme de secours » pour que l'utilisateur
-puisse ajouter des arguments de la ligne de commande arbitraires à
-@command{agetty} comme une liste de chaînes de caractères.
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} kmscon-service-type @var{config}
-Renvoie un service qui lance
-@uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
-@var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
-sur lequel tourner, entre autres choses.
-@end deffn
-
-@deftp {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.
-
-@table @asis
-
-@item @code{virtual-terminal}
-Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
-
-@item @code{login-program} (par défaut : @code{#~(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 @command{login} de la suite d'outils Shadow.
-
-@item @code{login-arguments} (par défaut : @code{'("-p")})
-Une liste d'arguments à passer à @command{login}.
-
-@item @code{auto-login} (par défaut : @code{#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.
-
-@item @code{hardware-acceleration?} (par défaut : #f)
-S'il faut utiliser l'accélération matérielle.
-
-@item @code{kmscon} (par défaut : @var{kmscon})
-Le paquet Kmscon à utiliser.
-
-@end table
-@end deftp
-
-@cindex name service cache daemon
-@cindex nscd
-@deffn {Procédure Scheme} nscd-service [@var{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 @var{config} donnée — un objet
-@code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
-
-Parce que c'est pratique, le service du Shepherd pour nscd fournit les
-actions suivantes :
-
-@table @code
-@item invalidate
-@cindex invalidation du cache, nscd
-@cindex nscd, invalidation du cache
-Cela invalide le cache donné. Par exemple, en laçant :
-
-@example
-herd invalidate nscd hosts
-@end example
-
-@noindent
-on invalide le cache de noms d'hôtes de nscd.
-
-@item statistiques
-Lancer @command{herd statistics nscd} affiche des informations sur
-l'utilisation de nscd et des caches.
-@end table
-
-@end deffn
-
-@defvr {Variable Scheme} %nscd-default-configuration
-C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
-utilisée par @code{nscd-service}. Elle utilise les caches définis par
-@var{%nscd-default-caches} ; voir plus bas.
-@end defvr
-
-@deftp {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).
-
-@table @asis
-
-@item @code{name-services} (par défaut : @code{'()})
-Liste des paquets dénotant des @dfn{services de noms} qui doivent être
-visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
-
-@item @code{glibc} (par défaut : @var{glibc})
-Objet de paquet qui dénote la Bibliothèque C de GNU qui fournit la commande
-@command{nscd}.
-
-@item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
-Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
-envoyée lorsque @code{debug-level} est strictement positif.
-
-@item @code{debug-level} (par défaut : @code{0})
-Entier qui dénote le niveau de débogage. Les entiers les plus grands
-signifient plus de sortie de débogage.
-
-@item @code{caches} (par défaut : @var{%nscd-default-caches})
-Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
-; voir plus bas.
-
-@end table
-@end deftp
-
-@deftp {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.
-
-@table @asis
-
-@item @code{database}
-C'est un symbole qui représente le nom de la base de donnée à mettre en
-cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
-@code{services} qui désignent les bases de données NSS correspondantes
-(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
-
-@item @code{positive-time-to-live}
-@itemx @code{negative-time-to-live} (par défaut : @code{20})
-Un entier qui représente le nombre de secondes pendant lesquelles un
-résultat positif ou négatif reste en cache.
-
-@item @code{check-files?} (par défaut : @code{#t})
-Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
-à @var{database}.
-
-Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
-nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
-prendre en compte.
-
-@item @code{persistent?} (par défaut : @code{#t})
-Indique si le cache devrait être stocké de manière persistante sur le
-disque.
-
-@item @code{shared?} (par défaut : @code{#t})
-Indique si le cache devrait être partagé entre les utilisateurs.
-
-@item @code{max-database-size} (par défaut : 32@tie{}MiB)
-Taille maximale en octets de la base de données en cache.
-
-@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
-@c settings, so leave them out.
-
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %nscd-default-caches
-Liste d'objets @code{<nscd-cache>} utilisés par défaut par
-@code{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.
-@end defvr
-
-@anchor{syslog-configuration-type}
-@cindex syslog
-@cindex logging
-@deftp {Type de données} syslog-configuration
-Ce type de données représente la configuration du démon syslog.
-
-@table @asis
-@item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
-Le démon syslog à utiliser.
-
-@item @code{config-file} (par défaut : @code{%default-syslog.conf})
-Le fichier de configuration de syslog à utiliser.
-
-@end table
-@end deftp
-
-@anchor{syslog-service}
-@cindex syslog
-@deffn {Procédure Scheme} syslog-service @var{config}
-Renvoie un service qui lance un démon syslog en suivant @var{config}.
-
-@xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
-d'informations sur la syntaxe du fichier de configuration.
-@end deffn
-
-@defvr {Variable Scheme} guix-service-type
-C'est le type de service qui lance le démon de construction,
-@command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
-un enregistrement @code{guix-configuration} décrit plus bas.
-@end defvr
-
-@anchor{guix-configuration-type}
-@deftp {Type de données} guix-configuration
-Ce type de données représente la configuration du démon de construction de
-Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
-
-@table @asis
-@item @code{guix} (par défaut : @var{guix})
-Le paquet Guix à utiliser.
-
-@item @code{build-group} (par défaut : @code{"guixbuild"})
-Nom du groupe des comptes utilisateurs de construction.
-
-@item @code{build-accounts} (par défaut : @code{10})
-Nombre de comptes utilisateurs de construction à créer.
-
-@item @code{authorize-key?} (par défaut : @code{#t})
-@cindex substituts, autorisations
-Indique s'il faut autoriser ou non les clefs de substituts listées dans
-@code{authorize-keys} — par défaut celle de @code{@value{SUBSTITUTE-SERVER}}
-(@pxref{Substituts}).
-
-@vindex %default-authorized-guix-keys
-@item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
-La liste des fichiers de clefs autorisées pour les imports d'archives, en
-tant que liste de gexps sous forme de chaînes (@pxref{Invoquer guix archive}). Par défaut, elle contient celle de
-@code{@value{SUBSTITUTE-SERVER}} (@pxref{Substituts}).
-
-@item @code{use-substitutes?} (par défaut : @code{#t})
-S'il faut utiliser les substituts.
-
-@item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
-La liste des URL où trouver des substituts par défaut.
-
-@item @code{max-silent-time} (par défaut : @code{0})
-@itemx @code{timeout} (par défaut : @code{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.
-
-@item @code{log-compression} (par défaut : @code{'bzip2})
-Le type de compression utilisé par les journaux de construction — parmi
-@code{gzip}, @code{bzip2} et @code{none}.
-
-@item @code{extra-options} (par défaut : @code{'()})
-Liste d'options supplémentaires de la ligne de commande pour
-@command{guix-daemon}.
-
-@item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
-Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
-écrites.
-
-@item @code{http-proxy} (par défaut : @code{#f})
-Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
-sortie fixe et les substituts.
-
-@item @code{tmpdir} (par défaut : @code{#f})
-Un répertoire où @command{guix-daemon} effectuera ses constructions.
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
-Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
-règles udev peuvent être fournies comme une liste de fichier via la variable
-@var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
-@code{(gnu services base)} simplifient la création de ces fichiers de règle.
-@end deffn
-
-@deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
-Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
-définie par le littéral @var{contents}.
-
-Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
-sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
-script à la détection du périphérique USB avec l'identifiant de produit
-donné.
-
-@example
-(define %example-udev-rule
- (udev-rule
- "90-usb-thing.rules"
- (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
- "ATTR@{product@}==\"Example\", "
- "RUN+=\"/path/to/script\"")))
-@end example
-
-La commande @command{herd rules udev}, en tant que root, renvoie le nom du
-répertoire contenant toutes les règles udev actives.
-@end deffn
-
-Ici on montre comment le service @var{udev-service} par défaut peut être
-étendu avec cette règle.
-
-@example
-(operating-system
- ;; @dots{}
- (services
- (modify-services %desktop-services
- (udev-service-type config =>
- (udev-configuration (inherit config)
- (rules (append (udev-configuration-rules config)
- (list %example-udev-rule))))))))
-@end example
-
-@deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
-Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
-dans @var{file}, un objet simili-fichier.
-
-L'exemple suivant montre comment utiliser un fichier de règles existant.
-
-@example
-(use-modules (guix download) ;pour url-fetch
- (guix packages) ;pour origin
- ;; @dots{})
-
-(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"))))))
-@end example
-@end deffn
-
-En plus, les définitions des paquets de Guix peuvent être inclus dans
-@var{rules} pour étendre les règles avec les définitions trouvées dans leur
-sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
-@var{file->udev-rule} précédent, on aurait pu utiliser le paquet
-@var{android-udev-rules} qui existe dans le module @code{(gnu packages
-android)}.
-
-L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
-pour que l'outil Android @command{adb} puisse détecter les appareils sans
-privilège root. Il détaille aussi comment créer le groupe @code{adbusers},
-requis pour le bon fonctionnement des règles définies dans le paquet
-@var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
-@var{supplementary-groups} de la déclaration @var{user-account} ainsi que
-dans le champ @var{groups} de l'enregistrement @var{operating-system}.
-
-@example
-(use-modules (gnu packages android) ;for android-udev-rules
- (gnu system shadow) ;for user-group
- ;; @dots{})
-
-(operating-system
- ;; @dots{}
- (users (cons (user-acount
- ;; @dots{}
- (supplementary-groups
- '("adbusers" ;for adb
- "wheel" "netdev" "audio" "video"))
- ;; @dots{})))
-
- (groups (cons (user-group (system? #t) (name "adbusers"))
- %base-groups))
-
- ;; @dots{}
-
- (services
- (modify-services %desktop-services
- (udev-service-type
- config =>
- (udev-configuration (inherit config)
- (rules (cons android-udev-rules
- (udev-configuration-rules config))))))))
-@end example
-
-@defvr {Variable Scheme} urandom-seed-service-type
-Garde de l'entropie dans @var{%random-seed-file} pour démarrer
-@file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
-@file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
-@file{/dev/hwrng} existe et peut être lu.
-@end defvr
-
-@defvr {Variable Scheme} %random-seed-file
-C'est le nom du fichier où des octets aléatoires sont sauvegardés par
-@var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
-redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
-@end defvr
-
-@cindex souris
-@cindex gpm
-@defvr {Variable Scheme} gpm-service-type
-C'est le type du service qui lance GPM, le @dfn{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 @code{gpm-configuration}
-(voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
-@end defvr
-
-@deftp {Type de données} gpm-configuration
-Type de données représentant la configuration de GPM.
-
-@table @asis
-@item @code{options} (par défaut : @code{%default-gpm-options})
-Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
-des options par défaut dit à @command{gpm} d'écouter les événements de la
-souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
-pour plus d'informations.
-
-@item @code{gpm} (par défaut : @code{gpm})
-Le paquet GPM à utiliser.
-
-@end table
-@end deftp
-
-@anchor{guix-publish-service-type}
-@deffn {Variable Scheme} guix-publish-service-type
-C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
-plus bas.
-
-Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
-créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
-@end deffn
-
-@deftp {Type de données} guix-publish-configuration
-Le type de données représentant la configuration du service @code{guix
-publish}.
-
-@table @asis
-@item @code{guix} (par défaut : @code{guix})
-Le paquet Guix à utiliser.
-
-@item @code{port} (par défaut : @code{80})
-Le port TCP sur lequel écouter les connexions.
-
-@item @code{host} (par défaut : @code{"localhost"})
-L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
-@code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
-
-@item @code{compression-level} (par défaut : @code{3})
-Le niveau de compression gzip auquel les substituts sont compressés.
-Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
-pour avoir le meilleur taux de compression contre une plus grande
-utilisation du CPU.
-
-@item @code{nar-path} (par défaut : @code{"nar"})
-Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
-@code{--nar-path}}, pour des détails.
-
-@item @code{cache} (par défaut : @code{#f})
-Lorsque la valeur est @code{#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.@:
-@code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
-des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
-impliqués.
-
-@item @code{workers} (par défaut : @code{#f})
-Lorsque la valeur est un entier, c'est le nombre de threads de travail
-utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
-processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
-pour plus d'informations.
-
-@item @code{ttl} (par défaut : @code{#f})
-Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
-des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
-plus d'informations.
-@end table
-@end deftp
-
-@anchor{rngd-service}
-@deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
- [#:device "/dev/hwrng"]
-Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
-pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
-échouera si @var{device} n'existe pas.
-@end deffn
-
-@anchor{pam-limits-service}
-@cindex limites de session
-@cindex ulimit
-@cindex priorités
-@cindex temps réel
-@cindex jackd
-@deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
-
-Renvoie un service qui installe un fichier de configuration pour le
-@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
-@code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
-@code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
-limites @code{ulimit} et les priorités 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
-@code{realtime} :
-
-@example
-(pam-limits-service
- (list
- (pam-limits-entry "@@realtime" 'both 'rtprio 99)
- (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
-@end example
-
-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.
-@end deffn
-
-@node Exécution de tâches planifiées
-@subsection Exécution de tâches planifiées
-
-@cindex cron
-@cindex mcron
-@cindex tâches planifiées
-Le module @code{(gnu services mcron)} fournit une interface pour
-GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
-mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
-traditionnel @command{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 @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
-Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
-ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
-(@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
-gexps pour introduire des définitions de tâches qui sont passées à mcron
-(@pxref{G-Expressions}).
-
-@lisp
-(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
- ;; @dots{}
- (services (cons (service mcron-service-type
- (mcron-configuration
- (jobs (list garbage-collector-job
- updatedb-job
- idutils-job))))
- %base-services)))
-@end lisp
-
-@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, 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 @code{schedule} du
-service pour visualiser les travaux mcron qui seront exécutés ensuite :
-
-@example
-# herd schedule mcron
-@end example
-
-@noindent
-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 :
-
-@example
-# herd schedule mcron 10
-@end example
-
-@defvr {Variable Scheme} mcron-service-type
-C'est le type du service @code{mcron}, dont la valeur est un objet
-@code{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 (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
-qui fournissent des tâches mcron à lancer.
-@end defvr
-
-@deftp {Type de données} mcron-configuration
-Type données qui représente la configuration de mcron.
-
-@table @asis
-@item @code{mcron} (par défaut : @var{mcron})
-Le paquet mcron à utiliser.
-
-@item @code{jobs}
-C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
-à une spécification de tâche de mcron (@pxref{Syntax, mcron job
-specifications,, mcron, GNU@tie{}mcron}).
-@end table
-@end deftp
-
-
-@node Rotation des journaux
-@subsection Rotation des journaux
-
-@cindex rottlog
-@cindex journaux, rotation
-@cindex logging
-Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
-tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
-tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
-fichiers séparés, potentiellement compressés. Le module @code{(gnu services
-admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
-de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
-
-L'exemple ci-dessous définit un système d'exploitation qui fournit la
-rotation des journaux avec les paramètres par défaut, pour les journaux les
-plus courants.
-
-@lisp
-(use-modules (guix) (gnu))
-(use-service-modules admin mcron)
-(use-package-modules base idutils)
-
-(operating-system
- ;; @dots{}
- (services (cons (service rottlog-service-type)
- %base-services)))
-@end lisp
-
-@defvr {Variable Scheme} rottlog-service-type
-C'est le type du service Rotlog, dont la valeur est un objet
-@code{rottlog-configuration}.
-
-D'autres services peuvent étendre celui-ci avec de nouveaux objets
-@code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
-fichiers à faire tourner.
-
-Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
-pour lancer le service rottlog.
-@end defvr
-
-@deftp {Type de données} rottlog-configuration
-Type de données représentant la configuration de rottlog.
-
-@table @asis
-@item @code{rottlog} (par défaut : @code{rottlog})
-Le paquet Rottlog à utiliser.
-
-@item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
-Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
-Variables,,, rottlog, GNU Rot[t]log Manual}).
-
-@item @code{rotations} (par défaut : @code{%default-rotations})
-Une liste d'objets @code{log-rotation} définis plus bas.
-
-@item @code{jobs}
-C'est une liste de gexps où chaque gexp correspond à une spécification de
-tache de mcron (@pxref{Exécution de tâches planifiées}).
-@end table
-@end deftp
-
-@deftp {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 (@pxref{Period Related File
-Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
-d'un journal de cette manière :
-
-@example
-(log-rotation
- (frequency 'daily)
- (files '("/var/log/apache/*"))
- (options '("storedir apache-archives"
- "rotate 6"
- "notifempty"
- "nocompress")))
-@end example
-
-La liste des champs est la suivante :
-
-@table @asis
-@item @code{frequency} (par défaut : @code{'weekly})
-La fréquence de rotation, un symbole.
-
-@item @code{files}
-La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
-
-@item @code{options} (par défaut : @code{'()})
-La liste des options de rottlog pour cette rotation (@pxref{Configuration
-parameters,,, rottlog, GNU Rot[t]lg Manual}).
-
-@item @code{post-rotate} (par défaut : @code{#f})
-Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %default-rotations
-Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
-autres fichiers.
-@end defvr
-
-@defvr {Variable Scheme} %rotated-files
-La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
-s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
-@end defvr
-
-@node Services réseau
-@subsection Services réseau
-
-Le module @code{(gnu services networking)} fournit des services pour
-configurer les interfaces réseaux.
-
-@cindex DHCP, service réseau
-@defvr {Variable Scheme} dhcp-client-service-type
-C'est le type de services qui lance @var{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,
-@code{isc-dhcp} par défaut.
-@end defvr
-
-@deffn {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 @code{<dhcpd-configuration>}. Par
-exemple :
-
-@example
-(service dhcpd-service-type
- (dhcpd-configuration
- (config-file (local-file "my-dhcpd.conf"))
- (interfaces '("enp0s25"))))
-@end example
-@end deffn
-
-@deftp {Type de données} dhcpd-configuration
-@table @asis
-@item @code{package} (par défaut : @code{isc-dhcp})
-Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
-@file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
-défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
-@item @code{config-file} (par défaut : @code{#f})
-Le fichier de configuration à utiliser. Il est requis. Il sera passé à
-@code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
-objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
-@code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
-configuration.
-@item @code{version} (par défaut : @code{"4"})
-La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
-4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
-et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
-de détails.
-@item @code{run-directory} (par défaut : @code{"/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.
-@item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
-Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
-@code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
-@item @code{interfaces} (par défaut : @code{'()})
-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 @code{dhcpd} lors du démarrage
-du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
-; voir @code{man dhcpd} pour plus de détails.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} static-networking-service-type
-@c TODO Document <static-networking> data structures.
-C'est le type des interfaces réseaux configurés statiquement.
-@end defvr
-
-@deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
- [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
-[#:requirement @code{'(udev)}]
-Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
-@var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
-@var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
-la passerelle par défaut du réseau. @var{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
-@code{static-networking-service-type} avec les interfaces réseaux
-supplémentaires à gérer.
-
-Par exemple :
-
-@example
-(static-networking-service "eno1" "192.168.1.82"
- #:gateway "192.168.1.2"
- #:name-servers '("192.168.1.2"))
-@end example
-@end deffn
-
-@cindex wicd
-@cindex sans-fil
-@cindex WiFi
-@cindex gestion du réseau
-@deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
-Renvoie un service qui lance @url{https://launchpad.net/wicd,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 @var{wicd} au profil global, pour fournir des
-commandes pour interagir avec le démon et configurer le réseau :
-@command{wicd-client}, une interface graphique et les interfaces
-utilisateurs @command{wicd-cli} et @command{wicd-curses}.
-@end deffn
-
-@cindex ModemManager
-
-@defvr {Variable Scheme} modem-manager-service-type
-C'est le type de service pour le service
-@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
-valeur de ce type de service est un enregistrement
-@code{modem-manager-configuration}.
-
-Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
-@end defvr
-
-@deftp {Type de données} modem-manager-configuration
-Type de donnée représentant la configuration de ModemManager.
-
-@table @asis
-@item @code{modem-manager} (par défaut : @code{modem-manager})
-Le paquet ModemManager à utiliser.
-
-@end table
-@end deftp
-
-@cindex NetworkManager
-
-@defvr {Variable Scheme} network-manager-service-type
-C'est le type de service pour le service
-@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
-valeur pour ce type de service est un enregistrement
-@code{network-manager-configuration}.
-
-Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
-@end defvr
-
-@deftp {Type de données} network-manager-configuration
-Type de données représentant la configuration de NetworkManager.
-
-@table @asis
-@item @code{network-manager} (par défaut : @code{network-manager})
-Le paquet NetworkManager à utiliser.
-
-@item @code{dns} (par défaut : @code{"default"})
-Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
-utilise le fichier de configuration @code{resolv.conf}
-
-@table @samp
-@item default
-NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
-de noms fournis par les connexions actives.
-
-@item dnsmasq
-NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
-utilisant une configuration « DNS disjointe » si vous êtes connecté par un
-VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
-nom local.
-
-@item none
-NetworkManager ne modifiera pas @code{resolv.conf}.
-@end table
-
-@item @code{vpn-plugins} (par défaut : @code{'()})
-C'est la liste des greffons disponibles pour les VPN (réseaux privés
-virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
-permet à NetworkManager de gérer des VPN via OpenVPN.
-
-@end table
-@end deftp
-
-@cindex Connman
-@deffn {Variable Scheme} connman-service-type
-C'est le type de service pour lancer @url{https://01.org/connman,Connman},
-un gestionnaire de connexions réseaux.
-
-Sa valeur doit être un enregistrement @code{connman-configuration} comme
-dans cet exemple :
-
-@example
-(service connman-service-type
- (connman-configuration
- (disable-vpn? #t)))
-@end example
-
-Voir plus bas pour des détails sur @code{connman-configuration}.
-@end deffn
-
-@deftp {Type de données} connman-configuration
-Type de données représentant la configuration de connman.
-
-@table @asis
-@item @code{connman} (par défaut : @var{connman})
-Le paquet connman à utiliser.
-
-@item @code{disable-vpn?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, désactive le greffon vpn de connman.
-@end table
-@end deftp
-
-@cindex WPA Supplicant
-@defvr {Variable Scheme} wpa-supplicant-service-type
-C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
-supplicant}, un démon d'authentification requis pour s'authentifier sur des
-WiFi chiffrés ou des réseaux ethernet.
-@end defvr
-
-@deftp {Type de données} wpa-supplicant-configuration
-Type données qui représente la configuration de WPA Supplicant.
-
-Il prend les paramètres suivants :
-
-@table @asis
-@item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
-Le paquet WPA Supplicant à utiliser.
-
-@item @code{dbus?} (par défaut : @code{#t})
-Indique s'il faut écouter les requêtes sur D-Bus.
-
-@item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
-Où stocker votre fichier de PID.
-
-@item @code{interface} (par défaut : @code{#f})
-Si une valeur est indiquée, elle doit spécifier le nom d'une interface
-réseau que WPA supplicant contrôlera.
-
-@item @code{config-file} (par défaut : @code{#f})
-Fichier de configuration facultatif à utiliser.
-
-@item @code{extra-options} (par défaut : @code{'()})
-Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
-@end table
-@end deftp
-
-@cindex iptables
-@defvr {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.
-
-@lisp
-(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
-"))))
-@end lisp
-@end defvr
-
-@deftp {Type de données} iptables-configuration
-Type de données représentant la configuration d'iptables.
-
-@table @asis
-@item @code{iptables} (par défaut : @code{iptables})
-Le paquet iptables qui fournit @code{iptables-restore} et
-@code{ip6tables-restore}.
-@item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
-Les règles iptables à utiliser. Elles seront passées à
-@code{iptables-restore}. Cela peut être un objet « simili-fichier »
-(@pxref{G-Expressions, file-like objects}).
-@item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
-Les règles iptables à utiliser. Elles seront passées à
-@code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
-(@pxref{G-Expressions, file-like objects}).
-@end table
-@end deftp
-
-@cindex NTP (Network Time Protocol), service
-@cindex horloge
-@defvr {Variable Scheme} ntp-service-type
-C'est le type de service qui lance le démon @uref{http://www.ntp.org,
-Network Time Protocol (NTP)}, @command{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 @code{ntpd-configuration}, décrit
-ci-dessous.
-@end defvr
-
-@deftp {Type de données} ntp-configuration
-C'est le type de données représentant la configuration du service NTP.
-
-@table @asis
-@item @code{servers} (par défaut : @code{%ntp-servers})
-C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
-synchronisé.
-
-@item @code{allow-large-adjustment?} (par défaut : @code{#f})
-Détermine si @code{ntpd} peut faire un ajustement initial de plus de
-1@tie{}000 secondes.
-
-@item @code{ntp} (par défaut : @code{ntp})
-Le paquet NTP à utiliser.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %ntp-servers
-Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
-serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
-@end defvr
-
-@cindex OpenNTPD
-@deffn {Procédure Scheme} openntpd-service-type
-Lance le démon NTP @command{ntpd}, implémenté par
-@uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
-système synchronisée avec celle des serveurs donnés.
-
-@example
-(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/"))
- (allow-large-adjustment? #t)))
-
-@end example
-@end deffn
-
-@deftp {Type de données} openntpd-configuration
-@table @asis
-@item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
-L'exécutable openntpd à utiliser.
-@item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
-Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
-démon ntpd.
-@item @code{query-from} (par défaut : @code{'()})
-Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
-sortantes.
-@item @code{sensor} (par défaut : @code{'()})
-Spécifie une liste de senseurs de différences de temps que ntpd devrait
-utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
-qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
-documentation en amont} pour plus d'informations.
-@item @code{server} (par défaut : @var{%ntp-servers})
-Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
-lesquels se synchroniser.
-@item @code{servers} (par défaut : @code{'()})
-Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
-NTP avec lesquelles se synchroniser.
-@item @code{constraint-from} (par défaut : @code{'()})
-@code{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.
-@item @code{constraints-from} (par défaut : @code{'()})
-Comme pour @code{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, @code{ntpd} calculera la
-contrainte médiane.
-@item @code{allow-large-adjustment?} (par défaut : @code{#f})
-Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
-secondes.
-@end table
-@end deftp
-
-@cindex inetd
-@deffn {Variable Scheme} inetd-service-type
-Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
-inetutils, GNU Inetutils}). @command{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 @code{inetd-configuration}. L'exemple
-suivant configure le démon @command{inetd} pour qu'il fournisse le service
-@command{echo}, ainsi qu'un service smtp qui transfère le trafic smtp par
-ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
-:
-
-@example
-(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" "/path/to/ssh_key"
- "-W" "smtp-server:25" "user@@hostname")))))
-@end example
-
-Voir plus bas pour plus de détails sur @code{inetd-configuration}.
-@end deffn
-
-@deftp {Type de données} inetd-configuration
-Type de données représentant la configuration de @command{inetd}.
-
-@table @asis
-@item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
-L'exécutable @command{inetd} à utiliser.
-
-@item @code{entries} (par défaut : @code{'()})
-Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
-crée avec le constructeur @code{inetd-entry}.
-@end table
-@end deftp
-
-@deftp {Type de données} inetd-entry
-Type de données représentant une entrée dans la configuration
-d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
-@command{inetd} écoutera les requêtes.
-
-@table @asis
-@item @code{node} (par défaut : @code{#f})
-Chaîne de caractères facultative, un liste d'adresses locales séparées par
-des virgules que @command{inetd} devrait utiliser pour écouter ce service.
-@xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
-complète de toutes les options.
-@item @code{name}
-Une chaîne de caractères dont le nom doit correspondre à une entrée de
-@code{/etc/services}.
-@item @code{socket-type}
-Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
-@code{'seqpacket}.
-@item @code{protocol}
-Une chaîne de caractères qui doit correspondre à une entrée dans
-@code{/etc/protocols}.
-@item @code{wait?} (par défaut : @code{#t})
-Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
-d'écouter de nouvelles demandes de service.
-@item @code{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.@: @code{"utilisateur"},
-@code{"utilisateur:groupe"} ou @code{"utilisateur.groupe"}.
-@item @code{program} (par défaut : @code{"internal"})
-Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
-@command{inetd} devrait utiliser un service inclus.
-@item @code{arguments} (par défaut : @code{'()})
-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 à
-@command{inetd}, cette entrée doit être @code{'()} ou @code{'("internal")}.
-@end table
-
-@xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
-discussion plus détaillée de chaque champ de configuration.
-@end deftp
-
-@cindex Tor
-@defvr {Variable Scheme} tor-service-type
-C'est le type pour un service qui lance le démon de navigation anonyme
-@uref{https://torproject.org, Tor}. Le service est configuré avec un
-enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
-lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
-@code{tor}.
-
-@end defvr
-
-@deftp {Type de données} tor-configuration
-@table @asis
-@item @code{tor} (par défaut : @code{tor})
-Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
-@file{bin/tor} relativement à son répertoire de sortie. Le paquet par
-défaut est le l'implémentation du @uref{https://www.torproject.org, projet
-Tor}.
-
-@item @code{config-file} (par défaut : @code{(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é à
-@code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
-simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
-tor} pour plus de détails sur la syntaxe du fichier de configuration.
-
-@item @code{hidden-services} (par défaut : @code{'()})
-La liste des enregistrements @code{<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 @code{<hidden-service>} avec la procédure
-@code{tor-hidden-service} décrite plus bas.
-
-@item @code{socks-socket-type} (par défaut : @code{'tcp})
-Le type de socket par défaut que Tor devrait utiliser pour les socket
-SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
-@code{'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
-@code{'unix}, Tor écoutera sur le socket UNIX domain
-@file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
-groupe @code{tor}.
-
-Si vous voulez personnaliser le socket SOCKS plus avant, laissez
-@code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
-@code{config-file} pour remplacer les valeurs par défaut avec votre propre
-option @code{SocksPort}.
-@end table
-@end deftp
-
-@cindex service caché
-@deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
-Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
-@var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
-comme dans :
-
-@example
- '((22 "127.0.0.1:22")
- (80 "127.0.0.1:8080"))
-@end example
-
-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 @file{/var/lib/tor/hidden-services/@var{name}} où le
-fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
-caché.
-
-Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
-Tor project's documentation} pour trouver plus d'information.
-@end deffn
-
-Le module @code{(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.
-
-@deffn {Variable Scheme} rsync-service-type
-C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
-un enregistrement @command{rsync-configuration} comme dans cet exemple :
-
-@example
-(service rsync-service-type)
-@end example
-
-Voir plus pas pour trouver des détails à propos de
-@code{rsync-configuration}.
-@end deffn
-
-@deftp {Type de données} rsync-configuration
-Type de données représentant la configuration de @code{rsync-service}.
-
-@table @asis
-@item @code{package} (par défaut : @var{rsync})
-Le paquet @code{rsync} à utiliser.
-
-@item @code{port-number} (par défaut : @code{873})
-Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
-le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
-tant qu'utilisateur et groupe @code{root}.
-
-@item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
-Nom du fichier où @command{rsync} écrit son PID.
-
-@item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
-Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
-
-@item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
-Nom du fichier où @command{rsync} écrit son fichier de journal.
-
-@item @code{use-chroot?} (par défaut : @var{#t})
-S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
-
-@item @code{share-path} (par défaut : @file{/srv/rsync})
-Emplacement du répertoire partagé de @command{rsync}.
-
-@item @code{share-comment} (par défaut : @code{"Rsync share"})
-Commentaire du répertoire partagé de @command{rsync}.
-
-@item @code{read-only?} (par défaut : @var{#f})
-Permission en écriture sur le répertoire partagé.
-
-@item @code{timeout} (par défaut : @code{300})
-Délai d'attente d'entrée-sortie en secondes.
-
-@item @code{user} (par défaut : @var{"root"})
-Propriétaire du processus @code{rsync}.
-
-@item @code{group} (par défaut : @var{"root"})
-Groupe du processus @code{rsync}.
-
-@item @code{uid} (par défaut : @var{"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 @code{root}.
-
-@item @code{gid} (par défaut : @var{"rsyncd"})
-Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
-
-@end table
-@end deftp
-
-En plus, @code{(gnu services ssh)} fournit les services suivant.
-@cindex SSH
-@cindex serveur SSH
-
-@deffn {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 @command{lshd} de @var{lsh} pour écouter sur le port
-@var{port-number}. @var{host-key} doit désigner un fichier contenant la
-clef d'hôte et ne doit être lisible que par root.
-
-Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
-qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
-@var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
-dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
-vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
-
-Lorsque @var{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 @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
-générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
-une paire de clefs dont la clef privée sera stockée dans le fichier
-@var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
-
-Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
-interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
-d'hôtes et d'adresses.
-
-@var{allow-empty-passwords?} spécifie si les connexions avec des mots de
-passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
-root est acceptée.
-
-Les autres options devraient être évidentes.
-@end deffn
-
-@cindex SSH
-@cindex serveur SSH
-@deffn {Variable Scheme} openssh-service-type
-C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
-@command{sshd}. Sa valeur doit être un enregistrement
-@code{openssh-configuration} comme dans cet exemple :
-
-@example
-(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"))))))
-@end example
-
-Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
-
-Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
-dans cet exemple :
-
-@example
-(service-extension openssh-service-type
- (const `(("charlie"
- ,(local-file "charlie.pub")))))
-@end example
-@end deffn
-
-@deftp {Type de données} openssh-configuration
-C'est l'enregistrement de la configuration de la commande @command{sshd}
-d'OpenSSH.
-
-@table @asis
-@item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
-Nom du fichier où @command{sshd} écrit son PID.
-
-@item @code{port-number} (par défaut : @code{22})
-Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
-
-@item @code{permit-root-login} (par défaut : @code{#f})
-Ce champ détermine si et quand autoriser les connexions en root. Si la
-valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
-est @code{#t}, elles sont autorisées. S'il s'agit du symbole
-@code{'without-password}, alors les connexions root sont autorisées mais pas
-par une authentification par mot de passe.
-
-@item @code{allow-empty-passwords?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
-peuvent se connecter. Sinon, ils ne peuvent pas.
-
-@item @code{password-authentication?} (par défaut : @code{#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.
-
-@item @code{public-key-authentication?} (par défaut : @code{#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
-@file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
-version 2.
-
-@item @code{x11-forwarding?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, le transfert de connexion du client graphique
-X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
-de @command{ssh} fonctionneront.
-
-@item @code{allow-agent-forwarding?} (par défaut : @code{#t})
-Indique s'il faut autoriser la redirection d'agent.
-
-@item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
-Indique s'il faut autoriser la redirection TCP.
-
-@item @code{gateway-ports?} (par défaut : @code{#f})
-Indique s'il faut autoriser les ports de passerelle.
-
-@item @code{challenge-response-authentication?} (par défaut : @code{#f})
-Spécifie si l'authentification par défi est autorisée (p.@: ex.@: via PAM).
-
-@item @code{use-pam?} (par défaut : @code{#t})
-Active l'interface avec le module d'authentification greffable, PAM. Si la
-valeur est @code{#t}, cela activera l'authentification PAM avec
-@code{challenge-response-authentication?} et
-@code{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 @code{challenge-response-authentication?}, soit
-@code{password-authentication?}.
-
-@item @code{print-last-log?} (par défaut : @code{#t})
-Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
-connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
-interactive.
-
-@item @code{subsystems} (par défaut : @code{'(("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 @command{internal-sftp} implémente un serveur SFTP dans le
-processus. Autrement, on peut spécifier la commande @command{sftp-server} :
-@example
-(service openssh-service-type
- (openssh-configuration
- (subsystems
- `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
-@end example
-
-@item @code{accepted-environment} (par défaut : @code{'()})
-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 @code{AcceptEnv} dans
-@code{man sshd_config}.
-
-Cet exemple permet aux clients ssh d'exporter la variable @code{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.
-
-@example
-(service openssh-service-type
- (openssh-configuration
- (accepted-environment '("COLORTERM"))))
-@end example
-
-@item @code{authorized-keys} (par défaut : @code{'()})
-@cindex clefs autorisées, SSH
-@cindex SSH, clefs autorisées
-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 :
-
-@example
-(openssh-configuration
- (authorized-keys
- `(("rekado" ,(local-file "rekado.pub"))
- ("chris" ,(local-file "chris.pub"))
- ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
-@end example
-
-@noindent
-enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
-@code{chris} et @code{root}.
-
-Des clefs autorisées supplémentaires peuvent être spécifiées via
-@code{service-extension}.
-
-Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
-@file{~/.ssh/authorized_keys}.
-
-@item @code{log-level} (par défaut : @code{'info})
-C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
-@code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
-Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
-des noms de niveaux.
-
-@item @code{extra-content} (par défaut : @code{""})
-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 :
-
-@example
-(openssh-configuration
- (extra-content "\
-Match Address 192.168.0.1
- PermitRootLogin yes"))
-@end example
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} dropbear-service [@var{config}]
-Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
-Dropbear} avec la configuration @var{config} donnée, un objet
-@code{<dropbear-configuration>}.
-
-Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
-ajoutez cet appel au champ @code{services} de votre système d'exploitation :
-
-@example
-(dropbear-service (dropbear-configuration
- (port-number 1234)))
-@end example
-@end deffn
-
-@deftp {Type de données} dropbear-configuration
-Ce type de données représente la configuration d'un démon SSH Dropbear.
-
-@table @asis
-@item @code{dropbear} (par défaut : @var{dropbear})
-Le paquet Dropbear à utiliser.
-
-@item @code{port-number} (par défaut : 22)
-Le port TCP sur lequel le démon attend des connexions entrantes.
-
-@item @code{syslog-output?} (par défaut : @code{#t})
-Indique s'il faut activer la sortie vers syslog.
-
-@item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
-Nom du fichier de PID du démon.
-
-@item @code{root-login?} (par défaut : @code{#f})
-Indique s'il faut autoriser les connexions en @code{root}.
-
-@item @code{allow-empty-passwords?} (par défaut : @code{#f})
-Indique s'il faut autoriser les mots de passes vides.
-
-@item @code{password-authentication?} (par défaut : @code{#t})
-Indique s'il faut autoriser l'authentification par mot de passe.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %facebook-host-aliases
-Cette variable contient une chaîne de caractères à utiliser dans
-@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
-Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
-des serveurs connus du service en ligne Facebook — p.@: ex.@:
-@code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
-équivalent en IPv6, @code{::1}.
-
-Cette variable est typiquement utilisée dans le champ @code{hosts-file}
-d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
-
-@example
-(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))))
-@end example
-
-Ce mécanisme peut éviter que des programmes qui tournent localement, comme
-des navigateurs Web, ne se connectent à Facebook.
-@end defvr
-
-Le module @code{(gnu services avahi)} fourni la définition suivante.
-
-@defvr {Variable Scheme} avahi-service-type
-C'est le service qui lance @command{avahi-daemon}, un service système qui
-répond aux requêtes mDNS/DNS-SD qui permet la découverte de service et la
-recherche de nom en « zéro configuration » (voir @uref{http://avahi.org/}).
-Sa valeur doit être un enregistrement @code{zero-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 @code{.local} avec
-@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name Service Switch}, pour plus d'informations sur la résolution des noms d'hôte.
-
-En plus, cela ajoute le paquet @var{avahi} au profil du système pour que les
-commandes comme @command{avahi-browse} soient directement utilisables.
-@end defvr
-
-@deftp {Type de données} avahi-configuration
-Type de données représentant la configuration d'Avahi.
-
-@table @asis
-
-@item @code{host-name} (par défaut : @code{#f})
-Si la valeur n'est pas @code{#f}, utilise cette valeur comme nom d'hôte à
-publier pour la machine ; sinon, utilise le vrai nom d'hôte de la machine.
-
-@item @code{publish?} (par défaut : @code{#t})
-Lorsque la valeur est vraie, permet la publication sur le réseau (en
-diffusion) des noms d'hôtes et des services.
-
-@item @code{publish-workstation?} (par défaut : @code{#t})
-Lorsque la valeur est vraie, @command{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 :
-
-@example
-avahi-browse _workstation._tcp
-@end example
-
-@item @code{wide-area?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, DNS-SD sur DNS unicast est activé.
-
-@item @code{ipv4?} (par défaut : @code{#t})
-@itemx @code{ipv6?} (par défaut : @code{#t})
-Ces champs déterminent s'il faut utiliser des socket IPv4/IPv6.
-
-@item @code{domains-to-browse} (par défaut : @code{'()})
-C'est la liste des domaines sur lesquels naviguer.
-@end table
-@end deftp
-
-@deffn {Variable Scheme} openvswitch-service-type
-C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
-dont la valeur devrait être un objet @code{openvswitch-configuration}.
-@end deffn
-
-@deftp {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.
-
-@table @asis
-@item @code{package} (par défaut : @var{openvswitch})
-Objet de paquet de Open vSwitch.
-
-@end table
-@end deftp
-
-@node Système de fenêtrage X
-@subsection Système de fenêtrage X
-
-@cindex X11
-@cindex Système de fenêtrage X
-@cindex gestionnaire de connexion
-La prise en chargue du système d'affichage graphique X Window — en
-particulier Xorg — est fournit par le module @code{(gnu services xorg)}.
-Remarquez qu'il n'y a pas de procédure @code{xorg-service}. À la place, le
-serveur X est démarré par le @dfn{gestionnaire de connexion}, par défaut le
-gestionnaire d'affichage de GNOME (GDM).
-
-@cindex GDM
-@cindex GNOME, gestionnaire de connexion
-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.
-
-@cindex gestionnaire de fenêtre
-Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
-fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
-préférence en l'ajoutant au champ @code{packages} de votre définition de
-système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
-packages}).
-
-@defvr {Variable Scheme} gdm-service-type
-C'est le type pour le @uref{https://wiki.gnome.org/Projects/GDM/,
-gestionnaire d'affichage de GNOME} (GDM), un programme qui gère les serveurs
-d'affichage graphiques et s'occupe de la connexion graphique des
-utilisateurs. Sa valeur doit être un @code{gdm-configuration} (voir plus
-bas).
-
-@cindex types de sessions (X11)
-@cindex X11, types de sessions
-GDM cherche des @dfn{types de sessions} définies par les fichiers
-@file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
-permet aux utilisateurs de choisir une session depuis l'écran de connexion.
-Les paquets comme @code{gnmoe}, @code{xfce} et @code{i3} fournissent des
-fichiers @file{.desktop} ; les ajouter à l'ensemble des paquets du système
-les rendra automatiquement disponibles sur l'écran de connexion.
-
-En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
-disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
-un gestionnaire de fenêtre au un autre client X.
-@end defvr
-
-@deftp {Type de données} gdm-configuration
-@table @asis
-@item @code{auto-login?} (par défaut : @code{#f})
-@itemx @code{default-user} (par défaut : @code{#f})
-Lorsque @code{auto-login?} est faux, GDM présente un écran de connexion.
-
-Lorsque @code{auto-login?} est vrai, GDM se connecte directement en tant que
-@code{default-user}.
-
-@item @code{gnome-shell-assets} (par défaut : …)
-Liste de données requises par GDM : un thème d'icônes, des polices, etc.
-
-@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
-Configuration du serveur graphique Xorg.
-
-@item @code{xsession} (par défaut : @code{xinitrc})
-Le script à lancer avant de démarrer une session X.
-
-@item @code{dbus-daemon} (par défaut : @code{dbus-daemon-wrapper})
-Nom du fichier de l'exécutable @code{dbus-daemon}.
-
-@item @code{gdm} (par défaut : @code{gdm})
-Le paquet GDM à utiliser.
-@end table
-@end deftp
-
-@defvr {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
-@file{.desktop} et permet aux utilisateurs de choisir une session à partir
-de l'écran de connexion avec @kbd{F1}. Il comprend aussi les fichiers
-@file{~/.xsession}.
-@end defvr
-
-@deftp {Type de données} slim-configuration
-Type de données représentant la configuration de @code{slim-service-type}.
-
-@table @asis
-@item @code{allow-empty-passwords?} (par défaut : @code{#t})
-S'il faut autoriser les connexions avec un mot de passe vide.
-
-@item @code{auto-login?} (par défaut : @code{#f})
-@itemx @code{default-user} (par défaut : @code{""})
-Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
-
-Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
-que @code{default-user}.
-
-@item @code{theme} (par défaut : @code{%default-slim-theme})
-@itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
-Le thème graphique à utiliser et son nom.
-
-@item @code{auto-login-session} (par défaut : @code{#f})
-Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
-comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
-"/bin/windowmaker")}.
-
-Si la valeur est fausse, une session décrite par l'un des fichiers
-@file{.desktop} disponibles dans @code{/run/current-system/profile} et
-@code{~/.guix-profile} sera utilisée.
-
-@quotation Remarque
-Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
-système ou dans votre profil utilisateur. Sinon, si
-@code{auto-login-session} est faux, vous ne serez jamais capable de vous
-connecter.
-@end quotation
-
-@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
-Configuration du serveur graphique Xorg.
-
-@item @code{xauth} (par défaut : @code{xauth})
-Le paquet XAuth à utiliser.
-
-@item @code{shepherd} (par défaut : @code{shepherd})
-Le paquet Shepherd à utiliser pour invoquer @command{halt} et
-@command{reboot}.
-
-@item @code{sessreg} (par défaut : @code{sessreg})
-Le paquet sessreg à utiliser pour enregistrer la session.
-
-@item @code{slim} (par défaut : @code{slim})
-Le paquet SLiM à utiliser.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %default-theme
-@defvrx {Variable Scheme} %default-theme-name
-Le thème SLiM par défaut et son nom.
-@end defvr
-
-
-@deftp {Type de données} sddm-configuration
-C'est le type de données représentant la configuration du service sddm.
-
-@table @asis
-@item @code{display-server} (par défaut : "x11")
-Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
-valeurs valides sont « x11 » et « wayland ».
-
-@item @code{numlock} (par défaut : "on")
-Les valeurs valides sont « on », « off » ou « none ».
-
-@item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
-La commande à lancer à l'arrêt du système.
-
-@item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
-La commande à lancer lors du redémarrage du système.
-
-@item @code{theme} (par défaut : "maldives")
-Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
-et « maldives ».
-
-@item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
-Le répertoire où se trouvent les thèmes.
-
-@item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
-Répertoire où se trouvent les avatars.
-
-@item @code{default-path} (par défaut : "/run/current-system/profile/bin")
-Le PATH par défaut à utiliser.
-
-@item @code{minimum-uid} (par défaut : 1000)
-UID minimum pour être affiché dans SDDM.
-
-@item @code{maximum-uid} (par défaut : 2000)
-UID maximum pour être affiché dans SDDM
-
-@item @code{remember-last-user?} (par défaut : #t)
-S'il faut se rappeler le dernier utilisateur connecté.
-
-@item @code{remember-last-session?} (par défaut : #t)
-S'il faut se rappeler la dernière session.
-
-@item @code{hide-users} (par défaut : "")
-Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
-
-@item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
-Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
-de SDDM.
-
-@item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
-Le script à lancer avant de démarrer une session wayland.
-
-@item @code{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.
-
-@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
-Configuration du serveur graphique Xorg.
-
-@item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
-Chemin vers xauth.
-
-@item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
-Chemin vers Xephyr.
-
-@item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
-Le script à lancer après avoir démarré xorg-server.
-
-@item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
-Le script à lancer avant d'arrêter xorg-server.
-
-@item @code{xsession-command} (par défaut : @code{xinitrc})
-Le script à lancer avant de démarrer une session X.
-
-@item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
-Répertoire où trouver les fichiers .desktop pour les sessions X.
-
-@item @code{minimum-vt} (par défaut : 7)
-VT minimal à utiliser.
-
-@item @code{auto-login-user} (par défaut : "")
-Utilisateur à utiliser pour la connexion automatique.
-
-@item @code{auto-login-session} (par défaut : "")
-Le fichier desktop à utiliser pour la connexion automatique.
-
-@item @code{relogin?} (par défaut : #f)
-S'il faut se reconnecter après la déconnexion.
-
-@end table
-@end deftp
-
-@cindex gestionnaire de connexion
-@cindex connexion X11
-@deffn {Procédure Scheme} sddm-service config
-Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
-avec une configuration de type @code{<sddm-configuration>}.
-
-@example
- (sddm-service (sddm-configuration
- (auto-login-user "Alice")
- (auto-login-session "xfce.desktop")))
-@end example
-@end deffn
-
-@cindex Xorg, configuration
-@deftp {Type de données} xorg-configuration
-Ce type de données représente la configuration du serveur d'affichage
-graphique Xorg. Remarquez qu'il ne s'agit pas d'un 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 @code{xorg-configuration}.
-
-@table @asis
-@item @code{modules} (par défaut : @code{%default-xorg-modules})
-C'est une liste de @dfn{paquets de module} chargés par le serveur Xorg —
-p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard} etc.
-
-@item @code{fonts} (par défaut : @code{%default-xorg-fonts})
-C'est une liste de répertoires de polices à ajouter au @dfn{chemin de
-polices} du serveur.
-
-@item @code{drivers} (par défaut : @code{'()})
-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.@: @code{("modesetting" "vesa")}
-
-@item @code{resolutions} (par défaut : @code{'()})
-Lorsque @code{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.@: @code{((1024 768) (640 480))}
-
-@cindex disposition du clavier, pour Xorg
-@cindex disposition des touches, Xorg
-@item @code{keyboard-layout} (par défaut : @code{#f})
-Si la valeur est @code{#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 @code{keyboard-layout} spécifiant la
-disposition du clavier à utiliser lorsque Xorg tourne. @xref{Disposition du clavier} pour plus d'informations sur la manière de spécifier la disposition
-du clavier.
-
-@item @code{extra-config} (par défaut : @code{'()})
-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.
-
-@item @code{server} (par défaut : @code{xorg-server})
-C'est le paquet fournissant le serveur Xorg.
-
-@item @code{server-arguments} (par défaut : @code{%default-xorg-server-arguments})
-Liste d'arguments de la ligne de commande supplémentaires à passer au
-serveur X. La valeur par défaut est @code{-nolisten tcp}.
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} set-xorg-configuration @var{config} @
- [@var{login-manager-service-type}]
-Dit au gestionnaire de connexion (de type @var{login-manager-service-type})
-d'utiliser @var{config}, un enregistrement <xorg-configuration>.
-
-Comme la configuration Xog est incluse dans la configuration du gestionnaire
-de connexion — p.@: ex.@: @code{gdm-configuration} — cette procédure fournit
-un raccourci pour configurer Xorg.
-@end deffn
-
-@deffn {Procédure Scheme} xorg-start-command [@var{config}]
-Renvoie un script @code{startx} dans lequel les modules, les polices, etc,
-spécifiés dans @var{config} sont disponibles. Le résultat devrait être
-utilisé à la place de @code{startx}.
-
-Habituellement le serveur X est démarré par un gestionnaire de connexion.
-@end deffn
-
-
-@deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
-Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
-économiseur d'écran dont la commande est @var{program}, à l'ensemble des
-programmes setuid et lui ajoute une entrée PAM. Par exemple :
-
-@lisp
-(screen-locker-service xlockmore "xlock")
-@end lisp
-
-rend utilisable le bon vieux XlockMore.
-@end deffn
-
-
-@node Services d'impression
-@subsection Services d'impression
-
-@cindex support des imprimantes avec CUPS
-Le module @code{(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 @code{cups-service} à la définition
-du système d'exploitation :
-
-@deffn {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 :
-@example
-(service cups-service-type)
-@end example
-@end deffn
-
-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 @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 @code{escpr} et pour les
-imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
-directement, comme ceci (vous devez utiliser le module @code{(gnu packages
-cups)}) :
-
-@example
-(service cups-service-type
- (cups-configuration
- (web-interface? #t)
- (extensions
- (list cups-filters escpr hplip-minimal))))
-@end example
-
-Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
-paquet hplip, nous vous suggérons d'installer le paquet @code{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,
-@samp{string-list foo} indique que le paramètre @code{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 @code{cupsd.conf} que vous voulez porter depuis un autre
-système ; voir la fin pour plus de détails.
-
-@c The following documentation was initially generated by
-@c (generate-documentation) in (gnu services cups). Manually maintained
-@c documentation is better, so we shouldn't hesitate to edit below as
-@c needed. However if the change you want to make to this documentation
-@c can be done in an automated way, it's probably easier to change
-@c (generate-documentation) than to make it below and have to deal with
-@c the churn as CUPS updates.
-
-
-Les champs de @code{cups-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{cups-configuration}} package cups
-Le paquet CUPS.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} package-list extensions
-Pilotes et autres extensions du paquet CUPS.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{files-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{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 @code{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 @code{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
-@code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
-
-La valeur par défaut est @samp{"/var/log/cups/access_log"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
-L'emplacement où CUPS devrait mettre les données en cache.
-
-La valeur par défaut est @samp{"/var/cache/cups"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"0640"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{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 @code{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
-@code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
-
-La valeur par défaut est @samp{"/var/log/cups/error_log"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} string fatal-errors
-Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
-Les types de chaînes sont :
-
-@table @code
-@item none
-Aucune erreur n'est fatale.
-
-@item all
-Toutes les erreurs ci-dessous sont fatales.
-
-@item browse
-Les erreurs d'initialisation de la navigation sont fatales, par exemple les
-connexion échouées au démon DNS-SD.
-
-@item config
-Les erreurs de syntaxe du fichier de configuration sont fatale.
-
-@item listen
-Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
-sur la boucle locale ou les adresses @code{any}.
-
-@item log
-Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
-
-@item 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.
-@end table
-
-La valeur par défaut est @samp{"all -browse"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @uref{file:///dev/null} est toujours
-permise.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"lp"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"0644"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{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 @code{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
-@code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
-
-La valeur par défaut est @samp{"/var/log/cups/page_log"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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
-@code{remroot}.
-
-La valeur par défaut est @samp{"remroot"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"/var/spool/cups"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
-utilisée et supportée que sur macOS.
-
-La valeur par défaut est @samp{strict}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
-Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
-cherchera les clefs publiques et privées dans ce répertoire : un fichier
-@code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
-correspondant pour la clef privée encodée en PEM.
-
-La valeur par défaut est @samp{"/etc/cups/ssl"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} file-name server-root
-Spécifie le répertoire contenant les fichiers de configuration du serveur.
-
-La valeur par défaut est @samp{"/etc/cups"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
-Spécifie le groupe ou les groupes à utiliser pour l'authentification du
-groupe @code{@@SYSTEM}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
-Spécifie le répertoire où les fichiers temporaires sont stockés.
-
-La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"lp"}.
-@end deftypevr
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
-Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
-@code{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 @code{actions} enregistre la soumission,
-la suspension, la libération, la modification et l'annulation des travaux et
-toutes les conditions de @code{config}. Le niveau @code{all} enregistre
-toutes les requêtes.
-
-La valeur par défaut est @samp{actions}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{dnssd}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
-Spécifie si l'interface web de CUPS est publiée.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
-Spécifie si les imprimantes partagées sont publiées.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string classification
-Spécifie la classification de sécurité du serveur. N'importe quel nom de
-bannière peut être utilisé, comme « classifié », « confidentiel », « secret
-», « top secret » et « déclassifié » ou la bannière peut être omise pour
-désactiver les fonctions d'impression sécurisées.
-
-La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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
-@code{job-sheets}.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
-Spécifie le type d'authentification par défaut à utiliser.
-
-La valeur par défaut est @samp{Basic}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{Required}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"en"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
-Spécifie la taille de papier par défaut pour les nouvelles queues
-d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
-régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
-par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
-et @samp{"A4"}.
-
-La valeur par défaut est @samp{"Auto"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string default-policy
-Spécifie la politique d'accès par défaut à utiliser.
-
-La valeur par défaut est @samp{"default"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
-Spécifie si les imprimantes locales sont partagées par défaut.
-
-La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
-Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
-sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
-@code{retry-job}, qui tentera de nouveau l'impression plus tard ;
-@code{retry-this-job}, qui retentera l'impression immédiatement ; et
-@code{stop-printer} qui arrête l'imprimante.
-
-La valeur par défaut est @samp{stop-printer}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{double} fait que @code{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'à @code{#t} ou @code{double} que si c'est
-absolument nécessaire.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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
-@code{retry-job} ou @code{retry-current-job}.
-
-La valeur par défaut est @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{retry-job} ou
-@code{retry-current-job}.
-
-La valeur par défaut est @samp{5}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
-Spécifie s'il faut supporter les connexion HTTP keep-alive.
-
-La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
-Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
-@var{adresse}:@var{port}, où @var{adresse} est soit une adresse IPv6 dans
-des crochets, soit une adresse IPv4, soit @code{*} 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.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{128}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
-Spécifie un ensemble de contrôles d'accès supplémentaires.
-
-Les champs de @code{location-access-controls} disponibles sont :
-
-@deftypevr {paramètre de @code{location-access-controls}} file-name path
-Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{access-controls} de @code{operation-access-control}.
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{()}.
-
-Les champs de @code{method-access-controls} disponibles sont :
-
-@deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
-Si la valeur est @code{#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 @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{method-access-controls}} method-list methods
-Les méthodes auxquelles ce contrôle d'accès s'applique.
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
-Directives de contrôle d'accès, comme une liste de chaînes de caractères.
-Chaque chaîne devrait être une directive, comme « Order allow, deny ».
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-@end deftypevr
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{100}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} log-level log-level
-Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
-@code{none} arrête toute journalisation alors que que @code{debug2}
-enregistre tout.
-
-La valeur par défaut est @samp{info}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{standard} enregistre les secondes entières alors que
-@code{usecs} enregistre les microsecondes.
-
-La valeur par défaut est @samp{standard}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{100}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{100}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{9999}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
-Spécifie la durée maximum qu'un travail peut rester dans l'état de
-suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
-désactive l'annulation des travaux suspendus.
-
-La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{500}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{10800}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{1048576}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{300}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string page-log-format
-Spécifie le format des lignes PageLog. Les séquences qui commencent par un
-pourcent (@samp{%}) 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 :
-
-@table @samp
-@item %%
-insère un seul caractères pourcent
-
-@item %@{name@}
-insère la valeur de l'attribut IPP spécifié
-
-@item %C
-insère le nombre de copies pour la page actuelle
-
-@item %P
-insère le numéro de page actuelle
-
-@item %T
-insère la date et l'heure actuelle dans un format de journal commun
-
-@item %j
-insère l'ID du travail
-
-@item %p
-insère le nom de l'imprimante
-
-@item %u
-insère le nom d'utilisateur
-@end table
-
-Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
-@code{%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 @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
-Spécifie des politiques de contrôle d'accès nommées.
-
-Les champs de @code{policy-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{policy-configuration}} string name
-Nom de la politique.
-@end deftypevr
-
-@deftypevr {paramètre de @code{policy-configuration}} string job-private-access
-Spécifie une liste d'accès pour les valeurs privées du travail.
-@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
-requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
-propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
-le champ @code{system-group} de la configuration @code{files-config}, qui
-est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
-possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
-@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
-liste d'accès peut aussi être simplement @code{all} ou @code{default}.
-
-La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{policy-configuration}} string job-private-values
-Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
-@code{default}, ou @code{none}.
-
-La valeur par défaut est @samp{"job-name job-originating-host-name
-job-originating-user-name phone"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
-Spécifie un liste d'accès pour les valeurs privées de la souscription.
-@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
-requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
-propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
-le champ @code{system-group} de la configuration @code{files-config}, qui
-est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
-possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
-@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
-liste d'accès peut aussi être simplement @code{all} ou @code{default}.
-
-La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
-Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
-@code{default}, ou @code{none}.
-
-La valeur par défaut est @samp{"notify-events notify-pull-method
-notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
-Contrôle d'accès par les actions IPP.
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{86400}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{#t}, l'historique des travaux est préservé jusqu'à
-atteindre la limite MaxJobs.
-
-La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{"128m"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string server-admin
-Spécifie l'adresse de courriel de l'administrateur système.
-
-La valeur par défaut est @samp{"root@@localhost.localdomain"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @code{*} 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 @code{*}.
-
-La valeur par défaut est @samp{*}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} string server-name
-Spécifie le nom d'hôte pleinement qualifié du serveur.
-
-La valeur par défaut est @samp{"localhost"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
-Spécifie les informations incluses dans les en-têtes Server des réponses
-HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
-@code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
-@code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
-rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
-commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
-IPP/2.0}.
-
-La valeur par défaut est @samp{Minimal}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-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 @samp{"variable value"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @var{adresse}:@var{port}, où @var{adresse} est soit
-une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
-pour indiquer toutes les interfaces.
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
-Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
-chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
-être sures. L'option @code{AllowRC4} active les suites de chiffrement
-128-bits RC4, qui sont requises pour certains vieux clients qui
-n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
-v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
-v1.0.
-
-La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{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 @samp{300}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
-Spécifie si l'interface web est activée.
-
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
-t'aime bien mais arrête maintenant avec ces options de configuration
-»@footnote{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.}. En
-effet. cependant, encore un point supplémentaire : vous pouvez avoir un
-fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
-ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
-configuration d'un @code{cups-service-type}.
-
-Les champs de @code{opaque-cups-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
-Le paquet CUPS.
-@end deftypevr
-
-@deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
-Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
-@end deftypevr
-
-@deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
-Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
-caractères.
-@end deftypevr
-
-Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
-sont dans des chaînes du même nom, pouvez instancier un service CUPS de
-cette manière :
-
-@example
-(service cups-service-type
- (opaque-cups-configuration
- (cupsd.conf cupsd.conf)
- (cups-files.conf cups-files.conf)))
-@end example
-
-
-@node Services de bureaux
-@subsection Services de bureaux
-
-Le module @code{(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 :
-
-@defvr {Variable Scheme} %desktop-services
-C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
-ajustant des services pour une configuration « de bureau » typique.
-
-En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{gdm-service-type}}), des verrouilleurs d'écran, un outil de
-gestion réseau (@pxref{Services réseau,
-@code{network-manager-service-type}}), des services de gestion de l'énergie
-et des couleurs, le gestionnaire de connexion et de session @code{elogind},
-le service de privilèges Polkit, le service de géolocalisation GeoClue, le
-démon Accounts Service qui permet aux utilisateurs autorisés de changer les
-mots de passe du système, un client NTP (@pxref{Services réseau}), le
-démon Avahi, et le service name service switch est configuré pour pouvoir
-utiliser @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
-@end defvr
-
-La variable @var{%desktop-services} peut être utilisée comme champ
-@code{services} d'une déclaration @code{operating-system}
-(@pxref{Référence de système d'exploitation, @code{services}}).
-
-En plus, les procédures @code{gnome-desktop-service-type},
-@code{xfce-desktop-service}, @code{mate-desktop-service-type} et
-@code{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 @code{polkit} et
-@code{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
-@code{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 @code{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 @code{polkit} et @code{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 @code{mate-desktop-service-type} ajoute le métapaquet MATE au profil du
-système. « Ajouter Enlightenment » signifie que @code{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 @code{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 @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
-gnome-session}. Actuellement seul GNOME support Wayland.
-
-@defvr {Variable Scheme} gnome-desktop-service-type
-C'est le type de service qui ajoute l'environnement de bureau
-@uref{https://www.gnome.org, GNOME}. Sa valeur est un objet
-@code{gnome-desktop-configuration} (voir plus bas).
-
-Ce service ajoute le paquet @code{gnome} au profil du système et étend
-polkit avec les actions de @code{gnome-settings-daemon}.
-@end defvr
-
-@deftp {Type de données} gnome-desktop-configuration
-Enregistrement de la configuration de l'environnement de bureau GNOME.
-
-@table @asis
-@item @code{gnome} (par défaut : @code{gnome})
-Le paquet GNOME à utiliser.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} xfce-desktop-service-type
-C'est le type de service qui lance l'environnement de bureau @uref{Xfce,
-https://xfce.org/}. Sa valeur est un objet
-@code{xfce-desktop-configuration} (voir plus bas).
-
-Ce service ajoute le paquet @code{xfce} au profil du système et étend polkit
-avec la possibilité pour @code{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.
-@end defvr
-
-@deftp {Type de données} xfce-desktop-configuration
-Enregistrement de la configuration de l'environnement de bureau Xfce.
-
-@table @asis
-@item @code{xfce} (par défaut : @code{xfce})
-Le paquet Xfce à utiliser.
-@end table
-@end deftp
-
-@deffn {Variable Scheme} mate-desktop-service-type
-C'est le type de service qui lance @uref{https://mate-desktop.org/,
-l'environnement de bureau MATE}. Sa valeur est un objet
-@code{mate-desktop-configuration} (voir plus bas).
-
-Ce service ajoute le paquet @code{mate} au profil du système, et étend
-polkit avec les actions de @code{mate-settings-daemon}.
-@end deffn
-
-@deftp {Type de données} mate-desktop-configuration
-Enregistrement de configuration pour l'environnement de bureau MATE.
-
-@table @asis
-@item @code{mate} (par défaut : @code{mate})
-Le paquet MATE à utiliser.
-@end table
-@end deftp
-
-@deffn {Variable Scheme} enlightenment-desktop-service-type
-Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
-avec les actions de @code{efl}
-@end deffn
-
-@deftp {Type de données} enlightenment-desktop-service-configuration
-@table @asis
-@item @code{enlightenment} (par défaut : @code{enlightenment})
-Le paquet enlightenment à utiliser.
-@end table
-@end deftp
-
-Comme les services de bureau GNOME, Xfce et MATE récupèrent tant de paquet,
-la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
-Pour ajouter GNOME, Xfce ou MATE, utilisez @code{cons} pour les ajouter à
-@code{%desktop-services} dans le champ @code{services} de votre
-@code{operating-system} :
-
-@example
-(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))
- ...)
-@end example
-
-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
-@code{%desktop-services} et fournies par @code{(gnu services dbus)} et
-@code{(gnu services desktop)} sont décrites plus bas.
-
-@deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
-Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
-de @var{services}.
-
-@uref{http://dbus.freedesktop.org/, D-Bus} 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.
-
-@var{services} doit être une liste de paquets qui fournissent un répertoire
-@file{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, @var{services} doit être égal à
-@code{(list avahi)}.
-@end deffn
-
-@deffn {Procédure Scheme} elogind-service [#:config @var{config}]
-Renvoie un service qui lance le démon de gestion de connexion et de session
-@code{elogind}. @uref{https://github.com/elogind/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 @var{config} spécifie la configuration d'elogind et devrait être
-le résultat d'une invocation de @code{(elogind-configuration
-(@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
-valeur par défaut sont :
-
-@table @code
-@item kill-user-processes?
-@code{#f}
-@item kill-only-users
-@code{()}
-@item kill-exclude-users
-@code{("root")}
-@item inhibit-delay-max-seconds
-@code{5}
-@item handle-power-key
-@code{poweroff}
-@item handle-suspend-key
-@code{suspend}
-@item handle-hibernate-key
-@code{hibernate}
-@item handle-lid-switch
-@code{suspend}
-@item handle-lid-switch-docked
-@code{ignore}
-@item power-key-ignore-inhibited?
-@code{#f}
-@item suspend-key-ignore-inhibited?
-@code{#f}
-@item hibernate-key-ignore-inhibited?
-@code{#f}
-@item lid-switch-ignore-inhibited?
-@code{#t}
-@item holdoff-timeout-seconds
-@code{30}
-@item idle-action
-@code{ignore}
-@item idle-action-seconds
-@code{(* 30 60)}
-@item runtime-directory-size-percent
-@code{10}
-@item runtime-directory-size
-@code{#f}
-@item remove-ipc?
-@code{#t}
-@item suspend-state
-@code{("mem" "standby" "freeze")}
-@item suspend-mode
-@code{()}
-@item hibernate-state
-@code{("disk")}
-@item hibernate-mode
-@code{("platform" "shutdown")}
-@item hybrid-sleep-state
-@code{("disk")}
-@item hybrid-sleep-mode
-@code{("suspend" "platform" "shutdown")}
-@end table
-@end deffn
-
-@deffn {Procédure Scheme} accountsservice-service @
- [#:accountsservice @var{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.
-@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
-accountsservice} pour trouver plus d'informations.
-
-L'argument @var{accountsservice} est le paquet @code{accountsservice} à
-exposer comme un service.
-@end deffn
-
-@deffn {Procédure Scheme} polkit-service @
- [#:polkit @var{polkit}]
-Renvoie un service qui lance le
-@uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
-des privilèges 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.
-@end deffn
-
-@defvr {Variable Scheme} upower-service-type
-Service qui lance @uref{http://upower.freedesktop.org/, @command{upowerd}},
-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 @code{org.freedesktop.UPower} et est
-notamment utilisé par GNOME.
-@end defvr
-
-@deftp {Type de données} upower-configuration
-Type de données représentant la configuration de UPower.
-
-@table @asis
-
-@item @code{upower} (par défaut : @var{upower})
-Paquet à utiliser pour @code{upower}.
-
-@item @code{watts-up-pro?} (par défaut : @code{#f})
-Active le périphérique Watts Up Pro.
-
-@item @code{poll-batteries?} (par défaut : @code{#t})
-Active les requêtes au noyau pour les changements de niveau de batterie.
-
-@item @code{ignore-lid?} (par défaut : @code{#f})
-Ignore l'état de l'écran, ce qui peut être utile s'il est incorrect sur un
-appareil.
-
-@item @code{use-percentage-for-policy?} (par défaut : @code{#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
-@code{#t} pour utiliser les pourcentages.
-
-@item @code{percentage-low} (par défaut : @code{10})
-Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
-niveau la batterie est considérée comme faible.
-
-@item @code{percentage-critical} (par défaut : @code{3})
-Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
-niveau la batterie est considérée comme critique.
-
-@item @code{percentage-action} (par défaut : @code{2})
-Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
-niveau l'action sera prise.
-
-@item @code{time-low} (par défaut : @code{1200})
-Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
-quelle durée restante en secondes la batterie est considérée comme faible.
-
-@item @code{time-critical} (par défaut : @code{300})
-Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
-quelle durée restante en secondes la batterie est considérée comme critique.
-
-@item @code{time-action} (par défaut : @code{120})
-Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
-quelle durée restante en secondes l'action sera prise.
-
-@item @code{critical-power-action} (par défaut : @code{'hybrid-sleep})
-L'action à prendre lorsque @code{percentage-action} ou @code{time-action}
-est atteint (en fonction de la configuration de
-@code{use-percentage-for-policy?}).
-
-Les valeurs possibles sont :
-
-@itemize @bullet
-@item
-@code{'power-off}
-
-@item
-@code{'hibernate}
-
-@item
-@code{'hybrid-sleep}.
-@end itemize
-
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
-Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
-UDisks}, un démon de @dfn{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 @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
-@end deffn
-
-@deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
-Renvoie un service qui lance @command{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
-@uref{http://www.freedesktop.org/software/colord/, le site web de colord}
-pour plus d'informations.
-@end deffn
-
-@deffn {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. @var{name} est l'ID Desktop de l'application, sans la partie en
-@code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
-d'accéder aux informations de localisation par défaut. Le booléen
-@var{system?} indique si une application est un composant système ou non.
-Enfin @var{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.
-@end deffn
-
-@defvr {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.
-@end defvr
-
-@deffn {Procédure Scheme} geoclue-service [#:colord @var{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
-@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
-GeoClue} pour plus d'informations.
-@end deffn
-
-@deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
- [@w{#:auto-enable? #f}]
-Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
-appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
-Lorsque @var{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 @code{lp} pour accéder au
-service D-Bus.
-@end deffn
-
-@node Services de son
-@subsection Services de son
-
-@cindex support du son
-@cindex ALSA
-@cindex PulseAudio, support du son
-
-Le module @code{(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.
-
-@deffn {Variable Scheme} alsa-service-type
-C'est le type pour le système @uref{https://alsa-project.org/, Advanced
-Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
-@file{/etc/asound.conf}. La valeur de ce type est un enregistrement
-@command{alsa-configuration} comme dans cet exemple :
-
-@example
-(service alsa-service-type)
-@end example
-
-Voir plus bas pour des détails sur @code{alsa-configuration}.
-@end deffn
-
-@deftp {Type de données} alsa-configuration
-Type de données représentant la configuration pour @code{alsa-service}.
-
-@table @asis
-@item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
-Le paquet @code{alsa-plugins} à utiliser.
-
-@item @code{pulseaudio?} (par défaut : @var{#t})
-Indique si les applications ALSA devraient utiliser le serveur de son
-@uref{http://www.pulseaudio.org/, PulseAudio} 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
-@command{pavucontrol} entre autres choses.
-
-@item @code{extra-options} (par défaut : @var{""})
-Chaîne à ajouter au fichier @file{/etc/asound.conf}.
-
-@end table
-@end deftp
-
-Les utilisateurs individuels qui veulent modifier la configuration système
-d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
-
-@example
-# 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"
- @}
-@}
-@end example
-
-Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
-détails.
-
-
-@node Services de bases de données
-@subsection Services de bases de données
-
-@cindex database
-@cindex SQL
-Le module @code{(gnu services databases)} fournit les services suivants.
-
-@deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
- [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
-[#:port 5432] [#:locale ``en_US.utf8''] [#:extension-packages '()]
-Renvoie un service qui lance @var{postgresql}, le service de bases de
-données PostgreSQL.
-
-Le démon PostgreSQL charge sa configuration à l'exécution depuis
-@var{config-file}, crée une grappe de bases de données avec @var{locale}
-comme paramètre de régionalisation par défaut, stockée dans
-@var{data-directory}. Il écoute ensuite sur @var{port}.
-
-@cindex postgresql extension-packages
-Des extensions supplémentaires peuvent être chargées à partir de paquets
-listés dans @var{extension-packages}. Les extensions sont disponibles à
-l'exécution. Par exemple, pour créer une base de données géographique avec
-l'extension @code{postgis}, on peut configurer postgresql-service de cette
-manière :
-
-@cindex postgis
-@example
-(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*
- (postgresql-service #:extension-packages (list postgis))
- %base-services)))
-@end example
-
-Ensuite l'extension devient visible et vous pouvez initialiser une base de
-données géographique de cette manière :
-
-@example
-psql -U postgres
-> create database postgistest;
-> \connect postgistest;
-> create extension postgis;
-> create extension postgis_topology;
-@end example
-
-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.
-@end deffn
-
-@deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
-Renvoie un service qui lance @command{mysqld}, le service de bases de
-données MySQL ou MariaDB.
-
-L'argument @var{config} facultatif spécifie la configuration de
-@command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
-@end deffn
-
-@deftp {Type de données} mysql-configuration
-Type de données représentant la configuration de @var{mysql-service}.
-
-@table @asis
-@item @code{mysql} (par défaut : @var{mariadb})
-Objet paquet du serveur de base de données MySQL, qui peut être soit
-@var{mariadb}, soit @var{mysql}.
-
-Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
-Pour MariaDB, le mot de passe root est vide.
-
-@item @code{port} (par défaut : @code{3306})
-Port TCP sur lequel le serveur de base de données écoute les connexions
-entrantes.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} memcached-service-type
-C'est le type de service pour le service @uref{https://memcached.org/,
-Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
-type de service est un objet @code{memcached-configuration}.
-@end defvr
-
-@example
-(service memcached-service-type)
-@end example
-
-@deftp {Type de données} memcached-configuration
-Type de données représentant la configuration de memcached.
-
-@table @asis
-@item @code{memcached} (par défaut : @code{memcached})
-Le paquet Memcached à utiliser.
-
-@item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
-Les interfaces réseaux sur lesquelles écouter.
-
-@item @code{tcp-port} (par défaut : @code{11211})
-Port sur lequel accepter les connexions.
-
-@item @code{udp-port} (par défaut : @code{11211})
-Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
-l'écoute en UDP.
-
-@item @code{additional-options} (par défaut : @code{'()})
-Options de la ligne de commande supplémentaires à passer à @code{memcached}.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} mongodb-service-type
-C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
-valeur de ce service est un objet @code{mongodb-configuration}.
-@end defvr
-
-@example
-(service mongodb-service-type)
-@end example
-
-@deftp {Type de données} mongodb-configuration
-Type de données représentant la configuration de mongodb.
-
-@table @asis
-@item @code{mongodb} (par défaut : @code{mongodb})
-Le paquet MongoDB à utiliser.
-
-@item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
-Le fichier de configuration pour MongoDB.
-
-@item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
-Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
-appartienne à l'utilisateur mongodb. Il devrait correspondre au
-data-directory que MongoDB est configuré pour utiliser dans son fichier de
-configuration.
-@end table
-@end deftp
-
-@defvr {Variable Scheme} redis-service-type
-C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
-Redis} dont la valeur est un objet @code{redis-configuration}.
-@end defvr
-
-@deftp {Type de données} redis-configuration
-Type de données représentant la configuration de redis.
-
-@table @asis
-@item @code{redis} (par défaut : @code{redis})
-Le paquet Redis à utiliser.
-
-@item @code{bind} (par défaut : @code{"127.0.0.1"})
-Interface réseau sur laquelle écouter.
-
-@item @code{port} (par défaut : @code{6379})
-Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
-sur un socket TCP.
-
-@item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
-Répertoire dans lequel stocker la base de données et les fichiers liés.
-@end table
-@end deftp
-
-@node Services de courriels
-@subsection Services de courriels
-
-@cindex courriel
-@cindex email
-Le module @code{(gnu services mail)} fournit des définitions de services
-Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
-que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
-détaillés dans les sous-sections ci-dessous.
-
-@subsubheading Service Dovecot
-
-@deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
-Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
-@end deffn
-
-Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
-configuration par défaut créé par @code{(dovecot-configuration)} suffira si
-votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
-sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
-ports non chiffrés par défaut. Il y a quelques options cependant, que les
-administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
-d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
-paramètres via une interface Scheme unifiée.
-
-Par exemple, pour spécifier que les courriels se trouvent dans
-@code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
-
-@example
-(dovecot-service #:config
- (dovecot-configuration
- (mail-location "maildir:~/.mail")))
-@end example
-
-Les paramètres de configuration disponibles sont les suivants. Chaque
-définition des paramètres est précédé par son type ; par exemple,
-@samp{string-list foo} indique que le paramètre @code{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 @code{dovecot.conf} que vous voulez porter depuis un autre
-système ; voir la fin pour plus de détails.
-
-@c The following documentation was initially generated by
-@c (generate-documentation) in (gnu services mail). Manually maintained
-@c documentation is better, so we shouldn't hesitate to edit below as
-@c needed. However if the change you want to make to this documentation
-@c can be done in an automated way, it's probably easier to change
-@c (generate-documentation) than to make it below and have to deal with
-@c the churn as dovecot updates.
-
-Les champs de @code{dovecot-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
-Le paquet dovecot.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
-Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
-sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
-IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
-ou quelque chose de plus complexe, complétez les champs d'adresse et de port
-de @samp{inet-listener} des services spécifiques qui vous intéressent.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
-Liste des protocoles que vous voulez servir. Les protocoles disponibles
-comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
-
-Les champs @code{protocol-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{protocol-configuration}} string name
-Le nom du protocole.
-@end deftypevr
-
-@deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
-Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
-trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
-partagés) et lda. Sa valeur par défaut est
-@samp{"/var/run/dovecot/auth-userdb"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
-Liste de greffons à charger séparés par des espaces.
-@end deftypevr
-
-@deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
-Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
-adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
-la casse. Par défaut @samp{10}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
-Liste des services à activer. Les services disponibles comprennent
-@samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
-et @samp{lmtp}.
-
-Les champs de @code{service-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{service-configuration}} string kind
-Le type de service. Les valeurs valides comprennent @code{director},
-@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
-@code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
-@code{quota-warning} ou n'importe quoi d'autre.
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
-Les auditeurs du service. Un auditeur est soit un
-@code{unix-listener-configuration}, soit un
-@code{fifo-listener-configuration}, soit un
-@code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
-
-Les champs de @code{unix-listener-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{unix-listener-configuration}} string path
-Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
-utilisé comme nom de section.
-@end deftypevr
-
-@deftypevr {paramètre de @code{unix-listener-configuration}} string mode
-Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{unix-listener-configuration}} string user
-L'utilisateur à qui appartient le socket. La valeur par défaut est
-@samp{""}
-@end deftypevr
-
-@deftypevr {paramètre de @code{unix-listener-configuration}} string group
-Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-
-Les champs de @code{fifo-listener-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{fifo-listener-configuration}} string path
-Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
-utilisé comme nom de section.
-@end deftypevr
-
-@deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
-Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{fifo-listener-configuration}} string user
-L'utilisateur à qui appartient le socket. La valeur par défaut est
-@samp{""}
-@end deftypevr
-
-@deftypevr {paramètre de @code{fifo-listener-configuration}} string group
-Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-
-Les champs de @code{inet-listener-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
-Le protocole à écouter.
-@end deftypevr
-
-@deftypevr {paramètre de @code{inet-listener-configuration}} string address
-L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
-La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
-Le port sur lequel écouter.
-@end deftypevr
-
-@deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
-S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
-@samp{required}. La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
-Connexions de clients simultanées maximum par processus. Une fois ce nombre
-de connections atteint, la connexion suivante fera en sorte que Dovecot
-démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
-est utilisé à la place.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
-Nombre de connexions à gérer avant de démarrer un nouveau processus.
-Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
-mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
-est @samp{1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
-Nombre de processus maximum qui peut exister pour ce service. Si la valeur
-est 0, @code{default-process-limit} est utilisé à la place.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
-Nombre de processus à toujours garder en attente de connexions. La valeur
-par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
-Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
-d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
-Configuration du dictionnaire, créé par le constructeur
-@code{dict-configuration}.
-
-Les champs de @code{dict-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
-Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
-valeur par défaut est @samp{()}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
-Une liste de configurations passdb, chacune créée par le constructeur
-@code{passdb-configuration}.
-
-Les champs de @code{passdb-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{passdb-configuration}} string driver
-Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
-@samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
-par défaut est @samp{"pam"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
-Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
-par défaut est @samp{""}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
-Liste des configurations userdb, chacune créée par le constructeur
-@code{userdb-configuration}.
-
-Les champs de @code{userdb-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{userdb-configuration}} string driver
-Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
-@samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
-Liste des arguments du pilote userdb séparés par des espaces. La valeur par
-défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
-Remplace des champs de passwd. La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
-Configuration du greffon, créé par le constructeur
-@code{plugin-configuration}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
-Liste d'espaces de noms. Chaque élément de la liste est créé par le
-constructeur @code{namespace-configuration}.
-
-Les champs de @code{namespace-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{namespace-configuration}} string name
-Nom de cet espace de nom.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} string type
-Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
-valeur par défaut est @samp{"private"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} string separator
-Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
-séparateur pour tous les espaces de noms ou certains clients seront confus.
-@samp{/} est généralement une bonne valeur. La valeur par défaut dépend
-cependant du format de stockage sous-jacent. La valeur par défaut est
-@samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} string prefix
-Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
-différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
-valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} string location
-Emplacement physique de la boîte aux lettres. C'est le même format que
-mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
-@samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
-Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
-le possède. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
-Si l'espace de nom est caché, il n'est pas publié auprès des clients par
-l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
-#f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
-des espaces de noms différents que vous voulez rendre obsolètes sans les
-casser. Par exemple vous pouvez cacher les espaces de noms avec les
-préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} boolean list?
-Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
-Cela rend l'espace de nom visible pour les clients qui ne supportent pas
-l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
-aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
-défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
-Les espaces de noms gèrent leur propre souscription. Si la valeur est
-@code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
-toujours avoir cette valeur à @code{#t}. La valeur par défaut est
-@samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
-Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
-par défaut est @samp{()}.
-
-Les champs de @code{mailbox-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{mailbox-configuration}} string name
-Nom de cette boîte aux lettres.
-@end deftypevr
-
-@deftypevr {paramètre de @code{mailbox-configuration}} string auto
-@samp{create} créera automatiquement cette boîte aux lettres.
-@samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
-défaut est @samp{"no"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
-Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
-valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
-@code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
-défaut est @samp{()}.
-@end deftypevr
-
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
-Répertoire de base où stocker les données d'exécution. La valeur par défaut
-est @samp{"/var/run/dovecot/"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
-Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
-ready."}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
-Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
-sont autorisées à modifier leurs adresses IP et leurs ports (pour la
-connexion et la vérification d'authentification).
-@samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
-Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
-défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
-Liste des sockets de vérification d'accès de connexion (p.@: ex.@:
-tcpwrap). La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
-Montre des titres de processus plus verbeux (dans ps). Actuellement, montre
-le nom d'utilisateur et l'adresse IP. Utile pour voir qui utilise en
-réalité les processus IMAP (p.@: ex.@: des boîtes aux lettres partagées ou
-si le même uid est utilisé pour plusieurs comptes). La valeur par défaut
-est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
-Indique si les processus devraient toujours être tués lorsque le processus
-maître de Dovecot est éteint. La valeur @code{#f} signifie que Dovecot peut
-être mis à jour sans forcer les connexions clientes existantes à se fermer
-(bien que cela puisse être un problème si la mise à jour est un correctif de
-sécurité par exemple). La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
-Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
-de connexions au serveur doveadm au lieu de les lancer dans le même
-processus. La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
-Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
-valeur par défaut est @samp{"doveadm-server"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
-Liste des variables d'environnement qui sont préservées au démarrage de
-Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
-paires clef=valeur pour toujours spécifier ce paramètre.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
-Désactive la commande LOGIN et toutes les autres authentifications en texte
-clair à moins que SSL/TLS ne soit utilisé (capacité LOGINDISABLED).
-Remarquez que si l'IP distante correspond à l'IP locale (c.-à-d.@: que vous
-vous connectez depuis le même ordinateur), la connexion est considérée comme
-sécurisée et l'authentification en texte clair est permise. Voir aussi le
-paramètre ssl=required. La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
-Taille du cache d'authentification (p.@: ex.@: @samp{#e10e6}). 0 signifie
-qu'il est désactivé. Remarquez que bsdauth, PAM et vpopmail ont besoin que
-@samp{cache-key} soit indiqué pour que le cache soit utilisé. La valeur par
-défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
-Durée de vie des données en cache. Après l'expiration du TTL
-l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
-de données principale revoie une erreur interne. Nous essayons aussi de
-gérer les changements de mot de passe automatiquement : si
-l'authentification précédente de l'utilisateur était réussie mais pas
-celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
-l'authentification en texte clair uniquement. La valeur par défaut est
-@samp{"1 hour"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
-TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
-passe ne correspond pas). 0 désactive la mise en cache complètement. La
-valeur par défaut est @samp{"1 hour"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
-Liste des domaines pour les mécanismes d'authentification SASL qui en ont
-besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
-utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
-domaine listé ici, donc gardez celui par défaut en premier. La valeur par
-défaut est @samp{()}
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
-Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
-les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
-authentification en texte clair. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
-Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
-d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
-listé ici, la connexion échoue automatiquement. C'est juste une
-vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
-exploiter des vulnérabilités potentielles d'échappement de guillemets avec
-les bases de données SQL/LDAP. Si vous voulez autoriser tous les
-caractères, indiquez la liste vide.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
-Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
-cherchés en base. La valeur contient une série de caractère de -> à. Par
-exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
-@samp{@@}. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
-Format des noms d'utilisateur avant qu'ils ne soient cherchés en base. Vous
-pouvez utiliser les variables standard ici, p.@: ex.@: %Lu est le nom
-d'utilisateur en minuscule, %n enlève le domaine s'il est donné ou
-@samp{%n-AT-%d} changerait le @samp{@@} en @samp{-AT-}. Cette traduction
-est faite après les changements de @samp{auth-username-translation}. La
-valeur par défaut est @samp{"%Lu"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
-Si vous voulez permettre aux utilisateurs maîtres de se connecter en
-spécifiant le nom d'utilisateur maître dans la chaîne de nom d'utilisateur
-normal (c.-à-d.@: sans utiliser le support du mécanisme SASL pour cela),
-vous pouvez spécifier le caractère de séparation ici. Le format est ensuite
-<nom d'utilisateur><séparateur><nom d'utilisateur maître>. UW-IMAP utilise
-@samp{*} comme séparateur, donc ça pourrait être un bon choix. La valeur
-par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
-Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
-mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
-Nombre maximum de processus de travail dovecot-auth. Ils sont utilisés pour
-exécuter des requêtes passdb et userdb bloquantes (p.@: ex.@: MySQL et
-PAM). Ils sont créés automatiquement et détruits au besoin. La valeur par
-défaut est @samp{30}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
-Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
-est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
-des guillemets) pour permettre toutes les entrées keytab. La valeur par
-défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
-Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
-par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
-spécifié. Vous pourriez avoir besoin de faire en sorte que le service
-d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
-par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
-Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
-Samba et l'utilitaire @samp{ntlm-auth}.
-<doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
-@samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
-Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
-@samp{"/usr/bin/ntlm_auth"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
-Durée d'attente avant de répondre à des authentifications échouées. La
-valeur par défaut est @samp{"2 secs"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
-Requiert un certification client SSL valide ou l'authentification échoue.
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
-Prend le nom d'utilisateur du certificat SSL client, avec
-@code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
-sujet. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
-Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
-sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
-@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
-@samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
-paramètre @samp{disable-plaintext-auth}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
-Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
-Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
-même que le @samp{inet-listener} du service directeur. La valeur par défaut
-est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
-Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
-grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
-valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
-Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
-après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
-min"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
-La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
-utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
-@@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
-valeur par défaut est @samp{"%Lu"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string log-path
-Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
-journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
-valeur par défaut est @samp{"syslog"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
-Fichier de journal à utiliser pour les messages d'information. La valeur
-par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
-Fichier de journal à utiliser pour les messages de débogage. La valeur par
-défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
-Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
-si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
-local0..local7. D'autres dispositifs standard sont supportés. La valeur
-par défaut est @samp{"mail"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
-Indique s'il faut enregistrer les tentatives de connexion échouées et la
-raison de leur échec. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
-Dans le cas où le mot de passe n'était pas correct, indique s'il faut
-enregistrer le mauvais mot de passe. Les valeurs valides sont « no », «
-plain » et « sha1 ». Il peut être utile d'indiquer « sha1 » pour
-discriminer des attaques par force brute d'utilisateurs qui réessayent
-encore et encore le même mot de passe. Vous pouvez aussi tronquer la valeur
-à n caractères en ajoutant « :n » (p.@: ex.@: « sha1:6 »). La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
-Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
-requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
-Dans le cas où le mot de passe était incorrect, indique s'il faut
-enregistrer les mots de passe et les schémas utilisés pour que le problème
-puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
-Indique s'il faut activer le débogage du traitement des courriels. Cela
-peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
-Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
-est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
-Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
-codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
-%H:%M:%S \""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
-Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
-variable non vide sont agrégés pour former une chaîne de mots séparés par
-des virgules.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
-Format du journal de connexion. %s contient la chaîne
-@samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
-valeur par défaut est @samp{"%$: %s"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
-Préfixe à utiliser devant chaque ligne du fichier de journal pour les
-processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
-la liste des variables que vous pouvez utiliser. La valeur par défaut est
-@samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
-Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
-utiliser ces variables :
-@table @code
-@item %$
-Message de statut de la livraison (p.@: ex.@: @samp{saved to INBOX})
-@item %m
-Message-ID
-@item %s
-Objet
-@item %f
-Adresse « de »
-@item %p
-Taille physique
-@item %w
-Taille virtuelle.
-@end table
-La valeur par défaut est @samp{"msgid=%m: %$"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
-Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
-vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
-automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
-courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
-Dovecot.
-
-Si vous utilisez mbox, il ne suffit pas de donner le chemin vers le fichier
-INBOX (p.@: ex.@: /var/mail/%u). Vous devrez aussi dire à Dovecot où les
-autres boîtes aux lettres se trouvent. Cela s'appelle le « répertoire
-racine des courriels » et il doit être le premier chemin donné à l'option
-@samp{mail-location}.
-
-Il y a quelques variables spéciales que vous pouvez utiliser :
-
-@table @samp
-@item %u
-nom d'utilisateur
-@item %n
-la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
-pas de domaine
-@item %d
-la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
-domaine
-@item %h
-répertoire personnel
-@end table
-
-Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
-@table @samp
-@item maildir:~/Maildir
-@item mbox:~/mail:INBOX=/var/mail/%u
-@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
-@end table
-La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
-Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
-utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
-uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
-<doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
-
-La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
-Groupe à activer temporairement pour les opérations privilégiées.
-Actuellement cela est utilisé uniquement avec INBOX lors de sa création
-initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
-« mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
-Donne l'accès à ces groupes supplémentaires aux processus de courriel. Ils
-sont typiquement utilisés pour mettre en place l'accès à des boîtes aux
-lettres partagées. Remarquez qu'il peut être dangereux d'utiliser cette
-option si l'utilisateur peut créer des liens symboliques (p.@: ex.@: si le
-groupe « mail » est utilisé ici, « ln -s /var/mail ~/mail/var » peut
-permettre à un utilisateur de supprimer les boîtes aux lettres des autres,
-ou « ln -s /secret/shared/box ~/mail/mybox » lui permettrait de la lire).
-La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
-Permet l'accès complet au système de fichiers pour les clients. Il n'y a
-pas de vérification d'accès autres que ce que le système d'exploitation fait
-avec les UID/GID. Cela fonctionne aussi bien avec maildir qu'avec mbox, ce
-qui vous permet de préfixer les noms des boîtes aux lettres avec p.@: ex.@:
-/chemin/ ou ~utilisateur/. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
-Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
-dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
-S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
-verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
-option est sûre de nos jours. La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
-Quand utiliser les appels à fsync() ou fdatasync() :
-@table @code
-@item optimized
-Lorsque cela est nécessaire pour éviter de perdre des données importantes
-@item always
-Utile lorsque par exemple les écritures NFS sont retardées
-@item never
-Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
-perdre toutes les données).
-@end table
-La valeur par défaut est @samp{"optimized"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
-Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
-Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
-seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
-par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
-Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
-utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
-@samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
-Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
-flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
-qui peuvent créer plus d'utilisation du disque que les autres méthodes de
-verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
-rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
-@samp{"fcntl"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
-Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
-plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
-L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
-utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
-tant que démon ou qu'un autre utilisateur système. Remarquez que la
-connexion en root est interdite en dur dans le binaire de dovecot et qu'on
-ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
-par défaut est @samp{500}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
-
-La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
-Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
-un GID non-valide comme numéro de groupe primaire ne peuvent pas se
-connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
-ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
-
-La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
-Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
-lors de la création de nouveaux mots-clefs. La valeur par défaut est
-@samp{50}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
-Liste des répertoires sous lesquels le chroot est permis pour les processus
-de traitement des courriels (c.-à-d.@: /var/mail permettra aussi de se
-chrooter dans /var/mail/foo/bar). Ce paramètre n'affecte pas
-@samp{login-chroot} @samp{mail-chroot} ou les paramètres de chroot de
-l'authentification. Si ce paramètre est vide, « /./ » dans les répertoires
-personnels sont ignorés. ATTENTION : n'ajoutez jamais de répertoires ici
-que les utilisateurs locaux peuvent modifier, puisque ça pourrait permettre
-d'escalader les privilèges. Normalement vous ne devriez le faire que si les
-utilisateurs n'ont pas d'accès shell. <doc/wiki/Chrooting.txt>. La valeur
-par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
-Répertoire chroot par défaut pour les processus de traitement des
-courriels. Cela peut être modifié pour des utilisateurs particuliers dans
-la base de donnée en donnant /./ dans le répertoire personnel (p.@: ex.@:
-/home/./utilisateur permet de se chrooter dans /home). Remarquez qu'il n'y
-a d'habitude pas besoin de se chrooter. Dovecot ne permet pas aux
-utilisateurs d'accéder aux fichiers en dehors de leur répertoire de
-courriels de toute façon. Si vos répertoires personnels sont préfixés par
-le répertoire de chroot, ajoutez « /. » à @samp{mail-chroot}.
-<doc/wiki/Chrooting.txt>. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
-Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
-les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
-et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
-Répertoire où trouver les greffons. La valeur par défaut est
-@samp{"/usr/lib/dovecot"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
-Liste des greffons à charger pour tous les services. Les greffons
-spécifiques à IMAP, LDA, etc sont ajoutés à cette liste dans leur propre
-fichiers .conf. La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
-Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
-jour le fichier de cache. Cela permet d'optimiser le comportement de
-Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
-disque. La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
-Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
-temps en temps pour voir s'il y a de nouveaux messages ou d'autres
-changements. Ce paramètre défini le temps d'attente minimum entre deux
-vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
-trouver immédiatement les changements. La valeur par défaut est @samp{"30
-secs"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
-Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
-de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
-système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
-d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
-si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
-leur traitement de ces CR supplémentaires et causer des problèmes. La
-valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
-Par défaut la commande LIST renvoie toutes les entrées du maildir qui
-commencent par un point. Activer cette option permet à Dovecot de renvoyer
-uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
-sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
-setting struct @samp{dirent->d_type} this check is free and it's done always
-regardless of this setting). La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
-Lors de la copie d'un message, le faire avec des liens en dur si possible.
-Cela améliore un peu la performance et n'a que peu de chance d'avoir des
-effets secondaires.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
-Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
-répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
-lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
-est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
-La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
-mbox. Il y en a quatre :
-
-@table @code
-@item dotlock
-Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
-plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
-auront besoin de l'accès en écriture à ce répertoire.
-@item dotlock-try
-Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
-ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
-@item fcntl
-Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
-utilisez lockd.
-@item flock
-Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
-@item lockf
-Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
-@end table
-
-Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
-l'ordre dans lequel elles sont déclarées est important pour éviter des
-interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
-Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
-méthodes en même temps.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
-Temps d'attente maximal pour un verrou (tous les verrous) avant
-d'abandonner. La valeur par défaut est @samp{"5 mins"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
-Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
-modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
-valeur par défaut est @samp{"2 mins"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
-Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
-savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
-beaucoup de temps. Comme le changement est habituellement un simple
-courriel supplémentaire, il serait plus rapide de lire le nouveaux
-courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
-toujours à relire le fichier mbox complet si le fichier n'est pas comme
-attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
-changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
-immédiatement compte. Remarquez qu'une synchronisation complète est
-effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
-par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
-Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
-avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
-activée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
-@samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
-Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
-synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
-ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
-suppriment souvent tous les courriels. L'inconvénient c'est que vos
-changements ne sont pas immédiatement visibles pour les autres MUA. La
-valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
-Si la taille du fichier mbox est plus petite que cela (p.@: ex.@: 100k), ne
-pas écrire de fichier d'index. Si un fichier d'index existe déjà il est
-toujours lu, mais pas mis à jour. La valeur par défaut est @samp{0}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
-Taille du fichier dbox maximale avant rotation. La valeur par défaut est
-@samp{10000000}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
-Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
-jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
-0 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
-Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
-à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
-dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
-Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
-des fichiers externes, ce qui permet de les stocker une seule fois. Les
-autres moteurs ne le supportent pas pour le moment.
-
-ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
-vos risques et périls.
-
-Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
-valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
-Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
-Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
-externe de certaines pièces-jointes spécifiques. La valeur par défaut est
-@samp{128000}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
-Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
-:
-@table @code
-@item posix
-Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
-déduplication du système de fichier)
-@item sis posix
-SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
-@item sis-queue posix
-SiS avec déduplication et comparaison différées.
-@end table
-La valeur par défaut est @samp{"sis posix"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
-Format de hash à utiliser dans les noms de fichiers des pièces-jointes.
-Vous pouvez ajouter n'importe quel texte ou variable : @code{%@{md4@}},
-@code{%@{md5@}}, @code{%@{sha1@}}, @code{%@{sha256@}}, @code{%@{sha512@}},
-@code{%@{size@}}. Les variables peuvent être tronquées, p.@: ex.@:
-@code{%@{sha256:80@}} renvoie seulement les 80 premiers bits. La valeur par
-défaut est @samp{"%@{sha1@}"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
-
-La valeur par défaut est @samp{100}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
-
-La valeur par défaut est @samp{1000}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
-Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
-service. C'est surtout pour attraper et tuer les processus qui font fuiter
-la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
-@samp{256000000}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
-Utilisateur de connexion utilisé en interne par les processus de connexion.
-C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
-avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
-Utilisateur utilisé en interne par les processus non privilégiés. Il
-devrait être différent de l'utilisateur de connexion, pour que les processus
-de connexion ne puissent pas perturber les autres processus. La valeur par
-défaut est @samp{"dovecot"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
-Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
-défaut est @samp{"required"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
-Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
-défaut est @samp{"</etc/dovecot/default.pem"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
-Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
-privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
-valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
-Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
-Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
-fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
-ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
-Certificat de l'autorité de confiance encodé en PEM. Indiquez cette valeur
-si vous voulez utiliser @samp{ssl-verify-client-cert? #t}. Le fichier
-devrait contenir les certificats de CA suivi par les CRL correspondants
-(p.@: ex.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}). La valeur par défaut est
-@samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
-Indique si les certificats clients doivent réussir la vérification du CRL.
-La valeur par défaut est @samp{#t}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
-Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
-requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
-auth. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
-Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
-habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
-indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
-@samp{"commonName"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
-Version minimale de SSL à accepter. La valeur par défaut est
-@samp{"TLSv1"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
-Méthodes de chiffrement à utiliser. La valeur par défaut est
-@samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
-Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
-openssl engine ». La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
-Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
-domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string hostname
-Nom d'hôte à utiliser dans diverses parties des courriels envoyés (p.@:
-ex.@: dans Message-Id) et dans les réponses LMTP. La valeur par défaut est
-le nomdhôte@@domaine réel du système. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
-Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
-rejeter le courriel. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
-Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
-@samp{"/usr/sbin/sendmail"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
-Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
-hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
-En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
-utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
-La valeur par défaut est @samp{"Rejected: %s"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
-Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
-utiliser ces variables :
-
-@table @code
-@item %n
-CRLF
-@item %r
-raison
-@item %s
-objet du courriel de départ
-@item %t
-destinataire
-@end table
-La valeur par défaut est @samp{"Your message to <%t> was automatically
-rejected:%n%r"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
-Caractère de délimitation entre la partie locale et le détail des adresses
-de courriel. La valeur par défaut est @samp{"+"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
-En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
-est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
-dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
-X-Original-To. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
-Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
-? La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
-Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
-La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
-Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
-des lignes de commandes très longues avec des boîtes aux lettres énormes,
-donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
-erreurs « Too long argument » ou « IMAP command line too large ». La valeur
-par défaut est @samp{64000}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
-Format de la chaîne de déconnexion IMAP :
-@table @code
-@item %i
-nombre d'octets lus par le client
-@item %o
-nombre total d'octets envoyés au client.
-@end table
-Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
-utilisables. La valeur par défaut est @samp{"in=%i out=%o
-deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
-hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
-body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
-Remplace la réponse CAPABILITY d'IMAP. Si la valeur commence par « + »,
-ajoute les capacités données en haut des valeur par défaut (p.@: ex.@: +XFOO
-XBAR). La valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
-Temps d'attente entre les notifications « OK Still here » lorsque le client
-est en IDLE. La valeur par défaut est @samp{"2 mins"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
-Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
-la valeur par défaut. Les champs suivants ont actuellement des valeurs par
-défaut : name, version, os, os-version, support-url, support-email. La
-valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
-Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
-valeur par défaut est @samp{""}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
-Contournements pour divers bogues de certains client :
-
-@table @code
-@item delay-newmail
-Envoi des notifications de nouveau message EXISTS/RECENT seulement en
-réponse aux commandes NOOP et CHECK. Certains clients les ignorent
-autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
-cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
-sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
-contournement si la synchronisation est à « En-têtes seulement ».
-
-@item tb-extra-mailbox-sep
-Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
-un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
-Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
-le traiter comme un nom de boîte aux lettres invalide.
-
-@item tb-lsub-flags
-Montre les drapeaux \Noselect pour les réponses LSUB avec LAYOUT=fs (p.@:
-ex.@: mbox). Cela fait que Thunderbird réalise qu'ils ne sont pas
-sélectionnables et les montre en grisé, au lieu de montrer un popup « non
-sélectionnable » après coup.
-@end table
-La valeur par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
-Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
-autorise tous. La valeur par défaut est @samp{""}.
-@end deftypevr
-
-
-Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que Guix a
-une interface complète avec le langage de configuration de Dovecot. Cela
-permet non seulement de déclarer la configuration de manière agréable, mais
-aussi d'offrir des capacités de réflexion : les utilisateurs peuvent écrire
-du code pour inspecter et transformer les configuration depuis Scheme.
-
-Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
-prêt. Dans ce cas, vous pouvez passer un objet
-@code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
-@code{dovecot-service}. Comme son nom l'indique, une configuration opaque
-n'a pas les capacités de réflexions.
-
-Les champs de @code{opaque-dovecot-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
-Le paquet dovecot.
-@end deftypevr
-
-@deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
-Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
-@end deftypevr
-
-Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
-vous pouvez instancier un service dovecot comme cela :
-
-@example
-(dovecot-service #:config
- (opaque-dovecot-configuration
- (string "")))
-@end example
-
-@subsubheading Service OpenSMTPD
-
-@deffn {Variable Scheme} opensmtpd-service-type
-C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
-dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
-dans cet exemple :
-
-@example
-(service opensmtpd-service-type
- (opensmtpd-configuration
- (config-file (local-file "./my-smtpd.conf"))))
-@end example
-@end deffn
-
-@deftp {Type de données} opensmtpd-configuration
-Type de données représentant la configuration de opensmtpd.
-
-@table @asis
-@item @code{package} (par défaut : @var{opensmtpd})
-Objet de paquet du serveur SMTP OpenSMTPD.
-
-@item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
-Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
-Par défaut il écoute sur l'interface de boucle locale et accepte les
-courriels des utilisateurs et des démons de la machine locale, et autorise
-l'envoi de courriels à des serveurs distants. Lancez @command{man
-smtpd.conf} pour plus d'information.
-
-@end table
-@end deftp
-
-@subsubheading Service Exim
-
-@cindex agent de transfert de courriel (MTA)
-@cindex MTA (agent de transfert de courriel)
-@cindex SMTP
-
-@deffn {Variable Scheme} exim-service-type
-C'est le type de l'agent de transfert de courriel (MTA)
-@uref{https://exim.org, Exim}, dont la valeur devrait être un objet
-@code{exim-configuration} comme dans cet exemple :
-
-@example
-(service exim-service-type
- (exim-configuration
- (config-file (local-file "./my-exim.conf"))))
-@end example
-@end deffn
-
-Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
-service @code{mail-aliases-service-type} dans votre @code{operating-system}
-(même sans alias).
-
-@deftp {Type de données} exim-configuration
-Type de données représentant la configuration d'exim.
-
-@table @asis
-@item @code{package} (par défaut : @var{exim})
-Objet de paquet du serveur Exim.
-
-@item @code{config-file} (par défaut : @code{#f})
-Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
-valeur est @code{#f} alors le service utilisera la configuration par défaut
-du paquet fournit dans @code{package}. Le fichier de configuration qui en
-résulte est chargé après avoir mis en place les variables de configuration
-@code{exim_user} et @code{exim_group}.
-
-@end table
-@end deftp
-
-@subsubheading Service d'alias de courriel
-
-@cindex alias de courriel
-@cindex alias, pour les adresses de courriel
-
-@deffn {Variable Scheme} mail-aliases-service-type
-C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
-comment délivrer les courriels aux utilisateurs du système.
-
-@example
-(service mail-aliases-service-type
- '(("postmaster" "bob")
- ("bob" "bob@@example.com" "bob@@example2.com")))
-@end example
-@end deffn
-
-La configuration pour un service @code{mail-aliases-service-type} est une
-liste associative qui dénote comment délivrer les courriels qui arrivent au
-système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
-@code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
-délivrer les courriels de cet utilisateur.
-
-Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
-système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
-@code{postmaster} dans la liste @code{user-accounts} du
-@code{operating-system} pour délivrer les courriels à destination de
-@code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
-@code{bob@@example.com} et @code{bob@@example2.com}).
-
-@subsubheading Démon IMAP4 GNU Mailutils
-@cindex Démon IMAP4 GNU Mailutils
-
-@deffn {Variable Scheme} imap4d-service-type
-C'est le type du démon IMAP4 GNU Mailutils, dont la valeur devrait être un
-objet @code{imap4d-configuration} comme dans cet exemple :
-
-@example
-(service imap4d-service-type
- (imap4d-configuration
- (config-file (local-file "imap4d.conf"))))
-@end example
-@end deffn
-
-@deftp {Type de données} imap4d-configuration
-Type de données représentant la configuration de @command{imap4d}.
-
-@table @asis
-@item @code{package} (par défaut : @code{mailutils})
-Le paquet qui fournit @command{imap4d}.
-
-@item @code{config-file} (par défaut : @code{%default-imap4d-config-file})
-Objet simili-fichier du fichier de configuration à utiliser. Par défaut, la
-configuration fera écouter sur le port TCP 143 sur @code{localhost}.
-@xref{Conf-imap4d,,, mailutils, GNU Mailutils Manual}, pour les détails.
-
-@end table
-@end deftp
-
-@node Services de messagerie
-@subsection Services de messagerie
-
-@cindex messagerie instantanée
-@cindex jabber
-@cindex XMPP
-Le module @code{(gnu services messaging)} fournit des définitions de
-services Guix pour les services de messageries instantanées : actuellement
-seul Prosody est supporté.
-
-@subsubheading Service Prosody
-
-@deffn {Variable Scheme} prosody-service-type
-C'est le type pour le @uref{https://prosody.im, le serveur de communication
-XMPP Prosody}. Sa valeur doit être un enregistrement
-@code{prosody-configuration} comme dans cet exemple :
-
-@example
-(service prosody-service-type
- (prosody-configuration
- (modules-enabled (cons "groups" "mam" %default-modules-enabled))
- (int-components
- (list
- (int-component-configuration
- (hostname "conference.example.net")
- (plugin "muc")
- (mod-muc (mod-muc-configuration)))))
- (virtualhosts
- (list
- (virtualhost-configuration
- (domain "example.net"))))))
-@end example
-
-Voir plus bas pour des détails sur @code{prosody-configuration}.
-
-@end deffn
-
-Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
-champ @code{virtualhosts} est requis : il spécifie le domaine que vous
-voulez voir Prosody servir.
-
-Vous pouvez effectuer plusieurs vérifications de la configuration générée
-avec la commande @code{prosodyctl check}.
-
-Prosodyctl vous aidera aussi à importer des certificats du répertoire
-@code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
-Voir @url{https://prosody.im/doc/letsencrypt}.
-
-@example
-prosodyctl --root cert import /etc/letsencrypt/live
-@end example
-
-Les paramètres de configuration disponibles sont les suivants. Chaque
-définition des paramètres est précédé par son type ; par exemple,
-@samp{string-list foo} indique que le paramètre @code{foo} devrait être
-spécifié comme une liste de chaînes de caractères. Les types précédés de
-@code{maybe-} signifient que le paramètre n'apparaîtra pas dans
-@code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
-
-Il y a aussi une manière de spécifier la configuration en tant que chaîne de
-caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
-voulez porter depuis un autre système ; voir la fin pour plus de détails.
-
-Le type @code{file-object} désigne soit un objet simili-fichier
-(@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
-
-@c The following documentation was initially generated by
-@c (generate-documentation) in (gnu services messaging). Manually maintained
-@c documentation is better, so we shouldn't hesitate to edit below as
-@c needed. However if the change you want to make to this documentation
-@c can be done in an automated way, it's probably easier to change
-@c (generate-documentation) than to make it below and have to deal with
-@c the churn as Prosody updates.
-
-Les champs de @code{prosody-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{prosody-configuration}} package prosody
-Le paquet Prosody.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
-Emplacement du répertoire de stockage des données de Prosody. Voir
-@url{https://prosody.im/doc/configure}. La valeur par défaut est
-@samp{"/var/lib/prosody"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
-Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
-spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
-par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
-Chaque hôte virtuel et composant a besoin d'un certificat pour que les
-clients et les serveurs puissent vérifier son identité. Prosody chargera
-automatiquement les clefs et les certificats dans le répertoire spécifié
-ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string-list admins
-C'est une liste des comptes administrateurs de ce serveur. Remarquez que
-vous devez créer les comptes séparément. Voir
-@url{https://prosody.im/doc/admins} et
-@url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
-'("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
-@samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
-Active l'utilisation de libevent pour de meilleures performances sous une
-forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
-C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
-@code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
-qu'il existe aussi. La documentation des modules se trouve sur
-@url{https://prosody.im/doc/modules}. La valeur par défaut est
-@samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
-"blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
-"admin_adhoc")}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
-@samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
-mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
-par défaut est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
-Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
-chemin est vide alors @samp{mod_groups} ne fait rien. Voir
-@url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
-@samp{"/var/lib/prosody/sharedgroups.txt"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
-Désactive la création de compte par défaut, pour la sécurité. Voir
-@url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
-@samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
-Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
-pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
-pas complètement ces options, ne les ajoutez pas à votre configuration, il
-est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
-@url{https://prosody.im/doc/advanced_ssl_config}.
-
-Les champs de @code{ssl-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
-Cela détermine la poignée de main à utiliser.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
-Chemin vers votre fichier de clef privée.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
-Chemin vers votre fichier de certificat.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} file-object capath
-Chemin vers le répertoire contenant les certificats racines que vous voulez
-voir Prosody utiliser lors de la vérification des certificats des serveurs
-distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
-Chemin vers un fichier contenant les certificats racines auxquels Prosody
-devra faire confiance. Comme @code{capath} mais avec les certificats
-concaténés ensemble.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
-Une liste d'options de vérification (qui correspondent globalement aux
-drapeaux @code{set_verify()} d'OpenSSL).
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
-Une liste d'options générales liées à SSL/TLS. Elles correspondent
-globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
-options disponibles dans LuaSec, voir les sources de LuaSec.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
-Longueur maximale d'une chaîne d'autorités de certifications avant la
-racine.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
-Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
-chiffrement que Prosody offrira aux clients, et dans quel ordre de
-préférence.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
-Un chemin vers un fichier contenant les paramètres pour l'échange de clef
-Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
-dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
-Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
-Prosody est @samp{"secp384r1"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
-Une liste d'options de vérification « supplémentaires ».
-@end deftypevr
-
-@deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
-Mot de passe pour les clefs privées chiffrées.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
-S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
-non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
-Ensemble de mécanismes qui ne seront jamais offerts. Voir
-@url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
-@samp{("DIGEST-MD5")}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
-S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
-non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
-défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
-S'il faut requérir le chiffrement et l'authentification du certificat. Cela
-fournit une sécurité idéale, mais demande que les serveurs avec lesquels
-vous communiquez supportent le chiffrement ET présentent un certificat
-valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
-valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
-Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
-invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
-besoin de s'authentifier avec des certificats. Ils seront authentifiés par
-DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
-est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
-Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
-demander un certificat valide pour certains domaine en spécifiant la liste
-ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
-est @samp{()}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string authentication
-Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
-les mots de passes en texte clair et utilise la configuration de stockage
-des données de Prosody pour stocker les données authentifiées. Si vous
-n'avez pas confiance dans le serveur, lisez
-@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
-d'information sur l'utilisation du moteur hashed. Voir aussi
-@url{https://prosody.im/doc/authentication}. La valeur par défaut est
-@samp{"internal_plain"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
-Indique les options de journalisation. La configuration avancée des
-journaux n'est pas encore supportée par le service Prosody. Voir
-@url{https://prosody.im/doc/logging}. La valeur par défaut est
-@samp{"*syslog"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
-Fichier où écrire le PID. Voir
-@url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
-@samp{"/var/run/prosody/prosody.pid"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
-Taille maximum autorisée pour le corps HTTP (en octets).
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
-Certains modules exposent leur propre URL de diverses manières. Cette URL
-est construite à partir du protocole, de l'hôte et du port utilisé. Si
-Prosody se trouve derrière un proxy, l'URL publique sera
-@code{http-external-url} à la place. Voir
-@url{https://prosody.im/doc/http#external_url}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
-Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
-créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
-comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
-@samp{"example.com"}. Toutes les options de cette liste seront appliquées
-uniquement à cet hôte.
-
-Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
-éviter de le confondre avec le nom d'hôte physique réel de la machine qui
-héberge Prosody. Une seule instance de Prosody peut servir plusieurs
-domaines, chacun défini comme une entrée VirtualHost dans la configuration
-de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
-qu'une entrée VirtualHost.
-
-Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
-
-Les champs de @code{virtualhost-configuration} disponibles sont :
-
-tous ces champs de @code{prosody-configuration} : @code{admins},
-@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
-@code{groups-file}, @code{allow-registration?}, @code{ssl},
-@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
-@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
-@code{s2s-insecure-domains}, @code{s2s-secure-domains},
-@code{authentication}, @code{log}, @code{http-max-content-size},
-@code{http-external-url}, @code{raw-content}, plus :
-@deftypevr {paramètre de @code{virtualhost-configuration}} string domain
-Domaine que vous souhaitez que Prosody serve.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
-Les composant sont des services supplémentaires qui sont disponibles pour
-les clients, habituellement sur un sous-domaine du serveur principal (comme
-@samp{"mycomponent.example.com"}). Des exemples de composants sont des
-serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
-d'autres protocoles.
-
-Les composants internes sont implémentés dans des greffons spécifiques à
-Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
-champ de nom d'hôte et le greffon que vous voulez utiliser pour le
-composant.
-
-Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
-@samp{()}.
-
-Les champs de @code{int-component-configuration} disponibles sont :
-
-tous ces champs de @code{prosody-configuration} : @code{admins},
-@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
-@code{groups-file}, @code{allow-registration?}, @code{ssl},
-@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
-@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
-@code{s2s-insecure-domains}, @code{s2s-secure-domains},
-@code{authentication}, @code{log}, @code{http-max-content-size},
-@code{http-external-url}, @code{raw-content}, plus :
-@deftypevr {paramètre de @code{int-component-configuration}} string hostname
-Nom d'hôte du composant.
-@end deftypevr
-
-@deftypevr {paramètre de @code{int-component-configuration}} string plugin
-Greffon que vous voulez utiliser pour ce composant.
-@end deftypevr
-
-@deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
-Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
-créer des chatrooms/conférences pour les utilisateurs XMPP.
-
-Des informations générales sur la configuration des chatrooms
-multi-utilisateurs se trouvent dans la documentation sur les chatrooms
-(@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
-découvrez.
-
-Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
-
-Les champs de @code{mod-muc-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{mod-muc-configuration}} string name
-Le nom à renvoyer dans les réponses de découverte de services. La valeur
-par défaut est @samp{"Prosody Chatrooms"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
-Si la valeur est @samp{#t}, cela permettra uniquement aux admins de créer de
-nouveaux salons. Sinon n'importe qui peut créer un salon. La valeur
-@samp{"local"} restreint la création aux utilisateurs du domaine parent du
-service. P.@: ex.@: @samp{user@@example.com} peut créer des salons sur
-@samp{rooms.example.com}. La valeur @samp{"admin"} restreint ce service aux
-administrateurs. La valeur par défaut est @samp{#f}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
-Nombre maximum de messages d'historique qui seront envoyés aux membres qui
-viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
-@end deftypevr
-
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
-Les composants externes utilisent XEP-0114, que la plupart des composants
-supportent. Pour ajouter un composant externe, vous remplissez simplement
-le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
-valeur par défaut est @samp{()}.
-
-Les champs de @code{ext-component-configuration} disponibles sont :
-
-tous ces champs de @code{prosody-configuration} : @code{admins},
-@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
-@code{groups-file}, @code{allow-registration?}, @code{ssl},
-@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
-@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
-@code{s2s-insecure-domains}, @code{s2s-secure-domains},
-@code{authentication}, @code{log}, @code{http-max-content-size},
-@code{http-external-url}, @code{raw-content}, plus :
-@deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
-Mot de passe que le composant utilisera pour s'authentifier.
-@end deftypevr
-
-@deftypevr {paramètre de @code{ext-component-configuration}} string hostname
-Nom d'hôte du composant.
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
-Ports sur lesquels Prosody écoutera les connexions des composants. La
-valeur par défaut est @samp{(5347)}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} string component-interface
-Interface sur laquelle Prosody écoutera les connexions des composants. La
-valeur par défaut est @samp{"127.0.0.1"}.
-@end deftypevr
-
-@deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
-Contenu brut qui sera ajouté au fichier de configuration.
-@end deftypevr
-
-Il se peut que vous ayez juste envie de lancer un fichier
-@code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
-enregistrement @code{opaque-prosody-configuration} comme valeur à
-@code{prosody-service-type}. Comme son nom l'indique, une configuration
-opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
-@code{opaque-prosody-configuration} sont :
-
-@deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
-Le paquet prosody.
-@end deftypevr
-
-@deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
-Le contenu de @code{prosody.cfg.lua} à utiliser.
-@end deftypevr
-
-Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
-pouvez instancier un service prosody comme ceci :
-
-@example
-(service prosody-service-type
- (opaque-prosody-configuration
- (prosody.cfg.lua "")))
-@end example
-
-@c end of Prosody auto-generated documentation
-
-@subsubheading Service BitlBee
-
-@cindex IRC (Internet Relay Chat)
-@cindex passerelle IRC
-@url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
-interface IRC vers une variété de protocoles de messagerie instantanée comme
-XMPP.
-
-@defvr {Variable Scheme} bitlbee-service-type
-C'est le type de service pour le démon de passerelle IRC
-@url{http://bitlbee.org,BitlBee}. Sa valeur est un
-@code{bitlbee-configuration} (voir plus bas).
-
-Pour que BitlBee écoute sur le port 6667 sur localhost, ajoutez cette ligne
-à vos services :
-
-@example
-(service bitlbee-service-type)
-@end example
-@end defvr
-
-@deftp {Type de données} bitlbee-configuration
-C'est la configuration de BitlBee, avec les champs suivants :
-
-@table @asis
-@item @code{interface} (par défaut : @code{"127.0.0.1"})
-@itemx @code{port} (par défaut : @code{6667})
-Écoute sur l'interface réseau correspondant à l'adresse IP dans
-@var{interface}, sur @var{port}.
-
-Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
-peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
-peuvent venir de n'importe quelle interface réseau.
-
-@item @code{package} (par défaut : @code{bitlbee})
-Le paquet BitlBee à utiliser.
-
-@item @code{plugins} (par défaut : @code{'()})
-Liste des paquets de greffons à utiliser — p.@: ex.@:
-@code{bitlbee-discord}.
-
-@item @code{extra-settings} (par défaut : @code{""})
-Partie de configuration ajoutée telle-quelle au fichier de configuration de
-BitlBee.
-@end table
-@end deftp
-
-@subsubheading Service Quassel
-
-@cindex IRC (Internet Relay Chat)
-@url{https://quassel-irc.org/,Quassel} est un client IRC distribué, ce qui
-signifie qu'un client ou plus peuvent s'attacher et se détacher du cœur
-central.
-
-@defvr {Variable Scheme} quassel-service-type
-C'est le type de service pour le démon IRC
-@url{https://quassel-irc.org/,Quassel}. Sa valeur est un
-@code{quassel-configuration} (voir plus bas).
-@end defvr
-
-@deftp {Type de données} quassel-configuration
-C'est la configuration de Quassel, avec les champs suivants :
-
-@table @asis
-@item @code{quassel} (par défaut : @code{quassel})
-Le paquet Quassel à utiliser.
-
-@item @code{interface} (par défaut : @code{"::,0.0.0.0"})
-@item @code{port} (par défaut : @code{4242})
-Écoute sur les interfaces réseau correspondant à l'adresse IPv4 ou IPv6 des
-interfaces spécifiées dans @var{interface}, une liste de chaînes délimitées
-par des virgules, sur @var{port}.
-
-@item @code{loglevel} (par défaut : @code{"info"})
-Le niveau de journalisation souhaité. Les valeurs acceptées sont « Debug »,
-« Info », « Warning » et « Error ».
-@end table
-@end deftp
-
-@node Services de téléphonie
-@subsection Services de téléphonie
-
-@cindex Murmur (serveur VoIP)
-@cindex serveur VoIP
-Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
-est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
-Mumble}.
-
-@deftp {Type de données} murmur-configuration
-Le type de service pour le serveur Murmur. Voici un exemple de
-configuration :
-
-@example
-(service murmur-service-type
- (murmur-configuration
- (welcome-text
- "Bienvenue sur ce serveur Mumble qui tourne sur Guix !")
- (cert-required? #t) ;désactive les connections par mot de passe
- (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
- (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
-@end example
-
-Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
-mot de passe @code{SuperUser} de murmur avec la commande qui s'affiche
-pendant la phase d'activation.
-
-Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
-lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
-@code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
-vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
-avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
-que vous avez indiqué précédemment et accordez les droits administrateur ou
-modérateur à vous utilisateur mumble nouvellement enregistré et créez
-quelques salons.
-
-Les champs de @code{murmur-configuration} disponibles sont :
-
-@table @asis
-@item @code{package} (par défaut : @code{mumble})
-Paquet qui contient @code{bin/murmurd}.
-
-@item @code{user} (par défaut : @code{"murmur"})
-Utilisateur qui lancera le serveur Murmur.
-
-@item @code{group} (par défaut : @code{"murmur"})
-Groupe de l'utilisateur qui lancera le serveur Murmur.
-
-@item @code{port} (par défaut : @code{64738})
-Port sur lequel le serveur écoutera.
-
-@item @code{welcome-text} (par défaut : @code{""})
-Texte de bienvenue envoyé aux clients lors de leur connexion.
-
-@item @code{server-password} (par défaut : @code{""})
-Mot de passe que les clients devront entrer pour se connecter.
-
-@item @code{max-users} (par défaut : @code{100})
-Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
-temps.
-
-@item @code{max-user-bandwidth} (par défaut : @code{#f})
-Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
-
-@item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
-Nom de fichier de la base de données sqlite. L'utilisateur du service
-deviendra propriétaire du répertoire.
-
-@item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
-Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
-du répertoire.
-
-@item @code{autoban-attempts} (par défaut : @code{10})
-Nombre maximum de connexions qu'un utilisateur peut faire pendant
-@code{autoban-timeframe} sans être banni automatiquement pour
-@code{autoban-time}.
-
-@item @code{autoban-timeframe} (par défaut : @code{120})
-Durée du temps pendant lequel le nombre de connexions est compté.
-
-@item @code{autoban-time} (par défaut : @code{300})
-Durée du bannissement automatique en secondes.
-
-@item @code{opus-threshold} (par défaut : @code{100})
-Pourcentage des clients qui doivent supporter opus avant de passer sur le
-codec audio opus.
-
-@item @code{channel-nesting-limit} (par défaut : @code{10})
-Profondeur maximum des canaux.
-
-@item @code{channelname-regex} (par défaut : @code{#f})
-Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
-doivent respecter.
-
-@item @code{username-regex} (par défaut : @code{#f})
-Une chaîne de la forme d'une expression régulière Qt que les noms
-d'utilisateurs doivent respecter.
-
-@item @code{text-message-length} (par défaut : @code{5000})
-Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
-textuel.
-
-@item @code{image-message-length} (par défaut : @code{(* 128 1024)})
-Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
-
-@item @code{cert-required?} (par défaut : @code{#f})
-Si la valeur est @code{#t} les clients utilisant une authentification par
-mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
-compléter l'assistant de configuration des certificats pour rejoindre le
-serveur.
-
-@item @code{remember-channel?} (paramètre de : @code{#f})
-Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
-les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
-se reconnectent.
-
-@item @code{allow-html?} (par défaut : @code{#f})
-Indique si le html est autorisé dans les messages textuels, les commentaires
-utilisateurs et les descriptions des canaux.
-
-@item @code{allow-ping?} (par défaut : @code{#f})
-Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
-maximum et la bande passante maximale du serveur par client aux utilisateurs
-non connectés. Dans le client Mumble, cette information est affichée dans
-la boîte de dialogue de connexion.
-
-Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
-
-@item @code{bonjour?} (par défaut : @code{#f})
-Indique si le serveur se présente sur le réseau local à travers le protocole
-bonjour.
-
-@item @code{send-version?} (par défaut : @code{#f})
-Indique si la version du serveur murmur doit être exposée dans les requêtes
-ping.
-
-@item @code{log-days} (par défaut : @code{31})
-Murmur stocke aussi les journaux en base de données, qui sont accessible via
-RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
-les garder pour toujours ou à -1 pour désactiver la journalisation dans la
-base de données.
-
-@item @code{obfuscate-ips?} (par défaut : @code{#t})
-Indique si les IP enregistrées doivent être cachées pour protéger la vie
-privée des utilisateurs.
-
-@item @code{ssl-cert} (par défaut : @code{#f})
-Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
-
-@example
-(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
-@end example
-@item @code{ssl-key} (par défaut : @code{#f})
-Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
-@example
-(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
-@end example
-
-@item @code{ssl-dh-params} (par défaut : @code{#f})
-Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
-pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
-@code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
-@code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
-inclus de la RFC 7919.
-
-@item @code{ssl-ciphers} (par défaut : @code{#f})
-L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
-disponibles pour SSL/TLS.
-
-Cette option est spécifiée en utilisant
-l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
-OpenSSL cipher list notation}
-
-Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
-« openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
-des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
-nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
-que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
-
-Remarque : modifier cette option peut impacter la rétrocompatibilité de
-votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
-connectent.
-
-@item @code{public-registration} (par défaut : @code{#f})
-Doit être un enregistrement
-@code{<murmur-public-registration-configuration>} ou @code{#f}.
-
-Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
-publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
-pas enregistrer votre serveur si vous avez un @code{server-password} ou
-@code{allow-ping} à @code{#f}.
-
-Cela peut prendre quelques heures avant d'arriver sur la liste publique.
-
-@item @code{file} (par défaut : @code{#f})
-Version alternative de cette configuration : si vous indiquez quelque chose,
-le reste est ignoré.
-@end table
-@end deftp
-
-@deftp {Type de données} murmur-public-registration-configuration
-Configuration pour l'enregistrement public du service murmur.
-
-@table @asis
-@item @code{name}
-C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
-d'hôte.
-
-@item @code{password}
-Un mot de passe pour identifier votre enregistrement. Les mises à jours
-suivantes devront utiliser le même mot de passe. Ne le perdez pas.
-
-@item @code{url}
-Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
-web.
-
-@item @code{hostname} (par défaut : @code{#f})
-Par défaut votre serveur sera listé par son adresse IP. Si cette option est
-indiquée votre serveur sera listé par son nom d'hôte.
-@end table
-@end deftp
-
-
-
-@node Services de surveillance
-@subsection Services de surveillance
-
-@subsubheading Service Tailon
-
-@uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
-visualiser et chercher des fichiers de journaux.
-
-L'exemple suivant configurera le service avec les valeurs par défaut. Par
-défaut, on peut accéder à Tailon sur le pour 8080
-(@code{http://localhost:8080}).
-
-@example
-(service tailon-service-type)
-@end example
-
-L'exemple suivant personnalise un peu plus la configuration de Tailon, en
-ajoutant @command{sed} à la liste des commandes autorisées.
-
-@example
-(service tailon-service-type
- (tailon-configuration
- (config-file
- (tailon-configuration-file
- (allowed-commands '("tail" "grep" "awk" "sed"))))))
-@end example
-
-
-@deftp {Type de données} tailon-configuration
-Type de données représentant la configuration de Tailon. Ce type a les
-paramètres suivants :
-
-@table @asis
-@item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
-Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
-un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
-(@pxref{G-Expressions}).
-
-Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
-fonction @code{local-file} :
-
-@example
-(service tailon-service-type
- (tailon-configuration
- (config-file (local-file "./my-tailon.conf"))))
-@end example
-
-@item @code{package} (par défaut : @code{tailon})
-Le paquet tailon à utiliser.
-
-@end table
-@end deftp
-
-@deftp {Type de données} tailon-configuration-file
-Type de données représentant les options de configuration de Tailon. Ce
-type a les paramètres suivants :
-
-@table @asis
-@item @code{files} (par défaut : @code{(list "/var/log")})
-Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
-fichiers simple ou des répertoires, ou une liste, où le premier élément est
-le nom d'un sous-section et le reste des fichiers ou des répertoires de
-cette sous-section.
-
-@item @code{bind} (par défaut : @code{"localhost:8080"})
-Adresse et port sur lesquels Tailon écoute.
-
-@item @code{relative-root} (par défaut : @code{#f})
-Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
-chemin.
-
-@item @code{allow-transfers?} (par défaut : @code{#t})
-Permet de télécharger les journaux dans l'interface web.
-
-@item @code{follow-names?} (par défaut : @code{#t})
-Permet de surveiller des fichiers qui n'existent pas encore.
-
-@item @code{tail-lines} (par défaut : @code{200})
-Nombre de lignes à lire initialement dans chaque fichier.
-
-@item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
-Commandes autorisées. Par défaut, @code{sed} est désactivé.
-
-@item @code{debug?} (par défaut : @code{#f})
-Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
-
-@item @code{wrap-lines} (par défaut : @code{#t})
-État initial du retour à la ligne dans l'interface web. Configurez l'option
-à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
-pas retourner à la ligne au début.
-
-@item @code{http-auth} (par défaut : @code{#f})
-Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
-l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
-et @code{"basic"}.
-
-@item @code{users} (par défaut : @code{#f})
-Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
-restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
-utilisez une liste de paires, où le premier élément de la paire est le nom
-d'utilisateur et le second élément est le mot de passe.
-
-@example
-(tailon-configuration-file
- (http-auth "basic")
- (users '(("user1" . "password1")
- ("user2" . "password2"))))
-@end example
-
-@end table
-@end deftp
-
-
-@subsubheading Service Darkstat
-@cindex darkstat
-Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
-calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
-
-@defvar {Variable Scheme} darkstat-service-type
-C'est le type de service pour le service
-@uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
-enregistrement @code{darkstat-configuration} comme dans cet exemple :
-
-@example
-(service darkstat-service-type
- (darkstat-configuration
- (interface "eno1")))
-@end example
-@end defvar
-
-@deftp {Type de données} darkstat-configuration
-Type de données représentant la configuration de @command{darkstat}.
-
-@table @asis
-@item @code{package} (par défaut : @code{darkstat})
-Le paquet darkstat à utiliser.
-
-@item @code{interface}
-Capture le trafic sur l'interface réseau spécifiée.
-
-@item @code{port} (par défaut : @code{"667"})
-Lie l'interface web sur le port spécifié.
-
-@item @code{bind-address} (par défaut : @code{"127.0.0.1"})
-Lie l'interface web sur l'adresse spécifiée.
-
-@item @code{base} (par défaut : @code{"/"})
-Spécifie le chemin de base des URL. C'est utile si on accède à
-@command{darkstat} à travers un proxy inverse.
-
-@end table
-@end deftp
-
-@subsubheading Service d'export de nœud de Prometheus
-
-@cindex prometheus-node-exporter
-L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
-matériel et le système d'exploitation fournies par le noyau Linux pour le
-système de surveillance Prometheus. Ce service devrait être déployé sur
-tous les nœuds physiques et les machines virtuelles, où vous voulez
-surveiller ces statistiques.
-
-@defvar {Variable Scheme} prometheus-node-exporter-service-type
-C'est le type de service pour le service
-@uref{https://github.com/prometheus/node_exporter/,
-prometheus-node-exporter}, sa valeur doit être un enregistrement
-@code{prometheus-node-exporter-configuration} comme dans cet exemple :
-
-@example
-(service prometheus-node-exporter-service-type
- (prometheus-node-exporter-configuration
- (web-listen-address ":9100")))
-@end example
-@end defvar
-
-@deftp {Type de données} prometheus-node-exporter-configuration
-Type de données représentant la configuration de @command{node_exporter}
-
-@table @asis
-@item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
-Le paquet prometheus-node-exporter à utiliser.
-
-@item @code{web-listen-address} (par défaut : @code{":9100"})
-Lie l'interface web sur l'adresse spécifiée.
-
-@end table
-@end deftp
-
-@subsubheading Server zabbix
-@cindex zabbix zabbix-server
-Zabbix fournit des métriques de suivi entre autres de l'utilisation du
-réseau, de la charge CPU et de l'espace disque :
-
-@itemize
-@item Haute performance, haute capacité (il est capable de surveiller des centaines de milliers d'appareils).
-@item Découverte automatique des serveurs, des appareils et leurs interfaces réseaux.
-@item Découverte bas-niveau, qui permet de commencer automatiquement à surveiller de nouveaux éléments, des systèmes de fichiers ou des interfaces réseaux entre autres.
-@item Surveillance distribuée avec une administration web centralisée.
-@item Agents natifs haute-performance.
-@item Métriques SLA et ITIL KPI dans les rapports.
-@item Vue haut-niveau (businness) des ressources surveillées à travers des écrans de consoles visuelles définie par l'utilisateur et des panneaux de commande.
-@item Exécution à distance à travers les mandataires Zabbix.
-@end itemize
-
-@c %start of fragment
-
-Les champs de @code{zabbix-server-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} package zabbix-server
-Le paquet zabbix-server.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string user
-Utilisateur qui lancera le serveur Zabbix.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} group group
-Groupe qui lancera le serveur Zabbix.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-host
-Le nom d'hôte de la base de données.
-
-La valeur par défaut est @samp{"127.0.0.1"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-name
-Nom de la base de données.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-user
-Utilisateur de la base de données.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-password
-Mot de passe de la base de données. Utilisez plutôt @code{include-files}
-avec @code{DBPassword=SECRET} dans le fichier spécifié à la place.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} number db-port
-Port de la base de données.
-
-La valeur par défaut est @samp{5432}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string log-type
-Spécifie où les messages de journalisation seront écrits :
-
-@itemize @bullet
-@item
-@code{system} - syslog.
-
-@item
-@code{file} - fichier spécifié par le paramètre @code{log-file}.
-
-@item
-@code{console} - sortie standard.
-
-@end itemize
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string log-file
-Nom du fichier de journal lorsque le paramètre @code{log-type} vaut
-@code{file}.
-
-La valeur par défaut est @samp{"/var/log/zabbix/server.log"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string pid-file
-Nom du fichier de PID.
-
-La valeur par défaut est @samp{"/var/run/zabbix/zabbix_server.pid"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string ssl-ca-location
-Emplacement des fichiers d'autorités de certification (AC) pour la
-vérification des certificats SSL du serveur.
-
-La valeur par défaut est @samp{"/etc/ssl/certs/ca-certificates.crt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string ssl-cert-location
-Emplacement des certificats SSL des clients.
-
-La valeur par défaut est @samp{"/etc/ssl/certs"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} string extra-options
-Options supplémentaires ajoutées à la fin du fichier de configuration du
-serveur Zabbix.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-server-configuration}} include-files include-files
-Vous pouvez inclure des fichiers individuels ou tous les fichiers d'un
-répertoire dans le fichier de configuration.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@c %end of fragment
-
-@subsubheading Agent zabbix
-@cindex zabbix zabbix-agent
-
-L'agent Zabbix récupère des informations pour le serveur Zabbix.
-
-@c %start of fragment
-
-Les champs de @code{zabbix-agent-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} package zabbix-agent
-Le paquet zabbix-agent.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string user
-Utilisateur qui lancera l'agent Zabbix.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} group group
-Groupe qui lancera l'agent Zabbix.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string hostname
-Noms d'hôte unique et sensible à la casse requis pour les vérifications
-actives et qui doit correspondre au nom d'hôte configuré sur le serveur.
-
-La valeur par défaut est @samp{"Zabbix server"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string log-type
-Spécifie où les messages de journalisation seront écrits :
-
-@itemize @bullet
-@item
-@code{system} - syslog.
-
-@item
-@code{file} - fichier spécifié par le paramètre @code{log-file}.
-
-@item
-@code{console} - sortie standard.
-
-@end itemize
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string log-file
-Nom du fichier de journal lorsque le paramètre @code{log-type} vaut
-@code{file}.
-
-La valeur par défaut est @samp{"/var/log/zabbix/agent.log"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string pid-file
-Nom du fichier de PID.
-
-La valeur par défaut est @samp{"/var/run/zabbix/zabbix_agent.pid"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} list server
-Liste d'adresses IP, éventuellement en notation CIDR ou de noms d'hôtes de
-serveurs Zabbix et de mandataires Zabbix. Les connexions entrantes ne
-seront acceptées que si elles viennent des hôtes listés ici.
-
-La valeur par défaut est @samp{("127.0.0.1")}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} list server-active
-Liste de paires d'IP:port (ou nom d'hôte:port) de serveurs Zabbix et de
-mandataires Zabbix pour les vérifications actives. Si le port n'est pas
-spécifié, le port par défaut est utilisé. Si ce paramètre n'est pas
-spécifié, les vérifications actives sont désactivées.
-
-La valeur par défaut est @samp{("127.0.0.1")}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} string extra-options
-Options supplémentaires ajoutées à la fin du fichier de configuration du
-serveur Zabbix.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-agent-configuration}} include-files include-files
-Vous pouvez inclure des fichiers individuels ou tous les fichiers d'un
-répertoire dans le fichier de configuration.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@c %end of fragment
-
-@subsubheading Interface utilisateur Zabbix
-@cindex zabbix zabbix-front-end
-
-Ce service fournit une interface WEB au serveur Zabbix.
-
-@c %start of fragment
-
-Les champs de @code{zabbix-front-end-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} nginx-server-configuration-list nginx
-Configuration Nginx.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-host
-Le nom d'hôte de la base de données.
-
-La valeur par défaut est @samp{"localhost"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} number db-port
-Port de la base de données.
-
-La valeur par défaut est @samp{5432}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-name
-Nom de la base de données.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-user
-Utilisateur de la base de données.
-
-La valeur par défaut est @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-password
-Mot de passe de la base de données. Utilisez plutôt @code{db-secret-file}.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-secret-file
-Fichier de secrets qui sera ajouté au fichier @file{zabbix.conf.php}. Ce
-fichier contient les paramètres d'authentification utilisés par Zabbix. On
-s'attend à ce que vous le créiez manuellement.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string zabbix-host
-Nom d'hôte du serveur Zabbix.
-
-La valeur par défaut est @samp{"localhost"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{zabbix-front-end-configuration}} number zabbix-port
-Port du serveur Zabbix.
-
-La valeur par défaut est @samp{10051}.
-
-@end deftypevr
-
-
-@c %end of fragment
-
-@node Services Kerberos
-@subsection Services Kerberos
-@cindex Kerberos
-
-Le module @code{(gnu services kerberos)} fournit des services liés au
-protocole d'authentification @dfn{Kerberos}.
-
-@subsubheading Service Krb5
-
-Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
-trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
-génère un tel fichier à partir d'une définition fournie par la déclaration
-de système d'exploitation. Il ne démarre aucun démon.
-
-Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
-explicitement. Ce service est connu pour fonctionner avec la bibliothèque
-cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
-testées.
-
-@defvr {Variable Scheme} krb5-service-type
-Un type de service pour les clients Kerberos 5.
-@end defvr
-
-@noindent
-Voici un exemple d'utilisation :
-@lisp
-(service krb5-service-type
- (krb5-configuration
- (default-realm "EXAMPLE.COM")
- (allow-weak-crypto? #t)
- (realms (list
- (krb5-realm
- (name "EXAMPLE.COM")
- (admin-server "groucho.example.com")
- (kdc "karl.example.com"))
- (krb5-realm
- (name "ARGRX.EDU")
- (admin-server "kerb-admin.argrx.edu")
- (kdc "keys.argrx.edu"))))))
-@end lisp
-
-@noindent
-Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
-@itemize
-@item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
-aillant des serveurs d'administration et des centres de distribution de
-clefs distincts ;
-@item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
-explicitement par les clients ;
-@item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
-@end itemize
-
-Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
-champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
-et plus de détails sur chacun d'entre eux, voir la documentation de MIT
-@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
-
-
-@deftp {Type de données} krb5-realm
-@cindex domaine, kerberos
-@table @asis
-@item @code{name}
-Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
-courante est d'utiliser le nom pleinement qualifié de votre organisation,
-converti en majuscule.
-
-@item @code{admin-server}
-Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
-tourne.
-
-@item @code{kdc}
-Ce champ est une chaîne identifiant le centre de distribution de clefs pour
-ce domaine.
-@end table
-@end deftp
-
-@deftp {Type de données} krb5-configuration
-
-@table @asis
-@item @code{allow-weak-crypto?} (par défaut : @code{#f})
-Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
-de chiffrement faibles seront acceptés.
-
-@item @code{default-realm} (par défaut : @code{#f})
-Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
-pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
-ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
-pour chaque principal Kerberos à l'invocation des programmes comme
-@command{kinit}.
-
-@item @code{realms}
-Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
-clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
-@code{name} qui correspond au champ @code{default-realm}.
-@end table
-@end deftp
-
-
-@subsubheading Service PAM krb5
-@cindex pam-krb5
-
-Le service @code{pam-krb5} permet la connexion et la gestion des mots de
-passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
-applications qui utilisent PAM puissent authentifier automatiquement les
-utilisateurs avec Kerberos.
-
-@defvr {Variable Scheme} pam-krb5-service-type
-Un type de service pour le module PAM Kerberos 5.
-@end defvr
-
-@deftp {Type de données} pam-krb5-configuration
-Type de données représentant la configuration du module PAM Kerberos 5. Ce
-type a les paramètres suivants :
-@table @asis
-@item @code{pam-krb5} (par défaut : @code{pam-krb5})
-Le paquet pam-krb5 à utiliser.
-
-@item @code{minimum-uid} (par défaut : @code{1000})
-Le plus petite ID utilisateur pour lequel les authentifications Kerberos
-devraient être tentées. Les comptes locaux avec une valeur plus petite
-échoueront silencieusement leur authentification Kerberos.
-@end table
-@end deftp
-
-
-@node Services LDAP
-@subsection Services LDAP
-@cindex LDAP
-@cindex nslcd, service LDAP
-
-Le module @code{(gnu services authentication)} fournit le type de service
-@code{nslcd-service-type}, qui peut être utilisé pour l'authentification par
-LDAP. En plus de configurer le service lui-même, vous pouvez ajouter
-@code{ldap} comme service de noms au Name Service Switch. @xref{Name Service Switch} pour des informations détaillées.
-
-Voici une déclaration de système d'exploitation simple avec une
-configuration par défaut pour @code{nslcd-service-type} et une configuration
-du Name Service Switch qui consulte le service de noms @code{ldap} en
-dernier :
-
-@example
-(use-service-modules authentication)
-(use-modules (gnu system nss))
-...
-(operating-system
- ...
- (services
- (cons*
- (service nslcd-service-type)
- (service dhcp-client-service-type)
- %base-services))
- (name-service-switch
- (let ((services (list (name-service (name "db"))
- (name-service (name "files"))
- (name-service (name "ldap")))))
- (name-service-switch
- (inherit %mdns-host-lookup-nss)
- (password services)
- (shadow services)
- (group services)
- (netgroup services)
- (gshadow services)))))
-@end example
-
-@c %start of generated documentation for nslcd-configuration
-
-Les champs de @code{nslcd-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{nslcd-configuration}} package nss-pam-ldapd
-Le paquet @code{nss-pam-ldapd} à utiliser.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number threads
-Le nombre de threads à démarrer qui peuvent gérer les requête et effectuer
-des requêtes LDAP. Chaque thread ouvre une connexion séparée au serveur
-LDAP. La valeur par défaut est de 5 threads.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} string uid
-Cela spécifie l'id de l'utilisateur sous lequel le démon devrait tourner.
-
-La valeur par défaut est @samp{"nslcd"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} string gid
-Cela spécifie l'id du groupe sous lequel le démon devrait tourner.
-
-La valeur par défaut est @samp{"nslcd"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} log-option log
-Cette option contrôle la journalisation via une liste contenant le schéma et
-le niveau. Le schéma peut être soit un symbole « none », « syslog », soit
-un nom de fichier absolu. Le niveau est facultatif et spécifie le niveau de
-journalisation. Le niveau de journalisation peut être l'un des symboles
-suivants : « crit », « error », « warning », « notice », « info » ou « debug
-». Tous les messages avec le niveau spécifié ou supérieurs sont
-enregistrés.
-
-La valeur par défaut est @samp{("/var/log/nslcd" info)}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} list uri
-La liste des URI des serveurs LDAP. Normalement, seul le premier serveur
-sera utilisé avec les serveurs suivants comme secours.
-
-La valeur par défaut est @samp{("ldap://localhost:389/")}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string ldap-version
-La version du protocole LDAP à utiliser. La valeur par défaut est
-d'utiliser la version maximum supportée par la bibliothèque LDAP.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string binddn
-Spécifie le nom distingué avec lequel se lier au serveur de répertoire pour
-les recherches. La valeur par défaut est de se lier anonymement.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string bindpw
-Spécifie le mot de passe avec lequel se lier. Cette option n'est valable
-que lorsqu'elle est utilisée avec binddn.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string rootpwmoddn
-Spécifie le nom distingué à utiliser lorsque l'utilisateur root essaye de
-modifier le mot de passe d'un utilisateur avec le module PAM.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string rootpwmodpw
-Spécifie le mot de passe à utiliser pour se lier si l'utilisateur root
-essaye de modifier un mot de passe utilisateur. Cette option n'est valable
-que si elle est utilisée avec rootpwmoddn
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-mech
-Spécifie le mécanisme SASL à utiliser lors de l'authentification SASL.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-realm
-Spécifie le royaume SASL à utiliser pour effectuer une authentification
-SASL.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-authcid
-Spécifie l'identité d'authentification à utiliser pour effectuer une
-authentification SASL.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-authzid
-Spécifie l'identité d'autorisation à utiliser lors d'une authentification
-SASL.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean sasl-canonicalize?
-Détermine si le nom d'hôte du serveur LDAP devrait être canonalisé. Si
-c'est activé la bibliothèque LDAP effectuera une recherche de nom d'hôte
-inversée. Par défaut, il est laissé à la bibliothèque LDAP le soin de
-savoir si la vérification doit être effectuée ou non.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string krb5-ccname
-Indique le nom du cache d'informations de connexion de GSS-API Kerberos.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} string base
-La base de recherche de répertoires.
-
-La valeur par défaut est @samp{"dc=example,dc=com"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} scope-option scope
-Spécifie la portée de la recherche (subtree, onelevel, base ou children).
-La portée par défaut est subtree ; la portée base n'est presque jamais utile
-pour les recherches de service de noms ; la portée children n'est pas prise
-en charge par tous les serveurs.
-
-La valeur par défaut est @samp{(subtree)}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-deref-option deref
-Spécifie la politique de déréférencement des alias. La politique par défaut
-est de ne jamais déréférencer d'alias.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean referrals
-Spécifie s'il faut activer le suivi de référence. Le comportement par
-défaut est de suivre les références.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} list-of-map-entries maps
-Cette option permet d'ajouter des attributs personnalisés à rechercher à la
-place des attributs par défaut de la RFC 2307. C'est une liste de
-correspondances, consistant chacune en un nom, en l'attribut RFC 2307 à
-utiliser et l'expression de la requête pour l'attribut tel qu'il sera
-disponible dans le répertoire.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} list-of-filter-entries filters
-Une liste de filtres consistant en le nom d'une correspondance à laquelle
-applique le filtre et en une expression de filtre de recherche LDAP.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number bind-timelimit
-Spécifie la limite de temps en seconds à utiliser lors de la connexion au
-serveur de répertoire. La valeur par défaut est de 10 secondes.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number timelimit
-Spécifie la limite de temps (en secondes) à attendre une réponse d'un
-serveur LDAP. La valeur de zéro, par défaut, permet d'attendre indéfiniment
-la fin des recherches.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number idle-timelimit
-Spécifie la période d'inactivité (en seconde) après laquelle la connexion au
-serveur LDAP sera fermée. La valeur par défaut est de ne jamais la fermer.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number reconnect-sleeptime
-Spécifie le nombre de secondes pendant laquelle attendre lorsque la
-connexion à tous les serveurs LDAP a échouée. Par défaut, il y a une
-seconde d'attente entre le premier échec et la tentative suivante.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number reconnect-retrytime
-Spécifie la durée après laquelle le serveur LDAP est considéré comme
-définitivement inatteignable. Une fois cette durée atteinte, les tentatives
-de connexions n'auront plus lieu qu'une fois par cet intervalle de temps.
-La valeur par défaut est de 10 secondes.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-ssl-option ssl
-Spécifie s'il faut utiliser SSL/TLS ou non (la valeur par défaut est non).
-Si 'start-tls est spécifié alors StartTLS est utilisé à la place de LDAP sur
-SSL.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-tls-reqcert-option tls-reqcert
-Spécifie quelles vérifications effectuer sur les certificats donnés par les
-serveurs. La signification des valeurs est décrite dans la page de manuel
-de ldap.conf(5).
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cacertdir
-Spécifie le répertoire contenant les certificats X.509 pour
-l'authentification des pairs. Ce paramètre est ignoré quand il est utilisé
-avec GnuTLS.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cacertfile
-Spécifie le chemin des certificats X.509 pour l'authentification des pairs.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-randfile
-Spécifie le chemin d'une source d'entropie. Ce paramètre est ignoré quand
-il est utilisé avec GnuTLS.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-ciphers
-Spécifie les suites de chiffrements à utiliser pour TLS en tant que chaîne
-de caractères.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cert
-Spécifie le chemin vers le fichier contenant le certificat local pour
-l'authentification TLS du client.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-key
-Spécifie le chemin du fichier contenant la clef privée pour
-l'authentification TLS du client.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number pagesize
-Indiquez un nombre plus grand que 0 pour demander des résultats paginés au
-serveur LDAP en accord avec la RFC 2696. La valeur par défaut (0) est de ne
-pas demander de pagination des résultats.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-ignore-users-option nss-initgroups-ignoreusers
-Cette option évite les recherches d'appartenance au groupe à travers le LDAP
-pour les utilisateurs spécifiés. Autrement, la valeur 'all-local peut être
-utilisée. Avec cette valeur nslcd construit une liste complète des
-utilisateurs non-LDAP au démarrage.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-min-uid
-Cette option s'assure que les utilisateurs LDAP avec un id utilisateur
-numérique plus petit que la valeur spécifiée sont ignorés.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-uid-offset
-Cette option spécifie un décalage à ajouter à tous les id utilisateurs
-numériques LDAP. Cela peut être utile pour éviter des collisions d'id
-utilisateurs avec des utilisateurs locaux.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-gid-offset
-Cette option spécifie un décalage à ajouter à tous les id de groupe
-numériques LDAP. Cela peut être utile pour éviter des collisions d'id
-utilisateurs avec des groupes locaux.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-nested-groups
-Si cette option est indiquée, l'attribut de membre de groupe peut pointer
-vers un autre groupe. Les membres de groupes imbriqués sont aussi renvoyés
-dans le groupe de haut-niveau et les groupes parents sont renvoyés lorsqu'on
-recherche un utilisateur spécifique. La valeur par défaut est de ne pas
-effectuer de recherche supplémentaire sur les groupes imbriqués.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-getgrent-skipmembers
-Si cette option est indiqée, la liste de membres du groupe n'est pas
-récupérée lorsqu'on cherche un groupe. Les recherches pour trouver les
-groupes auxquels un utilisateur appartient resteront fonctionnelles donc
-l'utilisateur obtiendra probablement les bons groupes à la connexion.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-disable-enumeration
-Si cette option est indiquée, les fonctions qui causent le chargement de
-toutes les entrées d'utilisateur et de groupe depuis le répertoire ne
-pourront pas le faire. Cela peut grandement diminuer la charge du serveur
-LDAP dans des situations où il y a beaucoup d'utilisateurs et de groupes.
-Cette option n'est pas recommandées pour la plupart des configurations.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string validnames
-Cette option peut être utilisée pour spécifier comment les noms
-d'utilisateurs et de groupes sont vérifiés sur le système. Ce motif est
-utilisé pour vérifier tous les noms d'utilisateurs et de groupes qui sont
-demandés et renvoyés par le LDAP.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean ignorecase
-Cela spécifie s'il faut ou non effectuer des recherches avec une
-correspondance sensible à la casse. Activer cela pourrait mener à des
-vulnérabilités de type contournement d'authentification sur le système et
-introduire des vulnérabilité d'empoisonnement de cache nscd qui permettent
-un déni de service.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean pam-authc-ppolicy
-Cette option spécifie si des contrôles de la politique de mots de passe sont
-demandés et gérés par le serveur LDAP à l'authentification de l'utilisateur.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-authc-search
-Par défaut nslcd effectue une recherche LDAP avec le mot de passe de
-l'utilisateur après BIND (authentification) pour s'assurer que l'opération
-BIND a bien réussi. La recherche par défaut est une simple vérification que
-le DN de l'utilisateur existe. Un filtre de recherche peut être spécifié
-pour l'utiliser à la place. Il devrait renvoyer au moins une entrée.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-authz-search
-Cette option permet la configuration fine et flexible de la vérification
-d'autorisation qui devrait être effectuée. Le filtre de recherche est
-exécuté et si une entrée correspond, l'accès est autorisé, sinon il est
-refusé.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-password-prohibit-message
-Si cette option est indiquée, la modification de mot de passe par pam_ldap
-sera refusée et le message spécifié sera présenté à l'utilisateur à la
-place. Le message peut être utilisé pour rediriger les utilisateurs vers
-une autre méthode pour changer leur mot de passe.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{nslcd-configuration}} list pam-services
-Liste de noms de service pam pour lesquels l'authentification LDAP devrait
-suffire.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@c %end of generated documentation for nslcd-configuration
-
-
-@node Services web
-@subsection Services web
-
-@cindex web
-@cindex www
-@cindex HTTP
-Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
-serveur web nginx et aussi un démon fastcgi.
-
-@subsubheading Serveur Apache HTTP
-
-@deffn {Variable Scheme} httpd-service-type
-Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
-(@dfn{httpd}). La valeur de ce type de service est un enregistrement
-@code{httpd-configuration}.
-
-Un exemple de configuration simple est donné ci-dessous.
-
-@example
-(service httpd-service-type
- (httpd-configuration
- (config
- (httpd-config-file
- (server-name "www.example.com")
- (document-root "/srv/http/www.example.com")))))
-@end example
-
-D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
-ajouté à la configuration.
-
-@example
-(simple-service 'my-extra-server httpd-service-type
- (list
- (httpd-virtualhost
- "*:80"
- (list (string-append
- "ServerName "www.example.com
- DocumentRoot \"/srv/http/www.example.com\"")))))
-@end example
-@end deffn
-
-Les détails des types d'enregistrement @code{httpd-configuration},
-@code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
-sont donnés plus bas.
-
-@deffn {Type de données} httpd-configuration
-Ce type de données représente la configuration du service httpd.
-
-@table @asis
-@item @code{package} (par défaut : @code{httpd})
-Le paquet httpd à utiliser.
-
-@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
-Le fichier de pid utilisé par le service shepherd.
-
-@item @code{config} (par défaut : @code{(httpd-config-file)})
-Le fichier de configuration à utiliser avec le service httpd. La valeur par
-défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
-être un G-expression qui génère un fichier, par exemple un
-@code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
-avec une chaîne de caractères.
-
-@end table
-@end deffn
-
-@deffn {Type de données} httpd-module
-Ce type de données représente un module pour le service httpd.
-
-@table @asis
-@item @code{name}
-Le nom du module.
-
-@item @code{file}
-Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
-l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
-le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
-
-@end table
-@end deffn
-
-@defvr {Variable Scheme} %default-httpd-modules
-Une liste par défaut des objets @code{httpd-module}.
-@end defvr
-
-@deffn {Type de données} httpd-config-file
-Ce type de données représente un fichier de configuration pour le service
-httpd.
-
-@table @asis
-@item @code{modules} (par défaut : @code{%default-httpd-modules})
-Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
-ou chargés par des configuration supplémentaires.
-
-Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
-utiliser le module @code{mod_proxy_fcgi} d'Apache avec
-@code{php-fpm-service-type} :
-
-@example
-(service httpd-service-type
- (httpd-configuration
- (config
- (httpd-config-file
- (modules (cons*
- (httpd-module
- (name "proxy_module")
- (file "modules/mod_proxy.so"))
- (httpd-module
- (name "proxy_fcgi_module")
- (file "modules/mod_proxy_fcgi.so"))
- %default-httpd-modules))
- (extra-config (list "\
-<FilesMatch \\.php$>
- SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
-</FilesMatch>"))))))
-(service php-fpm-service-type
- (php-fpm-configuration
- (socket "/var/run/php-fpm.sock")
- (socket-group "httpd")))
-@end example
-
-@item @code{server-root} (par défaut : @code{httpd})
-Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
-httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
-relativement à la racine du serveur.
-
-@item @code{server-name} (par défaut : @code{#f})
-Le @code{ServerName} dans le fichier de configuration, utilisé pour
-spécifier le schéma de requête, le nom d'hôte et le port que le serveur
-utilise pour s'identifier.
-
-Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
-spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
-ne pas spécifier de @code{ServerName}.
-
-@item @code{document-root} (par défaut : @code{"/srv/http"})
-Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
-
-@item @code{listen} (par défaut : @code{'("80")})
-La liste des valeurs pour les directives @code{Listen} dans le fichier de
-configuration. La valeur devrait être une liste de chaînes, où chacune
-spécifie le port sur lequel écouter et éventuellement une adresse IP et un
-protocole à utiliser.
-
-@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
-Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
-indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
-correctement configuré.
-
-@item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
-Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
-
-@item @code{user} (par défaut : @code{"httpd"})
-Le @code{User} en tant que lequel le serveur répondra aux requêtes.
-
-@item @code{group} (par défaut : @code{"httpd"})
-Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
-
-@item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
-Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
-du fichier de configuration.
-
-N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
-cette liste.
-
-@end table
-@end deffn
-
-@deffn {Type de données} httpd-virtualhost
-Ce type de données représente la configuration d'un hôte virtuel pour le
-service httpd.
-
-Ils devraient être ajoutés à extra-config dans httpd-service.
-
-@example
-(simple-service 'my-extra-server httpd-service-type
- (list
- (httpd-virtualhost
- "*:80"
- (list (string-append
- "ServerName "www.example.com
- DocumentRoot \"/srv/http/www.example.com\"")))))
-@end example
-
-@table @asis
-@item @code{addresses-and-ports}
-L'adresse et le port pour la directive @code{VirtualHost}.
-
-@item @code{contents}
-Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
-de chaîne et de G-expressions.
-
-@end table
-@end deffn
-
-@subsubheading NGINX
-
-@deffn {Variable Scheme} nginx-service-type
-Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
-valeur de ce service est un enregistrement @code{<nginx-configuration>}.
-
-Un exemple de configuration simple est donné ci-dessous.
-
-@example
-(service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com"))))))
-@end example
-
-En plus d'ajouter des blocs de serveurs dans la configuration du service
-directement, ce service peut être étendu par d'autres services pour ajouter
-des blocs de serveurs, comme dans cet exemple :
-
-@example
-(simple-service 'my-extra-server nginx-service-type
- (list (nginx-server-configuration
- (root "/srv/http/extra-website")
- (try-files (list "$uri" "$uri/index.html")))))
-@end example
-@end deffn
-
-Au démarrage, @command{nginx} n'a pas encore lu son fichier de
-configuration, donc il utilise les fichiers par défaut pour les messages
-d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
-seront enregistrés. Après la lecture du fichier de configuration, le
-fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
-notre cas, les messages d'erreur au démarrage se trouvent dans
-@file{/var/run/nginx/logs/error.log} et après la configuration dans
-@file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
-avec l'option de configuration @var{log-directory}.
-
-@deffn {Type de données} nginx-configuration
-Ce type de données représente la configuration de NGinx. Certaines
-configurations peuvent se faire ici et d'autres fournissent des types
-d'enregistrement ou éventuellement, on peut fournir un fichier de
-configuration.
-
-@table @asis
-@item @code{nginx} (par défaut : @code{nginx})
-Le paquet nginx à utiliser.
-
-@item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
-Le répertoire dans lequel NGinx écrira ses fichiers journaux.
-
-@item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
-Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
-fichiers temporaires.
-
-@item @code{server-blocks} (par défaut : @code{'()})
-Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
-généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
-
-L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
-le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
-@example
-(service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com"))))))
-@end example
-
-@item @code{upstream-blocks} (par défaut : @code{'()})
-Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
-généré, dont les éléments sont de type
-@code{<nginx-upstream-configuration>}.
-
-Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
-utile en combinaison avec @code{locations} dans les enregistrements
-@code{<nginx-server-configuration>}. L'exemple suivant crée une
-configuration de serveur avec une configuration « location » qui sera
-mandataire pour une configuration amont, qui gérera les requêtes avec deux
-serveurs.
-
-@example
-(service
- nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com")
- (locations
- (list
- (nginx-location-configuration
- (uri "/path1")
- (body '("proxy_pass http://server-proxy;"))))))))
- (upstream-blocks
- (list (nginx-upstream-configuration
- (name "server-proxy")
- (servers (list "server1.example.com"
- "server2.example.com")))))))
-@end example
-
-@item @code{file} (par défaut : @code{#f})
-Si un fichier de configuration @var{file} est fourni, il sera utilisé au
-lieu de générer un fichier de configuration à partir des
-@code{log-directory}, @code{run-directory}, @code{server-blocks} et
-@code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
-devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
-les répertoires sont créé lorsque le service est activé.
-
-Cela peut être utile si vous avez déjà un fichier de configuration existant
-ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
-parties de l'enregistrement nginx-configuration.
-
-@item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
-Taille du seau pour les tables de hashage des noms de serveurs, par dauft
-@code{#f} pour utilise la taille des lignes de cache du processeur.
-
-@item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
-Taille maximum des seaux pour les tables de hashage des serveurs de noms.
-
-@item @code{extra-content} (par défaut : @code{""})
-Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
-un G-expression.
-
-@end table
-@end deffn
-
-@deftp {Type de données} nginx-server-configuration
-Type de données représentant la configuration d'un bloc serveur de nginx.
-Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{listen} (par défaut : @code{'("80" "443 ssl")})
-Chaque directive @code{listen} indique l'adresse et le port pour le
-protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
-acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
-l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
-exemple :
-
-@example
-'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
-@end example
-
-@item @code{server-name} (par défaut : @code{(list 'default)})
-Une liste de noms de serveurs que ce serveur représente. @code{'default}
-représente le serveur par défaut pour les connexions qui ne correspondent à
-aucun autre serveur.
-
-@item @code{root} (par défaut : @code{"/srv/http"})
-Racine du site web que sert nginx.
-
-@item @code{locations} (par défaut : @code{'()})
-Une liste d'enregistrements @dfn{nginx-location-configuration} ou
-@dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
-
-@item @code{index} (par défaut : @code{(list "index.html")})
-Fichiers d'index à chercher lorsque les clients demandent un répertoire.
-S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
-répertoire.
-
-@item @code{try-files} (par défaut : @code{'()})
-Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
-spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
-la requête.
-
-@item @code{ssl-certificate} (par défaut : @code{#f})
-Où trouver les certificats pour les connexions sécurisées. Indiquez
-@code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
-utiliser HTTPS.
-
-@item @code{ssl-certificate-key} (par défaut : @code{#f})
-Où trouver la clef privée pour les connexions sécurisées. Indiquez
-@code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
-HTTPS.
-
-@item @code{server-tokens?} (par défaut : @code{#f})
-Indique si le serveur devrait ajouter sa configuration dans les réponses.
-
-@item @code{raw-content} (par défaut : @code{'()})
-Une liste de lignes brutes à ajouter dans le bloc serveur.
-
-@end table
-@end deftp
-
-@deftp {Type de données} nginx-upstream-configuration
-Type de données représentant la configuration d'un bloc @code{upstream}
-nginx. Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{name}
-Nome de ces groupe de serveurs.
-
-@item @code{serveurs}
-Spécifie les adresses des serveurs dans le groupe. L'adresse peut être
-spécifié avec une adresse IP (p.@: ex.@: @samp{127.0.0.1}), un nom de
-domaine (p.@: ex.@: @samp{backend1.example.com}) ou un chemin vers un socket
-UNIX avec le préfixe @samp{unix:}. Pour les adresse utilisant une adresse
-IP ou un nom de domaine, le port par défaut est 80 et un port différent peut
-être spécifié explicitement.
-
-@end table
-@end deftp
-
-@deftp {Type de données} nginx-location-configuration
-Type de données représentant la configuration d'un bloc @code{location}
-nginx. Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{uri}
-URI qui correspond à ce bloc.
-
-@anchor{nginx-location-configuration body}
-@item @code{body}
-Corps du block location, spécifié comme une liste de chaînes de caractères.
-Cela peut contenir de nombreuses directives de configuration. Par exemple,
-pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
-@code{nginx-upstream-configuration}, la directive suivante peut être
-spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
-
-@end table
-@end deftp
-
-@deftp {Type de données} nginx-named-location-configuration
-Type de données représentant la configuration d'un bloc location nginx
-nommé. Les blocs location nommés sont utilisé les redirections de requêtes
-et pas pour le traitement des requêtes normales. Ce type a les paramètres
-suivants :
-
-@table @asis
-@item @code{name}
-Nom pour identifier ce bloc location.
-
-@item @code{body}
-@xref{nginx-location-configuration body}, comme le corps d'un bloc location
-nommé peut être utilisé de la même manière que
-@code{nginx-location-configuration body}. Une restriction est que le corps
-d'un bloc location nommé ne peut pas contenir de bloc location.
-
-@end table
-@end deftp
-
-@subsubheading Cache Varnish
-@cindex Varnish
-Varnish est un serveur de cache rapide qui se trouve entre les applications
-web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
-des clients et met les URL accédées en cache pour que plusieurs requêtes à
-la même ressource ne crée qu'une requête au moteur.
-
-@defvr {Variable Scheme} varnish-service-type
-Type de service pour le démon Varnish.
-@end defvr
-
-@deftp {Type de données} varnish-configuration
-Type de données représentant la configuration du service @code{varnish}. Ce
-type a les paramètres suivants :
-
-@table @asis
-@item @code{package} (par défaut : @code{varnish})
-Le paquet Varnish à utiliser.
-
-@item @code{name} (par défaut : @code{"default"})
-Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
-@file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
-endroit. Si le nom commence par une barre oblique, il est interprété comme
-un nom de répertoire absolu.
-
-Passez l'argument @code{-n} aux autres programmes Varnish pour vous
-connecter à l'instance nommée, p.@: ex.@: @command{varnishncsa -n default}.
-
-@item @code{backend} (par défaut : @code{"localhost:8080"})
-Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
-
-@item @code{vcl} (par défaut : #f)
-Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
-valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
-la configuration par défaut. Sinon, ce doit être un objet simili-fichier
-avec une syntaxe VCL valide.
-
-@c Varnish does not support HTTPS, so keep this URL to avoid confusion.
-Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
-avec VCL vous pouvez faire quelque chose comme cela :
-
-@example
-(define %gnu-mirror
- (plain-file
- "gnu.vcl"
- "vcl 4.1;
-backend gnu @{ .host = "www.gnu.org"; @}"))
-
-(operating-system
- ...
- (services (cons (service varnish-service-type
- (varnish-configuration
- (listen '(":80"))
- (vcl %gnu-mirror)))
- %base-services)))
-@end example
-
-On peut inspecter la configuration d'une instance Varnish actuellement
-lancée en utilisant le programme @command{varnishadm}.
-
-Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
-varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
-pour une documentation complète sur Varnish et son langage de configuration.
-
-@item @code{listen} (par défaut : @code{'("localhost:80")})
-Liste des adresses sur lesquelles écoute Varnish.
-
-@item @code{storage} (par défaut : @code{'("malloc,128m")})
-Liste de moteurs de stockage qui seront disponibles en VCL.
-
-@item @code{parameters} (par défaut : @code{'()})
-Liste des paramètres à l'exécution de la forme @code{'(("parameter"
-. "value"))}.
-
-@item @code{extra-options} (par défaut : @code{'()})
-Arguments supplémentaires à passer au processus @command{varnishd}.
-
-@end table
-@end deftp
-
-@subsubheading FastCGI
-@cindex fastcgi
-@cindex fcgiwrap
-FastCGI est une interface entre le frontal et le moteur d'un service web.
-C'est un dispositif quelque peu désuet ; les nouveaux services devraient
-généralement juste parler HTTP entre le frontal et le moteur. Cependant il
-y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
-Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
-Guix.
-
-Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
-nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
-écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
-intermédiaire qui se trouve entre le processus du moteur et le serveur web.
-Le frontal indique quel moteur lancer, en passant cette information au
-processus @code{fcgiwrap}.
-
-@defvr {Variable Scheme} fcgiwrap-service-type
-Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
-@end defvr
-
-@deftp {Type de données} fcgiwrap-configuration
-Type de données représentant la configuration du service @code{fcgiwrap}.
-Ce type a les paramètres suivants :
-@table @asis
-@item @code{package} (par défaut : @code{fcgiwrap})
-Le paquet fcgiwrap à utiliser.
-
-@item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
-Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
-de caractères. Les valeurs valides de @var{socket} sont
-@code{unix:@var{/path/to/unix/socket}},
-@code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
-@code{tcp6:[@var{ipv6_addr}]:port}.
-
-@item @code{user} (par défaut : @code{fcgiwrap})
-@itemx @code{group} (par défaut : @code{fcgiwrap})
-Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
-sous lesquels lancer le processus @code{fcgiwrap}. Le service
-@code{fastcgi} s'assurera que si l'utilisateur demande les noms
-d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
-correspondant seront présents sur le système.
-
-Il est possible de configurer un service web soutenu par FastCGI pour passer
-les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
-et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
-l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
-moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
-@code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
-sur le frontal.
-@end table
-@end deftp
-
-@cindex php-fpm
-PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
-alternative avec quelques fonctionnalités supplémentaires utiles pour les
-sites de toutes tailles.
-
-Ces fonctionnalités comprennent :
-@itemize @bullet
-@item La création de processus adaptative
-@item Des statistiques de base (comme le mod_status d'Apache)
-@item La gestion des processus avancée avec arrêt et démarrage sans heurts
-@item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
-et différents php.ini (à la place de safe_mode)
-@item L'enregistrement des journaux sur stdout et stderr
-@item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
-@item Le support des téléversements accélérés
-@item Le support de « showlog »
-@item Des améliorations à FastCGI, comme fastcgi_finish_request() -
-une fonction spéciale pour terminer la requête et nettoyer toutes les
-données tout en continuant à faire d'autres choses qui prennent du temps
-(conversion vidéo, gestion des stats, etc…).
-@end itemize
-…@: et bien plus.
-
-@defvr {Variable Scheme} php-fpm-service-type
-Un type de service pour @code{php-fpm}.
-@end defvr
-
-@deftp {Type de données} php-fpm-configuration
-Type de données pour la configuration du service php-fpm.
-@table @asis
-@item @code{php} (par défaut : @code{php})
-Le paquet php à utiliser.
-@item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
-L'adresse sur laquelle accepter les requêtes FastCGI. Les syntaxes valides
-sont :
-@table @asis
-@item @code{"ip.add.re.ss:port"}
-Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
-@item @code{"port"}
-Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
-@item @code{"/path/to/unix/socket"}
-Écoute sur un socket unix.
-@end table
-
-@item @code{user} (par défaut : @code{php-fpm})
-Utilisateur à qui appartiendra le processus de travail de php.
-@item @code{group} (par défaut : @code{php-fpm})
-Groupe du processus de travail.
-@item @code{socket-user} (par défaut : @code{php-fpm})
-Utilisateur qui peut parler au socket php-fpm.
-@item @code{socket-group} (par défaut : @code{php-fpm})
-Groupe qui peut parler au socket php-fpm.
-@item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
-Le pid de php-fpm est écrit dans ce fichier une fois que le service a
-démarré.
-@item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
-Fichier de journal pour le processus maître de php-fpm.
-@item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
-Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
-doit s'agir soit de :
-@table @asis
-@item @code{<php-fpm-dynamic-process-manager-configuration>}
-@item @code{<php-fpm-static-process-manager-configuration> ou}
-@item @code{<php-fpm-on-demand-process-manager-configuration>}
-@end table
-@item @code{display-errors} (par défaut : @code{#f})
-Détermine si les erreurs et les avertissements php doivent être envoyés aux
-clients et affichés dans leur navigateur. Cela est utile pour un
-développement php local, mais un risque pour la sécurité pour les sites
-publics, comme les messages d'erreur peuvent révéler des mots de passes et
-des données personnelles.
-@item @code{timezone} (par défaut : @code{#f})
-Spécifie le paramètre @code{php_admin_value[date.timezone]}.
-@item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
-Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
-php. On peut indiquer @code{#f} pour désactiver la journalisation.
-@item @code{file} (par défaut : @code{#f})
-Une version alternative de la configuration complète. Vous pouvez utiliser
-la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
-@end table
-@end deftp
-
-@deftp {Type de données} php-fpm-dynamic-process-manager-configuration
-Type de données pour le gestionnaire de processus @code{dynamic} de
-php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
-travail de secours sont gardés en fonction des limites configurées.
-@table @asis
-@item @code{max-children} (par défaut : @code{5})
-Nombre maximum de processus de travail.
-@item @code{start-servers} (par défaut : @code{2})
-Nombre de processus de travail au démarrage.
-@item @code{min-spare-servers} (par défaut : @code{1})
-Nombre de processus de travail de secours minimum qui doivent rester à
-disposition.
-@item @code{max-spare-servers} (par défaut : @code{3})
-Nombre maximum de processus de travail de secours qui peuvent rester à
-disposition.
-@end table
-@end deftp
-
-@deftp {Type de données} php-fpm-static-process-manager-configuration
-Type de données pour le gestionnaire de processus @code{static} de php-fpm.
-Avec le gestionnaire de processus @code{static}, un nombre constant de
-processus de travail est créé.
-@table @asis
-@item @code{max-children} (par défaut : @code{5})
-Nombre maximum de processus de travail.
-@end table
-@end deftp
-
-@deftp {Type de données} php-fpm-on-demand-process-manager-configuration
-Type de données pour le gestionnaire de processus @code{on-demand} de
-php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
-de travail ne sont créés que lorsque les requêtes arrivent.
-@table @asis
-@item @code{max-children} (par défaut : @code{5})
-Nombre maximum de processus de travail.
-@item @code{process-idle-timeout} (par défaut : @code{10})
-La durée en secondes après laquelle un processus sans requête sera tué.
-@end table
-@end deftp
-
-
-@deffn {Procédure Scheme} nginx-php-fpm-location @
- [#:nginx-package nginx] @
-[socket (string-append "/var/run/php" @
-(version-major (package-version php)) @
-"-fpm.sock")]
-Une fonction d'aide pour ajouter rapidement php à un
-@code{nginx-server-configuration}.
-@end deffn
-
-Une configuration simple de services pour php ressemble à ceci :
-@example
-(services (cons* (service dhcp-client-service-type)
- (service php-fpm-service-type)
- (service nginx-service-type
- (nginx-server-configuration
- (server-name '("example.com"))
- (root "/srv/http/")
- (locations
- (list (nginx-php-location)))
- (listen '("80"))
- (ssl-certificate #f)
- (ssl-certificate-key #f)))
- %base-services))
-@end example
-
-@cindex cat-avatar-generator
-Le générateur d'avatar de chat est un simple service pour démontrer
-l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
-avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
-courriel d'un utilisateur.
-
-@deffn {Procédure Scheme} cat-avatar-generator-service @
- [#:cache-dir "/var/cache/cat-avatar-generator"] @
-[#:package cat-avatar-generator] @
-[#:configuration (nginx-server-configuration)]
-Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
-Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
-@code{package}, une version de cat-avatar-generator. Pendant l'exécution,
-cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
-cache.
-@end deffn
-
-Une configuration simple de cat-avatar-generator ressemble à ceci :
-@example
-(services (cons* (cat-avatar-generator-service
- #:configuration
- (nginx-server-configuration
- (server-name '("example.com"))))
- ...
- %base-services))
-@end example
-
-@subsubheading Hpcguix-web
-
-@cindex hpcguix-web
-Le programme @uref{hpcguix-web,
-https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
-personnalisable pour naviguer dans les paquets Guix, initialement conçue
-pour les utilisateurs des grappes de calcul de haute performance (HPC).
-
-@defvr {Variable Scheme} hpcguix-web-service-type
-Le type de service pour @code{hpcguix-web}.
-@end defvr
-
-@deftp {Type de données} hpcguix-web-configuration
-Type de données pour la configuration du service hpcguix-web.
-
-@table @asis
-@item @code{specs}
-Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
-hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
-
-@table @asis
-@item @code{title-prefix} (par défaut : @code{"hpcguix | "})
-Le préfixe du titre des pages.
-
-@item @code{guix-command} (par défaut : @code{"guix"})
-La commande @command{guix}
-
-@item @code{package-filter-proc} (par défaut : @code{(const #t)})
-Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
-
-@item @code{package-page-extension-proc} (par défaut : @code{(const '())})
-Paquet d'extensions pour @code{hpcguix-web}.
-
-@item @code{menu} (par défaut : @code{'()})
-Entrée supplémentaire dans la page @code{menu}.
-
-@item @code{channels} (par défaut : @code{%default-channels})
-Liste des canaux depuis lesquels la liste des paquets est construite
-(@pxref{Canaux}).
-
-@item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
-Le temps d'expiration, en secondes, après lequel la liste des paquets est
-reconstruite depuis les dernières instance des canaux donnés.
-@end table
-
-Voir le dépôt hpcguix-web pour un
-@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
-exemple complet}
-
-@item @code{package} (par défaut : @code{hpcguix-web})
-Le paquet hpcguix-web à utiliser.
-@end table
-@end deftp
-
-Une déclaration de service hpcguix-web typique ressemble à cela :
-
-@example
-(service hpcguix-web-service-type
- (hpcguix-web-configuration
- (specs
- #~(define site-config
- (hpcweb-configuration
- (title-prefix "Guix-HPC - ")
- (menu '(("/about" "ABOUT"))))))))
-@end example
-
-@quotation Remarque
-Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
-publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
-certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
-communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
-certificats.
-
-Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
-certificats dans le champ @code{packages} de votre configuration.
-@ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
-@end quotation
-
-@node Services de certificats
-@subsection Services de certificats
-
-@cindex Web
-@cindex HTTP, HTTPS
-@cindex Let's Encrypt
-@cindex certificats TLS
-Le module @code{(gnu services certbot)} fournit un service qui récupère
-automatiquement un certificat TLS valide de l'autorité de certification
-Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
-contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
-en sachant que le client sera capable de vérifier l'authenticité du serveur.
-
-@url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
-pour automatiser le processus de certification. Cet outil génère d'abord un
-clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
-de certification Let's Encrypt de signer la clef. La CA vérifie que la
-requête provient de l'hôte en question en utilisant un protocole de
-défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
-Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
-certificat. Ce certificat est valide pour une durée limitée et donc, pour
-continuer à fournir des services en TLS, le serveur doit régulièrement
-demander à la CA de renouveler sa signature.
-
-Le service certbot automatise ce processus : la génération initiale de la
-clef, la demande de certification initiale au service Let's Encrypt,
-l'intégration du protocole de défi/réponse dans le serveur web, l'écriture
-du certificat sur le disque, les renouvellements périodiques et les taches
-de déploiement avec le renouvellement (p.@: ex.@: recharger les services,
-copier les clefs avec d'autres permissions).
-
-Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
-Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
-révoqués, mais le lancer régulièrement permettra à vos services de rester en
-ligne si Let's Encrypt décide de révoquer votre certificat.
-
-En utilisant ce service, vous acceptez le document « ACME Subscriber
-Agreement », qu'on peut trouver ici :
-@url{https://acme-v01.api.letsencrypt.org/directory}.
-
-@defvr {Variable Scheme} certbot-service-type
-Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
-doit être un enregistrement @code{certbot-configuration} comme dans cet
-exemple :
-
-@example
-(define %nginx-deploy-hook
- (program-file
- "nginx-deploy-hook"
- #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
- (kill pid SIGHUP))))
-
-(service certbot-service-type
- (certbot-configuration
- (email "foo@@example.net")
- (certificates
- (list
- (certificate-configuration
- (domains '("example.net" "www.example.net"))
- (deploy-hook %nginx-deploy-hook))
- (certificate-configuration
- (domains '("bar.example.net")))))))
-@end example
-
-Voir plus bas pour des détails sur @code{certbot-configuration}.
-@end defvr
-
-@deftp {Type de données} certbot-configuration
-Type données représentant la configuration du service @code{certbot}. Ce
-type a les paramètres suivants :
-
-@table @asis
-@item @code{package} (par défaut : @code{certbot})
-Le paquet certbot à utiliser.
-
-@item @code{webroot} (par défaut : @code{/var/www})
-Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
-Encrypt.
-
-@item @code{certificates} (par défaut : @code{()})
-Une liste de @code{certificates-configuration} pour lesquels générer des
-certificats et demander des signatures. Chaque certificat a un @code{name}
-et plusieurs @code{domains}.
-
-@item @code{email}
-Courriel obligatoire utilisé pour la création de compte, le contact en cas
-de problème et des notifications importantes sur le compte.
-
-@item @code{rsa-key-size} (par défaut : @code{2048})
-Taille de la clef RSA.
-
-@item @code{default-location} (par défaut : @i{voir plus bas})
-Le @code{nginx-location-configuration} par défaut. Comme @code{certbot}
-doit pouvoir servir les défis et les réponses, il doit être capable de
-lancer un serveur web. Cela se fait en étendant le service web @code{nginx}
-avec un @code{nginx-server-configuration} qui écoute sur les @var{domains}
-sur le port 80 et qui a un @code{nginx-location-configuration} pour le
-chemin @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web}
-pour plus d'information sur les types de données de la configuration de
-nginx.
-
-Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
-s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
-
-Par défaut, le @code{default-location} sera une redirection de
-@code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
-laissant définir ce que vous voulez servir sur votre site en @code{https}.
-
-Passez @code{#f} pour ne pas utiliser de location par défaut.
-@end table
-@end deftp
-
-@deftp {Type de données} certificate-configuration
-Type de données représentant la configuration d'un certificat. Ce type a
-les paramètres suivants :
-
-@table @asis
-@item @code{name} (par défaut : @i{voir plus bas})
-Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
-chemins de fichiers ; il n'affecte pas le contenu des certificats
-eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
-certificates}.
-
-Sa valeur par défaut est le premier domaine spécifié.
-
-@item @code{domains} (par défaut : @code{()})
-Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
-domaines seront les noms alternatifs du sujet dans le certificat.
-
-@item @code{deploy-hook} (par défaut : @code{#f})
-Commande à lancer dans un shell une fois par certificat récupéré avec
-succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
-sur le sous-répertoire live (par exemple,
-@samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
-et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
-domaines séparés par des espaces (par exemple @samp{"example.com
-www.example.com"}).
-
-@end table
-@end deftp
-
-Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
-dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
-sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
-@node Services DNS
-@subsection Services DNS
-@cindex DNS (domain name system)
-@cindex domain name system (DNS)
-
-Le module @code{(gnu services dns)} fournit des services liés au
-@dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
-pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
-en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
-Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
-LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
-dnsmasq}.
-
-@subsubheading Service Knot
-
-Voici un exemple de configuration pour un serveur faisant autorité sur deux
-zone, un maître et un esclave :
-
-@lisp
-(define-zone-entries example.org.zone
-;; Name TTL Class Type Data
- ("@@" "" "IN" "A" "127.0.0.1")
- ("@@" "" "IN" "NS" "ns")
- ("ns" "" "IN" "A" "127.0.0.1"))
-
-(define master-zone
- (knot-zone-configuration
- (domain "example.org")
- (zone (zone-file
- (origin "example.org")
- (entries example.org.zone)))))
-
-(define slave-zone
- (knot-zone-configuration
- (domain "plop.org")
- (dnssec-policy "default")
- (master (list "plop-master"))))
-
-(define plop-master
- (knot-remote-configuration
- (id "plop-master")
- (address (list "208.76.58.171"))))
-
-(operating-system
- ;; ...
- (services (cons* (service knot-service-type
- (knot-configuration
- (remotes (list plop-master))
- (zones (list master-zone slave-zone))))
- ;; ...
- %base-services)))
-@end lisp
-
-@deffn {Variable Scheme} knot-service-type
-C'est le type pour le serveur DNS Knot.
-
-Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
-servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
-un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
-peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
-serveur peut être configuré pour servir des zones comme un serveur maître ou
-comme un serveur esclave, en fonction des zones. Les zones esclaves
-récupèrent leurs données des maîtres, et seront servies comme faisant
-autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
-un maître et un esclave@footnote{NdT : Voir la conférence en Français de
-Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
-@url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
-
-Les types de données suivants sont utilisés pour configurer le serveur DNS
-Knot :
-@end deffn
-
-@deftp {Type de données} knot-key-configuration
-Type de données représentant une clef. Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{id} (par défaut : @code{""})
-Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
-clef. Les ID doivent être uniques et non vides.
-
-@item @code{algorithm} (par défaut : @code{#f})
-L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
-@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
-@code{'hmac-sha384} et @code{'hmac-sha512}.
-
-@item @code{secret} (par défaut : @code{""})
-La clef secrète elle-même.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-acl-configuration
-Type de données représentant une configuration de liste de contrôle d'accès
-(ACL). Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{id} (par défaut : @code{""})
-Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
-clef. Les ID doivent être uniques et non vides.
-
-@item @code{address} (par défaut : @code{'()})
-Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
-réseaux représentés par des chaînes de caractères. La requête doit
-correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
-n'a pas besoin de correspondre.
-
-@item @code{key} (par défaut : @code{'()})
-Une liste ordonnées de références à des clefs représentés par des chaînes.
-La chaîne doit correspondre à un ID définie dans un
-@code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
-nécessaire pour correspondre à l'ACL.
-
-@item @code{action} (par défaut : @code{'()})
-Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
-valeurs possibles sont une liste de zéro ou plus d'éléments entre
-@code{'transfer}, @code{'notify} et @code{'update}.
-
-@item @code{deny?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
-listées sont interdites. Lorsque la valeur est fausse, les actions listées
-sont autorisées.
-
-@end table
-@end deftp
-
-@deftp {Type de données} zone-entry
-Type de données représentant une entrée dans un fichier de zone. Ce type a
-les paramètres suivants :
-
-@table @asis
-@item @code{name} (par défaut : @code{"@@"})
-Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
-Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
-@code{example.org}, @code{"ns.example.org"} se réfère en fait à
-@code{ns.example.org.example.org}. Les noms qui finissent par un point sont
-absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
-@code{ns.example.org}.
-
-@item @code{ttl} (par défaut : @code{""})
-La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
-par défaut est utilisé.
-
-@item @code{class} (par défaut : @code{"IN"})
-La classe de l'enregistrement. Knot ne supporte actuellement que
-@code{"IN"} et partiellement @code{"CH"}.
-
-@item @code{type} (par défaut : @code{"A"})
-Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
-(serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
-définis.
-
-@item @code{data} (par défaut : @code{""})
-Les données contenues dans l'enregistrement. Par exemple une adresse IP
-associée à un enregistrement A, ou un nom de domaine associé à un
-enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
-l'origine à moins qu'ils ne finissent par un point.
-
-@end table
-@end deftp
-
-@deftp {Type de données} zone-file
-Type données représentant le contenu d'un fichier de zone. Ce type a les
-paramètres suivants :
-
-@table @asis
-@item @code{entries} (par défaut : @code{'()})
-La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
-pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
-contenir une entrée pour votre serveur DNS primaire faisant autorité. En
-plus d'utiliser une liste des entrées directement, vous pouvez utiliser
-@code{define-zone-entries} pour définir un objet contenant la liste des
-entrées plus facilement, que vous pouvez ensuite passer au champ
-@code{entries} de @code{zone-file}.
-
-@item @code{origin} (par défaut : @code{""})
-Le nom de votre zone. Ce paramètre ne peut pas être vide.
-
-@item @code{ns} (par défaut : @code{"ns"})
-Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
-relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
-que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
-et qu'il soit associé à une adresse IP dans la liste des entrées.
-
-@item @code{mail} (par défaut : @code{"hostmaster"})
-Une adresse de courriel pour vous contacter en tant que propriétaire de la
-zone. Cela se transforme en @code{<mail>@@<origin>}.
-
-@item @code{serial} (par défaut : @code{1})
-Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
-changements à la fois par les esclaves et par les résolveurs, il est
-nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
-vous faites un changement sur votre zone.
-
-@item @code{refresh} (par défaut : @code{(* 2 24 3600)})
-La fréquence à laquelle les esclaves demanderont un transfert de zone.
-Cette valeur est un nombre de secondes. On peut le calculer avec des
-multiplications ou avec @code{(string->duration)}.
-
-@item @code{retry} (par défaut : @code{(* 15 60)})
-La période après laquelle un esclave essaiera de contacter son maître
-lorsqu'il échoue à le faire la première fois.
-
-@item @code{expiry} (par défaut : @code{(* 14 24 3600)})
-TTL par défaut des enregistrements. Les enregistrements existants sont
-considérés corrects pour au moins cette durée. Après cette période, les
-résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
-toujours.
-
-@item @code{nx} (par défaut : @code{3600})
-TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
-court parce que vous voulez que vous nouveaux domaines soient disponibles
-pour tout le monde le plus rapidement possible.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-remote-configuration
-Type de données représentant une configuration de serveurs distants. Ce
-type a les paramètres suivants :
-
-@table @asis
-@item @code{id} (par défaut : @code{""})
-Un identifiant pour que les autres champs de configuration se réfèrent à ce
-serveur distant. les ID doivent être uniques et non vides.
-
-@item @code{address} (par défaut : @code{'()})
-Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
-en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
-exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
-53.
-
-@item @code{via} (par défaut : @code{'()})
-Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
-IP source appropriée à Knot. Un port facultatif peut être donné avec le
-séparateur @@. La valeur par défaut est de choisir aléatoirement.
-
-@item @code{key} (par défaut : @code{#f})
-Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
-d'une clef définie dans un champ @code{knot-key-configuration}.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-keystore-configuration
-Type de données représentant une base de clefs pour garder les clefs
-dnssec. Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{id} (par défaut : @code{""})
-L'id de cette base de clefs. Il ne doit pas être vide.
-
-@item @code{backend} (par défaut : @code{'pem})
-Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
-@code{'pkcs11}.
-
-@item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
-La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
-@code{"pkcs11:token=knot;pin-value=1234
-/gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
-représente un chemin dans le système de fichiers.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-policy-configuration
-Type de données représentant une politique dnssec. Knot DNS est capable de
-signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
-automatiquement ou utiliser des clefs que vous générez.
-
-Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
-key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
-est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
-doit être présente dans la zone parente (normalement un domaine de haut
-niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
-hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
-zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
-fois que vous changerez votre KSK.
-
-La politique définie aussi la durée de vie des clefs. Habituellement, la
-ZSK peut être changée facilement et utilise des fonctions cryptographiques
-plus faibles (avec un paramètre plus faible) pour signer les enregistrements
-rapidement, donc elles sont changées très régulièrement. La KSK en revanche
-requiert une interaction manuelle avec le registrar, donc elle change moins
-souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
-seul enregistrement.
-
-Ce type a les paramètres suivants :
-
-@table @asis
-@item @code{id} (par défaut : @code{""})
-L'id de la politique. Il ne doit pas être vide.
-
-@item @code{keystore} (par défaut : @code{"default"})
-Une référence à une base de clefs, c'est-à-dire une chaîne contenant
-l'identifiant d'une base de clefs définie dans un champ
-@code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
-la base par défaut (une base de données kasp initialisée par ce service).
-
-@item @code{manual?} (par défaut : @code{#f})
-Indique si la clef est gérée manuellement ou automatiquement.
-
-@item @code{single-type-signing?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type.
-
-@item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
-Un algorithme de clef de signature et de signatures.
-
-@item @code{ksk-size} (par défaut : @code{256})
-La longueur de la KSK. Remarquez que cette valeur est correcte pour
-l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
-algorithmes.
-
-@item @code{zsk-size} (par défaut : @code{256})
-La longueur de la ZSK. Remarquez que cette valeur est correcte pour
-l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
-algorithmes.
-
-@item @code{dnskey-ttl} (par défaut : @code{'default})
-La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
-zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
-du SOA de la zone.
-
-@item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
-La période entre la publication d'une ZSK et l'initialisation d'un nouveau
-changement.
-
-@item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
-Un délai supplémentaire pour chaque étape du changement. Cette valeur
-devrait être assez grande pour couvrir le temps de propagation des données
-entre le serveur primaire et tous les secondaires.
-
-@item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
-Une période de validité des nouvelles signatures.
-
-@item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
-Une période qui indique combien de temps avant l'expiration d'une signature
-elle sera rafraîchie.
-
-@item @code{nsec3?} (par défaut : @code{#f})
-Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
-
-@item @code{nsec3-iterations} (par défaut : @code{5})
-Le nombre de fois supplémentaires que le hash est effectué.
-
-@item @code{nsec3-salt-length} (par défaut : @code{8})
-La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
-de hasher.
-
-@item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
-La période de validité des nouveaux champs sel.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-zone-configuration
-Type de données représentant la zone servie par Knot. ce type a les
-paramètres suivants :
-
-@table @asis
-@item @code{domain} (par défaut : @code{""})
-Le domaine servi par cette configuration. Il ne doit pas être vide.
-
-@item @code{file} (par défaut : @code{""})
-Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
-zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
-du nom de domaine.
-
-@item @code{zone} (par défaut : @code{(zone-file)})
-Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
-esclaves. Il doit contenir un enregistrement zone-file.
-
-@item @code{master} (par défaut : @code{'()})
-Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
-zone est un maître. Lorsque la valeur est indiquée, cette zone est un
-esclave. C'est al liste des identifiants des serveurs distants.
-
-@item @code{ddns-master} (par défaut : @code{#f})
-Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
-le premier maître de la liste des maîtres.
-
-@item @code{notify} (par défaut : @code{'()})
-Une liste d'identifiants de groupe de serveurs esclaves.
-
-@item @code{acl} (par défaut : @code{'()})
-Une liste d'identifiants d'ACL.
-
-@item @code{semantic-checks?} (par défaut : @code{#f})
-Lorsque la valeur est indiquée, cela ajoute plus de vérifications
-sémantiques à la zone.
-
-@item @code{disable-any?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
-
-@item @code{zonefile-sync} (par défaut : @code{0})
-Le délai entre une modification en mémoire et sur le disque. 0 signifie une
-synchronisation immédiate.
-
-@item @code{serial-policy} (par défaut : @code{'increment})
-Une politique entre @code{'increment} et @code{'unixtime}.
-
-@end table
-@end deftp
-
-@deftp {Type de données} knot-configuration
-Type de données représentant la configuration de Knot. Ce type a les
-paramètres suivants :
-
-@table @asis
-@item @code{knot} (par défaut : @code{knot})
-Le paquet Knot.
-
-@item @code{run-directory} (par défaut : @code{"/var/run/knot"})
-Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
-les sockets.
-
-@item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
-Une adresse IP sur laquelle écouter.
-
-@item @code{listen-v6} (par défaut : @code{"::"})
-Une adresse IP sur laquelle écouter.
-
-@item @code{listen-port} (par défaut : @code{53})
-Un port sur lequel écouter.
-
-@item @code{keys} (par défaut : @code{'()})
-La liste des knot-key-configuration utilisés par cette configuration.
-
-@item @code{acls} (par défaut : @code{'()})
-La liste des knot-acl-configuration utilisés par cette configuration.
-
-@item @code{remotes} (par défaut : @code{'()})
-La liste des knot-remote-configuration utilisés par cette configuration.
-
-@item @code{zones} (par défaut : @code{'()})
-La liste des knot-zone-configuration utilisés par cette configuration.
-
-@end table
-@end deftp
-
-@subsubheading Services Dnsmasq
-
-@deffn {Variable Scheme} dnsmasq-service-type
-C'est le type du service dnsmasq, dont la valeur devrait être un objet
-@code{dnsmasq-configuration} comme dans cet exemple :
-
-@example
-(service dnsmasq-service-type
- (dnsmasq-configuration
- (no-resolv? #t)
- (servers '("192.168.1.1"))))
-@end example
-@end deffn
-
-@deftp {Type de données} dnsmasq-configuration
-Type de données qui représente la configuration de dnsmasq.
-
-@table @asis
-@item @code{package} (par défaut : @var{dnsmasq})
-L'objet de paquet du serveur dnsmasq.
-
-@item @code{no-hosts?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
-
-@item @code{port} (par défaut : @code{53})
-Le port sur lequel écouter. Le mettre à zéro désactive complètement les
-réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
-
-@item @code{local-service?} (par défaut : @code{#t})
-Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
-sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
-existe sur le serveur.
-
-@item @code{listen-addresses} (par défaut : @code{'()})
-Écoute sur le adresses IP données.
-
-@item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
-Le fichier où lire l'adresse IP des serveurs de noms en amont.
-
-@item @code{no-resolv?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
-
-@item @code{servers} (par défaut : @code{'()})
-Spécifiez l'adresse IP des serveurs en amont directement.
-
-@item @code{cache-size} (par défaut : @code{150})
-Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
-
-@item @code{negative-cache?} (par défaut : @code{#t})
-Lorsque la valeur est fausse, désactive le cache des réponses négatives.
-
-@end table
-@end deftp
-
-@subsubheading Service ddclient
-
-@cindex ddclient
-Le service ddclient décrit plus bas lance le démon ddclient, qui prend en
-charge la mise à jour automatique des entrées DNS pour les fournisseurs de
-service comme @uref{https://dyn.com/dns/, Dyn}.
-
-L'exemple suivant montre comment instantier le service avec sa configuration
-par défaut :
-
-@example
-(service ddclient-service-type)
-@end example
-
-Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
-@dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
-@code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
-manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
-fichier dans une partie de votre configuration, par exemple avec
-@code{plain-file}, mais il serait lisible pour tout le monde via
-@file{/gnu/store}). Vois les exemples dans le répertoire
-@file{share/ddclient} du paquet @code{ddclient}.
-
-@c %start of fragment
-
-Les champs de @code{ddclient-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
-Le paquet ddclient.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
-La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
-domaine.
-
-La valeur par défaut est @samp{300}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
-Utiliser syslog pour la sortie.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string mail
-Courriel de l'utilisateur.
-
-La valeur par défaut est @samp{"root"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
-Courriel de l'utilisateur pour les échecs.
-
-La valeur par défaut est @samp{"root"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string pid
-Le fichier de PID de ddclient.
-
-La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
-Activer le support de SSL.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string user
-Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
-programme ddclient.
-
-La valeur par défaut est @samp{"ddclient"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string group
-Groupe de l'utilisateur qui lancera le programme ddclient.
-
-La valeur par défaut est @samp{"ddclient"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
-Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
-fichier contient les paramètres d'authentification utilisés par ddclient.
-On s'attend à ce que vous le créiez manuellement.
-
-La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
-Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-
-@c %end of fragment
-
-
-@node Services VPN
-@subsection Services VPN
-@cindex VPN (réseau privé virtuel)
-@cindex réseau privé virtuel (VPN)
-
-Le module @code{(gnu services vpn)} fournit des services liés aux
-@dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
-pour que votre machine se connecte à un VPN et un service @emph{serveur}
-pour que votre machine héberge un VPN. Les deux services utilisent
-@uref{https://openvpn.net/, OpenVPN}.
-
-@deffn {Procédure Scheme} openvpn-client-service @
- [#:config (openvpn-client-configuration)]
-
-Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
-client.
-@end deffn
-
-@deffn {Procédure Scheme} openvpn-server-service @
- [#:config (openvpn-server-configuration)]
-
-Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
-serveur.
-
-Les deux services peuvent être lancés en même temps.
-@end deffn
-
-@c %automatically generated documentation
-
-Les champs de @code{openvpn-client-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
-Le paquet OpenVPN.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
-Le fichier de PID d'OpenVPN.
-
-La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
-Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
-les serveurs.
-
-La valeur par défaut est @samp{udp}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
-Le périphérique utilisé pour représenter la connexion VPN.
-
-La valeur par défaut est @samp{tun}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
-L'autorité de certification qui sert à vérifier les connexions.
-
-La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
-Le certificat de la machine sur laquelle tourne le démon. Il devrait être
-signé par l'autorité indiquée dans @code{ca}.
-
-La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} string key
-La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
-dont le certificat est donné dans @code{cert}.
-
-La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
-Indique s'il faut utiliser l'algorithme de compression lzo.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
-Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
-Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
-démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
-Niveau de verbosité.
-
-La valeur par défaut est @samp{3}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
-Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
-de contrôle TLS pour se protéger contre les attaques DoS.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
-Indique s'il faut vérifier que le certificat du serveur a l'extension
-d'utilisation.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
-Se lier à un port spécifique.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
-Réessayer de résoudre l'adresse du serveur.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
-Une liste de serveurs distants sur lesquels se connecter.
-
-La valeur par défaut est @samp{()}.
-
-Les champs de @code{openvpn-remote-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
-Nom du serveur.
-
-La valeur par défaut est @samp{"my-server"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
-Numéro de port sur lequel écoute le serveur.
-
-La valeur par défaut est @samp{1194}.
-
-@end deftypevr
-
-@end deftypevr
-@c %end of automatic openvpn-client documentation
-
-@c %automatically generated documentation
-
-Les champs de @code{openvpn-server-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
-Le paquet OpenVPN.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
-Le fichier de PID d'OpenVPN.
-
-La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
-Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
-les serveurs.
-
-La valeur par défaut est @samp{udp}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
-Le périphérique utilisé pour représenter la connexion VPN.
-
-La valeur par défaut est @samp{tun}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
-L'autorité de certification qui sert à vérifier les connexions.
-
-La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
-Le certificat de la machine sur laquelle tourne le démon. Il devrait être
-signé par l'autorité indiquée dans @code{ca}.
-
-La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string key
-La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
-dont le certificat est donné dans @code{cert}.
-
-La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
-Indique s'il faut utiliser l'algorithme de compression lzo.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
-Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
-Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
-démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
-Niveau de verbosité.
-
-La valeur par défaut est @samp{3}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
-Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
-de contrôle TLS pour se protéger contre les attaques DoS.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} number port
-Spécifie le numéro de port sur lequel les serveurs écoutent.
-
-La valeur par défaut est @samp{1194}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
-Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
-virtuel.
-
-La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
-Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
-Le fichier de paramètres Diffie-Hellman.
-
-La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
-Le fichier qui enregistre les IP des clients.
-
-La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
-Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
-clients.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
-Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
-eux dans le VPN.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
-Fait que des messages de ping sont envoyés régulièrement dans les deux sens
-pour que chaque côté sache quand l'autre n'est plus disponible.
-@code{keepalive} a besoin d'une paire. Le premier élément est la période
-d'envoi du ping, et le second élément est le délai d'attente avant de
-considéré que l'autre côté n'est plus disponible.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
-Le nombre maximum de clients.
-
-La valeur par défaut est @samp{100}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} string status
-Le fichier de statut. Ce fichier montre un court rapport sur les connexions
-actuelles. Il est tronqué et réécrit toutes les minutes.
-
-La valeur par défaut est @samp{"/var/run/openvpn/status"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
-La liste des configuration pour certains clients.
-
-La valeur par défaut est @samp{()}.
-
-Les champs de @code{openvpn-ccd-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
-Nom du client.
-
-La valeur par défaut est @samp{"client"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
-Le réseau du client
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
-IP du client sur le VPN.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@end deftypevr
-
-
-@c %end of automatic openvpn-server documentation
-
-
-@node Système de fichiers en réseau
-@subsection Système de fichiers en réseau
-@cindex NFS
-
-Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
-tous utilisés pour monter et exporter des arborescences de répertoires en
-@dfn{network file systems} (NFS).
-
-@subsubheading Service RPC Bind
-@cindex rpcbind
-
-Le service RPC Bind fournit un dispositif pour faire correspondre les
-numéros de programmes à des adresses universelles. De nombreux services
-liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
-lorsqu'un service qui en dépend est démarré.
-
-@defvr {Variable Scheme} rpcbind-service-type
-Un type de service pour le démon RPC portmapper.
-@end defvr
-
-
-@deftp {Type de données} rpcbind-configuration
-Type données représentant la configuration du service RPC Bind. Ce type a
-les paramètres suivants :
-@table @asis
-@item @code{rpcbind} (par défaut : @code{rpcbind})
-Le paquet rpcbind à utiliser.
-
-@item @code{warm-start?} (par défaut : @code{#t})
-Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
-démarrage ce qui lui fait recharger les informations d'états sauvegardés par
-une instance précédente.
-@end table
-@end deftp
-
-
-@subsubheading Pseudo-système de fichiers Pipefs
-@cindex pipefs
-@cindex rpc_pipefs
-
-Le système de fichiers pipefs est utilisé pour transférer des données liées
-à NFS entre le noyau et les programmes en espace utilisateur.
-
-@defvr {Variable Scheme} pipefs-service-type
-Un type de service pour le pseudo-système de fichiers pipefs.
-@end defvr
-
-@deftp {Type de données} pipefs-configuration
-Type de données représentant la configuration du service du pseudo-système
-de fichiers pipefs. Ce type a les paramètres suivants :
-@table @asis
-@item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
-Le répertoire dans lequel le système de fichiers est attaché.
-@end table
-@end deftp
-
-
-@subsubheading Service de démon GSS
-@cindex GSSD
-@cindex GSS
-@cindex système de sécurité global
-
-Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
-forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
-RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
-fait avec la commande Kerberos @command{kinit} ou automatiquement à la
-connexion avec les services PAM (@pxref{Services Kerberos}).
-
-@defvr {Variable Scheme} gss-service-type
-Un type de service pour le démon du système de sécurité global (GSS).
-@end defvr
-
-@deftp {Type de données} gss-configuration
-Type de données représentant la configuration du service du démon GSS. Ce
-type a les paramètres suivants :
-@table @asis
-@item @code{nfs-utils} (par défaut : @code{nfs-utils})
-Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
-
-@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
-Le répertoire où le système de fichier pipefs doit être monté.
-
-@end table
-@end deftp
-
-
-@subsubheading Service de démon IDMAP
-@cindex idmapd
-@cindex correspondance de nom
-
-Le service du démon idmap fournit une correspondance entre les ID
-utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
-accéder aux systèmes de fichiers montés via NFSv4.
-
-@defvr {Variable Scheme} idmap-service-type
-Un type de service pour le démon de correspondance d'identité (IDMAP).
-@end defvr
-
-@deftp {Type de données} idmap-configuration
-Type de données représentant la configuration du service du démon IDMAP. Ce
-type a les paramètres suivants :
-@table @asis
-@item @code{nfs-utils} (par défaut : @code{nfs-utils})
-Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
-
-@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
-Le répertoire où le système de fichier pipefs doit être monté.
-
-@item @code{domain} (par défaut : @code{#f})
-Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
-ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
-domaine pleinement qualifié de l'hôte.
-
-@end table
-@end deftp
-
-@node Intégration continue
-@subsection Intégration continue
-
-@cindex intégration continue
-@uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
-un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
-pour le développement que pour fournir des substituts à d'autres
-(@pxref{Substituts}).
-
-Le module @code{(gnu services cuirass)} fournit le service suivant.
-
-@defvr {Procédure Scheme} cuirass-service-type
-Le type du service Cuirass. Sa valeur doit être un objet
-@code{cuirass-configuration}, décrit ci-dessous.
-@end defvr
-
-Pour ajouter des travaux de construction, vous devez indiquer le champ
-@code{specifications} de la configuration. Voici un exemple de service qui
-récupère le dépôt Guix et construit les paquets depuis un manifeste.
-Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
-qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
-
-@example
-(define %cuirass-specs
- #~(list
- '((#:name . "my-manifest")
- (#:load-path-inputs . ("guix"))
- (#:package-path-inputs . ("custom-packages"))
- (#:proc-input . "guix")
- (#:proc-file . "build-aux/cuirass/gnu-system.scm")
- (#:proc . cuirass-jobs)
- (#:proc-args . ((subset . "manifests")
- (systems . ("x86_64-linux"))
- (manifests . (("config" . "guix/manifest.scm")))))
- (#:inputs . (((#:name . "guix")
- (#:url . "git://git.savannah.gnu.org/guix.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t))
- ((#:name . "config")
- (#:url . "git://git.example.org/config.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t))
- ((#:name . "custom-packages")
- (#:url . "git://git.example.org/custom-packages.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t)))))))
-
-(service cuirass-service-type
- (cuirass-configuration
- (specifications %cuirass-specs)))
-@end example
-
-Tandis que les informations liés aux travaux de construction sont
-directement dans les spécifications, les paramètres globaux pour le
-processus @command{cuirass} sont accessibles dans les autres champs de
-@code{cuirass-configuration}.
-
-@deftp {Type de données} cuirass-configuration
-Type de données représentant la configuration de Cuirass.
-
-@table @asis
-@item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
-Emplacement du fichier de journal.
-
-@item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
-Emplacement du cache du dépôt.
-
-@item @code{user} (par défaut : @code{"cuirass"})
-Propriétaire du processus @code{cuirass}.
-
-@item @code{group} (par défaut : @code{"cuirass"})
-Groupe du propriétaire du processus @code{cuirass}.
-
-@item @code{interval} (par défaut : @code{60})
-Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
-Cuirass.
-
-@item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
-Emplacement de la base de données sqlite qui contient les résultats de
-construction et les spécifications précédemment ajoutées.
-
-@item @code{ttl} (par défaut : @code{(* 30 24 3600)})
-Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
-sont enregistrés comme des résultats de construction. Cela signifie que les
-résultats de construction ne seront pas glanés pendant au moins @var{ttl}
-secondes.
-
-@item @code{port} (par défaut : @code{8081})
-Numéro de port utilisé pour le serveur HTTP.
-
-@item --listen=@var{hôte}
-Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
-d'accepter les connexions depuis localhost.
-
-@item @code{specifications} (par défaut : @code{#~'()})
-Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
-spécifications, où une spécification est une liste d'association
-(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
-clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
-l'exemple plus haut.
-
-@item @code{use-substitutes?} (par défaut : @code{#f})
-Cela permet d'utiliser des substituts pour éviter de construire toutes les
-dépendance d'un travail depuis les sources.
-
-@item @code{one-shot?} (par défaut : @code{#f})
-N'évaluer les spécification et construire les dérivations qu'une seule fois.
-
-@item @code{fallback?} (par défaut : @code{#f})
-Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
-construction locale du paquet.
-
-@item @code{cuirass} (par défaut : @code{cuirass})
-Le paquet Cuirass à utiliser.
-@end table
-@end deftp
-
-@node Services de gestion de l'énergie
-@subsection Services de gestion de l'énergie
-
-@cindex tlp
-@cindex gestion de l'énergie avec TLP
-@subsubheading démon TLP
-
-Le module @code{(gnu services pm)} fournit une définition de service Guix
-pour l'outil de gestion d'énergie Linux TLP.
-
-TLP active plusieurs modes un espace utilisateur et dans le noyau.
-Contrairement à @code{upower-service}, ce n'est pas un outil passif de
-surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
-qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
-d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
-d'accueil de TLP}.
-
-@deffn {Variable Scheme} tlp-service-type
-Le type de service pour l'outil TLP. Sa valeur devrait être une
-configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
-par défaut, écrivez simplement :
-@example
-(service tlp-service-type)
-@end example
-@end deffn
-
-Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
-des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
-
-Chaque définition de paramètre est précédée par son type ; par exemple,
-@samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
-comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
-paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
-valeur est @code{'disabled}.
-
-@c The following documentation was initially generated by
-@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
-@c documentation is better, so we shouldn't hesitate to edit below as
-@c needed. However if the change you want to make to this documentation
-@c can be done in an automated way, it's probably easier to change
-@c (generate-documentation) than to make it below and have to deal with
-@c the churn as TLP updates.
-
-Les champs de @code{tlp-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{tlp-configuration}} package tlp
-Le paquet TLP.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
-Indiquez vrai si vous souhaitez activer TLP.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
-Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
-possibilités sont AC et BAT.
-
-La valeur par défaut est @samp{"AC"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
-Nombre de secondes que le noyau Linux doit attendre après que les disques
-s'arrêtent pour se synchroniser quand il est sur secteur.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
-Comme @code{disk-idle-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{2}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
-Périodicité du nettoyage des pages invalidées, en secondes.
-
-La valeur par défaut est @samp{15}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
-Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{60}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
-Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
-les possibilités sont powersave et performance. Avec le pilote
-acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
-conservative.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
-Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
-Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
-Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
-Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
-Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
-Limite le P-état minimum pour contrôler la dissipation de puissance dans le
-CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
-performances disponibles.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
-Limite le P-état maximum pour contrôler la dissipation de puissance dans le
-CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
-performances disponibles.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
-Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
-Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
-Active la fonctionnalité turbo boost du CPU sur secteur.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
-Comme @code{cpu-boost-on-ac?} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
-Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
-utilisés lorsque la charge est faible.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
-Comme @code{sched-powersave-on-ac?} mais en mode batterie.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
-Active le chien de garde NMI du noyau Linux.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
-Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
-valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
-Indique le niveau de performance du CPU par rapport à la politique de
-gestion de l'énergie sur secteur. Les possibilités sont performance, normal
-et powersave.
-
-La valeur par défaut est @samp{"performance"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
-Comme @code{energy-perf-policy-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"powersave"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
-Périphériques de disque dur.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
-Niveau de gestion de l'énergie avancé des disques durs.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
-Comme @code{disk-apm-bat} mais en mode batterie.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
-Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
-être spécifiée pour chaque disque dur déclaré.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
-Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
-Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
-doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
-exemple cfq, deadline et noop.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
-Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
-possibilités sont min_power, medium_power et max_performance.
-
-La valeur par défaut est @samp{"max_performance"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
-Comme @code{sata-linkpwr-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"min_power"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
-Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
-Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
-les disques, sur secteur.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
-Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
-Secondes d'inactivités avant de suspendre les disques.
-
-La valeur par défaut est @samp{15}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
-Niveau de gestion de l'énergie des états actifs de PCI Express. Les
-possibilités sont default, performance et powersave.
-
-La valeur par défaut est @samp{"performance"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
-Comme @code{pcie-aspm-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"powersave"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
-Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
-possibilités sont low, mid, high, auto et default.
-
-La valeur par défaut est @samp{"high"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
-Comme @code{radeon-power-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"low"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
-Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
-sont battery et performance.
-
-La valeur par défaut est @samp{"performance"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
-Comme @code{radeon-dpm-state-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"battery"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
-Niveau de performance de DPM. Les possibilités sont auto, low et high.
-
-La valeur par défaut est @samp{"auto"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
-Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"auto"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
-Mode de gestion de l'énergie wifi.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
-Comme @code{wifi-power-ac?} mais en mode batterie.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
-Désactive wake on LAN.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
-Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
-sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
-de l'énergie.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
-Comme @code{sound-powersave-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
-Désactive le contrôleur en mode de gestion de l'énergie sur les
-périphériques Intel HDA.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
-Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
-périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
-levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
-plus récents.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string bay-device
-Nom du périphérique optique à éteindre.
-
-La valeur par défaut est @samp{"sr0"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
-Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
-sont on et auto.
-
-La valeur par défaut est @samp{"on"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
-Comme @code{runtime-pm-ac} mais en mode batterie.
-
-La valeur par défaut est @samp{"auto"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
-Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
-liste noire.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
-Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
-l'énergie à l'exécution.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
-Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
-de l'énergie à l'exécution.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
-Active la fonctionnalité de mise en veille automatique de l'USB.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
-Exclue les périphériques spécifiés de la mise en veille automatique de
-l'USB.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
-Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
-Inclue les périphériques spécifiés dans la mise en veille automatique de
-l'USB, même s'ils sont déjà exclus par le pilote ou via
-@code{usb-blacklist-wwan?}.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
-Active la mise en veille de l'USB avant l'arrêt.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
-Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
-arrêt au démarrage du système.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@cindex thermald
-@cindex gestion de la fréquence du CPU avec thermald
-@subsubheading démon Thermald
-
-Le module @code{(gnu services pm)} fournit une interface pour thermald, un
-service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
-
-@defvr {Variable Scheme} thermald-service-type
-C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
-thermald}, le démon de température de Linux, responsable du contrôle de
-l'état thermique des processeurs et d'éviter la surchauffe.
-@end defvr
-
-@deftp {Type de données} thermald-configuration
-Type de données représentant la configuration de
-@code{thermald-service-type}.
-
-@table @asis
-@item @code{ignore-cpuid-check?} (par défaut : @code{#f})
-Ignore la vérification des modèles CPU supportés avec cpuid.
-
-@item @code{thermald} (par défaut : @var{thermald})
-Objet du paquet de thermald.
-
-@end table
-@end deftp
-
-@node Services audio
-@subsection Services audio
-
-Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
-démon de lecture de musique).
-
-@cindex mpd
-@subsubheading Music Player Daemon
-
-Le démon de lecture de musique (MPD) est un service qui joue de la musique
-tout en étant contrôlé depuis la machine locale ou à travers le réseau par
-divers clients.
-
-L'exemple suivant montre comment on peut lancer @code{mpd} en tant
-qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
-pour la sortie audio.
-
-@example
-(service mpd-service-type
- (mpd-configuration
- (user "bob")
- (port "6666")))
-@end example
-
-@defvr {Variable Scheme} mpd-service-type
-Le type de service pour @command{mpd}.
-@end defvr
-
-@deftp {Type de données} mpd-configuration
-Type de données représentant la configuration de @command{mpd}.
-
-@table @asis
-@item @code{user} (par défaut : @code{"mpd"})
-L'utilisateur qui lance mpd.
-
-@item @code{music-dir} (par défaut : @code{"~/Music"})
-Le répertoire à scanner pour trouver les fichiers de musique.
-
-@item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
-Le répertoire où stocker les playlists.
-
-@item @code{db-file} (par défaut : @code{"~/.mpd/tag_cache"})
-Emplacement de la base de données de musiques.
-
-@item @code{state-file} (par défaut : @code{"~/.mpd/state"})
-Emplacement du fichier qui stocke l'état actuel de MPD.
-
-@item @code{sticker-file} (par défaut : @code{"~/.mpd/sticker.sql"})
-Emplacement de la base de données de stickers.
-
-@item @code{port} (par défaut : @code{"6600"})
-Le port sur lequel lancer mpd.
-
-@item @code{address} (par défaut : @code{"any"})
-L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
-chemin absolu peut être spécifié ici.
-
-@end table
-@end deftp
-
-@node Services de virtualisation
-@subsection services de virtualisation
-
-Le module @code{(gnu services virtualization)} fournit des services pour les
-démons libvirt et virtlog, ainsi que d'autres services liés à la
-virtualisation.
-
-@subsubheading démon libvirt
-@code{libvirtd} est le démon côté serveur du système de gestion de
-virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
-les taches de gestion requises pour les clients virtualisés.
-
-@deffn {Variable Scheme} libvirt-service-type
-C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
-être un @code{libvirt-configuration}.
-
-@example
-(service libvirt-service-type
- (libvirt-configuration
- (unix-sock-group "libvirt")
- (tls-port "16555")))
-@end example
-@end deffn
-
-@c Auto-generated with (generate-libvirt-documentation)
-Les champs de @code{libvirt-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
-Paquet libvirt.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
-Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
-public. Vous devez remplir le champ @code{listen} pour que cela ait un
-effet.
-
-Il est nécessaire de mettre en place une CA et de créer un certificat
-serveur avant d'utiliser cette fonctionnalité.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
-Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
-remplir le champ @code{listen} pour que cela ait un effet.
-
-L'utilisation des sockets TCP requiert une authentification SASL par
-défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
-sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
-Port pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
-numéro de port ou d'un nom de service
-
-La valeur par défaut est @samp{"16514"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
-Port sur lequel accepter les connexions TCP non sécurisées. Cela peut être
-un numéro de port ou un nom de service
-
-La valeur par défaut est @samp{"16509"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
-Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
-
-La valeur par défaut est @samp{"0.0.0.0"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
-Indique s'il faut publier le service libvirt en mDNS.
-
-Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
-démon Avahi.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
-Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
-
-La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
-Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
-permettre à un ensemble d'utilisateurs « de confiance » de gérer les
-fonctionnalités sans devenir root.
-
-La valeur par défaut est @samp{"root"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
-Permission Unix pour le socket en lecture seule. Il est utilisé pour
-surveiller le statut des VM uniquement.
-
-La valeur par défaut est @samp{"0777"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
-Permission Unix pour le socket en lecture-écriture. La valeur par défaut
-n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
-défaut change et permet tout le monde (c.-à-d.@: 0777).
-
-La valeur par défaut est @samp{"0770"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
-Permissions Unix pour le socket d'administration. La valeur par défaut ne
-permet que le propriétaire (root), ne la changez pas à moins que vous ne
-soyez sûr de savoir à qui vous exposez cet accès.
-
-La valeur par défaut est @samp{"0777"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
-Le répertoire dans lequel les sockets sont créés.
-
-La valeur par défaut est @samp{"/var/run/libvirt"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
-Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
-les permissions des socket permettent à n'importe qui de se connecter
-
-La valeur par défaut est @samp{"polkit"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
-Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
-défaut les permissions du socket ne permettent que root. Si le support de
-PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
-l'authentification « polkit ».
-
-La valeur par défaut est @samp{"polkit"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
-Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
-SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
-scénario de développement ou de test.
-
-La valeur par défaut est @samp{"sasl"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
-Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
-chiffrés par la couche TLS, et une authentification limitée est effectuée
-avec les certificats.
-
-Il est possible d'utiliser de n'importe quel mécanisme d'authentification
-SASL en utilisant « sasl » pour cette option
-
-La valeur par défaut est @samp{"none"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
-Schéma de contrôle d'accès à l'API.
-
-Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
-pilotes d'accès peuvent placer des restrictions là-dessus.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string key-file
-Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
-aucune clef privée n'est chargée.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
-Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
-certificat n'est chargé.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
-Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
-certificat de CA n'est chargé.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
-Chemin de la liste de révocation des certificats. Si la chaîne est vide,
-aucun CRL n'est chargé.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
-Désactive la vérification de nos propres certificats serveurs.
-
-Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
-propres certificats.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
-Désactive la vérification des certificats clients.
-
-La vérification des certificats clients est le mécanisme d'authentification
-principal. Tout client qui ne présent pas de certificat signé par la CA
-sera rejeté.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
-Liste blanche des Distinguished Name x509 autorisés.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
-Liste blanche des noms d'utilisateur SASL permis. Le format des noms
-d'utilisateurs dépend du mécanisme d'authentification SASL.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
-Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
-valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
-modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
-agisse différemment des paramètres par défaut globaux.
-
-La valeur par défaut est @samp{"NORMAL"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
-Nombre maximum de connexions clientes en même temps sur tous les sockets.
-
-La valeur par défaut est @samp{5000}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
-Longueur maximum de la queue de connexions en attente d'acceptation du
-démon. Remarquez que certains protocoles supportant la retransmission
-peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
-
-La valeur par défaut est @samp{1000}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
-Longueur maximum de la queue des clients acceptés mais pas authentifiés.
-Indiquez zéro pour désactiver ce paramètre
-
-La valeur par défaut est @samp{20}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
-Nombre de processus de travail démarrés initialement.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
-Nombre maximum de threads de travail.
-
-Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
-seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
-que max_workers soit égal au nombre maximum de clients permis.
-
-La valeur par défaut est @samp{20}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
-Nombre de travailleurs prioritaires. Si tous les threads de travail du
-groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
-(notamment domainDestroy) peuvent être exécutés par ce groupe.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
-Limite globale totale sur les appels RPC concurrents.
-
-La valeur par défaut est @samp{20}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
-Limite de requêtes concurrentes depuis une connexion cliente unique. Pour
-éviter qu'un client ne monopolise le serveur, vous devriez indiquer une
-petite partie des paramètres global max_requests et max_workers.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
-Comme @code{min-workers} mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
-Comme @code{max-workers} mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
-Comme @code{max-clients} mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
-Comme @code{max-queued-clients} mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
-Comme @code{max-client-requests} mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
-Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
-1 : débogage.
-
-La valeur par défaut est @samp{3}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
-Filtres de journalisation.
-
-Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
-pour une catégorie donnée. Le format d'un filtre est :
-
-@itemize @bullet
-@item
-x:nom
-
-@item
-x:+nom
-
-@end itemize
-
-où @code{nom} est une chaîne de caractères qui correspond à la catégorie
-donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
-libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
-filtre peut être une sous-chaîne du nom complet de la catégorie, pour
-pouvoir correspondre à plusieurs catégories similaires), le préfixe
-facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
-message qui correspond au nom, et @code{x} est le niveau minimal des
-messages qui devraient être enregistrés :
-
-@itemize @bullet
-@item
-1 : DEBUG
-
-@item
-2 : INFO
-
-@item
-3 : WARNING
-
-@item
-4 : ERROR
-
-@end itemize
-
-On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
-doivent juste être séparés par des espaces.
-
-La valeur par défaut est @samp{"3:remote 4:event"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
-Sorties de débogage.
-
-Une sortie est l'un des endroits où les journaux sont enregistrés. Le
-format d'une sortie peut être :
-
-@table @code
-@item x:stderr
-la sortie va vers stderr
-
-@item x:syslog:nom
-utilise syslog comme sortie et utilise le nom donné comme identifiant
-
-@item x:file:chemin_fichier
-la sortie va vers un fichier, avec le chemin donné
-
-@item x:journald
-la sortie va vers le système de journalisation journald
-
-@end table
-
-Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
-filtre
-
-@itemize @bullet
-@item
-1 : DEBUG
-
-@item
-2 : INFO
-
-@item
-3 : WARNING
-
-@item
-4 : ERROR
-
-@end itemize
-
-Plusieurs sorties peuvent être définies, elles doivent juste être séparées
-par des espaces.
-
-La valeur par défaut est @samp{"3:stderr"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
-Permet de modifier l'utilisation du sous-système d'audit
-
-@itemize @bullet
-@item
-0 : désactive tout audit
-
-@item
-1 : active l'audit, seulement s'il est activé sur l'hôte
-
-@item
-2 : active l'audit, et quitte s'il est désactivé sur l'hôte.
-
-@end itemize
-
-La valeur par défaut est @samp{1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
-Envoie les messages d'audit via l'infrastructure de journalisation de
-libvirt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
-UUID de l'hôte. L'UUID ne doit pas avoir tous ses nombres identiques.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
-Source où lire l'UUID de l'hôte.
-
-@itemize @bullet
-@item
-@code{smbios} : récupère l'UUID à partir de @code{dmidecode -s system-uuid}
-
-@item
-@code{machine-id} : récupère l'UUID à partir de @code{/etc/machine-id}
-
-@end itemize
-
-Si @code{dmidecode} ne fournit pas un UUID valide, un UUID temporaire sera
-généré.
-
-La valeur par défaut est @samp{"smbios"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
-Un message keepalive est envoyé au client après @code{keepalive_interval}
-secondes d'inactivité pour vérifier si le client répond toujours. Si la
-valeur est -1, libvirtd n'enverra jamais de requête keepalive ; cependant
-les clients peuvent toujours en envoyer et le démon y répondra.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
-Nombre maximum de messages keepalive qui peuvent être envoyés au client sans
-réponse avant que la connexion ne soit considérée comme cassée.
-
-En d'autres termes, la connexion est approximativement fermée après
-@code{keepalive_interval * (keepalive_count + 1)} secondes après le dernier
-message reçu de la part du client. Lorsque @code{keepalive-count} est à 0,
-les connexions seront automatiquement fermées après
-@code{keepalive-interval} secondes d'inactivité sans envoyer le moindre
-message keepalive.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
-Comme précédemment, mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
-Comme précédemment, mais pour l'interface d'administration.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
-Délai d'attente pour les appels Open vSwitch.
-
-L'utilitaire @code{ovs-vsctl} est utilisé pour la configuration et son
-option de délai d'attente est à 5 secondes pour éviter qu'une attente
-infinie ne bloque libvirt.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@c %end of autogenerated docs
-
-@subsubheading démon Virrlog
-Le service virtlogd est un démon côté serveur qui fait partie de libvirt,
-utilisé pour gérer les journaux des consoles des machines virtuelles.
-
-Ce démon n'est pas utilisé directement par les clients libvirt, mais il est
-appelé pour eux par @code{libvirtd}. En maintenant les journaux dans un
-démon séparé, le démon @code{libvirtd} principal peut être redémarré sans
-risque de perte de journaux. Le démon @code{virtlogd} a la possibilité de
-ré-exécuter exec() sur lui-même quand il reçoit @code{SIGUSR1}, pour
-permettre des mises à jour à chaux sans temps mort.
-
-@deffn {Variable Scheme} virtlog-service-type
-Le type de service pour le démon virtlogd. Sa valeur doit être un
-@code{virtlog-configuration}.
-
-@example
-(service virtlog-service-type
- (virtlog-configuration
- (max-clients 1000)))
-@end example
-@end deffn
-
-@deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
-Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
-1 : débogage.
-
-La valeur par défaut est @samp{3}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
-Filtres de journalisation.
-
-Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
-pour une catégorie donnée. Le format d'un filtre est :
-
-@itemize @bullet
-@item
-x:nom
-
-@item
-x:+nom
-
-@end itemize
-
-où @code{nom} est une chaîne de caractères qui correspond à la catégorie
-donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
-libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
-filtre peut être une sous-chaîne du nom complet de la catégorie, pour
-pouvoir correspondre à plusieurs catégories similaires), le préfixe
-facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
-message qui correspond au nom, et @code{x} est le niveau minimal des
-messages qui devraient être enregistrés :
-
-@itemize @bullet
-@item
-1 : DEBUG
-
-@item
-2 : INFO
-
-@item
-3 : WARNING
-
-@item
-4 : ERROR
-
-@end itemize
-
-On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
-doivent juste être séparés par des espaces.
-
-La valeur par défaut est @samp{"3:remote 4:event"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
-Sorties de débogage.
-
-Une sortie est l'un des endroits où les journaux sont enregistrés. Le
-format d'une sortie peut être :
-
-@table @code
-@item x:stderr
-la sortie va vers stderr
-
-@item x:syslog:nom
-utilise syslog comme sortie et utilise le nom donné comme identifiant
-
-@item x:file:chemin_fichier
-la sortie va vers un fichier, avec le chemin donné
-
-@item x:journald
-la sortie va vers le système de journalisation journald
-
-@end table
-
-Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
-filtre
-
-@itemize @bullet
-@item
-1 : DEBUG
-
-@item
-2 : INFO
-
-@item
-3 : WARNING
-
-@item
-4 : ERROR
-
-@end itemize
-
-Plusieurs sorties peuvent être définies, elles doivent juste être séparées
-par des espaces.
-
-La valeur par défaut est @samp{"3:stderr"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
-Nombre maximum de connexions clientes en même temps sur tous les sockets.
-
-La valeur par défaut est @samp{1024}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
-Taille de fichier maximale avant roulement.
-
-La valeur par défaut est @samp{2MB}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
-Nombre maximal de fichiers de sauvegardes à garder.
-
-La valeur par défaut est @samp{3}.
-
-@end deftypevr
-
-@subsubheading Émulation transparente avec QEMU
-
-@cindex émulation
-@cindex @code{binfmt_misc}
-@code{qemu-binfmt-service-type} fournit le support de l'émulation
-transparente de binaires construits pour des architectures différentes —
-p.@: ex.@: il permet d'exécuter de manière transparente des programmes ARMv
-sur une machine x86_64. Cela se fait en combinant l'émulateur
-@uref{https://www.qemu.org, QEMU} et la fonctionnalité @code{binfmt_misc} du
-noyau Linux.
-
-@defvr {Variable Scheme} qemu-binfmt-service-type
-Le type du service QEMU/binfmt pour l'émulation transparente. Sa valeur
-doit être un objet @code{qemu-binfmt-configuration}, qui spécifie le paquet
-QEMU à utiliser ainsi que l'architecture que vous voulez émuler :
-
-@example
-(service qemu-binfmt-service-type
- (qemu-binfmt-configuration
- (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el"))))
-@end example
-
-Dans cet exemple, on active l'émulation transparente pour les plateformes
-ARM et aarch64. Lancer @code{herd stop qemu-binfmt} l'éteint et lancer
-@code{herd start qemu-binfmt} le rallume (@pxref{Invoking herd, the
-@command{herd} command,, shepherd, The GNU Shepherd Manual}).
-@end defvr
-
-@deftp {Type de données} qemu-binfmt-configuration
-La configuration du service @code{qemu-binfmt}.
-
-@table @asis
-@item @code{platforms} (par défaut : @code{'()})
-La liste des plates-formes émulées par QEMU. Chaque élément doit être un
-objet @dfn{platform object} tel que renvoyé par @code{lookup-qemu-platforms}
-(voir plus bas).
-
-@item @code{guix-support?} (par défaut : @code{#f})
-Lorsque la valeur est vraie, QEMU et toutes ses dépendances sont ajoutés à
-l'environnement de construction de @command{guix-daemon} (@pxref{Invoquer guix-daemon, @code{--chroot-directory} option}). Cela permet d'utiliser les
-gestionnaires @code{binfmt_misc} dans l'environnement de cosntruction, ce
-qui signifie que vous pouvez construire des programmes pour d'autres
-architectures de manière transparente.
-
-Par exemple, supposons que vous soyez sur une machine x86_64 et que vous
-avez ce services :
-
-@example
-(service qemu-binfmt-service-type
- (qemu-binfmt-configuration
- (platforms (lookup-qemu-platforms "arm"))
- (guix-support? #t)))
-@end example
-
-Vous pouvez lancer :
-
-@example
-guix build -s armhf-linux inkscape
-@end example
-
-@noindent
-et cela construira Inkscape pour ARMv7 @emph{comme s'il s'agissait d'une
-construction native}, de manière transparente avec QEMU pour émuler un CPU
-ARMv7. Plutôt pratique si vous voulez tester un paquet construit pour une
-architecture à laquelle vous n'avez pas accès !
-
-@item @code{qemu} (par défaut : @code{qemu})
-Le paquet QEMU à utiliser.
-@end table
-@end deftp
-
-@deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
-Renvoie la liste des objets de plates-formes QEMU correspondant à
-@var{platforms}@dots{}. @var{platforms} doit être une liste de chaînes de
-caractères correspondant aux noms de plates-formes, comme @code{"arm"},
-@code{"sparc"}, @code{"mips64el"} etc.
-@end deffn
-
-@deffn {Procédure Scheme} qemu-platform? @var{obj}
-Renvoie vrai s i@var{obj} est un objet de plate-forme.
-@end deffn
-
-@deffn {Procédure Scheme} qemu-platform-name @var{platform}
-Renvoie le nom de @var{platform} — une chaîne comme @code{"arm"}.
-@end deffn
-
-@node Services de contrôle de version
-@subsection Services de contrôle de version
-
-Le module @code{(gnu services version-control)} fournit un service pour
-permettre l'accès à distance à des dépôts Git locaux. Il y a trois options
-: en utilisant @code{git-daemon-service} qui fournit un accès aux dépôts via
-le protocole non sécurisé @code{git://} basé sur TCP, en étendant le serveur
-web @code{nginx} pour relayer les requêtes vers @code{git-http-backend} ou
-en fournissant une interface web avec @code{cgit-service-type}.
-
-@deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
-
-Renvoie un service qui lance @command{git daemon}, un serveur TCP simple
-pour exposer des dépôts sur le protocole Git pour des accès anonymes.
-
-L'argument facultatif @var{config} devrait être un objet
-@code{<git-daemon-configuration>}, par défaut il permet l'accès en
-lecture-seule aux dépôts exportés@footnote{En créant le fichier magique «
-git-daemon-export-ok » dans le répertoire du dépôt.} dans @file{/srv/git}.
-
-@end deffn
-
-@deftp {Type de données} git-daemon-configuration
-Type de données représentnt la configuration de @code{git-daemon-service}.
-
-@table @asis
-@item @code{package} (par défaut : @var{git})
-Objet de paquet du système de contrôle de version distribué Git.
-
-@item @code{export-all?} (par défaut : @var{#f})
-Indique s'il faut permettre l'accès à tous les dépôts Git, même s'ils n'ont
-pas le fichier @file{git-daemon-export-ok}.
-
-@item @code{base-path} (par défaut : @file{/srv/git})
-Indique s'il faut traduire toutes les requêtes de chemins relativement au
-chemin actuel. Si vous lancez le démon git avec @var{(base-path
-"/srv/git")} sur example.com, si vous essayez ensuite de récupérer
-@code{git://example.com/hello.git}, le démon git interprétera ce chemin
-comme étant @code{/srv/git/hello.git}.
-
-@item @code{user-path} (par défaut : @var{#f})
-Indique s'il faut permettre la notation @code{~user} dans les requêtes.
-Lorsque spécifié avec une chaîne vide, les requêtes à
-@code{git://host/~alice/foo} sont des requêtes d'accès au dépôt @code{foo}
-dans le répertoire personnel de l'utilisateur @code{alice}. Si
-@var{(user-path "chemin")} est spécifié, la même requête est interprétée
-comme accédant au répertoire @code{chemin/foo} dans le répertoire personnel
-de l'utilisateur @code{alice}.
-
-@item @code{listen} (par défaut : @var{'()})
-Indique s'il faut écouter sur des adresses IP ou des noms d'hôtes
-particuliers, par défaut tous.
-
-@item @code{port} (par défaut : @var{#f})
-Indique s'il faut écouter sur un port particulier, par défaut le 9418.
-
-@item @code{whitelist} (par défaut : @var{'()})
-Si la liste n'est pas vide, n'autoriser l'accès qu'aux dossiers spécifiés.
-
-@item @code{extra-options} (par défaut : @var{'()})
-Options supplémentaires qui seront passées à @code{git daemon}, lancez
-@command{man git-daemon} pour plus d'informations.
-
-@end table
-@end deftp
-
-Le protocole @code{git://} ne permet pas l'authentification. Lorsque vous
-récupérez un dépôt via @code{git://}, vous ne pouvez pas savoir si les
-données que vous recevez ont été modifiées ou si elles viennent bien de
-l'hôte spécifié, et votre connexion pourrait être espionnée. Il est
-préférable d'utiliser un protocole de transport authentifié et chiffré,
-comme @code{https}. Bien que Git vous permette de servir des dépôts avec un
-serveur web peu sophistiqué basé sur les fichiers, il y a un protocole plus
-rapide implémenté par le programme @code{git-http-backend}. Ce programme
-est le moteur des services web Git corrects. Il est conçu pour se trouver
-derrière un mandataire FastCGI. @xref{Services web} pour plus
-d'informations sur la manière de lancer le démon @code{fcgiwrap} nécessaire.
-
-Guix a un type de données de configuration séparé pour servir des dépôts Git
-par HTTP.
-
-@deftp {Type de données} git-http-configuration
-Type de données représentant la configuration de @code{git-http-service}.
-
-@table @asis
-@item @code{package} (par défaut : @var{git})
-Objet de paquet du système de contrôle de version distribué Git.
-
-@item @code{git-root} (par défaut : @file{/srv/git})
-Répertoire contenant les dépôts Git à exposer au monde.
-
-@item @code{export-all?} (par défaut : @var{#f})
-Indique s'il faut exposer l'accès de tous les dépôts Git dans
-@var{git-root}, même s'ils n'ont pas le fichier @file{git-daemon-export-ok}.
-
-@item @code{uri-path} (par défaut : @file{/git/})
-Préfixe du chemin pour l'accès Git. Avec le préfixe @code{/git/} par
-défaut, cela traduira @code{http://@var{server}/git/@var{repo}.git} en
-@code{/sr/git/@var{repo}.git}. Les requêtes dont les chemins d'URI ne
-commencent pas par ce préfixe ne seront pas passées à cette instance de Git.
-
-@item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
-Le socket sur lequel le démon @code{fcgiwrap} écoute. @xref{Services web}.
-@end table
-@end deftp
-
-Il n'y a pas de @code{git-http-service-type}, actuellement ; à la place vous
-pouvez créer un @code{nginx-location-configuration} à partir d'un
-@code{git-http-configuration} puis ajouter cela au serveur web.
-
-@deffn {Procédure Scheme} git-http-nginx-location-configuration @
- [config=(git-http-configuration)]
-Calcule un @code{nginx-location-configuration} qui correspond à la
-configuration http Git donnée. Voici un exemple de définition de service
-nginx qui sert le répertoire @file{/srv/git} par défaut en HTTPS :
-
-@example
-(service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list
- (nginx-server-configuration
- (listen '("443 ssl"))
- (server-name "git.my-host.org")
- (ssl-certificate
- "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
- (ssl-certificate-key
- "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
- (locations
- (list
- (git-http-nginx-location-configuration
- (git-http-configuration (uri-path "/"))))))))))
-@end example
-
-Ce exemple suppose que vous utilisez Let's Encrypt pour récupérer votre
-certificat TLS. @xref{Services de certificats}. Le service @code{certbot} par
-défaut redirigera tout le trafic HTTP de @code{git.my-host.org} en HTTPS.
-Vous devrez aussi ajouter un mandataire @code{fcgiwrap} à vos services
-systèmes. @xref{Services web}.
-@end deffn
-
-@subsubheading Service Cgit
-
-@cindex service cgit
-@cindex git, interface web
-@uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
-dépôts Git écrite en C.
-
-L'exemple suivant configurera le service avec les valeurs par défaut. Par
-défaut, on peut accéder à Cgit sur le port (@code{http://localhost:80}).
-
-@example
-(service cgit-service-type)
-@end example
-
-Le type @code{file-object} désigne soit un objet simili-fichier
-(@pxref{G-Expressions, file-like objects}), soit une chaîne.
-
-@c %start of fragment
-
-Les champs de @code{cgit-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{cgit-configuration}} package package
-Le paquet cgit.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
-Configuration Nginx.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
-Spécifie une commande qui doit être invoquée pour formater le contenu des
-pages « à propos » (au plus haut niveau et pour chaque dépôt).
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string agefile
-Spécifie un chemin, relativement à chaque dépôt, qui peut être utilisé pour
-spécifier la date et l'heure du plus récent commit du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
-Spécifie une commande qui sera invoquée pour authentifier l'accès au dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
-Drapeau qui, lorsqu'il vaut @samp{age}, active le trie par date dans la
-liste des branches, et le trie par nom lorsqu'il vaut @samp{name}.
-
-La valeur par défaut est @samp{"name"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string cache-root
-Chemin utilisé pour stocker les entrées de cache de cgit.
-
-La valeur par défaut est @samp{"/var/cache/cgit"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
-Nombre qui spécifie le temps de vie, en minute, des versions en cache des
-pages du dépôt accédées par leur SHA-1.
-
-La valeur par défaut est @samp{-1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
-Nombre qui spécifie le temps de vie, en minutes, des version en cache des
-pages du dépôt accédées sans leur SHA1.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
-Nombre qui spécifie le temps de vie, en minute, des version en cache de la
-page de résumé du dépôt.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
-Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
-la page d'index du dépôt.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
-Nombre qui spécifie le temps de vie, en minutes, de la version en cache du
-résultat du scan d'un chemin dans le dépôt Git.
-
-La valeur par défaut est @samp{15}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
-Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
-la page « à propos » du dépôt.
-
-La valeur par défaut est @samp{15}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
-Nombre qui spécifie le temps de vie, en minutes, de la version en cache des
-archives.
-
-La valeur par défaut est @samp{5}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
-Le nombre maximum d'entrées dans le cache de cgit. Lorsque la valeur est
-@samp{0}, le cache est désactivé.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
-Indique si le tri des éléments est sensible à la casse.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
-Liste des préfixes communs qui, lorsqu'ils sont combinés à l'URL du dépôt,
-génèrent des URL de clone valides pour le dépôt.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} list clone-url
-Liste des modèles @code{clone-url}
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
-Commande qui sera invoquée pour formater les messages de commit.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
-Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
-messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
-
-La valeur par défaut est @samp{"git log"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object css
-URL qui spécifie le document css à inclure dans les pages cgit.
-
-La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
-Spécifie une commande qui sera invoquée pour formater les noms et l'adresse
-de courriel des commiteurs, des auteurs et des taggueurs, représentés à
-plusieurs endroits dans l'interface cgit.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
-Drapeau qui, s'il vaut @samp{#t}, fera générer un fragment HTML à cgit qu'il
-sera possible d'inclure dans d'autres pages HTML.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
-Drapeau qui, lorsqu'il vaut @samp{#t}, fera afficher un historique en
-ASCII-art à gauche des messages de commit dans la page de log du dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
-Drapeau qui, lorsqu'il vaut @samp{#t}, permet à tous les paramètres de
-filtrage d'être modifiés dans des fichiers cgitrc spécifiques au dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
-Drapeau qui, s'il vaut @samp{#t}, permet aux utilisateurs de suivre un
-fichier dans la vue « log ».
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
-Si la valeur est @samp{#t}, cgit agira comme un point d'accès HTTP idiot
-pour les clones Git.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
-Drapeau qui, s'il vaut @samp{#t}, fera générer des liens « résumé », «
-commit » et « arborescence » supplémentaires poru chaque dépôt dans l'index
-des dépôts.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher le propriétaire de chaque
-dépôt dans l'index des dépôts.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de fichiers
-modifiés pour chaque commit sur la page de log du dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de lignes
-ajoutées et enlevées pour chaque commit de la page de log du dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
-les vues du résumé et des références.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
-Drapeau qui, s'il vaut @samp{1}, fera utiliser à cgit le sujet du commit
-parent comme texte du lien lors de la génération des liens vers les commits
-parents dans la vue des commits.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
-Drapeau qui, s'il vaut @samp{#t}, fera utiliser à cgit l esujet du commit
-parent comme texte du lien lors de la génération des liens vers le commit
-parent dans la vue des commits.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
-Drapeau qui, s'il vaut @samp{#t}, fera générer à cgit des liens vers le
-numéro de ligne pour les blobs en texte brut affichés dans la vue de
-l'arborescence.
-
-La valeur par défaut est @samp{#t}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
-Drapeau qui, s'il vaut @samp{#t}, permettra à cgit d'utiliser la
-configuration Git pour spécifier des paramètres spécifiques au dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
-URL utilisée comme lien vers un icône pour cgit.
-
-La valeur par défaut est @samp{"/favicon.ico"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string footer
-Le contenu du fichier spécifié avec cette option sera inclus directement au
-bas de toutes les pages (c.-à-d.@: qu'il remplace le message « généré par
-…@: » générique).
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string head-include
-Le contenu du fichier spécifié dans cette option sera inclus directement
-dans la section HEAD HTML de toutes les pages.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string header
-Le contenu du fichier spécifié avec cette option sera inclus directement au
-début de toutes les pages.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object include
-Nom d'un fichier de configuration à inclure avant que le reste du fichier de
-configuration actuel ne soit analysé.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string index-header
-Le contenu du fichier spécifié avec cette option sera inclus directement au
-dessus de l'index des dépôts.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string index-info
-Le contenu du fichier spécifié avec cette option sera inclus directement en
-dessous de l'en-tête sur la page d'index du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit l'heure et la date de
-commit et de tag dans le fuseau horaire du serveur.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object logo
-URL qui spécifie la source d'une image utilisé comme logo sur toutes les
-pages cgit.
-
-La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string logo-link
-URL chargée lors du clic sur l'image du logo de cgit.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
-Commande qui sera invoquée pour formater la colonne propriétaire sur la page
-principale.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
-Nombre d'éléments à afficher dans la vue des flux atom.
-
-La valeur par défaut est @samp{10}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
-Nombre d'éléments à lister par page dans la vue « log ».
-
-La valeur par défaut est @samp{50}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
-Nombre caractères de messages de commit à afficher dans la vue « log ».
-
-La valeur par défaut est @samp{80}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
-Spécifie le nombre d'éléments à lister par page sur la page de l'index des
-dépôts.
-
-La valeur par défaut est @samp{50}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
-Spécifie le nombre maximum de caractères de description de dépôts à afficher
-sur la page d'index des dépôts.
-
-La valeur par défaut est @samp{80}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
-Spécifie la taille maximale d'un blob pour lequel afficher du HTML en
-kilo-octets.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string max-stats
-Période de statistiques maximale. Les valeurs valides sont @samp{week},
-@samp{month}, @samp{quarter} et @samp{year}.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
-Type mime pour l'extension de fichier spécifiée.
-
-La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
-"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
-(svg "image/svg+xml"))}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
-Spécifie le fichier à utiliser pour la recherche automatique de type mime.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string module-link
-Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
-lorsqu'un sous-module est affiché dans la liste du répertoire.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
-Si la valeur est @samp{#t}, le cache est désactivé.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
-Si la valeur est @samp{#t}, l'affichage des adresse de courriel des auteurs
-sera désactivé.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
-Drapeau qui, s'il vaut @samp{#t}, fera omettre à cgit l'en-tête standard sur
-toutes les pages.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
-UNe liste de sous-répertoires dans @code{repository-directory}, relativement
-à lui, qui devrait être chargé comme des dépôts Git. Une liste vide
-signifie que tous les sous-répertoires seront chargés.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object readme
-Texte utilisé comme valeur par défaut pour @code{cgit-repo-readme}.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
-Si la valeur est @code{#t} et que @code{repository-directory} est activé, si
-un dépôt avec un suffixe de @code{.git} est trouvé, ce suffixe sera supprimé
-de l'URL et du nom.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
-Nombre maximum de fichiers à considérer lors de la détection des renommages.
-
-La valeur par défaut est @samp{-1}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
-La manière dont les dépôt de chaque section sont rangés.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
-Texte utilisé comme contenu du méta-attribut @code{robots}.
-
-La valeur par défaut est @samp{("noindex" "nofollow")}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string root-desc
-Texte affiché en dessous de l'en-tête de la page d'index des dépôts.
-
-La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string root-readme
-Le contenu du fichier spécifié avec cette option sera inclus directement en
-dessous du lien « à propos » sur la page d'index du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string root-title
-Texte affiché sur la page d'index des dépôts.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
-Si la valeur est @samp{#t} et que repository-directory est activé,
-repository-directory recherchera de manière récursive dans les répertoires
-dont le nom commence par un point. Sinon, repository-directory restera hors
-de ces répertoires, considérés comme « cachés ». Remarquez que cela ne
-s'applique pas au répertoire « .git » dans le dépôts.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} list snapshots
-Texte qui spécifie l'ensemble des formats d'archives par défaut pour
-lesquelles cgit générera un lien.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
-Nom du répertoire à scanner pour trouver les dépôts (représente
-@code{scan-path}).
-
-La valeur par défaut est @samp{"/srv/git"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string section
-Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
-point hériterons du nom de section actuel.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string section-sort
-Drapeau qui, s'il vaut @samp{1}, triera les sections dans la liste des
-dépôts par nom.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
-Un nombre qui, s'il est défini avant repository-directory, spécifier combien
-d'éléments de chemin de chaque chemin de dépôt utiliser comme nom de section
-par défaut.
-
-La valeur par défaut est @samp{0}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
-Si la valeur est @samp{#t}, afficher des diffs côte à côte au lieu des
-unidiffs par défaut.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
-Spécifie une commande qui sera invoquée pour formater les blobs en texte
-brut dans la vue de l'arborescence.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
-Spécifie le nombre de branches à afficher dans la vue de résumé du dépôt.
-
-La valeur par défaut est @samp{10}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
-Spécifie le nombre d'élément du journal à afficher dans la vue résumé du
-dépôt.
-
-La valeur par défaut est @samp{10}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
-Spécifie le nombre de tags à afficher dans la vue résumé du dépôt.
-
-La valeur par défaut est @samp{10}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string strict-export
-Nom de fichier qui, s'il est spécifié, doit être présent dans le dépôt pour
-que cgit accorde l'accès à ce dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
-URL qui, si elle est spécifiée, sera utilisée comme racine pour tous les
-liens cgit.
-
-La valeur par défaut est @samp{"/"}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
-Une liste d'enregistrements @dfn{cgit-repo} à utiliser avec config.
-
-La valeur par défaut est @samp{()}.
-
-Les champs de @code{repository-cgit-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
-Un masque de formats d'archives pour ce dépôt pour lesquelles cgit générera
-un lien, restreint par le paramètre @code{snapshots} global.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
-Modifie le @code{source-filter} par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
-URL relative utilisée pour accéder au dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
-Modifie le paramètre @code{about-filter} par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
-Drapeau qui, s'il vaut @samp{age}, active le tri par date dans la liste des
-branches, et lorsqu'il vaut @samp{name}, le tri par nom.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
-Un liste d'URL qui peuvent être utilisées pour cloner ce dépôt.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
-Modifie le paramètre @code{commit-filter} par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
-Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
-messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
-Le nom de la branche par défaut de ce dépôt. Si cette branche n'existe pas
-dans le dépôt, le premier nom de branche (trié) sera utilisé par défaut.
-Par défaut la branche pointée par HEAD, ou « master » s'il n'y a pas de HEAD
-convenable.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
-La valeur à afficher comme description du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
-La valeur à afficher comme page d'accueil du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
-Modifie le paramètre @code{email-filter} par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
-Un drapeau qui peut être utilisé pour désactiver le paramètre
-@code{enable-commit-graph?} global.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
-Un drapeau qui peut être utilisé pour désactiver le paramètre
-@code{enable-log-filecount?} global.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
-Un drapeau qui peut être utilisé pour désactiver le paramètre
-@code{enable-log-linecount?} global.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
-Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
-les vues du résumé et des références.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
-Un drapeau qui peut être utilisé pour modifier le paramètre
-@code{enable-subject-links?} global.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
-Un drapeau qui peut être utilisé pour modifier le paramètre
-@code{enable-html-serving?} global.
-
-La valeur par défaut est @samp{disabled}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
-Drapeau qui, s'il vaut @code{#t}, cache le dépôt de l'index des dépôts.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
-Drapeau qui, s'il vaut @code{#t}, ignore le dépôt.
-
-La valeur par défaut est @samp{#f}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
-URL qui spécifie la source d'une image qui sera utilisée comme logo sur les
-pages de ce dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
-URL chargée lors du clic sur l'image du logo de cgit.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
-Modifie le paramètre @code{owner-filter} par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
-Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
-lorsqu'un sous-module est affiché dans une liste de fichiers. Les arguments
-pour la chaîne de formatage sont le chemin et le SHA1 du commit du
-sous-module.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
-Texte qui sera utilisé comme chaîne de formatage lorsqu'un sous-module avec
-un chemin spécifié sera affiché dans une liste de fichiers.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
-Modifie la période de statistique maximale par défaut.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
-La valeur à afficher comme nom de dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
-Une valeur utilisée pour identifier le propriétaire du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
-Un chemin absolu vers le répertoire du dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
-Un chemin (relatif au dépôt) qui spécifie un fichier à inclure directement
-comme page « À propos » pour ce dépôt.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
-Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
-point hériterons du nom de section actuel.
-
-La valeur par défaut est @samp{""}.
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
-Options supplémentaires ajoutées à la fin du fichier cgitrc.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-@end deftypevr
-
-@deftypevr {paramètre de @code{cgit-configuration}} list extra-options
-Options supplémentaires ajoutées à la fin du fichier cgitrc.
-
-La valeur par défaut est @samp{()}.
-
-@end deftypevr
-
-
-@c %end of fragment
-
-Cependant, vous pourriez vouloir simplement récupérer un @code{cgitrc} et
-l'utiliser. Dans ce cas, vous pouvez passer un
-@code{opaque-cgit-configuration} comme enregistrement à
-@code{cgit-service-type}. Comme son nom l'indique, une configuration opaque
-n'a pas de capacité de réflexion facile.
-
-Les champs de @code{opaque-cgit-configuration} disponibles sont :
-
-@deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
-Le paquet cgit.
-@end deftypevr
-
-@deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
-Le contenu de @code{cgitrc}, en tant que chaîne de caractère.
-@end deftypevr
-
-Par exemple, si votre @code{cgitrc} est juste la chaîne vide, vous pouvez
-instancier un service cgit ainsi :
-
-@example
-(service cgit-service-type
- (opaque-cgit-configuration
- (cgitrc "")))
-@end example
-
-@subsubheading Service Gitolite
-
-@cindex service Gitolite
-@cindex Git, hébergement
-@uref{http://gitolite.com/gitolite/, Gitolite} est un outil pour héberger
-des dépôts Git sur un serveur central.
-
-Gitolite peut gérer plusieurs dépôts et utilisateurs et supporte une
-configuration flexible des permissions pour les utilisateurs sur ces dépôts.
-
-L'exemple suivant configure Gitolite en utilisant l'utilisateur @code{git}
-par défaut et la clef SSH fournie.
-
-@example
-(service gitolite-service-type
- (gitolite-configuration
- (admin-pubkey (plain-file
- "yourname.pub"
- "ssh-rsa AAAA... guix@@example.com"))))
-@end example
-
-Gitolite est configuré via un dépôt d'administration spécial que vous pouvez
-cloner. Par exemple, si vous hébergez Gitolite sur @code{example.com}, vous
-pouvez lancer la commande suivante pour cloner le dépôt d'administration.
-
-@example
-git clone git@@example.com:gitolite-admin
-@end example
-
-Lorsque le service Gitolite est activé, la clef @code{admin-pubkey} fournie
-sera insérée dans le répertoire @file{keydir} du dépôt gitolite-admin. Si
-cela change le dépôt, un commit sera effectué avec le message « gitolite
-setup by GNU Guix ».
-
-@deftp {Type de données} gitolite-configuration
-Type de données représentant la configuration de
-@code{gitolite-service-type}.
-
-@table @asis
-@item @code{package} (par défaut : @var{gitolite})
-Le paquet Gitolite à utiliser.
-
-@item @code{user} (par défaut : @var{git})
-Utilisateur pour utiliser Gitolite. Cela sera l'utilisateur à utiliser pour
-accéder à Gitolite par SSH.
-
-@item @code{group} (par défaut : @var{git})
-Groupe à utiliser pour Gitolite.
-
-@item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
-Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
-
-@item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
-Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
-représentant la configuration de Gitolite.
-
-@item @code{admin-pubkey} (par défaut : @var{#f})
-Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
-utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
-@file{keydir} dans le dépôt gitolite-admin.
-
-Pour spécifier la clef SSH comme chaîne de caractère, utilisez la fonction
-@code{plain-file}.
-
-@example
-(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
-@end example
-
-@end table
-@end deftp
-
-@deftp {Type de données} gitolite-rc-file
-Type de données représentant le fichier RC de Gitolite.
-
-@table @asis
-@item @code{umask} (par défaut : @code{#o0077})
-Cela contrôle les permissions que Gitolite propose sur les dépôts et leur
-contenu.
-
-Une valeur comme @code{#o0027} donnera accès en lecture au groupe utilisé
-par Gitolite (par défaut : @code{git}). Cel aest nécessaire lorsque vous
-utilise Gitolite avec un logiciel comme cgit ou gitweb.
-
-@item @code{git-config-keys} (par défaut : @code{""})
-Gitolite vous permet de modifier les configurations git avec le mot-clef «
-config ». Ce paramètre vous permet de contrôler les clefs de configuration
-acceptables.
-
-@item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
-Indique les noms des rôles qui peuvent être utilisés par les utilisateurs
-avec la commande perms.
-
-@item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
-Ce paramètre contrôle les commandes et les fonctionnalités à activer dans
-Gitolite.
-
-@end table
-@end deftp
-
-
-@node Services de jeu
-@subsection Services de jeu
-
-@subsubheading Le service de la Bataille pour Wesnoth
-@cindex wesnothd
-@uref{https://wesnoth.org, La Bataille pour Wesnoth} est un jeu de stratégie
-en tour par tour dans un univers fantastique, avec plusieurs campagnes solo
-et des parties multijoueurs (en réseau et en local).
-
-@defvar {Variable Scheme} wesnothd-service-type
-Type de service pour le service wesnothd. Sa valeur doit être un objet
-@code{wesnothd-configuration}. Pour lancer wesnothd avec la configuration
-par défaut, instanciez-le ainsi :
-
-@example
-(service wesnothd-service-type)
-@end example
-@end defvar
-
-@deftp {Type de données} wesnothd-configuration
-Type de donées représentant la configuration de @command{wesnothd}.
-
-@table @asis
-@item @code{package} (par défaut : @code{wesnoth-server})
-Le paquet de serveur de wesnoth à utiliser.
-
-@item @code{port} (par défaut : @code{15000})
-Le pour sur lequel lier le serveur.
-@end table
-@end deftp
-
-@node Services divers
-@subsection Services divers
-
-@cindex empreinte digitale
-@subsubheading Service d'empreintes digitales
-
-The @code{(gnu services authentication)} module provides a DBus service to
-read and identify fingerprints via a fingerprint sensor.
-
-@defvr {Variable Scheme} fprintd-service-type
-Le type de service pour @command{fprintd}, qui fournit des capacités de
-lecture d'empreinte.
-
-@example
-(service fprintd-service-type)
-@end example
-@end defvr
-
-@cindex sysctl
-@subsubheading Service de contrôle du système
-
-Le module @code{(gnu services sysctl)} fournit un service pour configurer
-les paramètres du noyau au démarrage.
-
-@defvr {Variable Scheme} sysctl-service-type
-Le type de service pour @command{sysctl}, qui modifie les paramètres du
-noyau dans @file{/proc/sys/}. Pour activer le transfert d'IPv4, vous pouvez
-l'instancier ainsi :
-
-@example
-(service sysctl-service-type
- (sysctl-configuration
- (settings '(("net.ipv4.ip_forward" . "1")))))
-@end example
-@end defvr
-
-@deftp {Type de données} sysctl-configuration
-Le type de données représentant la configuration de @command{sysctl}.
-
-@table @asis
-@item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
-L'exécutable @command{sysctl} à utiliser.
-
-@item @code{settings} (par défaut : @code{'()})
-Une liste d'association spécifiant les paramètres du noyau et leur valeur.
-@end table
-@end deftp
-
-@cindex pcscd
-@subsubheading Service du démon PC/SC Smart Card
-
-Le module @code{(gnu services security-token)} fournit le service suivant
-qui lance @command{pcscd}, le démon PC/SC Smart Card. @command{pcscd} est
-le démon pour pcsc-lite et MuscleCard. C'est un gestionnaire de ressource
-qui coordonne les communications avec les lecteurs de smart cards, les smart
-cards et les jetons cryptographiques connectés au système.
-
-@defvr {Variable Scheme} pcscd-service-type
-Le type de service pour le service @command{pcscd}. Sa valeur doit être un
-objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
-par défaut, instantiez-le avec :
-
-@example
-(service pcscd-service-type)
-@end example
-@end defvr
-
-@deftp {Type de données} pcscd-configuration
-Type de données représentant la configuration de @command{pcscd}.
-
-@table @asis
-@item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
-Le paquet pcsc-lite qui fournit pcscd.
-@item @code{usb-drivers} (par défaut : @code{(list ccid)})
-Liste des paquets qui fournissent des pilotes USB à pcscd. Les pilotes
-doivent être dans @file{pcsc/drivers} dans le répertoire du dépôt du paquet.
-@end table
-@end deftp
-
-@cindex lirc
-@subsubheading Service Lirc
-
-Le module @code{(gnu services lirc)} fournit le service suivant.
-
-@deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
- [#:device #f] [#:driver #f] [#:config-file #f] @
-[#:extra-options '()]
-Renvoie un service qui lance @url{http://www.lirc.org,LIRC}, un démon qui
-décode les signaux infrarouges des télécommandes.
-
-Éventuellement, @var{device}, @var{driver} et @var{config-file} (le nom du
-fichier de configuration) peuvent être spécifiés. Voir le manuel de
-@command{lircd} pour plus de détails.
-
-Enfin, @var{extra-options} est une liste d'options de la ligne de commande
-supplémentaires à passer à @command{lircd}.
-@end deffn
-
-@cindex spice
-@subsubheading Service Spice
-
-Le module @code{(gnu services spice)} fournit le service suivant.
-
-@deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
-Renvoie un service qui lance @url{http://www.spice-space.org,VDAGENT}, un
-démon qui permet le partage du presse-papier avec une vm et de configurer la
-résolution d'affichage du client lorsque la fenêtre de la console graphique
-est redimensionnée.
-@end deffn
-
-@cindex inputattach
-@subsubheading Service inputattach
-
-@cindex entrée tablette, pour Xorg
-@cindex écran tactile, pour Xorg
-Le service @uref{https://linuxwacom.github.io/, inputattach} vous permet
-d'utiliser des périphériques d'entrée comme les tablettes Wacom, les écrans
-tactiles ou les joysticks avec le serveur d'affichage Xorg.
-
-@deffn {Variable Scheme} inputattach-service-type
-Type d'un service qui lance @command{inputattach} sur un appareil et envie
-les événements qu'il reçoit.
-@end deffn
-
-@deftp {Type de données} inputattach-configuration
-@table @asis
-@item @code{device-type} (par défaut : @code{"wacom"})
-Le type du périphérique à gérer. Lancez @command{inputattach --help}, du
-paquet @code{inputattach}, pour voir la liste des types de périphériques
-supportés.
-
-@item @code{device} (par défaut : @code{"/dev/ttyS0"})
-Le fichier de périphérique pour s'y connecter.
-
-@item @code{log-file} (par défaut : @code{#f})
-Si la valeur est vraie, cela doit être le nom d'un fichier où enregistrer
-les messages.
-@end table
-@end deftp
-
-@subsection Services de dictionnaires
-@cindex dictionnaire
-Le module @code{(gnu services dict)} fournit le service suivant :
-
-@deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
-Renvoie un service qui lance le démon @command{dicod}, une implémentation du
-serveur DICT (@pxref{Dicod,,, dico, GNU Dico Manual}).
-
-L'argument @var{config} facultatif spécifie la configuration pour
-@command{dicod}, qui devrait être un objet @code{<dicod-configuration>}, par
-défaut il sert le dictionnaire international collaboratif de GNU pour
-l'anglais.
-
-Vous pouvez ajouter @command{open localhost} à votre fichier @file{~/.dico}
-pour faire de @code{localhost} le serveur par défaut du client
-@command{dico} (@pxref{Initialization File,,, dico, GNU Dico Manual}).
-@end deffn
-
-@deftp {Type de données} dicod-configuration
-Type de données représentant la configuration de dicod.
-
-@table @asis
-@item @code{dico} (par défaut : @var{dico})
-Objet de paquet du serveur de dictionnaire GNU Dico.
-
-@item @code{interfaces} (par défaut : @var{'("localhost")})
-C'est la liste des adresses IP et des ports et éventuellement des noms de
-fichiers de socket sur lesquels écouter (@pxref{Server Settings,
-@code{listen} directive,, dico, GNU Dico Manual}).
-
-@item @code{handlers} (par défaut : @var{'()})
-Liste des objets @code{<dicod-handler>} qui définissent des gestionnaires
-(des instances de modules).
-
-@item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
-Liste d'objets @code{<dicod-database>} qui définissent des dictionnaires à
-servir.
-@end table
-@end deftp
-
-@deftp {Type de données} dicod-handler
-Type de données représentant un gestionnaire de dictionnaire (instance de
-module).
-
-@table @asis
-@item @code{name}
-Nom du gestionnaire (instance de module).
-
-@item @code{module} (par défaut : @var{#f})
-Nom du module dicod du gestionnaire (instance). Si la valeur est @code{#f},
-le module a le même nom que le gestionnaire. (@pxref{Modules,,, dico, GNU
-Dico Manual}).
-
-@item @code{options}
-Liste de chaînes ou de gexps représentant les arguments pour le gestionnaire
-de module
-@end table
-@end deftp
-
-@deftp {Type de données} dicod-database
-Type de données représentant une base de données de dictionnaire.
-
-@table @asis
-@item @code{name}
-Nom de la base de données, qui sera utilisée dans les commande DICT.
-
-@item @code{handler}
-Nom du gestionnaire dicod (instance de module) utilisé par cette base de
-données (@pxref{Handlers,,, dico, GNU Dico Manual}).
-
-@item @code{complex?} (par défaut : @var{#f})
-Indique si la configuration est pour une base de données complexe. La
-configuration complexe a besoin d'un objet @code{<dicod-handler>}
-correspondant, sinon inutile.
-
-@item @code{options}
-Liste de chaînes ou de gexps représentant les arguments pour la base de
-données (@pxref{Databases,,, dico, GNU Dico Manual}).
-@end table
-@end deftp
-
-@defvr {Variable Scheme} %dicod-database:gcide
-Un objet @code{<dicod-database>} servant le dictionnaire international
-collaboratif en anglais via le paquet @code{gcide}.
-@end defvr
-
-Voici un exemple de configuration de @code{dicod-service}.
-
-@example
-(dicod-service #:config
- (dicod-configuration
- (handlers (list (dicod-handler
- (name "wordnet")
- (module "dictorg")
- (options
- (list #~(string-append "dbdir=" #$wordnet))))))
- (databases (list (dicod-database
- (name "wordnet")
- (complex? #t)
- (handler "wordnet")
- (options '("database=wn")))
- %dicod-database:gcide))))
-@end example
-
-@cindex Docker
-@subsubheading Service Docker
-
-Le module @code{(gnu services docker)} fournit le service suivant.
-
-@defvr {Variable Scheme} docker-service-type
-
-C'est le type du service qui lance @url{http://www.docker.com,Docker}, un
-démon qui peut exécuter des lots applicatifs (aussi appelés « conteneurs »)
-dans des environnements isolés.
-
-@end defvr
-
-@deftp {Type de données} docker-configuration
-Le type de données qui représente la configuration de Docker et Containerd.
-
-@table @asis
-
-@item @code{package} (par défaut : @code{docker})
-Le paquet Docker à utiliser.
-
-@item @code{containerd} (par défaut : @var{containerd})
-Le paquet Containerd à utiliser.
-
-@end table
-@end deftp
-
-@node Programmes setuid
-@section Programmes setuid
-
-@cindex programmes setuid
-Certains programmes doivent être lancés avec les privilèges « root » même
-lorsqu'ils sont lancés par un utilisateur non privilégié. Un exemple
-notoire est le programme @command{passwd}, que les utilisateurs peuvent
-appeler pour modifier leur mot de passe et qui doit accéder à
-@file{/etc/passwd} et @file{/etc/shadow} — ce qui est normalement réservé à
-root, pour des raisons de sécurité évidentes. Pour contourner cela, ces
-exécutables sont @dfn{setuid-root}, ce qui signifie qu'ils seront toujours
-lancés avec les privilèges root (@pxref{How Change Persona,,, libc, The GNU
-C Library Reference Manual}, pour plus d'informations sur le mécanisme
-setuid).
-
-Le dépôt lui-même ne @emph{peut pas} contenir de programmes setuid ; cela
-serait un problème de sécurité puisque n'importe quel utilisateur du système
-peut écrire une dérivation qui rempli le dépôt (@pxref{Le dépôt}). Donc,
-un mécanisme différent est utilisé : au lieu de changer le bit setuid
-directement sur les fichiers qui sont dans le dépôt, nous laissons à
-l'administrateur système le soit de @emph{déclarer} les programmes qui
-devraient être setuid root.
-
-Le champ @code{setuid-programs} d'une déclaration @code{operating-system}
-contient une liste de G-expressions qui dénotent les noms des programmes à
-rendre setuid-root (@pxref{Utiliser le système de configuration}). Par exemple,
-le programme @command{passwd}, qui fait partie du paquet Shadow, peut être
-désigné par cette G-expression (@pxref{G-Expressions}) :
-
-@example
-#~(string-append #$shadow "/bin/passwd")
-@end example
-
-Un ensemble de programmes par défaut est défini par la variable
-@code{%setuid-programs} du module @code{(gnu system)}.
-
-@defvr {Variable Scheme} %setuid-programs
-Une liste de G-expressions qui dénotent les programmes communément
-setuid-root.
-
-La liste inclus des commandes comme @command{passwd}, @command{ping},
-@command{su} et @command{sudo}.
-@end defvr
-
-Sous le capot, les programmes setuid sont créés dans le répertoire
-@file{/run/setuid-programs} au moment de l'activation du système. Les
-fichiers dans ce répertoire se réfèrent aux « vrais » binaires, qui sont
-dans le dépot.
-
-@node Certificats X.509
-@section Certificats X.509
-
-@cindex HTTPS, certificats
-@cindex certificats X.509
-@cindex TLS
-Les serveurs web disponibles par HTTPS (c'est-à-dire HTTP sur le mécanisme
-de la couche de transport sécurisée, TLS) envoient aux clients un
-@dfn{certificat X.509} que les clients peuvent utiliser pour
-@emph{authentifier} le serveur. Pour cela, les clients vérifient que le
-certificat du serveur est signé par une @dfn{autorité de certification} (AC
-ou CA). Mais pour vérifier la signature de la CA, les clients doivent
-d'abord avoir récupéré le certificat de la CA.
-
-Les navigateurs web comme GNU@tie{}IceCat incluent leur propre liste de
-certificats, pour qu'ils puissent vérifier les signatures des CA
-directement.
-
-Cependant, la plupart des autres programmes qui peuvent parler HTTPS —
-@command{wget}, @command{git}, @command{w3m}, etc — doivent savoir où
-trouver les certificats des CA.
-
-@cindex @code{nss-certs}
-Dans Guix, cela se fait en ajoutant un paquet qui fournit les certificats
-dans le champ @code{packages} de la déclaration @code{operating-system}
-(@pxref{Référence de système d'exploitation}). Guix inclut l'un de ces paquets,
-@code{nss-certs}, qui est un ensemble de certificats de CA fourni par les
-services de sécurité réseau de Mozilla (nss).
-
-Remarquez qu'il ne fait @emph{pas} partie de @var{%base-packages}, donc vous
-devez explicitement l'ajouter. Le répertoire @file{/etc/ssl/certs}, là où
-la plupart des applications et bibliothèques vont rechercher les certificats
-par défaut, pointe vers les certificats installés globalement.
-
-Les utilisateurs non privilégiés, dont les utilisateurs de Guix sur une
-distro externe, peuvent aussi installer leur propre paquet de certificats
-dans leur profil. Un certain nombre de variables d'environnement doivent
-être définies pour que les applications et les bibliothèques puissent les
-trouver. En particulier, la bibliothèque OpenSSL honore les variables
-@code{SSL_CERT_DIR} et @code{SSL_CERT_FILE}. Certaines applications
-ajoutent leurs propres variables, par exemple le système de contrôle de
-version Git honore le lot de certificats pointé par la variable
-d'environnement @code{GIT_SSL_CAINFO}. Ainsi, vous lanceriez quelque chose
-comme ceci :
-
-@example
-$ guix package -i nss-certs
-$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
-$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
-$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
-@end example
-
-Un autre exemple serait R, qui requière que la variable d'environnement
-@code{CURL_CA_BUNDLE} pointe sur le lot de certificats, donc vous lanceriez
-quelque chose comme ceci :
-
-@example
-$ guix package -i nss-certs
-$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
-@end example
-
-Pour d'autres applications vous pourriez avoir besoin de chercher la
-variable d'environnement requise dans leur documentation.
-
-
-@node Name Service Switch
-@section Name Service Switch
-
-@cindex name service switch
-@cindex NSS
-Le module @code{(gnu system nss)} fournit des liaisons pour le fichier de
-configuration du @dfn{name service switch} ou @dfn{NSS} de la libc
-(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
-Manual}). En résumé, NSS est un mécanisme qui permet à la libc d'être
-étendue avec de nouvelles méthodes de résolution de « noms » dans les bases
-de données du système, comme les noms d'hôtes, les noms des services, les
-comptes utilisateurs et bien plus (@pxref{Name Service Switch, System
-Databases and Name Service Switch,, libc, The GNU C Library Reference
-Manual}).
-
-La configuration de NSS spécifie, pour chaque base de données du système,
-quelle méthode de résolution utiliser, et comment les diverses méthodes sont
-enchaînées — par exemple, sous certaines circonstances, NSS devrait essayer
-la méthode suivante de la liste. La configuration de NSS est donnée dans le
-champ @code{name-service-switch} de la déclaration @code{operating-system}
-(@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
-
-@cindex nss-mdns
-@cindex .local, résolution de nom d'hôte
-Par exemple, la déclation ci-dessous configure NSS pour utiliser le
-@uref{http://0pointer.de/lennart/projects/nss-mdns/, moteur
-@code{nss-mdns}}, qui supporte la résolution de nom d'hôte sur le DNS
-multicast (mDNS) pour les noms d'hôtes terminant par @code{.local} :
-
-@example
-(name-service-switch
- (hosts (list %files ;first, check /etc/hosts
-
- ;; Si ce qui précède n'a pas fonctionné, essayer
- ;; avec « mdns_minimal ».
- (name-service
- (name "mdns_minimal")
-
- ;; « mdns_minimal » fait autorité pour
- ;; « .local ». Lorsqu'il renvoie « pas trouvé »,
- ;; inutile d'essayer la méthode suivante.
- (reaction (lookup-specification
- (not-found => return))))
-
- ;; Puis revenir sur DNS.
- (name-service
- (name "dns"))
-
- ;; Enfin, essayer avec « mdns complet ».
- (name-service
- (name "mdns")))))
-@end example
-
-Ne vous inquiétez pas : la variable @code{%mdns-host-lookup-nss} (voir plus
-bas) contient cette configuration, donc vous n'avez pas besoin de tout taper
-si vous voulez simplement que la résolution de nom en @code{.local}
-fonctionne.
-
-Remarquez que dans ce cas, en plus de mettre en place le
-@code{name-service-switch} de la déclaration @code{operating-system}, vous
-devez aussi utiliser @code{avahi-service-type} (@pxref{Services réseau,
-@code{avahi-service}}), ou @var{%desktop-services} qui l'inclut
-(@pxref{Services de bureaux}). Cela rend @code{nss-mdns} accessible au démon
-de cache du service de nom (@pxref{Services de base, @code{nscd-service}}).
-
-Pour votre confort, les variables suivantes contiennent des configurations
-NSS typiques.
-
-@defvr {Variable Scheme} %default-nss
-C'est la configuration NSS par défaut, un objet @code{name-service-switch}.
-@end defvr
-
-@defvr {Variable Scheme} %mdns-host-lookup-nss
-C'est la configuration NSS avec le support de la résolution de noms sur DNS
-multicast (mDNS) pour les noms d'hôtes en @code{.local}.
-@end defvr
-
-La référence pour la configuration de NSS est donnée ci-dessous. C'est une
-correspondance directe avec le format de fichier de la bibliothèque C, donc
-référez-vous au manuel de la bibliothèque C pour plus d'informations
-(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
-Manual}). Comparé au format de fichier de configuration de NSS, cette
-configuration a l'avantage non seulement d'ajouter ces bonnes vieilles
-parenthèses, mais aussi des vérifications statiques ; vous saurez s'il y a
-des erreurs de syntaxe et des coquilles dès que vous lancerez @command{guix
-system}.
-
-@deftp {Type de données} name-service-switch
-
-C'est le type de données représentant la configuration de NSS. Chaque champ
-ci-dessous représente l'un des système de bases de données supportés.
-
-@table @code
-@item aliases
-@itemx ethers
-@itemx group
-@itemx gshadow
-@itemx hosts
-@itemx initgroups
-@itemx netgroup
-@itemx networks
-@itemx password
-@itemx public-key
-@itemx rpc
-@itemx services
-@itemx shadow
-Les bases de données du système gérées par NSS. Chaque champ doit être une
-liste d'objets @code{<name-service>} (voir plus bas).
-@end table
-@end deftp
-
-@deftp {Type de données} name-service
-
-C'est le type de données représentant un service de noms et l'action de
-résolution associée.
-
-@table @code
-@item name
-Une chaîne dénotant le service de nom (@pxref{Services in the NSS
-configuration,,, libc, The GNU C Library Reference Manual}).
-
-Remarquez que les services de dnoms listés ici doivent être visibles à
-nscd. Cela se fait en passant la liste des paquets fournissant les services
-de noms à l'argument @code{#:name-services} de @code{nscd-service}
-(@pxref{Services de base, @code{nscd-service}}).
-
-@item reaction
-Une action spécifiée par la macro @code{lookup-specification}
-(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
-Reference Manual}). Par exemple :
-
-@example
-(lookup-specification (unavailable => continue)
- (success => return))
-@end example
-@end table
-@end deftp
-
-@node Disque de RAM initial
-@section Disque de RAM initial
-
-@cindex initrd
-@cindex disque de RAM initial
-Pour le démarrage, on passe au noyau Linux-Libre un @dfn{disque de RAM
-initial} ou @dfn{initrd}. Un initrd contient un système de fichier racine
-temporaire ainsi qu'un script d'initialisation. Ce dernier est responsable
-du montage du vrai système de fichier racine et du chargement des modules du
-noyau qui peuvent être nécessaires à cette tâche.
-
-Le champ @code{initrd-modules} d'une déclaration @code{operating-system}
-vous permet de spécifier les modules du noyau Linux-Libre qui doivent être
-disponibles dans l'initrd. En particulier, c'est là où vous devez lister
-les modules requis pour effectivement piloter le disque dur où se trouve la
-partition racine — bien que la valeur par défaut de @code{initrd-modules}
-couvre la plupart des cas. Par exemple, en supposant que vous ayez besoin
-du module @code{megaraid_sas} en plus des modules par défaut pour accéder à
-votre système de fichiers racine, vous écririez :
-
-@example
-(operating-system
- ;; @dots{}
- (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
-@end example
-
-@defvr {Variable Scheme} %base-initrd-modules
-C'est la liste des modules du noyau inclus dans l'initrd par défaut.
-@end defvr
-
-En plus, si vous avez besoin de paramétrages plus bas niveau, le champ
-@code{initrd} d'une déclaration @code{operating-system} vous permet de
-spécifier quel initrd vous voudriez utiliser. Le module @code{(gnu system
-linux-initrd)} fournit trois manières de construire un initrd : la procédure
-@code{base-initrd} de haut niveau et les procédures @code{raw-initrd} et
-@code{expression->initrd} de bas niveau.
-
-La procédure @code{base-initrd} est conçue pour couvrir la plupart des
-usages courants. Par exemple, si vous voulez ajouter des modules du noyau à
-charger au démarrage, vous pouvez définir le champ @code{initrd} de votre
-déclaration de système d'exploitation ainsi :
-
-@example
-(initrd (lambda (file-systems . rest)
- ;; Crée un initrd standard mais paramètre le réseau
- ;; avec les paramètres que QEMU attend par défaut.
- (apply base-initrd file-systems
- #:qemu-networking? #t
- rest)))
-@end example
-
-La procédure @code{base-initrd} gère aussi les cas d'utilisation courants
-qui concernent l'utilisation du système comme client QEMU, ou comme un
-système « live » avec un système de fichier racine volatile.
-
-La procédure @code{base-initrd} est construite à partir de la procédure
-@code{raw-initrd}. Contrairement à @code{base-initrd}, @code{raw-initrd} ne
-fait rien à haut-niveau, comme essayer de deviner les modules du noyau et
-les paquets qui devraient être inclus dans l'initrd. Un exemple
-d'utilisation de @code{raw-initrd} serait si un utilisateur a une
-configuration personnalisée du noyau Linux et que les modules du noyau
-inclus par défaut par @code{base-initrd} ne sont pas disponibles.
-
-Le disque de RAM initial produit par @code{base-initrd} ou @code{raw-initrd}
-honore plusieurs options passées par la ligne de commande du noyau Linux
-(c'est-à-dire les arguments passés via la commande @code{linux} de GRUB ou
-l'option @code{-append} de QEMU), notamment :
-
-@table @code
-@item --load=@var{boot}
-Dit au disque de RAM initial de charger @var{boot}, un fichier contenant un
-programme Scheme, une fois qu'il a monté le système de fichier racine.
-
-Guix utilise cette option pour donner le contrôle à un programme de
-démarrage qui lance les programmes d'activation de services puis démarre le
-GNU@tie{}Shepherd, le système d'initialisation.
-
-@item --root=@var{root}
-Monte @var{root} comme système de fichier racine. @var{root} peut être un
-nom de périphérique comme @code{/dev/sda1}, une étiquette de système de
-fichiers ou un UUID de système de fichiers.
-
-@item --system=@var{système}
-S'assure que @file{/run/booted-system} et @file{/run/current-system}
-pointent vers @var{system}.
-
-@item modprobe.blacklist=@var{modules}@dots{}
-@cindex module, black-list
-@cindex black-list, des modules du noyau
-Dit au disque de RAM initial ainsi qu'à la commande @command{modprobe} (du
-paquet kmod) de refuser de charger @var{modules}. @var{modules} doit être
-une liste de noms de modules séparés par des virgules — p.@: ex.@:
-@code{usbkbd,9pnet}.
-
-@item --repl
-Démarre une boucle lecture-évaluation-affichage (REPL) depuis le disque de
-RAM initial avant qu'il n'essaye de charger les modules du noyau et de
-monter le système de fichiers racine. Notre équipe commerciale appelle cela
-@dfn{boot-to-Guile}. Le Schemeur en vous va adorer. @xref{Using Guile
-Interactively,,, guile, GNU Guile Reference Manual}, pour plus d'information
-sur le REPL de Guile.
-
-@end table
-
-Maintenant que vous connaissez toutes les fonctionnalités des disques de RAM
-initiaux produits par @code{base-initrd} et @code{raw-initrd}, voici comment
-l'utiliser le personnalisé plus avant.
-
-@cindex initrd
-@cindex disque de RAM initial
-@deffn {Procédure Scheme} raw-initrd @var{file-systems} @
- [#:linux-modules '()] [#:mapped-devices '()] @
-[#:keyboard-layout #f] @
-[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
-Renvoie une dérivation qui construit un initrd. @var{file-systems} est une
-liste de systèmes de fichiers à monter par l'initrd, éventuellement en plus
-du système de fichier racine spécifié sur la ligne de commande du noyau via
-@code{--root}. @var{linux-modules} est une liste de modules du noyau à
-charger au démarrage. @var{mapped-devices} est une liste de correspondances
-de périphériques à réaliser avant que les @var{file-systems} ne soient
-montés (@pxref{Périphériques mappés}). @var{helper-packages} est une liste de
-paquets à copier dans l'initrd. Elle peut inclure @code{e2fsck/static} ou
-d'autres paquets requis par l'initrd pour vérifier le système de fichiers
-racine.
-
-Lorsque la valeur est vraie, @var{keyboard-layout} est un enregistrement
-@code{<keyboard-layout>} dénotant la disposition du clavier désirée pour la
-console. Cela est effectuée avant que les @var{mapped-devices} ne soient
-créés et avant que les @var{file-systems} ne soient montés, de sorte que, si
-l'utilisateur au besoin de saisir une phrase de passe ou d'utiliser le REPL,
-cela arrive avec la disposition du clavier voulue.
-
-Lorsque @var{qemu-networking?} est vrai, paramètre le réseau avec les
-paramètres QEMU standards. Lorsque @var{virtio?} est vrai, charge des
-modules supplémentaires pour que l'initrd puisse être utilisé comme client
-QEMU avec les pilotes I/O para-virtualisés.
-
-Lorsque @var{volatile-root?} est vrai, le système de fichier racine est
-inscriptible mais tous les changements seront perdus.
-@end deffn
-
-@deffn {Procédure Scheme} base-initrd @var{file-systems} @
- [#:mapped-devices '()] [#:keyboard-layout #f] @
-[#:qemu-networking? #f] [#:volatile-root? #f] @
-[#:linux-modules '()]
-Renvoie un objet simili-fichier contenant un initrd générique, avec les
-modules du noyau de @var{linux}. @var{file-systems} est une liste de
-systèmes de fichiers à monter par l'initrd, éventuellement en plus du
-système de fichiers racine spécifié sur la ligne de commande du noyau via
-@code{--root}. @var{mapped-devices} est une liste de correspondances de
-périphériques à réaliser avant de monter les @var{file-systems}.
-
-Lorsque la valeur est vraie, @var{keyboard-layout} est un enregistrement
-@code{<keyboard-layout>} dénotant la disposition du clavier désirée pour la
-console. Cela est effectuée avant que les @var{mapped-devices} ne soient
-créés et avant que les @var{file-systems} ne soient montés, de sorte que, si
-l'utilisateur au besoin de saisir une phrase de passe ou d'utiliser le REPL,
-cela arrive avec la disposition du clavier voulue.
-
-@var{qemu-networking?} et @var{volatile-root?} se comportent comme pour
-@code{raw-initrd}.
-
-L'initrd est automatiquement remplie avec tous les modules du noyau requis
-pour @var{file-systems} et pour les options données. On peut lister des
-modules supplémentaires dans @var{linux-modules}. Ils seront ajoutés à
-l'initrd et chargés au démarrage dans l'ordre dans lequel ils apparaissent.
-@end deffn
-
-Inutile de le dire, les initrds que nous produisons et utilisons incluent
-une version de Guile liée statiquement, et le programme d'initialisation est
-un programme Guile. Cela donne beaucoup de flexibilité. La procédure
-@code{expression->initrd} construit un tel initrd, étant donné le programme
-à lancer dans cet initrd.
-
-@deffn {Procédure Scheme} expression->initrd @var{exp} @
- [#:guile %guile-static-stripped] [#:name "guile-initrd"]
-Renvoie un objet simili-fichier contenant un initrd Linux (une archive cpio
-compressée avec gzip) contenant @var{guile} et qui évalue @var{exp}, une
-G-expression, au démarrage. Toutes les dérivations référencées par
-@var{exp} sont automatiquement copiées dans l'initrd.
-@end deffn
-
-@node Configuration du chargeur d'amorçage
-@section Configuration du chargeur d'amorçage
-
-@cindex bootloader
-@cindex chargeur d'amorçage
-
-Le système d'exploitation supporte plusieurs chargeurs d'amorçage. La
-configuration du chargeur d'amorçage se fait avec la déclaration
-@code{bootloader-configuration}. Tous les champs de cette structure sont
-indépendants du chargeur d'amorçage sauf un, @code{bootloader} qui indique
-le chargeur d'amorçage à configurer et à installer.
-
-Certains chargeurs d'amorçage ne respectent pas tous les champs de
-@code{bootloader-configuration}. Par exemple, le chargeur d'amorçage
-extlinux ne supporte pas les thèmes et ignore donc le champ @code{theme}.
-
-@deftp {Type de données} bootloader-configuration
-Le type d'une déclaration de configuration de chargeur d'amorçage.
-
-@table @asis
-
-@item @code{bootloader}
-@cindex EFI, chargeur d'amorçage
-@cindex UEFI, chargeur d'amorçage
-@cindex BIOS, chargeur d'amorçage
-Le chargeur d'amorçage à utiliser, comme objet @code{bootloader}. Pour
-l'instant @code{grub-bootloader}, @code{grub-efi-bootloader},
-@code{extlinux-bootloader} et @code{u-boot-bootloader} sont supportés.
-
-@vindex grub-efi-bootloader
-@code{grub-efi-bootloader} permet de démarrer sur un système moderne qui
-utilise l'UEFI (@dfn{Unified Extensible Firmware Interface}). C'est ce que
-vous devriez utiliser si l'image d'installation contient un répertoire
-@file{/sys/firmware/efi} lorsque vous démarrez dessus sur votre machine.
-
-@vindex grub-bootloader
-@code{grub-bootloader} vous permet de démarrer en particulier sur des
-machines Intel en mode BIOS « legacy ».
-
-@cindex ARM, chargeurs d'amorçage
-@cindex AArch64, chargeurs d'amorçage
-Les chargeurs d'amorçage disponibles sont décrits dans les modules
-@code{(gnu bootloader @dots{})}. En particulier, @code{(gnu bootloader
-u-boot)} contient des définitions de chargeurs d'amorçage pour une large
-gamme de systèmes ARM et AArch, à l'aide du
-@uref{http://www.denx.de/wiki/U-Boot/, chargeur d'amorçage U-Boot}
-
-@item @code{target}
-C'est une chaîne qui dénote la cible sur laquelle installer le chargeur
-d'amorçage.
-
-L'interprétation dépend du chargeur d'amorçage en question. Pour
-@code{grub-bootloader} par exemple, cela devrait être un nom de périphérique
-compris par la commande @command{installer} du chargeur d'amorçage, comme
-@code{/dev/sda} ou @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU
-GRUB Manual}). Pour @code{grub-efi-bootloader}, cela devrait être le point
-de montage du système de fichiers EFI, typiquement @file{/boot/efi}.
-
-@item @code{menu-entries} (par défaut : @code{()})
-Une liste éventuellement vide d'objets @code{menu-entry} (voir plus bas),
-dénotant les entrées qui doivent apparaître dans le menu du chargeur
-d'amorçage, en plus de l'entrée pour le système actuel et l'entrée pointant
-vers les générations précédentes.
-
-@item @code{default-entry} (par défaut : @code{0})
-L'index de l'entrée du menu de démarrage par défaut. L'index 0 correspond
-au système actuel.
-
-@item @code{timeout} (par défaut : @code{5})
-Le nombre de secondes à attendre une entrée clavier avant de démarrer.
-Indiquez 0 pour démarre immédiatement, et -1 pour attendre indéfiniment.
-
-@cindex disposition du clavier, pour le chargeur d'amorçage
-@item @code{keyboard-layout} (par défaut : @code{#f})
-Si c'est @code{#f}, le menu du chargeur d'amorçage (s'il y en a un) utilise
-la disposition du clavier par défaut, normalement pour l'anglais américain
-(« qwerty »).
-
-Sinon, cela doit être un objet @code{keyboard-layout} (@pxref{Disposition du clavier}).
-
-@quotation Remarque
-Cette option est actuellement ignorée par les chargeurs d'amorçage autre que
-@code{grub} et @code{grub-efi}.
-@end quotation
-
-@item @code{theme} (par défaut : @var{#f})
-L'objet de thème du chargeur d'amorçage décrivant le thème utilisé. Si
-aucun thème n'est fournit, certains chargeurs d'amorçage peuvent utiliser un
-thème par défaut, c'est le cas de GRUB.
-
-@item @code{terminal-outputs} (par défaut : @code{'gfxterm})
-Les terminaux de sortie utilisés par le menu de démarrage du chargeur
-d'amorçage, en tant que liste de symboles. GRUB accepte les valeurs
-@code{console}, @code{serial}, @code{serial_@{0-3@}}, @code{gfxterm},
-@code{vga_text}, @code{mda_text}, @code{morse} et @code{pkmodem}. Ce champ
-correspond à la variable GRUB @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
-configuration,,, grub,GNU GRUB manual}).
-
-@item @code{terminal-inputs} (par défaut : @code{'()})
-Les terminaux d'entrée utilisés par le menu de démarrage du chargeur
-d'amorçage, en tant que liste de symboles. Pour GRUB, la valeur par défaut
-est le terminal natif de la plate-forme déterminé à l'exécution. GRUB
-accepte les valeurs @code{console}, @code{serial}, @code{serial_@{0-3@}},
-@code{at_keyboard} et @code{usb_keyboard}. Ce champ correspond à la
-variable GRUB @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,,
-grub,GNU GRUB manual}).
-
-@item @code{serial-unit} (par défaut : @code{#f})
-L'unitié série utilisée par le chargeur d'amorçage, en tant qu'entier entre
-0 et 3. Pour GRUB, il est choisi à l'exécution ; actuellement GRUB choisi
-0, ce qui correspond à COM1 (@pxref{Serial terminal,,, grub,GNU GRUB
-manual}).
-
-@item @code{serial-speed} (par défaut : @code{#f})
-La vitesse de l'interface série, en tant qu'entier. Pour GRUB, la valeur
-par défaut est choisie à l'exécution ; actuellement GRUB choisi
-9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
-@end table
-
-@end deftp
-
-@cindex dual boot
-@cindex menu de démarrage
-Si vous voulez lister des entrées du menu de démarrage supplémentaires via
-le champ @code{menu-entries} ci-dessus, vous devrez les créer avec la forme
-@code{menu-entry}. Par exemple, imaginons que vous souhaitiez pouvoir
-démarrer sur une autre distro (c'est difficile à concevoir !), vous pourriez
-alors définir une entrée du menu comme ceci :
-
-@example
-(menu-entry
- (label "L'autre distro")
- (linux "/boot/old/vmlinux-2.6.32")
- (linux-arguments '("root=/dev/sda2"))
- (initrd "/boot/old/initrd"))
-@end example
-
-Les détails suivent.
-
-@deftp {Type de données} menu-entry
-Le type d'une entrée dans le menu du chargeur d'amorçage.
-
-@table @asis
-
-@item @code{label}
-L'étiquette à montrer dans le menu — p.@: ex.@: @code{"GNU"}.
-
-@item @code{linux}
-L'image du noyau Linux à démarrer, par exemple :
-
-@example
-(file-append linux-libre "/bzImage")
-@end example
-
-Pour GRUB, il est aussi possible de spécifier un périphérique explicitement
-dans le chemin de fichier avec la convention de nommage de GRUB
-(@pxref{Naming convention,,, grub, GNU GRUB manual}), par exemple :
-
-@example
-"(hd0,msdos1)/boot/vmlinuz"
-@end example
-
-Si le périphérique est spécifié explicitement comme au-dessus, le champ
-@code{device} est complètement ignoré.
-
-@item @code{linux-arguments} (par défaut : @code{()})
-La liste des arguments de la ligne de commande du noyau supplémentaires —
-p.@: ex.@: @code{("console=ttyS0")}.
-
-@item @code{initrd}
-Une G-expression ou une chaîne dénotant le nom de fichier du disque de RAM
-initial à utiliser (@pxref{G-Expressions}).
-@item @code{device} (par défaut : @code{#f})
-Le périphérique où le noyau et l'initrd se trouvent — c.-à-d.@: pour GRUB,
-l'option @dfn{root} de cette entrée de menu (@pxref{root,,, grub, GNU GRUB
-manual}).
-
-Cela peut être une étiquette de système de fichiers (une chaîne), un UUID de
-système de fichiers (un vecteur d'octets, @pxref{Systèmes de fichiers}) ou
-@code{#f}, auquel cas le chargeur d'amorçage recherchera le périphérique
-contenant le fichier spécifié par le champ @code{linux} (@pxref{search,,,
-grub, GNU GRUB manual}). Cela ne doit @emph{pas} être un nom de
-périphérique donné par l'OS comme @file{/dev/sda1}.
-
-@end table
-@end deftp
-
-@c FIXME: Write documentation once it's stable.
-For now only GRUB has theme support. GRUB themes are created using the
-@code{grub-theme} form, which is not documented yet.
-
-@defvr {Variable Scheme} %default-theme
-C'est le thème par défaut de GRUB utilisé par le système d'exploitation si
-aucun champ @code{theme} n'est spécifié dans l'enregistrement
-@code{bootloader-configuration}.
-
-Il contient une image de fond sympathique avec les logos de GNU et de Guix.
-@end defvr
-
-
-@node Invoquer guix system
-@section Invoquer @code{guix system}
-
-Une fois que vous avez écrit une déclaration de système d'exploitation comme
-nous l'avons vu dans les sections précédentes, elle peut être instanciée
-avec la commande @command{guix system}. Voici le résumé de la commande :
-
-@example
-guix system @var{options}@dots{} @var{action} @var{file}
-@end example
-
-@var{file} doit être le nom d'un fichier contenant une déclaration
-@code{operating-system}. @var{action} spécifie comme le système
-d'exploitation est instancié. Actuellement les valeurs suivantes sont
-supportées :
-
-@table @code
-@item search
-Affiche les définitions des types de services disponibles qui correspondent
-aux expressions régulières données, triées par pertinence :
-
-@example
-$ guix system search console font
-name: console-fonts
-location: gnu/services/base.scm:773:2
-extends: shepherd-root
-description: Installe des polices données sur les ttys spécifiés (les polices sont par console virtuelle sous GNU/Linux). la valeur de ces service est une liste de paires
-+ de tty/police comme ceci :
-+
-+ '(("tty1" . "LatGrkCyr-8x16"))
-relevance: 16
-
-name: mingetty
-location: gnu/services/base.scm:1144:2
-extends: shepherd-root
-description: Fournit la connexion en console avec le programme `mingetty'.
-relevance: 4
-
-name: login
-location: gnu/services/base.scm:819:2
-extends: pam
-description: Fournit un service de connexion en console tel que spécifié par sa valeur de configuration, un objet `login-configuration'.
-relevance: 4
-
-@dots{}
-@end example
-
-Comme pour @command{guix package --search}, le résultat est écrit au format
-@code{recutils}, ce qui rend facile le filtrage de la sortie (@pxref{Top,
-GNU recutils databases,, recutils, GNU recutils manual}).
-
-@item reconfigure
-Construit le système d'exploitation décrit dans @var{file}, l'active et
-passe dessus@footnote{Cette action (et les action liées que sont
-@code{switch-generation} et @code{roll-back}) ne sont utilisables que sur
-les systèmes sous Guix System.}.
-
-Cela met en application toute la configuration spécifiée dans @var{file} :
-les comptes utilisateurs, les services du système, la liste globale des
-paquets, les programmes setuid, etc. La commande démarre les services
-systèmes spécifiés dans @var{file} qui ne sont pas actuellement lancés ; si
-un service est actuellement exécuté cette commande s'arrange pour qu'il soit
-mis à jour la prochaine fois qu'il est stoppé (p.@: ex@: par @code{herd stop
-X} ou @code{herd restart X}).
-
-Cette commande crée une nouvelle génération dont le numéro est un de plus
-que la génération actuelle (rapportée par @command{guix system
-list-generations}). Si cette génération existe déjà, elle sera réécrite.
-Ce comportement correspond à celui de @command{guix package}
-(@pxref{Invoquer guix package}).
-
-Elle ajoute aussi une entrée de menu du chargeur d'amorçage pour la nouvelle
-configuration, à moins que @option{--no-bootloader} ne soit passé. Pour
-GRUB, elle déplace les entrées pour les anciennes configurations dans un
-sous-menu, ce qui vous permet de choisir une ancienne génération au
-démarrage si vous en avez besoin.
-
-@quotation Remarque
-@c The paragraph below refers to the problem discussed at
-@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
-Il est grandement recommandé de lancer @command{guix pull} une fois avant de
-lancer @command{guix system reconfigure} pour la première fois
-(@pxref{Invoquer guix pull}). Sans cela, vous verriez une version plus
-ancienne de Guix une fois @command{reconfigure} terminé.
-@end quotation
-
-@item switch-generation
-@cindex générations
-Passe à une génération existante du système. Cette action change
-automatiquement le profil système vers la génération spécifiée. Elle
-réarrange aussi les entrées existantes du menu du chargeur d'amorçage du
-système. Elle fait de l'entrée du menu pour la génération spécifiée
-l'entrée par défaut et déplace les entrées pour les autres générations dans
-un sous-menu, si cela est supporté par le chargeur d'amorçage utilisé. Lors
-du prochain démarrage du système, la génération du système spécifiée sera
-utilisée.
-
-Le chargeur d'amorçage lui-même n'est pas réinstallé avec cette commande.
-Ainsi, le chargeur d'amorçage est utilisé avec un fichier de configuration
-plus à jour.
-
-La génération cible peut être spécifiée explicitement par son numéro de
-génération. Par exemple, l'invocation suivante passerait à la génération 7
-du système :
-
-@example
-guix system switch-generation 7
-@end example
-
-La génération cible peut aussi être spécifiée relativement à la génération
-actuelle avec la forme @code{+N} ou @code{-N}, où @code{+3} signifie « trois
-générations après la génération actuelle » et @code{-1} signifie « une
-génération précédent la génération actuelle ». Lorsque vous spécifiez un
-nombre négatif comme @code{-1}, il doit être précédé de @code{--} pour
-éviter qu'il ne soit compris comme une option. Par exemple :
-
-@example
-guix system switch-generation -- -1
-@end example
-
-Actuellement, l'effet de l'invocation de cette action est @emph{uniquement}
-de passer au profil du système vers une autre génération existante et de
-réarranger le menu du chargeur d'amorçage. Pour vraiment commencer à
-utiliser la génération spécifiée, vous devez redémarrer après avoir lancé
-cette action. Dans le futur, elle sera corrigée pour faire la même chose
-que @command{reconfigure}, comme réactiver et désactiver les services.
-
-Cette action échouera si la génération spécifiée n'existe pas.
-
-@item roll-back
-@cindex revenir en arrière
-Passe à la génération précédente du système. Au prochain démarrage, la
-génération précédente sera utilisée. C'est le contraire de
-@command{reconfigure}, et c'est exactement comme invoquer
-@command{switch-generation} avec pour argument @code{-1}.
-
-Actuellement, comme pour @command{switch-generation}, vous devez redémarrer
-après avoir lancé cette action pour vraiment démarrer sur la génération
-précédente du système.
-
-@item delete-generations
-@cindex supprimer des générations du système
-@cindex gagner de la place
-Supprimer des générations du système, ce qui les rend disponibles pour le
-ramasse-miettes (@pxref{Invoquer guix gc}, pour des informations sur la
-manière de lancer le « ramasse-miettes »).
-
-Cela fonctionne comme pour @command{guix package --delete-generations}
-(@pxref{Invoquer guix package, @code{--delete-generations}}). Avec aucun
-argument, toutes les générations du système sauf la génération actuelle sont
-supprimées :
-
-@example
-guix system delete-generations
-@end example
-
-Vous pouvez aussi choisir les générations que vous voulez supprimer.
-L'exemple plus bas supprime toutes les génération du système plus vieilles
-que deux mois :
-
-@example
-guix system delete-generations 2m
-@end example
-
-Lancer cette commande réinstalle automatiquement le chargeur d'amorçage avec
-une liste à jour d'entrées de menu — p.@: ex.@: le sous-menu « anciennes
-générations » dans GRUB ne liste plus les générations qui ont été
-supprimées.
-
-@item build
-Construit la dérivation du système d'exploitation, ce qui comprend tous les
-fichiers de configuration et les programmes requis pour démarrer et lancer
-le système. Cette action n'installe rien.
-
-@item init
-Rempli le répertoire donné avec tous les fichiers nécessaires à lancer le
-système d'exploitation spécifié dans @var{file}. C'est utile pour la
-première installation de Guix System. Par exemple :
-
-@example
-guix system init my-os-config.scm /mnt
-@end example
-
-copie tous les éléments du dépôt requis par la configuration spécifiée dans
-@file{my-os-config.scm} dans @file{/mnt}. Cela comprend les fichiers de
-configuration, les paquets, etc. Elle crée aussi d'autres fichiers
-essentiels requis pour que le système fonctionne correctement — p.@: ex.@:
-les répertoires @file{/etc}, @file{/var} et @file{/run} et le fichier
-@file{/bin/sh}.
-
-Cette commande installe aussi le chargeur d'amorçage sur la cible spécifiée
-dans @file{my-os-config}, à moins que l'option @option{--no-bootloader} ne
-soit passée.
-
-@item vm
-@cindex machine virtuelle
-@cindex VM
-@anchor{guix system vm}
-Construit une machine virtuelle qui contient le système d'exploitation
-déclaré dans @var{file} et renvoie un script pour lancer cette machine
-virtuelle (VM).
-
-@quotation Remarque
-Les actions @code{vm} et les autres plus bas peuvent utiliser la prise en
-charge KVM du noyau Linux-libre. Plus spécifiquement, si la machine prend
-en charge la virtualisation matérielle, le module noyau KVM correspondant
-devrait être chargé, et le nœud de périphérique @file{/dev/kvm} devrait
-exister et être lisible et inscriptible pour l'utilisateur et pour les
-utilisateurs de construction du démon (@pxref{Réglages de l'environnement de construction}).
-@end quotation
-
-Les arguments passés au script sont passés à QEMU comme dans l'exemple
-ci-dessous, qui active le réseau et demande 1@tie{}Go de RAM pour la machine
-émulée :
-
-@example
-$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
-@end example
-
-La VM partage sont dépôt avec le système hôte.
-
-Vous pouvez partager des fichiers supplémentaires entre l'hôte et la VM avec
-les options en ligne de commande @code{--share} et @code{--expose} : la
-première spécifie un répertoire à partager avec accès en écriture, tandis
-que le deuxième fournit un accès en lecture-seule au répertoire partagé.
-
-L'exemple ci-dessous crée une VM dans laquelle le répertoire personnel de
-l'utilisateur est accessible en lecture-seule, et où le répertoire
-@file{/exchange} est une correspondance en lecture-écriture à
-@file{$HOME/tmp} sur l'hôte :
-
-@example
-guix system vm my-config.scm \
- --expose=$HOME --share=$HOME/tmp=/exchange
-@end example
-
-Sur GNU/Linux, le comportement par défaut consiste à démarrer directement
-sur le noyau ; cela a l'avantage de n'avoir besoin que d'une toute petite
-image disque puisque le dépôt de l'hôte peut ensuite être monté.
-
-L'option @code{--full-boot} force une séquence de démarrage complète, en
-commençant par le chargeur d'amorçage. Cela requiert plus d'espace disque
-puisqu'une image racine contenant au moins le noyau, l'initrd et les
-fichiers de données du chargeur d'amorçage doit être créé. On peut utiliser
-l'option @code{--image-size} pour spécifier la taille de l'image.
-
-@cindex Images système, création en divers formats
-@cindex Créer des images systèmes sous différents formats
-@item vm-image
-@itemx disk-image
-@itemx docker-image
-Renvoie une machine virtuelle, une image disque ou une image Docker du
-système d'exploitation déclaré dans @var{file} qui se suffit à elle-même.
-Par défaut, @command{guix system} estime la taille de l'image requise pour
-stocker le système, mais vous pouvez utiliser l'option @option{--image-size}
-pour spécifier une valeur. Les images Docker sont construites pour contenir
-exactement ce dont elles ont besoin, donc l'option @option{--image-size} est
-ignorée dans le cas de @code{docker-image}.
-
-Vous pouvez spécifier le type de système de fichiers racine avec l'option
-@option{--file-system-type}. La valeur par défaut est @code{ext4}.
-
-Lorsque vous utilisez @code{vm-image}, l'image renvoyée est au format qcow2,
-que l'émulateur QEMU peut utiliser efficacement. @xref{Lancer Guix dans une VM}, pour plus d'informations sur la manière de lancer l'image dans une
-machine virtuelle.
-
-Lorsque vous utilisez @code{disk-image}, une image disque brute est produite
-; elle peut être copiée telle quelle sur un périphérique USB. En supposant
-que @code{/dev/sdc} est le périphérique correspondant à une clef USB, on
-peut copier l'image dessus avec la commande suivante :
-
-@example
-# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
-@end example
-
-En utilisant @code{docker-image}, on produit une image Docker. Guix
-construit l'image de zéro, et non à partir d'une image Docker de base
-pré-existante. En conséquence, elle contient @emph{exactly} ce que vous
-avez défini dans le fichier de configuration du système. Vous pouvez
-ensuite charger l'image et lancer un conteneur Docker avec des commande
-comme :
-
-@example
-image_id="$(docker load < guix-system-docker-image.tar.gz)"
-docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
- --entrypoint /var/guix/profiles/system/profile/bin/guile \\
- $image_id /var/guix/profiles/system/boot
-@end example
-
-Cette commande démarre un nouveau conteneur Docker à partir de l'image
-spécifiée. Il démarrera le système Guix de la manière habituelle, ce qui
-signifie qu'il démarrera tous les services que vous avez définis dans la
-configuration du système d'exploitation. En fonction de ce que vous lancez
-dans le conteneur Docker, il peut être nécessaire de donner des permissions
-supplémentaires au conteneur. Par exemple, si vous voulez construire des
-paquets avec Guix dans le conteneur Docker, vous devriez passer
-@option{--privileged} à @code{docker run}.
-
-@item conteneur
-Renvoie un script qui lance le système d'exploitation déclaré dans
-@var{file} dans un conteneur. Les conteneurs sont un ensemble de mécanismes
-d'isolation légers fournis par le noyau Linux-libre. Les conteneurs sont
-substantiellement moins gourmands en ressources que les machines virtuelles
-complètes car le noyau, les objets partagés et d'autres ressources peuvent
-être partagés avec le système hôte ; cela signifie aussi une isolation moins
-complète.
-
-Actuellement, le script doit être lancé en root pour pouvoir supporter plus
-d'un utilisateur et d'un groupe. Le conteneur partage son dépôt avec le
-système hôte.
-
-Comme avec l'action @code{vm} (@pxref{guix system vm}), des systèmes de
-fichiers supplémentaires peuvent être partagés entre l'hôte et le conteneur
-avec les options @option{--share} et @option{--expose} :
-
-@example
-guix system container my-config.scm \
- --expose=$HOME --share=$HOME/tmp=/exchange
-@end example
-
-@quotation Remarque
-Cette option requiert Linux-libre ou supérieur.
-@end quotation
-
-@end table
-
-@var{options} peut contenir n'importe quelle option commune de construction
-(@pxref{Options de construction communes}). En plus, @var{options} peut contenir l'une
-de ces options :
-
-@table @option
-@item --expression=@var{expr}
-@itemx -e @var{expr}
-Considère le système d'exploitation en lequel s'évalue @var{expr}. C'est
-une alternative à la spécification d'un fichier qui s'évalue en un système
-d'exploitation. C'est utilisé pour générer l'installateur du système Guix
-(@pxref{Construire l'image d'installation}).
-
-@item --system=@var{système}
-@itemx -s @var{système}
-Essaye de construire pour @var{system} au lieu du type du système hôte.
-Cela fonction comme pour @command{guix build} (@pxref{Invoquer guix build}).
-
-@item --derivation
-@itemx -d
-Renvoie le nom du fichier de dérivation du système d'exploitation donné sans
-rien construire.
-
-@item --file-system-type=@var{type}
-@itemx -t @var{type}
-Pour l'action @code{disk-image}, crée un système de fichier du @var{type}
-donné sur l'image.
-
-Lorsque cette option est omise, @command{guix system} utilise @code{ext4}.
-
-@cindex format ISO-9660
-@cindex format d'image de CD
-@cindex format d'image de DVD
-@code{--file-system-type=iso9660} produit une image ISO-9660, qu'il est
-possible de graver sur un CD ou un DVD.
-
-@item --image-size=@var{size}
-Pour les actions @code{vm-image} et @code{disk-image}, crée une image de la
-taille donnée @var{size}. @var{size} peut être un nombre d'octets ou
-contenir un suffixe d'unité (@pxref{Block size, size specifications,,
-coreutils, GNU Coreutils}).
-
-Lorsque cette option est omise, @command{guix system} calcule une estimation
-de la taille de l'image en fonction de la taille du système déclaré dans
-@var{file}.
-
-@item --root=@var{fichier}
-@itemx -r @var{fichier}
-Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
-en tant que racine du ramasse-miettes.
-
-@item --skip-checks
-Passe les vérifications de sécurité avant l'installation.
-
-Par défaut, @command{guix system init} et @command{guix system reconfigure}
-effectuent des vérifications de sécurité : ils s'assurent que les systèmes
-de fichiers qui apparaissent dans la déclaration @code{operating-system}
-existent vraiment (@pxref{Systèmes de fichiers}) et que les modules de noyau Linux
-qui peuvent être requis au démarrage sont listés dans @code{initrd-modules}
-(@pxref{Disque de RAM initial}). Passer cette option saute ces vérifications
-complètement.
-
-@cindex on-error
-@cindex stratégie on-error
-@cindex stratégie en cas d'erreur
-@item --on-error=@var{strategy}
-Applique @var{strategy} lorsqu'une erreur arrive lors de la lecture de
-@var{file}. @var{strategy} peut être l'une des valeurs suivantes :
-
-@table @code
-@item nothing-special
-Rapporte l'erreur de manière concise et quitte. C'est la stratégie par
-défaut.
-
-@item backtrace
-Pareil, mais affiche aussi une trace de débogage.
-
-@item debug
-Rapporte l'erreur et entre dans le débogueur Guile. À partir de là, vous
-pouvez lancer des commandes comme @code{,bt} pour obtenir une trace de
-débogage, @code{,locals} pour afficher les valeurs des variables locales et
-plus généralement inspecter l'état du programme. @xref{Debug Commands,,,
-guile, GNU Guile Reference Manual}, pour une liste de commandes de débogage
-disponibles.
-@end table
-@end table
-
-Une fois que vous avez construit, re-configuré et re-re-configuré votre
-installation Guix, vous pourriez trouver utile de lister les générations du
-système disponibles sur le disque — et que vous pouvez choisir dans le menu
-du chargeur d'amorçage :
-
-@table @code
-
-@item list-generations
-Affiche un résumé de chaque génération du système d'exploitation disponible
-sur le disque, dans un format lisible pour un humain. C'est similaire à
-l'option @option{--list-generations} de @command{guix package}
-(@pxref{Invoquer guix package}).
-
-Éventuellement, on peut spécifier un motif, avec la même syntaxe utilisée
-pour @command{guix package --list-generations}, pour restreindre la liste
-des générations affichées. Par exemple, la commande suivante affiche les
-générations de moins de 10 jours :
-
-@example
-$ guix system list-generations 10d
-@end example
-
-@end table
-
-La commande @command{guix system} a même plus à proposer ! Les
-sous-commandes suivantes vous permettent de visualiser comme vos services
-systèmes sont liés les uns aux autres :
-
-@anchor{system-extension-graph}
-@table @code
-
-@item extension-graph
-Affiche le @dfn{graphe d'extension des services} du système d'exploitation
-défini dans @var{file} au format Dot/Graphviz sur la sortie standard
-(@pxref{Composition de services}, pour plus d'informations sur l'extension des
-services).
-
-La commande :
-
-@example
-$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
-@end example
-
-produit un fichier PDF montrant les relations d'extension entre les
-services.
-
-@anchor{system-shepherd-graph}
-@item shepherd-graph
-Affiche le @dfn{graphe de dépendance} des services shepherd du système
-d'exploitation défini dans @var{file} au format Dot/Graphviz sur la sortie
-standard. @xref{Services Shepherd}, pour plus d'informations et un exemple
-de graphe.
-
-@end table
-
-@node Lancer Guix dans une VM
-@section Exécuter Guix sur une machine virtuelle
-
-@cindex machine virtuelle
-Pour exécuter GuixSD sur une machine virtuelle (VM), on peut soit utiliser
-l'image de VM GuixSD pré-construite sur
-@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-vm-image-@value{VERSION}.@var{système}.xz}
-ou construire sa propre image de machine virtuelle avec @command{guix system
-vm-image} (@pxref{Invoquer guix system}). L'image renvoyée est au format
-qcow2, que l'@uref{http://qemu.org/,émulateur QEMU} peut utiliser
-efficacement.
-
-@cindex QEMU
-Si vous construisez votre propre image, vous devez la copier en dehors du
-dépôt (@pxref{Le dépôt}) et vous donner la permission d'écrire sur la copie
-avant de pouvoir l'utiliser. Lorsque vous invoquez QEMU, vous devez choisir
-un émulateur système correspondant à votre plate-forme matérielle. Voici
-une invocation minimale de QEMU qui démarrera le résultat de @command{guix
-system vm-image} sur un matériel x8_64 :
-
-@example
-$ qemu-system-x86_64 \
- -net user -net nic,model=virtio \
- -enable-kvm -m 256 /tmp/qemu-image
-@end example
-
-Voici la signification de ces options :
-
-@table @code
-@item qemu-system-x86_64
-Cela spécifie la plate-forme matérielle à émuler. Elle doit correspondre à
-l'hôte.
-
-@item -net user
-Active la pile réseau non privilégiée en mode utilisateur. L'OS émulé peut
-accéder à l'hôte mais pas l'inverse. C'est la manière la plus simple de
-connecter le client.
-
-@item -net nic,model=virtio
-Vous devez créer une interface réseau d'un modèle donné. Si vous ne créez
-pas de NIC, le démarrage échouera. En supposant que votre plate-forme est
-x86_64, vous pouvez récupérer une liste des modèles de NIC disponibles en
-lançant @command{qemu-system-x86_64 -net nic,model=help}.
-
-@item -enable-kvm
-Si votre système a des extensions de virtualisation matérielle, activer le
-support des machines virtuelles de Linux (KVM) accélérera les choses.
-
-@item -m 256
-RAM disponible sur l'OS émulé, en mébioctets. La valeur par défaut est
-128@tie{}Mo, ce qui peut ne pas suffire pour certaines opérations.
-
-@item /tmp/qemu-image
-Le nom de fichier de l'image qcow2.
-@end table
-
-Le script @command{run-vm.sh} par défaut renvoyé par une invocation de
-@command{guix system vm} n'ajoute pas le drapeau @command{-net user} par
-défaut. Pour avoir accès au réseau dans la vm, ajoutez le
-@code{(dhcp-client-service)} à votre définition et démarrez la VM avec
-@command{`guix system vm config.scm` -net user}. Un problème important avec
-@command{-net user} pour le réseau, est que @command{ping} ne fonctionnera
-pas, car il utilise le protocole ICMP. Vous devrez utiliser une autre
-commande pour vérifier la connectivité réseau, par exemple @command{guix
-download}.
-
-@subsection Se connecter par SSH
-
-@cindex SSH
-@cindex serveur SSH
-Pour activer SSH dans une VM vous devez ajouter un serveur SSH comme
-@code{(dropbear-service)} ou @code{(lsh-service)} à votre VM. Le service
-@code{(lsh-service)} ne peut actuellement pas démarrer sans supervision. Il
-a besoin que vous tapiez quelques caractères pour initialiser le générateur
-d'aléatoire. En plus vous devez transférer le port 22, par défaut, à
-l'hôte. Vous pouvez faire cela avec
-
-@example
-`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
-@end example
-
-Pour vous connecter à la VM vous pouvez lancer
-
-@example
-ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
-@end example
-
-Le @command{-p} donne le port auquel vous voulez vous connecter à
-@command{ssh}, @command{-o UserKnownHostsFile=/dev/null} évite que
-@command{ssh} ne se plaigne à chaque fois que vous modifiez le fichier
-@command{config.scm} et @command{-o StrictHostKeyChecking=no} évite que vous
-n'ayez à autoriser une connexion à un hôte inconnu à chaque fois que vous
-vous connectez.
-
-@subsection Utiliser @command{virt-viewer} avec Spice
-
-Alternativement au client graphique @command{qemu} par défaut vous pouvez
-utiliser @command{remote-viewer} du paquet @command{virt-viewer}. Pour vous
-connecter, passez le drapeau @command{-spice port=5930,disable-ticketing} à
-@command{qemu}. Voir les sections précédentes pour plus d'informations sur
-comment faire cela.
-
-Spice a aussi de chouettes fonctionnalités comme le partage de votre
-presse-papier avec la VM. Pour activer cela vous devrez aussi passer les
-drapeaux suivants à @command{qemu} :
-
-@example
--device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
--chardev spicevmc,name=vdagent,id=vdagent
--device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
-name=com.redhat.spice.0
-@end example
-
-Vous devrez aussi ajouter le @pxref{Services divers, Spice service}.
-
-@node Définir des services
-@section Définir des services
-
-Les sections précédentes montrent les services disponibles et comment on
-peut les combiner dans une déclaration @code{operating-system}. Mais, déjà,
-comment les définir ? Et qu'est-ce qu'un service au fait ?
-
-@menu
-* Composition de services:: Le modèle de composition des services.
-* Types service et services:: Types et services.
-* Référence de service:: Référence de l'API@.
-* Services Shepherd:: Un type de service particulier.
-@end menu
-
-@node Composition de services
-@subsection Composition de services
-
-@cindex services
-@cindex démons
-Ici nous définissons un @dfn{service} comme étant, assez largement, quelque
-chose qui étend la fonctionnalité d'un système d'exploitation. Souvent un
-service est un processus — un @dfn{démon} — démarré lorsque le système
-démarre : un serveur ssh, un serveur web, le démon de construction de Guix,
-etc. Parfois un service est un démon dont l'exécution peut être déclenchée
-par un autre démon — p.@: ex.@: un serveur FTP démarré par @command{inetd}
-ou un service D-Bus activé par @command{dbus-daemon}. Parfois, un service
-ne correspond pas à un démon. Par exemple, le service « de comptes »
-récupère la liste des comptes utilisateurs et s'assure qu'ils existent bien
-lorsque le système est lancé ; le service « udev » récupère les règles de
-gestion des périphériques et les rend disponible au démon eudev ; le service
-@file{/etc} rempli le répertoire @file{/etc} du système.
-
-@cindex extensions de service
-Les services de Guix sont connectés par des @dfn{extensions}. Par exemple,
-le service ssh @dfn{étend} le Shepherd — le système d'initialisation de
-GuixSD, qui tourne en tant que PID@tie{}1 — en lui donnant les lignes de
-commande pour démarrer et arrêter le démon ssh (@pxref{Services réseau,
-@code{lsh-service}}) ; le service UPower étend le service D-Bus en lui
-passant sa spécification @file{.service} et étend le service udev en lui
-passant des règles de gestion de périphériques (@pxref{Services de bureaux,
-@code{upower-service}}) ; le démon Guix étend le Shepherd en lui passant les
-lignes de commande pour démarrer et arrêter le démon et étend le service de
-comptes en lui passant une liste des comptes utilisateurs de constructions
-requis (@pxref{Services de base}).
-
-En définitive, les services et leurs relation « d'extensions » forment un
-graphe orienté acyclique (DAG). Si nous représentons les services comme des
-boîtes et les extensions comme des flèches, un système typique pourrait
-fournir quelque chose comme cela :
-
-@image{images/service-graph,,5in,Graphe d'extension des services typique.}
-
-@cindex service système
-En bas, on voit le @dfn{service système} qui produit le répertoire contenant
-tout et lançant et démarrant le système, renvoyé par la commande
-@command{guix system build}. @xref{Référence de service}, pour apprendre les
-autres types de services montrés ici. @xref{system-extension-graph, the
-@command{guix system extension-graph} command}, pour plus d'informations sur
-la manière de générer cette représentation pour une définition de système
-d'exploitation particulière.
-
-@cindex types de services
-Techniquement, les développeurs peuvent définir des @dfn{types de services}
-pour exprimer ces relations. Il peut y avoir n'importe quel quantité de
-services d'un type donné sur le système — par exemple, un système sur lequel
-tournent deux instances du serveur ssh de GNU (lsh) a deux instance de
-@var{lsh-service-type}, avec des paramètres différents.
-
-La section suivante décrit l'interface de programmation des types de
-services et des services.
-
-@node Types service et services
-@subsection Types service et services
-
-Un @dfn{type de service} est un nœud dans le DAG décrit plus haut.
-Commençons avec un exemple simple, le type de service pour le démon de
-construction de Guix (@pxref{Invoquer guix-daemon}) :
-
-@example
-(define guix-service-type
- (service-type
- (name 'guix)
- (extensions
- (list (service-extension shepherd-root-service-type guix-shepherd-service)
- (service-extension account-service-type guix-accounts)
- (service-extension activation-service-type guix-activation)))
- (default-value (guix-configuration))))
-@end example
-
-@noindent
-Il définit trois choses :
-
-@enumerate
-@item
-Un nom, dont le seul but de rendre l'inspection et le débogage plus faciles.
-
-@item
-Une liste d'@dfn{extensions de services}, où chaque extension désigne le
-type de service cible et une procédure qui, étant donné les paramètres du
-service, renvoie une liste d'objets pour étendre le service de ce type.
-
-Chaque type de service a au moins une extension de service. La seule
-exception est le @dfn{type de service boot}, qui est le service ultime.
-
-@item
-Éventuellement, une valeur par défaut pour les instances de ce type.
-@end enumerate
-
-In this example, @code{guix-service-type} extends three services:
-
-@table @code
-@item shepherd-root-service-type
-The @code{guix-shepherd-service} procedure defines how the Shepherd service
-is extended. Namely, it returns a @code{<shepherd-service>} object that
-defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
-
-@item account-service-type
-This extension for this service is computed by @code{guix-accounts}, which
-returns a list of @code{user-group} and @code{user-account} objects
-representing the build user accounts (@pxref{Invoquer guix-daemon}).
-
-@item activation-service-type
-Here @code{guix-activation} is a procedure that returns a gexp, which is a
-code snippet to run at ``activation time''---e.g., when the service is
-booted.
-@end table
-
-Un service de ce type est instancié de cette manière :
-
-@example
-(service guix-service-type
- (guix-configuration
- (build-accounts 5)
- (use-substitutes? #f)))
-@end example
-
-Le deuxième argument de la forme @code{service} est une valeur représentant
-les paramètres de cet instance spécifique du service.
-@xref{guix-configuration-type, @code{guix-configuration}}, pour plus
-d'informations sur le type de données @code{guix-configuration}. Lorsque la
-valeur est omise, la valeur par défaut spécifiée par
-@code{guix-service-type} est utilisée :
-
-@example
-(service guix-service-type)
-@end example
-
-@code{guix-service-type} is quite simple because it extends other services
-but is not extensible itself.
-
-@c @subsubsubsection Extensible Service Types
-
-Le type de service pour un service @emph{extensible} ressemble à ceci :
-
-@example
-(define udev-service-type
- (service-type (name 'udev)
- (extensions
- (list (service-extension shepherd-root-service-type
- udev-shepherd-service)))
-
- (compose concatenate) ; concatène la liste des règles
- (extend (lambda (config rules)
- (match config
- (($ <udev-configuration> udev initial-rules)
- (udev-configuration
- (udev udev) ; le paquet udev à utiliser
- (rules (append initial-rules rules)))))))))
-@end example
-
-This is the service type for the
-@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
-daemon}. Compared to the previous example, in addition to an extension of
-@code{shepherd-root-service-type}, we see two new fields:
-
-@table @code
-@item compose
-C'est la procédure pour @dfn{composer} la liste des extensions de services
-de ce type.
-
-Les services peuvent étendre le service udev en lui passant des listes de
-règles ; on compose ces extensions simplement en les concaténant.
-
-@item extend
-Cette procédure définie comme la valeur du service est @dfn{étendue} avec la
-composition des extensions.
-
-Les extensions Udev sont composés en une liste de règles, mais la valeur du
-service udev est elle-même un enregistrement @code{<udev-configuration>}.
-Donc ici, nous étendons cet enregistrement en ajoutant la liste des règle
-contribuées à la liste des règles qu'il contient déjà.
-
-@item description
-C'est une chaîne donnant un aperçu du type de service. Elle peut contenir
-du balisage Texinfo (@pxref{Overview,,, texinfo, GNU Texinfo}). La commande
-@command{guix system search} permet de rechercher dans ces chaînes et de les
-afficher (@pxref{Invoquer guix system}).
-@end table
-
-There can be only one instance of an extensible service type such as
-@code{udev-service-type}. If there were more, the @code{service-extension}
-specifications would be ambiguous.
-
-Toujours ici ? La section suivante fournit une référence de l'interface de
-programmation des services.
-
-@node Référence de service
-@subsection Référence de service
-
-Nous avons vu un résumé des types de services (@pxref{Types service et services}). Cette section fournit une référence sur la manière de manipuler
-les services et les types de services. Cette interface est fournie par le
-module @code{(gnu services)}.
-
-@deffn {Procédure Scheme} service @var{type} [@var{value}]
-Renvoie un nouveau service de type @var{type}, un objet
-@code{<service-type>} (voir plus bas). @var{value}peut être n'importe quel
-objet ; il représente les paramètres de cette instance particulière du
-service.
-
-Lorsque @var{value} est omise, la valeur par défaut spécifiée par @var{type}
-est utilisée ; si @var{type} ne spécifie pas de valeur par défaut, une
-erreur est levée.
-
-Par exemple ceci :
-
-@example
-(service openssh-service-type)
-@end example
-
-@noindent
-est équivalent à ceci :
-
-@example
-(service openssh-service-type
- (openssh-configuration))
-@end example
-
-Dans les deux cas le résultat est une instance de
-@code{openssh-service-type} avec la configuration par défaut.
-@end deffn
-
-@deffn {Procédure Scheme} service? @var{obj}
-Renvoie vrai si @var{obj} est un service.
-@end deffn
-
-@deffn {Procédure Scheme} service-kind @var{service}
-Renvoie le type de @var{service} — c.-à-d.@: un objet @code{<service-type>}.
-@end deffn
-
-@deffn {Procédure Scheme} service-value @var{service}
-Renvoie la valeur associée à @var{service}. Elle représente ses paramètres.
-@end deffn
-
-Voici un exemple de la manière dont un service est créé et manipulé :
-
-@example
-(define s
- (service nginx-service-type
- (nginx-configuration
- (nginx nginx)
- (log-directory log-directory)
- (run-directory run-directory)
- (file config-file))))
-
-(service? s)
-@result{} #t
-
-(eq? (service-kind s) nginx-service-type)
-@result{} #t
-@end example
-
-The @code{modify-services} form provides a handy way to change the
-parameters of some of the services of a list such as @code{%base-services}
-(@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
-services. Of course, you could always use standard list combinators such as
-@code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
-GNU Guile Reference Manual}); @code{modify-services} simply provides a more
-concise form for this common pattern.
-
-@deffn {Syntaxe Scheme} modify-services @var{services} @
- (@var{type} @var{variable} => @var{body}) @dots{}
-
-Modifie les services listés dans @var{services} en fonction des clauses
-données. Chaque clause à la forme :
-
-@example
-(@var{type} @var{variable} => @var{body})
-@end example
-
-où @var{type} est un type de service — p.@: ex.@: @code{guix-service-type} —
-et @var{variable} est un identifiant lié dans @var{body} aux paramètres du
-service — p.@: ex.@: une instance de @code{guix-configuration} — du service
-original de ce @var{type}.
-
-La variable @var{body} devrait s'évaluer en de nouveaux paramètres de
-service, qui seront utilisés pour configurer le nouveau service. Ce nouveau
-service remplacera l'original dans la liste qui en résulte. Comme les
-paramètres d'un service sont créés avec @code{define-record-type*}, vous
-pouvez écrire un @var{body} court qui s'évalue en de nouveaux paramètres
-pour le services en utilisant @code{inherit}, fourni par
-@code{define-record-type*}.
-
-@xref{Utiliser le système de configuration} pour des exemples d'utilisation.
-
-@end deffn
-
-Suit l'interface de programmation des types de services. Vous devrez la
-connaître pour écrire de nouvelles définitions de services, mais pas
-forcément lorsque vous cherchez des manières simples de personnaliser votre
-déclaration @code{operating-system}.
-
-@deftp {Type de données} service-type
-@cindex type de service
-C'est la représentation d'un @dfn{type de service} (@pxref{Types service et services}).
-
-@table @asis
-@item @code{name}
-C'est un symbole, utilisé seulement pour simplifier l'inspection et le
-débogage.
-
-@item @code{extensions}
-Une liste non-vide d'objets @code{<service-extension>} (voir plus bas).
-
-@item @code{compose} (par défaut : @code{#f})
-S'il s'agit de @code{#f}, le type de service dénote des services qui ne
-peuvent pas être étendus — c.-à-d.@: qui ne reçoivent pas de « valeurs »
-d'autres services.
-
-Sinon, ce doit être une procédure à un argument. La procédure est appelée
-par @code{fold-services} et on lui passe une liste de valeurs collectées par
-les extensions. Elle peut renvoyer n'importe quelle valeur simple.
-
-@item @code{extend} (par défaut : @code{#f})
-Si la valeur est @code{#f}, les services de ce type ne peuvent pas être
-étendus.
-
-Sinon, il doit s'agir 'une procédure à deux arguments : @code{fold-services}
-l'appelle et lui passe la valeur initiale du service comme premier argument
-et le résultat de l'application de @code{compose} sur les valeurs
-d'extension en second argument. Elle doit renvoyer une valeur qui est une
-valeur de paramètre valide pour l'instance du service.
-@end table
-
-@xref{Types service et services}, pour des exemples.
-@end deftp
-
-@deffn {Procédure Scheme} service-extension @var{target-type} @
- @var{compute}
-Renvoie une nouvelle extension pour les services de type @var{target-type}.
-@var{compute} doit être une procédure à un argument : @code{fold-services}
-l'appelle et lui passe la valeur associée au service qui fournit cette
-extension ; elle doit renvoyer une valeur valide pour le service cible.
-@end deffn
-
-@deffn {Procédure Scheme} service-extension? @var{obj}
-Renvoie vrai si @var{obj} est une extension de service.
-@end deffn
-
-Parfois, vous voudrez simplement étendre un service existant. Cela implique
-de créer un nouveau type de service et de spécifier l'extension qui vous
-intéresse, ce qui peut être assez verbeux ; la procédure
-@code{simple-service} fournit un raccourci pour ce cas.
-
-@deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
-Renvoie un service qui étend @var{target} avec @var{value}. Cela fonctionne
-en créant un type de service singleton @var{name}, dont le service renvoyé
-est une instance.
-
-Par exemple, cela étend mcron (@pxref{Exécution de tâches planifiées}) avec une
-tâche supplémentaire :
-
-@example
-(simple-service 'my-mcron-job mcron-service-type
- #~(job '(next-hour (3)) "guix gc -F 2G"))
-@end example
-@end deffn
-
-Au cœur de l'abstraction des services se cache la procédure
-@code{fold-services}, responsable de la « compilation » d'une liste de
-services en un répertoire unique qui contient tout ce qui est nécessaire au
-démarrage et à l'exécution du système — le répertoire indiqué par la
-commande @command{guix system build} (@pxref{Invoquer guix system}). En
-soit, elle propage les extensions des services le long du graphe des
-services, en mettant à jour chaque paramètre des nœuds sur son chemin,
-jusqu'à atteindre le nœud racine.
-
-@deffn {Procédure Scheme} fold-services @var{services} @
- [#:target-type @var{system-service-type}]
-Replie @var{services} en propageant leurs extensions jusqu'à la racine de
-type @var{target-type} ; renvoie le service racine ajusté de cette manière.
-@end deffn
-
-Enfin, le module @code{(gnu services)} définie aussi divers types de
-services essentiels, dont certains sont listés ci-dessous.
-
-@defvr {Variable Scheme} system-service-type
-C'est la racine du graphe des services. Il produit le répertoire du système
-renvoyé par la commande @command{guix system build}.
-@end defvr
-
-@defvr {Variable Scheme} boot-service-type
-Le type du service « boot », qui produit le @dfn{script de démarrage}. Le
-script de démarrage est ce que le disque de RAM initial lance au démarrage.
-@end defvr
-
-@defvr {Variable Scheme} etc-service-type
-Le type du service @file{/etc}. Ce service est utilisé pour créer des
-fichiers dans @file{/etc} et peut être étendu en lui passant des tuples
-nom/fichier comme ceci :
-
-@example
-(list `("issue" ,(plain-file "issue" "Bienvenue !\n")))
-@end example
-
-Dans cet exemple, l'effet serait d'ajouter un fichier @file{/etc/issue}
-pointant vers le fichier donné.
-@end defvr
-
-@defvr {Variable Scheme} setuid-program-service-type
-Le type du « service setuid ». Ce service récupère des listes de noms de
-fichiers exécutables, passés en tant que gexps, et les ajoute à l'ensemble
-des programmes setuid root sur le système (@pxref{Programmes setuid}).
-@end defvr
-
-@defvr {Variable Scheme} profile-service-type
-De type du service qui rempli le @dfn{profil du système} — c.-à-d.@: les
-programmes dans @file{/run/current-system/profile}. Les autres services
-peuvent l'étendre en lui passant des listes de paquets à ajouter au profil
-du système.
-@end defvr
-
-
-@node Services Shepherd
-@subsection Services Shepherd
-
-@cindex services shepherd
-@cindex PID 1
-@cindex système d'init
-Le module @code{(gnu services shepherd)} fournit une manière de définir les
-services gérés par le GNU@tie{}Shepherd, qui est le système d'initialisation
-— le premier processus démarré lorsque le système démarre, aussi connu comme
-étant le PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd
-Manual}).
-
-Les services dans le Shepherd peuvent dépendre les uns des autres. Par
-exemple, le démon SSH peut avoir besoin d'être démarré après le démon
-syslog, qui à son tour doit être démarré après le montage des systèmes de
-fichiers. Le système d'exploitation simple déclaré précédemment
-(@pxref{Utiliser le système de configuration}) crée un graphe de service comme
-ceci :
-
-@image{images/shepherd-graph,,5in,Graphe de service typique du shepherd.}
-
-Vous pouvez générer un tel graphe pour n'importe quelle définition de
-système d'exploitation avec la commande @command{guix system shepherd-graph}
-(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
-
-The @code{%shepherd-root-service} is a service object representing
-PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended by
-passing it lists of @code{<shepherd-service>} objects.
-
-@deftp {Type de données} shepherd-service
-Le type de données représentant un service géré par le Shepherd.
-
-@table @asis
-@item @code{provision}
-C'est une liste de symboles dénotant ce que le service fournit.
-
-Ce sont les noms qui peuvent être passés à @command{herd start},
-@command{herd status} et les commandes similaires (@pxref{Invoking herd,,,
-shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
-@code{provides} slot,, shepherd, The GNU Shepherd Manual}, pour plus de
-détails.
-
-@item @code{requirements} (par défaut : @code{'()})
-Liste de symboles dénotant les services du Shepherd dont celui-ci dépend.
-
-@item @code{respawn?} (par défaut : @code{#t})
-Indique s'il faut redémarrer le service lorsqu'il s'arrête, par exemple si
-le processus sous-jacent meurt.
-
-@item @code{start}
-@itemx @code{stop} (par défaut : @code{#~(const #f)})
-Les champs @code{start} et @code{stop} se réfèrent à la capacité du Shepherd
-de démarrer et d'arrêter des processus (@pxref{Service De- and
-Constructors,,, shepherd, The GNU Shepherd Manual}). Ils sont donnés comme
-des G-expressions qui sont étendues dans le fichier de configuration du
-Shepherd (@pxref{G-Expressions}).
-
-@item @code{actions} (par défaut : @code{'()})
-@cindex action, des services Shepherd
-C'est une liste d'objets @code{shepherd-action} (voir plus bas) définissant
-des @dfn{actions} supportées par le service, en plus des actions
-@code{start} et @code{stop} standards. Les actions listées ici sont
-disponibles en tant que sous-commande de @command{herd} :
-
-@example
-herd @var{action} @var{service} [@var{arguments}@dots{}]
-@end example
-
-@item @code{documentation}
-Une chaîne de documentation, montrée lorsqu'on lance :
-
-@example
-herd doc @var{service-name}
-@end example
-
-where @var{service-name} is one of the symbols in @code{provision}
-(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
-
-@item @code{modules} (default: @code{%default-modules})
-C'est la liste des modules qui doivent être dans le contexte lorsque
-@code{start} et @code{stop} sont évalués.
-
-@end table
-@end deftp
-
-@deftp {Type de données} shepherd-action
-C'est le type de données qui définie des actions supplémentaires
-implémentées par un service Shepherd (voir au-dessus).
-
-@table @code
-@item name
-Symbole nommant l'action.
-
-@item documentation
-C'est une chaîne de documentation pour l'action. Elle peut être consultée
-avec :
-
-@example
-herd doc @var{service} action @var{action}
-@end example
-
-@item procedure
-Cela devrait être une gexp qui s'évalue en une procédure à au moins un
-argument, la « valeur de lancement » du service (@pxref{Slots of services,,,
-shepherd, The GNU Shepherd Manual}).
-@end table
-
-L'exemple suivant définie une action nommée @code{dire-bonjour} qui salue
-amicalement l'utilisateur :
-
-@example
-(shepherd-action
- (name 'dire-bonjour)
- (documentation "Dit salut !")
- (procedure #~(lambda (running . args)
- (format #t "Salut, l'ami ! arguments : ~s\n"
- args)
- #t)))
-@end example
-
-En supposant que cette action est ajoutée dans le service @code{example},
-vous pouvez écrire :
-
-@example
-# herd dire-bonjour example
-Salut, l'ami ! arguments : ()
-# herd dire-bonjour example a b c
-Salut, l'ami ! arguments : ("a" "b" "c")
-@end example
-
-Comme vous pouvez le voir, c'est une manière assez sophistiquée de dire
-bonjour. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual},
-pour plus d'informations sur les actions.
-@end deftp
-
-@defvr {Variable Scheme} shepherd-root-service-type
-Le type de service pour le « service racine » du Shepherd — c.-à-d.@: le
-PID@tie{}1.
-
-C'est le type de service que les extensions ciblent lorqu'elles veulent
-créer un service shepherd (@pxref{Types service et services}, pour un
-exemple). Chaque extension doit passer une liste de
-@code{<shepherd-service>}.
-@end defvr
-
-@defvr {Variable Scheme} %shepherd-root-service
-Ce service représente le PID@tie{}1.
-@end defvr
-
-
-@node Documentation
-@chapter Documentation
-
-@cindex documentation, recherche
-@cindex chercher de la documentation
-@cindex Info, format de documentation
-@cindex man, pages de manuel
-@cindex pages de manuel
-Dans la plupart des cas les paquets installés avec Guix ont une
-documentation. Il y a deux formats de documentation principaux : « Info »,
-un format hypertexte navigable utilisé par les logiciels GNU et les « pages
-de manuel » (ou « pages de man »), le format de documentation linéaire
-traditionnel chez Unix. Les manuels Info sont disponibles via la commande
-@command{info} ou avec Emacs, et les pages de man sont accessibles via la
-commande @command{man}.
-
-Vous pouvez chercher de la documentation pour les logiciels installés sur
-votre système par mot-clef. Par exemple, la commande suivante recherche des
-informations sur « TLS » dans les manuels Info :
-
-@example
-$ info -k TLS
-"(emacs)Network Security" -- STARTTLS
-"(emacs)Network Security" -- TLS
-"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
-"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
-@dots{}
-@end example
-
-@noindent
-La commande suivante recherche le même mot-clef dans les pages de man :
-
-@example
-$ man -k TLS
-SSL (7) - OpenSSL SSL/TLS library
-certtool (1) - GnuTLS certificate tool
-@dots {}
-@end example
-
-Ces recherches sont purement locales à votre ordinateur donc vous savez que
-la documentation trouvée correspond à ce qui est effectivement installé,
-vous pouvez y accéder hors ligne et votre vie privée est préservée.
-
-Une fois que vous avez ces résultats, vous pouvez visualiser la
-documentation appropriée avec, disons :
-
-@example
-$ info "(gnutls)Core TLS API"
-@end example
-
-@noindent
-ou :
-
-@example
-$ man certtool
-@end example
-
-Les manuels Info contiennent des sections et des indexs ainsi que des
-hyperliens comme ce qu'on trouve sur les pages Web. Le lecteur
-@command{info} (@pxref{Top, Info reader,, info-stnd, Stand-alone GNU Info})
-et sa contre-partie dans Emacs (@pxref{Misc Help,,, emacs, The GNU Emacs
-Manual}) fournissent des raccourcis claviers intuitifs pour naviguer dans
-les manuels @xref{Getting Started,,, info, Info: An Introduction} pour
-trouver une introduction sur la navigation dans info.
-
-@node Installer les fichiers de débogage
-@chapter Installer les fichiers de débogage
-
-@cindex fichiers de débogage
-Les binaires des programmes, produits par les compilateurs GCC par exemple,
-sont typiquement écrits au format ELF, avec une section contenant des
-@dfn{informations de débogage}. Les informations de débogage sont ce qui
-permet au débogueur, GDB, de relier le code binaire et le code source ;
-elles sont requises pour déboguer un programme compilé dans de bonnes
-conditions.
-
-Le problème avec les informations de débogage est qu'elles prennent pas mal
-de place sur le disque. Par exemple, les informations de débogage de la
-bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
-garder toutes les informations de débogage de tous les programmes installés
-n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
-pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
-faciliter pour ses utilisateurs l'exercice de leurs libertés
-(@pxref{Distribution GNU}).
-
-Heureusement, les utilitaires binaires de GNU (Binutils) et GDB fournissent
-un mécanisme qui permet aux utilisateurs d'avoir le meilleur des deux mondes
-: les informations de débogage peuvent être nettoyées des binaires et
-stockées dans des fichiers séparés. GDB peut ensuite charger les
-informations de débogage depuis ces fichiers, lorsqu'elles sont disponibles
-(@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
-
-La distribution GNU se sert de cela pour stocker les informations de
-débogage dans le sous-répertoire @code{lib/debug} d'une sortie séparée du
-paquet appelée sans grande imagination @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Les utilisateurs peuvent choisir d'installer la sortie
-@code{debug} d'un paquet lorsqu'ils en ont besoin. Par exemple, la commande
-suivante installe les informations de débogage pour la bibliothèque C de GNU
-et pour GNU Guile :
-
-@example
-guix package -i glibc:debug guile:debug
-@end example
-
-On doit ensuite dire à GDB de chercher les fichiers de débogage dans le
-profil de l'utilisateur, en remplissant la variable
-@code{debug-file-directory} (vous pourriez aussi l'instancier depuis le
-fichier @file{~/.gdbinit}, @pxref{Startup,,, gdb, Debugging with GDB}) :
-
-@example
-(gdb) set debug-file-directory ~/.guix-profile/lib/debug
-@end example
-
-À partir de maintenant, GDB récupérera les informations de débogage dans les
-fichiers @code{.debug} de @file{~/.guix-profile/lib/debug}.
-
-EN plus, vous voudrez sans doute que GDB puisse montrer le code source
-débogué. Pour cela, vous devrez désarchiver le code source du paquet qui
-vous intéresse (obtenu via @code{guix build --source}, @pxref{Invoquer guix build}) et pointer GDB vers ce répertoire des sources avec la commande
-@code{directory} (@pxref{Source Path, @code{directory},, gdb, Debugging with
-GDB}).
-
-@c XXX: keep me up-to-date
-Le mécanisme de la sortie @code{debug} dans Guix est implémenté par le
-@code{gnu-build-system} (@pxref{Systèmes de construction}). Actuellement, ce n'est pas
-obligatoire — les informations de débogage sont disponibles uniquement si
-les définitions déclarent explicitement une sortie @code{debug}. Cela
-pourrait être modifié tout en permettant aux paquets de s'en passer dans le
-futur si nos serveurs de construction peuvent tenir la charge. Pour
-vérifier si un paquet a une sortie @code{debug}, utilisez @command{guix
-package --list-available} (@pxref{Invoquer guix package}).
-
-
-@node Mises à jour de sécurité
-@chapter Mises à jour de sécurité
-
-@cindex mises à jour de sécurité
-@cindex vulnérabilités
-Parfois, des vulnérabilités importantes sont découvertes dans les paquets
-logiciels et doivent être corrigées. Les développeurs de Guix essayent de
-suivre les vulnérabilités connues et d'appliquer des correctifs aussi vite
-que possible dans la branche @code{master} de Guix (nous n'avons pas encore
-de branche « stable » contenant seulement des mises à jour de sécurité).
-L'outil @command{guix lint} aide les développeurs à trouver les versions
-vulnérables des paquets logiciels dans la distribution :
-
-@smallexample
-$ guix lint -c cve
-gnu/packages/base.scm:652:2: glibc@@2.21: probablement vulnérable à CVE-2015-1781, CVE-2015-7547
-gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probablement vulnérable à CVE-2015-5276
-gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probablement vulnérable à CVE-2016-1923, CVE-2016-1924
-@dots{}
-@end smallexample
-
-@xref{Invoquer guix lint}, pour plus d'informations.
-
-@quotation Remarque
-À la version @value{VERSION}, la fonctionnalité ci-dessous est considérée
-comme « bêta ».
-@end quotation
-
-Guix suit une discipline de gestion de paquets fonctionnelle
-(@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
-@emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
-peut grandement ralentir le déploiement de corrections dans les paquets du
-cœur comme libc ou bash comme presque toute la distribution aurait besoin
-d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
-(@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
-temps de souhaité.
-
-@cindex greffes
-Pour corriger cela, Guix implémente les @dfn{greffes}, un mécanisme qui
-permet un déploiement rapide des mises à jour de sécurité critiques sans le
-coût associé à une reconstruction complète de la distribution. L'idée est
-de reconstruire uniquement le paquet qui doit être corrigé puis de le «
-greffer » sur les paquets qui sont explicitement installés par l'utilisateur
-et qui se référaient avant au paquet d'origine. Le coût d'une greffe est
-typiquement très bas, et plusieurs ordres de grandeurs moins élevé que de
-reconstruire tout la chaîne de dépendance.
-
-@cindex remplacement de paquet, pour les greffes
-For instance, suppose a security update needs to be applied to Bash. Guix
-developers will provide a package definition for the ``fixed'' Bash, say
-@code{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
-original package definition is augmented with a @code{replacement} field
-pointing to the package containing the bug fix:
-
-@example
-(define bash
- (package
- (name "bash")
- ;; @dots{}
- (replacement bash-fixed)))
-@end example
-
-From there on, any package depending directly or indirectly on Bash---as
-reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
-is installed is automatically ``rewritten'' to refer to @code{bash-fixed}
-instead of @code{bash}. This grafting process takes time proportional to
-the size of the package, usually less than a minute for an ``average''
-package on a recent machine. Grafting is recursive: when an indirect
-dependency requires grafting, then grafting ``propagates'' up to the package
-that the user is installing.
-
-Currently, the length of the name and version of the graft and that of the
-package it replaces (@code{bash-fixed} and @code{bash} in the example above)
-must be equal. This restriction mostly comes from the fact that grafting
-works by patching files, including binary files, directly. Other
-restrictions may apply: for instance, when adding a graft to a package
-providing a shared library, the original shared library and its replacement
-must have the same @code{SONAME} and be binary-compatible.
-
-L'option en ligne de commande @option{--no-grafts} vous permet d'éviter les
-greffes (@pxref{Options de construction communes, @option{--no-grafts}}). Donc la
-commande :
-
-@example
-guix build bash --no-grafts
-@end example
-
-@noindent
-renvoie le nom de fichier dans les dépôt du Bash original, alors que :
-
-@example
-guix build bash
-@end example
-
-@noindent
-renvoie le nom de fichier du Bash « corrigé » de remplacement. Cela vous
-permet de distinguer les deux variantes de Bash.
-
-Pour vérifier à quel Bash votre profil se réfère, vous pouvez lancer
-(@pxref{Invoquer guix gc}) :
-
-@example
-guix gc -R `readlink -f ~/.guix-profile` | grep bash
-@end example
-
-@noindent
-@dots{} et comparer les noms de fichiers que vous obtenez avec ceux du
-dessus. De la même manière pour une génération du système Guix :
-
-@example
-guix gc -R `guix system build my-config.scm` | grep bash
-@end example
-
-Enfin, pour vérifier quelles processus Bash lancés vous utilisez, vous
-pouvez utiliser la commande @command{lsof} :
-
-@example
-lsof | grep /gnu/store/.*bash
-@end example
-
-
-@node Bootstrapping
-@chapter Bootstrapping
-
-@c Adapted from the ELS 2013 paper.
-
-@cindex bootstrap
-
-Dans notre contexte, le bootstrap se réfère à la manière dont la
-distribution est construite « à partir de rien ». Rappelez-vous que
-l'environnement de construction d'une dérivation ne contient rien d'autre
-que les entrées déclarées (@pxref{Introduction}). Donc il y a un problème
-évident de poule et d'œuf : comment le premier paquet est-il construit ?
-Comment le premier compilateur est-il construit ? Remarquez que c'est une
-question qui intéressera uniquement le hacker curieux, pas l'utilisateur
-normal, donc vous pouvez sauter cette section sans avoir honte si vous vous
-considérez comme un « utilisateur normal ».
-
-@cindex binaires de bootstrap
-Le système GNU est surtout fait de code C, avec la libc en son cœur. Le
-système de construction GNU lui-même suppose la disponibilité d'un shell
-Bourne et d'outils en ligne de commande fournis par GNU Coreutils, Awk,
-Findutils, sed et grep. En plus, les programmes de construction — les
-programmes qui exécutent @code{./configure}, @code{make} etc — sont écrits
-en Guile Scheme (@pxref{Dérivations}). En conséquence, pour pouvoir
-construire quoi que ce soit, de zéro, Guix a besoin de binaire
-pré-construits de Guile, GCC, Binutils, la libc et des autres paquets
-mentionnés plus haut — les @dfn{binaires de bootstrap}.
-
-Ces binaires de bootstrap sont pris comme des acquis, bien qu'on puisse les
-recréer (ça arrive plus tard).
-
-@unnumberedsec Se préparer à utiliser les binaires de bootstrap
-
-@c As of Emacs 24.3, Info-mode displays the image, but since it's a
-@c large image, it's hard to scroll. Oh well.
-@image{images/bootstrap-graph,6in,,Graphe de dépendance des premières
-dérivations de bootstrap}
-
-La figure ci-dessus montre le tout début du graphe de dépendances de la
-distribution, correspondant aux définitions des paquets du module @code{(gnu
-packages bootstrap)}. Une figure similaire peut être générée avec
-@command{guix graph} (@pxref{Invoquer guix graph}), de cette manière :
-
-@example
-guix graph -t derivation \
- -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
- | dot -Tps > t.ps
-@end example
-
-À ce niveau de détails, les choses sont légèrement complexes. Tout d'abord,
-Guile lui-même consiste en an exécutable ELF, avec plusieurs fichiers Scheme
-sources et compilés qui sont chargés dynamiquement quand il est exécuté.
-Cela est stocké dans l'archive @file{guile-2.0.7.tar.xz} montrée dans ce
-graphe. Cette archive fait parti de la distribution « source » de Guix, et
-est insérée dans le dépôt avec @code{add-to-store} (@pxref{Le dépôt}).
-
-Mais comment écrire une dérivation qui décompresse cette archive et l'ajoute
-au dépôt ? Pour résoudre ce problème, la dérivation
-@code{guile-bootstrap-2.0.drv} — la première qui est construite — utilise
-@code{bash} comme constructeur, qui lance @code{build-bootstrap-guile.sh},
-qui à son tour appelle @code{tar} pour décompresser l'archive. Ainsi,
-@file{bash}, @file{tar}, @file{xz} et @file{mkdir} sont des binaires liés
-statiquement, qui font aussi partie de la distribution source de Guix, dont
-le seul but est de permettre à l'archive de Guile d'être décompressée.
-
-Une fois que @code{guile-bootstrap-2.0.drv} est construit, nous avons un
-Guile fonctionnel qui peut être utilisé pour exécuter les programmes de
-construction suivants. Sa première tâche consiste à télécharger les
-archives contenant les autres binaires pré-construits — c'est ce que la
-dérivation @code{.tar.xz.drv} fait. Les modules Guix comme
-@code{ftp-client.scm} sont utilisés pour cela. Les dérivations
-@code{module-import.drv} importent ces modules dans un répertoire dans le
-dépôt, en utilisant la disposition d'origine. Les dérivations
-@code{module-import-compiled.drv} compilent ces modules, et les écrivent
-dans un répertoire de sortie avec le bon agencement. Cela correspond à
-l'argument @code{#:modules} de @code{build-expression->derivation}
-(@pxref{Dérivations}).
-
-Enfin, les diverses archives sont décompressées par les dérivations
-@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc, à partir de
-quoi nous avons une chaîne de compilation C fonctionnelle.
-
-
-@unnumberedsec Construire les outils de construction
-
-Le bootstrap est complet lorsque nous avons une chaîne d'outils complète qui
-ne dépend pas des outils de bootstrap pré-construits dont on vient de
-parler. Ce pré-requis d'indépendance est vérifié en s'assurant que les
-fichiers de la chaîne d'outil finale ne contiennent pas de référence vers
-les répertoires @file{/gnu/store} des entrées de bootstrap. Le processus
-qui mène à cette chaîne d'outils « finale » est décrit par les définitions
-de paquets qui se trouvent dans le module @code{(gnu packages
-commencement)}.
-
-La commande @command{guix graph} nous permet de « dézoomer » comparé au
-graphe précédent, en regardant au niveau des objets de paquets plutôt que
-des dérivations individuelles — rappelez-vous qu'un paquet peut se traduire
-en plusieurs dérivations, typiquement une dérivation pour télécharger ses
-sources, une pour les modules Guile dont il a besoin et une pour
-effectivement compiler le paquet depuis les sources. La commande :
-
-@example
-guix graph -t bag \
- -e '(@@@@ (gnu packages commencement)
- glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
-@end example
-
-@noindent
-produit le graphe de dépendances qui mène à la bibliothèque C « finale
-»@footnote{Vous remarquerez qu'elle s'appelle @code{glibc-intermediate}, ce
-qui suggère qu'elle n'est pas @emph{tout à fait} finale, mais c'est une
-bonne approximation tout de même.}, que voici :
-
-@image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
-paquets}
-
-@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
-Le premier outil construit avec les binaires de bootstrap est GNU@tie{}Make
-— appelé @code{make-boot0} ci-dessus — qui est un prérequis de tous les
-paquets suivants . Ensuite, Findutils et Diffutils sont construits.
-
-Ensuite vient la première passe de Binutils et GCC, construits comme des
-pseudo outils croisés — c.-à-d.@: dont @code{--target} égal à
-@code{--host}. Ils sont utilisés pour construire la libc. Grâce à cette
-astuce de compilation croisée, la libc est garantie de ne contenir aucune
-référence à la chaîne d'outils initiale.
-
-À partir de là, les Bintulis et GCC finaux (pas visibles ci-dessus) sont
-construits. GCC utilise @code{ld} du Binutils final et lie les programme
-avec la libc qui vient d'être construite. Cette chaîne d'outils est
-utilisée pour construire les autres paquets utilisés par Guix et par le
-système de construction de GNU : Guile, Bash, Coreutils, etc.
-
-Et voilà ! À partir de là nous avons l'ensemble complet des outils auxquels
-s'attend le système de construction GNU. Ils sont dans la variable
-@code{%final-inputs} du module @code{(gnu packages commencement)} et sont
-implicitement utilisés par tous les paquets qui utilisent le
-@code{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
-
-
-@unnumberedsec Construire les binaires de bootstrap
-
-@cindex binaires de bootstrap
-Comme la chaîne d'outils finale ne dépend pas des binaires de bootstrap, ils
-ont rarement besoin d'être mis à jour. Cependant, il est utile d'avoir une
-manière de faire cela automatiquement, dans le cas d'une mise à jour et
-c'est ce que le module @code{(gnu packages make-bootstrap)} fournit.
-
-La commande suivante construit les archives contenant les binaires de
-bootstrap (Guile, Binutils, GCC, la libc et une archive contenant un mélange
-de Coreutils et d'autres outils en ligne de commande de base) :
-
-@example
-guix build bootstrap-tarballs
-@end example
-
-Les archives générées sont celles qui devraient être référencées dans le
-module @code{(gnu packages bootstrap)} au début de cette section.
-
-Vous êtes toujours là ? Alors peut-être que maintenant vous vous demandez,
-quand est-ce qu'on atteint un point fixe ? C'est une question intéressante
-! La réponse est inconnue, mais si vous voulez enquêter plus profondément
-(et que vous avez les ressources en puissance de calcul et en capacité de
-stockage pour cela), dites-le nous.
-
-@unnumberedsec Réduire l'ensemble des binaires de bootstrap
-
-Nous binaires de bootstrap incluent actuellement GCC, Guile, etc. C'est
-beaucoup de code binaire ! Pourquoi est-ce un problème ? C'est un problème
-parce que ces gros morceaux de code binaire sont en pratique impossibles à
-auditer, ce qui fait qu'il est difficile d'établir quel code source les a
-produit. Chaque binaire non auditable nous rend aussi vulnérable à des
-portes dérobées dans les compilateurs comme le décrit Ken Thompson dans le
-papier de 1984 @emph{Reflections on Trusting Trust}.
-
-Cela est rendu moins inquiétant par le fait que les binaires de bootstrap
-ont été générés par une révision antérieure de Guix. Cependant, il leur
-manque le niveau de transparence que l'on obtient avec le reste des paquets
-du graphe de dépendance, où Guix nous donne toujours une correspondance
-source-binaire. Ainsi, notre but est de réduire l'ensemble des binaires de
-bootstrap au minimum.
-
-Le @uref{http://bootstrappable.org, site web Bootstrappable.org} liste les
-projets en cours à ce sujet. L'un d'entre eux parle de remplacer le GCC de
-bootstrap par une série d'assembleurs, d'interpréteurs et de compilateurs
-d'une complexité croissante, qui pourraient être construits à partir des
-sources à partir d'un assembleur simple et auditable. Votre aide est la
-bienvenue !
-
-
-@node Porter
-@chapter Porter vers une nouvelle plateforme
-
-Comme nous en avons discuté plus haut, la distribution GNU est
-auto-contenue, et cela est possible en se basant sur des « binaires de
-bootstrap » pré-construits (@pxref{Bootstrapping}). Ces binaires sont
-spécifiques au noyau de système d'exploitation, à l'architecture CPU et à
-l'interface applicative binaire (ABI). Ainsi, pour porter la distribution
-sur une plateforme qui n'est pas encore supportée, on doit construire ces
-binaires de bootstrap et mettre à jour le module @code{(gnu packages
-bootstrap)} pour les utiliser sur cette plateforme.
-
-Heureusement, Guix peut effectuer une @emph{compilation croisée} de ces
-binaires de bootstrap. Lorsque tout va bien, et en supposant que la chaîne
-d'outils GNU supporte la plateforme cible, cela peut être aussi simple que
-de lancer une commande comme ceci :
-
-@example
-guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
-@end example
-
-Pour que cela fonctione, la procédure @code{glibc-dynamic-linker} dans
-@code{(gnu packages bootstrap)} doit être augmentée pour renvoyer le bon nom
-de fichier pour l'éditeur de lien dynamique de la libc sur cette plateforme
-; de même, il faut indiquer cette nouvelle platefore à
-@code{system->linux-architecture} dans @code{(gnu packages linux)}.
-
-Une fois qu'ils sont construits, le module @code{(gnu packages bootstrap)}
-doit être mis à jour pour se référer à ces binaires sur la plateforme
-cible. C'est à dire que les hashs et les URL des archives de bootstrap pour
-la nouvelle plateforme doivent être ajoutés avec ceux des plateformes
-actuellement supportées. L'archive de bootstrap de Guile est traitée
-séparément : elle doit être disponible localement, et @file{gnu/local.mk} a
-une règle pour la télécharger pour les architectures supportées ; vous devez
-également ajouter une règle pour la nouvelle plateforme.
-
-En pratique, il peut y avoir des complications. Déjà, il se peut que le
-triplet GNU étendu qui spécifie l'ABI (comme le suffixe @code{eabi}
-ci-dessus) ne soit pas reconnu par tous les outils GNU. Typiquement, la
-glibc en reconnais certains, alors que GCC utilise un drapeau de configure
-@code{--with-abi} supplémentaire (voir @code{gcc.scm} pour trouver des
-exemples où ce cas est géré). Ensuite, certains des paquets requis
-pourraient échouer à se construire pour cette plateforme. Enfin, les
-binaires générés pourraient être cassé pour une raison ou une autre.
-
-@c *********************************************************************
-@include contributing.fr.texi
-
-@c *********************************************************************
-@node Remerciements
-@chapter Remerciements
-
-Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
-Nix} conçu et implémenté par Eelco Dolstra, avec des contributions d'autres
-personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
-gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
-comme les mises à jour de paquets transactionnelles et les retours en
-arrière, les profils par utilisateurs et les processus de constructions
-transparents pour les références. Sans ce travail, Guix n'existerait pas.
-
-Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
-été une inspiration pour Guix.
-
-GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
-grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
-plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
-liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
-de l'infrastructure, en fournissant des images et des thèmes, en faisant des
-suggestions et bien plus. Merci !
-
-
-@c *********************************************************************
-@node La licence GNU Free Documentation
-@appendix La licence GNU Free Documentation
-@cindex license, GNU Free Documentation License
-@include fdl-1.3.texi
-
-@c *********************************************************************
-@node Index des concepts
-@unnumbered Index des concepts
-@printindex cp
-
-@node Index de programmation
-@unnumbered Index de programmation
-@syncodeindex tp fn
-@syncodeindex vr fn
-@printindex fn
-
-@bye
-
-@c Local Variables:
-@c ispell-local-dictionary: "american";
-@c End: