diff options
author | Julien Lepiller <julien@lepiller.eu> | 2019-02-17 20:45:44 +0100 |
---|---|---|
committer | Julien Lepiller <julien@lepiller.eu> | 2019-03-01 21:52:26 +0100 |
commit | 15f1bff4b6f3a89cb0c9cd10f8cbefdc6d9ac350 (patch) | |
tree | e9e8e9bed6f6835b4fb79f66b6fc5be3a38ae55c /doc/guix.fr.texi | |
parent | abfc114ae53ad059546ffe95a8c919c2d675af11 (diff) |
nls: Update 'fr' translation of the manual.
Diffstat (limited to 'doc/guix.fr.texi')
-rw-r--r-- | doc/guix.fr.texi | 8396 |
1 files changed, 4388 insertions, 4008 deletions
diff --git a/doc/guix.fr.texi b/doc/guix.fr.texi index c8a01f18c6..4ef3c1a0ff 100644 --- a/doc/guix.fr.texi +++ b/doc/guix.fr.texi @@ -20,21 +20,25 @@ @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 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{} 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 Ricardo +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 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017, -2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* -Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017, -2018 Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@* +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 @@ -62,7 +66,7 @@ Documentation License ». @direntry * Guix: (guix.fr). Gérer les logiciels installés et la configuration du système. -* guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et +* 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 @@ -119,10 +123,19 @@ 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. +* Development:: Guix-aided software development. * Interface de programmation:: Utiliser Guix en Scheme. * Utilitaires:: Commandes de gestion de paquets. -* Distribution GNU:: Des logiciels pour un système GNU convivial. +* 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 ! @@ -135,6 +148,13 @@ traduc@@traduc.org}. +Introduction + + + +* Managing Software the Guix Way:: What's special. +* Distribution GNU:: The packages and tools. + Installation @@ -159,6 +179,19 @@ Paramétrer le démon 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. +* Effectuer l'installation:: Pour de vrai. +* Installing Guix in a VM:: Guix System playground. +* Construire l'image d'installation:: D'où vient tout cela. + Gestion de paquets @@ -175,7 +208,6 @@ Gestion de 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 pack:: Créer des lots de logiciels. * Invoquer guix archive:: Exporter et importer des fichiers du dépôt. Substituts @@ -185,23 +217,32 @@ 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:: Coment Guix vérifie 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 ? +Development + + + +* 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 monad du dépôt:: Interface purement fonctionnelle avec le +* 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. @@ -228,8 +269,6 @@ Utilitaires paquets. * Invoquer guix size:: Profiler l'utilisation du disque. * Invoquer guix graph:: Visualiser le graphe des paquets. -* Invoquer guix environment:: Mettre en place des environnements de - développement. * 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. @@ -248,35 +287,6 @@ Invoquer @command{guix build} guix build ». * Débogage des échecs de construction:: La vie d'un empaqueteur. -Distribution GNU - - - -* Installation du système:: Installer le système d'exploitation complet. -* 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. -* Modules de paquets:: Les paquets du point de vu du programmeur. -* Consignes d'empaquetage:: Faire grandir la distribution. -* Bootstrapping:: GNU/Linux depuis zéro. -* Porter:: Cibler une autre plateforme ou un autre noyau. - -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. -* Effectuer l'installation:: Pour de vrai. -* Installer GuixSD dans une VM:: Jouer avec GuixSD@. -* Construire l'image d'installation:: D'où vient tout cela. - Configuration système @@ -300,8 +310,7 @@ Configuration système * Configuration du chargeur d'amorçage:: Configurer le chargeur d'amorçage. * Invoquer guix system:: Instantier une configuration du système. -* Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine - virtuelle. +* Running Guix in a VM:: How to run Guix System in a virtual machine. * Définir des services:: Ajouter de nouvelles définitions de services. Services @@ -311,7 +320,7 @@ 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. +* 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. @@ -347,40 +356,6 @@ Définir des services * Référence de service:: Référence de l'API@. * Services Shepherd:: Un type de service particulier. -Consignes d'empaquetage - - - -* Liberté logiciel:: Ce que la distribution peut contenir. -* Conventions de nommage:: Qu'est-ce qu'un bon nom ? -* Numéros de version:: Lorsque le nom n'est pas suffisant. -* Synopsis et descriptions:: Aider les utilisateurs à trouver le bon - paquet. -* Modules python:: Un peu de comédie anglaise. -* Modules perl:: Petites perles. -* Paquets java:: Pause café. -* Polices de caractères:: À fond les fontes. - -Contribuer - - - -* Construire depuis Git:: toujours le plus récent. -* Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers. -* La configuration parfaite:: Les bons outils. -* Style de code:: Hygiène du contributeur. -* Envoyer des correctifs:: Partager votre travail. - -Style de code - - - -* Paradigme de programmation:: Comment composer vos éléments. -* Modules:: Où stocker votre code ? -* Types de données et reconnaissance de motif:: Implémenter des - structures de données. -* Formatage du code:: Conventions d'écriture. - @end detailmenu @end menu @@ -389,19 +364,37 @@ Style de code @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 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. +GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks'' using +the international phonetic alphabet (IPA).} is a package management tool for +and distribution of the GNU system. Guix makes it easy for unprivileged +users to install, upgrade, or remove software packages, to roll back to a +previous package set, to build packages from source, and generally assists +with the creation and maintenance of software environments. + +@cindex Guix System +@cindex GuixSD, now Guix System +@cindex Guix System Distribution, now Guix System +You can install GNU@tie{}Guix on top of an existing GNU/Linux system where +it complements the available tools without interference +(@pxref{Installation}), or you can use it as a standalone operating system +distribution, @dfn{Guix@tie{}System}@footnote{We used to refer to Guix +System as ``Guix System Distribution'' or ``GuixSD''. We now consider it +makes more sense to group everything under the ``Guix'' banner since, after +all, Guix System is readily available through the @command{guix system} +command, even if you're using a different distro underneath!}. @xref{Distribution GNU}. + +@menu +* Managing Software the Guix Way:: What's special. +* Distribution GNU:: The packages and tools. +@end menu + +@node Managing Software the Guix Way +@section Managing Software the Guix Way @cindex interfaces utilisateurs -Guix fournit une interface de gestion des paquets par la ligne de commande -(@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de -commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation -Scheme (@pxref{Interface de programmation}). +Guix provides a command-line package management interface (@pxref{Gestion de paquets}), tools to help with software development (@pxref{Development}), +command-line utilities for more advanced usage, (@pxref{Utilitaires}), as well +as Scheme programming interfaces (@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 @@ -419,17 +412,6 @@ indépendants (@pxref{Modules de paquets}). Il est aussi 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 Distribution Système Guix -@cindex GuixSD -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 à travers la @dfn{Distribution Système Guix} ou -GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous -@emph{déclarez} tous les aspects de la configuration du système -d'exploitation et Guix s'occupe de créer la configuration d'une manière -transactionnelle, reproductible et sans état (@pxref{Configuration -système}). - @cindex gestion de paquet fonctionnelle @cindex isolation Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet @@ -463,34 +445,112 @@ 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 Guix System +Guix comes with a distribution of the GNU system consisting entirely of free +software@footnote{The term ``free'' here refers to the +@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to users of +that software}.}. The distribution can be installed on its own +(@pxref{Installation du système}), but it is also possible to install Guix as a +package manager on top of an installed GNU/Linux system +(@pxref{Installation}). When we need to distinguish between the two, we +refer to the standalone distribution as 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 + +With Guix@tie{}System, you @emph{declare} all aspects of the operating +system configuration and Guix takes care of instantiating the configuration +in a transactional, reproducible, and stateless fashion (@pxref{Configuration système}). Guix System uses the Linux-libre kernel, the Shepherd +initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd +Manual}), the well-known GNU utilities and tool chain, as well as the +graphical environment or system services of your choice. + +Guix System is available on all the above platforms except +@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 -@cindex site officiel -GNU Guix est disponible au téléchargement depuis son site web sur -@url{http://www.gnu.org/software/guix/}. Cette section décrit les -pré-requis logiciels de Guix ainsi que la manière de l'installer et de se -préparer à l'utiliser. -Remarquez que cette section concerne l'installation du gestionnaire de -paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si -vous souhaitez plutôt installer le système d'exploitation GNU complet, -@pxref{Installation du système}. +@quotation Remarque +We recommend the use of this +@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh, +shell installer script} to install Guix on top of a running GNU/Linux +system, thereafter called a @dfn{foreign distro}.@footnote{This section is +concerned with the installation of the package manager, which can be done on +top of a running GNU/Linux system. If, instead, you want to install the +complete GNU operating system, @pxref{Installation du système}.} The script +automates the download, installation, and initial configuration of Guix. It +should be run as the root user. +@end quotation @cindex distro extérieure @cindex répertoires liés aux distro extérieures - -Lorsqu'il est installé sur un système GNU/Linux existant — ci-après nommé -@dfn{distro extérieure} — 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. +When installed on a foreign distro, GNU@tie{}Guix complements the available +tools without interference. Its data lives exclusively in two directories, +usually @file{/gnu/store} and @file{/var/guix}; other files on your system, +such as @file{/etc}, are left untouched. Une fois installé, Guix peut être mis à jour en lançant @command{guix pull} (@pxref{Invoquer guix pull}). +If you prefer to perform the installation steps manually or want to tweak +them, you may find the following subsections useful. They describe the +software requirements of Guix, as well as how to install it manually and get +ready to use it. + @menu * Installation binaire:: Commencer à utiliser Guix en un rien de temps ! @@ -508,18 +568,12 @@ Une fois installé, Guix peut être mis à jour en lançant @command{guix pull} @cindex installer Guix depuis les binaires @cindex script d'installation -Cette section décrit comment intaller Guix sur un système quelconque depuis +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 +ce qui est décrit dans les sections suivantes. Le seul prérequis est d'avoir GNU@tie{}tar et Xz. -Nous fournissons un script -@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh, -script d'intallation shell} qui automatise le téléchargement, l'installation -et la configuration initiale de Guix. Il devrait être lancé en tant -qu'utilisateur root. - L'installation se comme ceci : @enumerate @@ -564,7 +618,7 @@ tant que @code{root}, lancez : @end example Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce -deuxième dossier contient un profil pret à être utilisé pour @code{root} +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 @@ -664,12 +718,12 @@ changer le chemin de recherche de Info). @item @cindex substituts, autorisations -Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs -(@pxref{Substituts}), autorisez-les : +To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its +mirrors (@pxref{Substituts}), authorize them: @example # guix archive --authorize < \ - ~root/.config/guix/current/share/guix/hydra.gnu.org.pub + ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub @end example @item @@ -694,7 +748,7 @@ retrouveriez gravement handicapé par l'absence de la commande @code{guix package -r guix}. L'archive d'installation binaire peut être (re)produite et vérifiée -simplement en lançaint la commande suivante dans l'arborescence des sources +simplement en lançant la commande suivante dans l'arborescence des sources de Guix : @example @@ -714,17 +768,20 @@ guix pack -s @var{system} --localstatedir \ @node Prérequis @section Prérequis -Cette section dresse la liste des pré-requis pour la construction de Guix +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 is available for download from its website at +@url{https://www.gnu.org/software/guix/}. + GNU Guix dépend des paquets suivants : @itemize -@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou -supérieure, dont 2.2.x, +@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 @@ -738,6 +795,7 @@ version 0.1.0 ou supérieure, @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 @@ -746,17 +804,11 @@ Les dépendances suivantes sont facultatives : @itemize @item -Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} -vous permettra d'utiliser la commande @command{guix import pypi} -(@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs -et pas pour les utilisateurs occasionnels. - -@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 ulltérieure. +0.10.2 ou ultérieure. @item Lorsque @url{http://www.bzip.org, libbz2} est disponible, @@ -828,7 +880,7 @@ make check TESTS="tests/store.scm tests/cpio.scm" 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éfinire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet +définir la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet exemple : @example @@ -840,9 +892,9 @@ 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 d'exploitation GuixSD@. Elle ne peut être -lancée qui sur un système où Guix est déjà installé, avec : +Guix also comes with a whole-system test suite that tests complete Guix +System instances. It can only run on systems where Guix is already +installed, using: @example make check-system @@ -1156,13 +1208,11 @@ les machines de construction correspondantes. @end table @end deftp -La commande @code{guile} doit être dans le chemin de recherche des machines -de construction. En plus, les modules Guix doivent se trouver dans -@code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez -vérifier si c'est le cas en lançant : +The @command{guix} command must be in the search path on the build +machines. You can check whether this is the case by running: @example -ssh build-machine guile -c "'(use-modules (guix config))'" +ssh build-machine guix repl --version @end example Il reste une dernière chose à faire maintenant que @file{machines.scm} est @@ -1238,11 +1288,11 @@ cette commande sur le nœud principal : @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 SELniux 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 GuixSD ne fournit pas de politique SELniux de base, la -politique du démon ne peut pas être utilisée sur GuixSD@. +Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that can +be installed on a system where SELinux is enabled, in order to label Guix +files and to specify the expected behavior of the daemon. Since Guix System +does not provide an SELinux base policy, the daemon policy cannot be used on +Guix System. @subsubsection Installer la politique SELinux @cindex SELinux, installation de la politique @@ -1270,7 +1320,7 @@ permet toutes les opérations nécessaires. @subsubsection Limitations @cindex SELinux, limites -La politique n'et pas parfaite. Voici une liste de limitations et de +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. @@ -1389,10 +1439,9 @@ 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://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé -(@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}). +Consider @var{urls} the default whitespace-separated list of substitute +source URLs. When this option is omitted, +@indicateurl{https://@value{SUBSTITUTE-SERVER}} is used. 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}). @@ -1458,7 +1507,7 @@ 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 sourtie différente est gardée +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. @@ -1603,15 +1652,14 @@ connexions sur le socket Unix-domain situé à @section Réglages applicatifs @cindex distro extérieure -Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente -de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes -supplémentaires sont requises pour que tout soit en place. En voici -certaines. +When using Guix on top of GNU/Linux distribution other than Guix System---a +so-called @dfn{foreign distro}---a few additional steps are needed to get +everything in place. Here are some of them. @subsection Régionalisation @anchor{locales-and-locpath} -@cindex régionalisation, en dehors de GuixSD +@cindex locales, when not on Guix System @vindex LOCPATH @vindex GUIX_LOCPATH Les paquets installés @i{via} Guix n'utiliseront pas les données de @@ -1686,12 +1734,13 @@ 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 effectue la -résolution eux-même, 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). +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 @@ -1728,7 +1777,7 @@ guix package -i font-adobe-source-han-sans:cn @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 utlisant XLFD (X Logical Font +spécifier le nom complet de la police en utilisant XLFD (X Logical Font Description), comme ceci : @example @@ -1786,7 +1835,7 @@ 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çaint Emacs avec l'option +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 @@ -1802,21 +1851,694 @@ 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. -@cindex tentative d'utiliser une bibliothèque impure, message d'erreur - -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. Par défaut, l'enveloppe refuse de lier des -bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être -embêtant lorsque vous utilisez la chaîne d'outils pour lier des -bibliothèques locales. Pour permettre des références à des bibliothèques en -dehors du dépôt, vous devrez définir la variable d'environnement -@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}. +The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches +passed to the linker, add corresponding @code{-rpath} arguments, and invoke +the actual linker with this new set of arguments. You can instruct the +wrapper to refuse to link against libraries not in the store by setting the +@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}. @c TODO What else? @c ********************************************************************* +@node Installation du système +@chapter Installation du système + +@cindex installing Guix System +@cindex Guix System, installation +This section explains how to install Guix System on a machine. Guix, as a +package manager, can also be installed on top of a running GNU/Linux system, +@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. +* Effectuer l'installation:: Pour de vrai. +* Installing Guix in a VM:: Guix System playground. +* Construire l'image d'installation:: D'où vient tout cela. +@end menu + +@node Limitations +@section Limitations + +As of version @value{VERSION}, Guix System is not production-ready. It may +contain bugs and lack important features. Thus, if you are looking for a +stable production system that respects your freedom as a computer user, a +good solution at this point is to consider +@url{http://www.gnu.org/distros/free-distros.html, one of the more +established GNU/Linux distributions}. We hope you can soon switch to the +Guix System without fear, of course. In the meantime, you can also keep +using your distribution and try out the package manager on top of it +(@pxref{Installation}). + +Avant de procéder à l'installation, soyez conscient de ces limitations les +plus importantes qui s'appliquent à la version @value{VERSION} : + +@itemize +@item +Le procédé d'installation n'a pas d'interface utilisateur graphique et +requiert une certaine familiarité avec GNU/Linux (voir les sous-sections +suivantes pour avoir un aperçu de ce que cela signifie). + +@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 +More than 8,500 packages are available, but you might occasionally find that +a useful package is missing. + +@item +GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11. +cependant, certaines applications graphiques peuvent manquer, ainsi que KDE. +@end itemize + +Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à +rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer +la distribution. @xref{Contribuer}, pour plus d'info. + + +@node Considérations matérielles +@section Considérations matérielles + +@cindex hardware support on Guix System +GNU@tie{}Guix focuses on respecting the user's computing freedom. It builds +around the kernel Linux-libre, which means that only hardware for which free +software drivers and firmware exist is supported. Nowadays, a wide range of +off-the-shelf hardware is supported on GNU/Linux-libre---from keyboards to +graphics cards to scanners and Ethernet controllers. Unfortunately, there +are still areas where hardware vendors deny users control over their own +computing, and such hardware is not supported on 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 @var{%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/guixsd-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/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig +$ gpg --verify guixsd-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 guixsd-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=guixsd-install-@value{VERSION}.@var{system}.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 guixsd-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=guixsd-install-@value{VERSION}.@var{system}.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{Installing Guix in a VM}, if, instead, you would like to install Guix +System in a virtual machine (VM). + + +@node Préparer l'installation +@section Préparer l'installation + +Once you have successfully booted your computer using the installation +medium, you should end up with the welcome page of the graphical installer. +The graphical installer is a text-based user interface built upon the newt +library. It shall guide you through all the different steps needed to +install GNU@tie{}Guix System. However, as the graphical installer is still +under heavy development, you might want to fallback to the original, shell +based install process, by switching to TTYs 3 to 6 with the shortcuts +CTRL-ALT-F[3-6]. The following sections describe the installation procedure +assuming you're using one of those TTYs. They are configured and can be used +to run commands as root. + +TTY2 shows this documentation, browsable using the Info reader commands +(@pxref{Top,,, info-stnd, Stand-alone GNU Info}). The installation system +runs the GPM mouse daemon, which allows you to select text with the left +mouse button and to paste it with the middle button. + +@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 + +The installation system includes many common tools needed for this task. +But it is also a full-blown Guix System, which means that you can install +additional packages, should you need it, using @command{guix package} +(@pxref{Invoquer guix package}). + +@subsection 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. + +@subsection 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. + +@subsection 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 +If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System +Partition} (ESP) is required. This partition can be mounted at +@file{/boot/efi} for instance and must have the @code{esp} flag set. E.g., +for @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 + +Once you are done partitioning the target hard disk drive, you have to +create a file system on the relevant partition(s)@footnote{Currently Guix +System only supports ext4 and btrfs file systems. In particular, code that +reads file system UUIDs and labels only works for these file system +types.}. For the ESP, if you have one and assuming it is @file{/dev/sda1}, +run: + +@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 + +Also mount any other file systems you would like to use on the target system +relative to this path. If you have opted for @file{/boot/efi} as an EFI +mount point for example, mount it at @file{/mnt/boot/efi} now so it is found +by @code{guix system init} afterwards. + +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 +@section 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 +Make sure the @code{bootloader-configuration} form refers to the target you +want to install GRUB on. It should mention @code{grub-bootloader} if you +are installing GRUB in the legacy way, or @code{grub-efi-bootloader} for +newer UEFI systems. For legacy systems, the @code{target} field names a +device, like @code{/dev/sda}; for UEFI systems it names a path to a mounted +EFI partition, like @code{/boot/efi}; do make sure the path is currently +mounted and a @code{file-sytem} entry is specified in your 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ée — 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}). + +@cindex upgrading Guix System +From then on, you can update the system whenever you want by running, say: + +@example +guix pull +sudo guix system reconfigure /etc/config.scm +@end example + +@noindent +This builds a new system generation with the latest packages and services +(@pxref{Invoquer guix system}). We recommend doing that regularly so that +your system includes the latest security updates (@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} +Note that @command{sudo guix} runs your user's @command{guix} command and +@emph{not} root's, because @command{sudo} leaves @code{PATH} unchanged. To +explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}. +@end quotation + +Join us on @code{#guix} on the Freenode IRC network or on +@email{guix-devel@@gnu.org} to share your experience---good or not so good. + +@node Installing Guix in a VM +@section Installing Guix in a Virtual Machine + +@cindex virtual machine, Guix System installation +@cindex serveur privé virtuel (VPS) +@cindex VPS (serveur privé virtuel) +If you'd like to install Guix System in a virtual machine (VM) or on a +virtual private server (VPS) rather than on your beloved machine, this +section is for you. + +To boot a @uref{http://qemu.org/,QEMU} VM for installing Guix System in a +disk image, follow these steps: + +@enumerate +@item +First, retrieve and decompress the Guix system installation image as +described previously (@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=guixsd-install-@value{VERSION}.@var{system}.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 + +Once installation is complete, you can boot the system that's on your +@file{guixsd.img} image. @xref{Running Guix in a VM}, for how to do that. + +@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 @@ -1851,7 +2573,6 @@ guix package -i emacs-guix * Inférieurs:: Interagir avec une autre révision de Guix. * Invoquer guix describe:: Affiche des informations sur la révision Guix actuelle. -* Invoquer guix pack:: Créer des lots de logiciels. * Invoquer guix archive:: Exporter et importer des fichiers du dépôt. @end menu @@ -1870,7 +2591,7 @@ 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à intallé GCC 4.8.0. Le profil de @code{bob} +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. @@ -1888,12 +2609,11 @@ 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, les utilisateurs peuvent revenir en -arrière à l'instance précédente de leur profil qui est connu pour bien -fonctionner. De manière similaire, la configuration globale du système dans -GuixSD est sujette aux mises à jour transactionnelles et aux annulations +In addition, any package transaction may be @emph{rolled back}. So, if, for +example, an upgrade installs a new version of a package that turns out to +have a serious bug, users may roll back to the previous instance of their +profile, which was known to work well. Similarly, the global system +configuration on Guix is subject to transactional upgrades and roll-back (@pxref{Utiliser le système de configuration}). Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut @@ -2222,7 +2942,7 @@ $ guix package -p foo -p bar --search-paths 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 recommendation. +donné cette recommandation. @item --profile=@var{profil} @@ -2240,13 +2960,9 @@ 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 --verbose -Produire une sortie verbeuse. En particulier, fournir les journaux de -construction de l'environnement sur le port d'erreur standard. - @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 distriibution. +option n'est utile que pour les développeurs de la distribution. @end table @@ -2259,10 +2975,10 @@ paquets : @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}, 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}). +List the available packages whose name, synopsis, or description matches +@var{regexp} (in a case-insensitive fashion), sorted by relevance. Print +all the metadata of matching packages in @code{recutils} format (@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 : @@ -2390,9 +3106,9 @@ 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 interval}. @code{--list-generations=2..9} affiche les +@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 interval doit être plus petit que sa fin. +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 @@ -2401,7 +3117,7 @@ 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 agées d'au plus 20 jours. +générations qui sont âgées d'au plus 20 jours. @end itemize @item --delete-generations[=@var{motif}] @@ -2455,7 +3171,7 @@ exemple résultent aussi de la construction d'une dérivation qui peut aussi * 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:: Coment Guix vérifie 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. @@ -2468,13 +3184,13 @@ exemple résultent aussi de la construction d'une dérivation qui peut aussi @cindex hydra @cindex ferme de construction -Le serveur @code{mirror.hydra.gnu.org} 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} +The @code{@value{SUBSTITUTE-SERVER}} server is a front-end to an official +build farm that builds packages from Guix continuously for some +architectures, and makes them available as substitutes. This is the default +source of substitutes; it can be overridden by passing the +@option{--substitute-urls} option either to @command{guix-daemon} +(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}}) or +to client tools such as @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 @@ -2499,33 +3215,28 @@ activer les substituts de n'importe quel autre serveur de substituts. @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{hydra.gnu.org} ou un mirroir, 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{hydra.gnu.org} pour ne pas être compromis et -vous servir des substituts authentiques. +To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER}} +or a mirror thereof, you must add its public key to the access control list +(ACL) of archive imports, using the @command{guix archive} command +(@pxref{Invoquer guix archive}). Doing so implies that you trust +@code{@value{SUBSTITUTE-SERVER}} to not be compromised and to serve genuine +substitutes. -La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans -@code{@var{préfixe}/share/guix/hydra.gnu.org.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 : +The public key for @code{@value{SUBSTITUTE-SERVER}} is installed along with +Guix, in @code{@var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, where +@var{prefix} is the installation prefix of Guix. If you installed Guix from +source, make sure you checked the GPG signature of +@file{guix-@value{VERSION}.tar.gz}, which contains this public key file. +Then, you can run something like this: @example -# guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub +# guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub @end example @quotation Remarque -De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique -de la nouvelle ferme de construction du projet, disponible depuis -@indicateurl{https://berlin.guixsd.org}. - -Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à -niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester. -Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir -des substituts plus rapidement que @code{mirror.hydra.gnu.org} +Similarly, the @file{hydra.gnu.org.pub} file contains the public key of an +independent build farm also run by the project, reachable at +@indicateurl{https://mirror.hydra.gnu.org}. @end quotation Une fois que cela est en place, la sortie d'une commande comme @code{guix @@ -2555,8 +3266,8 @@ $ guix build emacs --dry-run @end example @noindent -Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et -seront téléchargés, si possible, pour les futures constructions. +This indicates that substitutes from @code{@value{SUBSTITUTE-SERVER}} are +usable and will be downloaded, when possible, for future builds. @cindex substituts, comment les désactiver Le mécanisme de substitution peut être désactivé globalement en lançant @@ -2587,7 +3298,7 @@ substituts avec cette option : 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 mirroir de +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). @@ -2596,7 +3307,7 @@ 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ême, comme expliqué plus haut, ce dont on se soucie réellement (alors +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). @@ -2641,16 +3352,15 @@ fournis par un serveur. @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{hydra.gnu.org} soit pratique, nous encourageons les -utilisateurs à construire aussi par eux-même, voir à faire tourner leur -propre ferme de construction, pour que @code{hydra.gnu.org} 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}). +Today, each individual's control over their own computing is at the mercy of +institutions, corporations, and groups with enough power and determination +to subvert the computing infrastructure and exploit its weaknesses. While +using @code{@value{SUBSTITUTE-SERVER}} substitutes can be convenient, we +encourage users to also build on their own, or even run their own build +farm, such that @code{@value{SUBSTITUTE-SERVER}} is less of an interesting +target. One way to help is by publishing the software you build using +@command{guix publish} so that others have one more choice of server to +download substitutes from (@pxref{Invoquer guix publish}). Guix possède les fondations pour maximiser la reproductibilité logicielle (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions @@ -2752,7 +3462,7 @@ 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çaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}). +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 @@ -2762,13 +3472,12 @@ avez besoin d'espace disque. Par exemple pour garantir qu'au moins 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 sur GuixSD). 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. +It is perfectly safe to run as a non-interactive periodic job +(@pxref{Exécution de tâches planifiées}, for how to set up such a job). Running +@command{guix gc} with no arguments will collect as much garbage as it can, +but that is often inconvenient: you may find yourself having to rebuild or +re-download software that is ``dead'' from the GC viewpoint but that is +necessary to build other pieces of software---e.g., the compiler tool chain. 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 @@ -3046,6 +3755,11 @@ Utiliser le @var{profil} à la place de @file{~/.config/guix/current}. 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. @@ -3152,14 +3866,13 @@ 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 libe}. Contactez-nous par courriel sur @email{guix-devel@@gnu.org} -si vous souhaitez discuter à ce propos. +logiciel libre}. Contactez-nous par courriel sur +@email{guix-devel@@gnu.org} si vous souhaitez discuter à ce propos. @end quotation -Une fois que vous avez un dépôt Git contenant vos propres modules de -paquets, vous pouvez écrire @code{~/.config/guix/channels.scm} pour dire à -@command{guix pull} de récupérer votre canal personnel @emph{en plus} des -canaux Guix par défaut : +To use a channel, write @code{~/.config/guix/channels.scm} to instruct +@command{guix pull} to pull from it @emph{in addition} to the default Guix +channel(s): @vindex %default-channels @lisp @@ -3204,6 +3917,50 @@ contient aussi bien Guix que les paquets du canal @code{my-personal-packages}, tandis que d'autres viennent du canal par défaut de Guix. +To create a channel, create a Git repository containing your own package +modules and make it available. The repository can contain anything, but a +useful channel will contain Guile modules that export packages. Once you +start using a channel, Guix will behave as if the root directory of that +channel's Git repository has been added to the Guile load path (@pxref{Load +Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel +contains a file at @file{my-packages/my-tools.scm} that defines a Guile +module, then the module will be available under the name @code{(my-packages +my-tools)}, and you will be able to use it like any other module +(@pxref{Modules,,, guile, GNU Guile Reference Manual}). + +@cindex dependencies, channels +@cindex meta-data, channels +@subsection Declaring Channel Dependencies + +Channel authors may decide to augment a package collection provided by other +channels. They can declare their channel to be dependent on other channels +in a meta-data file @file{.guix-channel}, which is to be placed in the root +of the channel repository. + +The meta-data file should contain a simple S-expression like this: + +@lisp +(channel + (version 0) + (dependencies + (channel + (name some-collection) + (url "https://example.org/first-collection.git")) + (channel + (name some-other-collection) + (url "https://example.org/second-collection.git") + (branch "testing")))) +@end lisp + +In the above example this channel is declared to depend on two other +channels, which will both be fetched automatically. The modules provided by +the channel will be compiled in an environment where the modules of all +these declared channels are available. + +For the sake of reliability and maintainability, you should avoid +dependencies on channels that you don't control, and you should aim to keep +the number of dependencies to a minimum. + @subsection Répliquer Guix @cindex épinglage, canaux @@ -3462,6 +4219,531 @@ produire une liste de spécifications de canaux dans le format Recutils. 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. + +For example, the following command extracts the substitute for Emacs served +by @code{@value{SUBSTITUTE-SERVER}} to @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 Development +@chapter Development + +@cindex software development +If you are a software developer, Guix provides tools that you should find +helpful---independently of the language you're developing in. This is what +this chapter is about. + +The @command{guix environment} command provides a convenient way to set up +@dfn{development environments} containing all the dependencies and tools +necessary to work on the software package of your choice. The @command{guix +pack} command allows you to create @dfn{application bundles} that can be +easily distributed to users who do not run 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 +...@: or to browse the profile: + +@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 + +Sometimes it is desirable to isolate the environment as much as possible, +for maximal purity and reproducibility. In particular, when using Guix on a +host distro that is not Guix System, it is desirable to prevent access to +@file{/usr/bin} and other system-wide resources from the development +environment. For example, the following command spawns a Guile REPL in a +``container'' where only the store and the current working directory are +mounted: + +@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 + +starts a shell with all the base system packages available. + +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 +Unset existing environment variables when building the new environment, +except those specified with @option{--inherit} (see below.) This has the +effect of creating an environment in which search paths only contain package +inputs. + +@item --inherit=@var{regexp} +When used alongside @option{--pure}, inherit all the environment variables +matching @var{regexp}---in other words, put them on a ``white list'' of +environment variables that must be preserved. This option can be repeated +several times. + +@example +guix environment --pure --inherit=^SLURM --ad-hoc openmpi @dots{} \ + -- mpirun @dots{} +@end example + +This example runs @command{mpirun} in a context where the only environment +variables defined are @code{PATH}, environment variables whose name starts +with @code{SLURM}, as well as the usual ``precious'' variables (@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, mais a les privilèges root dans le contexte +du conteneur. + +@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/UTILISATEUR} ; et aucune donnée GECOS ne sera +copiée. @var{utilisateur} 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 + +@command{guix environment} also supports all of the common build options +that @command{guix build} supports (@pxref{Options de construction communes}) as well as +package transformation options (@pxref{Options de transformation de paquets}). + @node Invoquer guix pack @section Invoquer @command{guix pack} @@ -3481,7 +4763,7 @@ et @ref{Invoquer guix archive}. @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 contenunt les +: 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 @@ -3693,172 +4975,6 @@ communes (@pxref{Options de construction communes}) et toutes les options de transformation de paquets (@pxref{Options de transformation de paquets}). -@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{hydra.gnu.org} dans @file{/tmp/emacs} : - -@example -$ wget -O - \ - https://hydra.gnu.org/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 Interface de programmation @chapter Interface de programmation @@ -3893,17 +5009,82 @@ 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 monad du dépôt:: Interface purement fonctionnelle avec le +* 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 @@ -4029,9 +5210,9 @@ on définie une entrée nommée @code{"gawk"} dont la valeur est la variable @findex ,@@ @findex unquote-splicing De nouveau, @code{`} (un accent grave, synonyme de la fonction -@code{quasiquote}) nous permet d'introduire une liste lité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 +@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 @@ -4054,9 +5235,9 @@ construit avec l'outil en ligne de commande @code{guix build} 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'inforamtions sur la manière de tester des définitions de paquets et +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 réspecte les conventions de style. +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 @@ -4089,7 +5270,7 @@ 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>} -duof @var{paquet} construit depuis @var{système} pour @var{cible}. +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"} @@ -4513,7 +5694,7 @@ 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 junit à lancer. Il vaut par +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 @@ -4696,6 +5877,26 @@ le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par défaut. @end defvr +@defvr {Scheme Variable} dune-build-system +This variable is exported by @code{(guix build-system dune)}. It supports +builds of packages using @uref{https://dune.build/, Dune}, a build tool for +the OCaml programming language. It is implemented as an extension of the +@code{ocaml-build-system} which is described below. As such, the +@code{#:ocaml} and @code{#:findlib} parameters can be passed to this build +system. + +It automatically adds the @code{dune} package to the set of inputs. Which +package is used can be specified with the @code{#:dune} parameter. + +There is no @code{configure} phase because dune packages typically don't +need to be configured. The @code{#:build-flags} parameter is taken as a +list of flags passed to the @code{dune} command during the build. + +The @code{#:jbuild?} parameter can be passed to use the @code{jbuild} +command instead of the more recent @code{dune} command while building a +package. Its default value is @code{#f}. +@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 @@ -4803,7 +6004,7 @@ 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 -consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef +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 @@ -4840,9 +6041,9 @@ bibliothèques ne peuvent pas y être trouvées et on utilise @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 standarde utilisée -pour les paquets Python, qui consiste à lancer @code{python setup.py build} -puis @code{python setup.py install --prefix=/gnu/store/@dots{}}. +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 @@ -4863,7 +6064,7 @@ en mettant le paramètre @code{#:use-setuptools} à @code{#f}. @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 standarde des paquets Perl, qui +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 @@ -5207,8 +6408,8 @@ Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et invalide, par exemple parce que c'est le résultat d'une construction annulée ou échouée). -Une condition @code{&nix-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}). +A @code{&store-protocol-error} condition is raised if @var{path} is not +prefixed by the store directory (@file{/gnu/store}). @end deffn @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}] @@ -5223,9 +6424,9 @@ 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 monad ainsi que des +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 monad du dépôt}). +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.} @@ -5416,8 +6617,8 @@ un fichier : @end lisp -@node La monad du dépôt -@section La monad du dépôt +@node La monade du dépôt +@section La monade du dépôt @cindex monad @@ -5437,14 +6638,14 @@ dépôt ont des effets de bord ou dépendent d'états externes, elles doivent @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 monad très utile pour notre usage, la @dfn{monad du dépôt}. -Les monads 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 monad — 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}. +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 » : @@ -5493,10 +6694,10 @@ puisqu'il aura lieu implicitement, comme nous le verrons plus tard @c for the funny quote. L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En anglais on pourrait dire « you exit a monad like you exit a building on -fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble -en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir +fire: by running »@footnote{NdT : « on sort d'une monade comme d'un immeuble +en flamme, en courant ». Le jeu de mot est perdu à la traduction : courir et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de -la monad et obtenir l'effet escompté, on doit utiliser +la monade et obtenir l'effet escompté, on doit utiliser @code{run-with-store}. @example @@ -5532,7 +6733,7 @@ scheme@@(guile-user)> Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console @code{store-monad}. -Les formes syntaxiques principales pour utiliser des monads en général sont +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} ... @@ -5597,30 +6798,30 @@ des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à @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 monad -actuelle. Cahque expression dans la séquence doit être une expression +@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 monad -actuelle. Cahque expression dans la séquence doit être une expression +@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 monad d'état -Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à +@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 monad d'état. les procédure dans la monad d'état peuvent accéder et +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 monad d'état. Elle renvoie le carré de son argument, mais +valeur dans la monade d'état. Elle renvoie le carré de son argument, mais incrémente aussi la valeur actuelle de l'état : @example @@ -5664,19 +6865,19 @@ initiale. Renvoie deux valeurs : la valeur du résultat et l'état du résultat. @end deffn -L'interface principale avec la monad du dépôt, fournit par le module +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 monad du dépôt — un alias pour @var{%state-monad}. +La monade du dépôt — un alias pour @var{%state-monad}. -Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque -son effet est requis, une valeur de la monad du dépôt doit être « évaluée » +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 monad du dépôt, dans +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 @@ -5780,7 +6981,7 @@ 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} ett @code{unquote-splicing} respectivement +@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 : @@ -5795,7 +6996,7 @@ 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 informatinos sur les paquets ou les dérivations +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 @@ -5887,7 +7088,7 @@ récupéré dans l'environnement de construction isolé de notre gexp, pour que @cindex closure de module @findex source-module-closure -Typiquement, vous voudriez que la @emph{closure} complète du mondule soit +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 @@ -5990,7 +7191,7 @@ 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 +@code{(guix build utils)} ou le nom d'un module suivi d'une flèche, suivie d'un objet simili-fichier : @example @@ -6029,7 +7230,7 @@ Renvoie @code{#t} si @var{obj} est une G-expression. 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 monad du dépôt}, pour plus d'information sur les monads). +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] @ @@ -6134,7 +7335,7 @@ 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 monad du dépôt, @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} @@ -6171,7 +7372,7 @@ L'exemple ci-dessous construit un script qui invoque simplement la commande "ls")) @end example -Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt, +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 à : @@ -6411,8 +7612,6 @@ Guix d'une manière pratique. paquets. * Invoquer guix size:: Profiler l'utilisation du disque. * Invoquer guix graph:: Visualiser le graphe des paquets. -* Invoquer guix environment:: Mettre en place des environnements de - développement. * 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. @@ -6582,11 +7781,15 @@ 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}}). -@item --verbosity=@var{level} -Utilise le niveau de verbosité donné. @var{level} doit être un entier entre -0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le -mettre à 4 ou plus peut être utile pour déboguer des problèmes de -configuration du démon de construction. +@c Note: This option is actually not part of %standard-build-options but +@c most programs honor it. +@cindex verbosity, of the command-line tools +@cindex build logs, verbosity +@item -v @var{level} +@itemx --verbosity=@var{level} +Use the given verbosity @var{level}, an integer. Choosing 0 means that no +output is produced, 1 is for quiet output, and 2 shows all the build log +output on standard error. @item --cores=@var{n} @itemx -c @var{n} @@ -6598,6 +7801,12 @@ valeur spéciale @code{0} signifie autant de cœurs que possible. 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{level} +Produce debugging output coming from the build daemon. @var{level} must be +an integer between 0 and 5; higher means more verbose output. Setting a +level of 4 or more may be helpful when debugging setup issues with the build +daemon. + @end table Sous le capot, @command{guix build} est surtout un interface à la procédure @@ -6655,7 +7864,7 @@ partir de @var{source} ; dans l'exemple précédent, il s'agit de 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 mirroir GNU et l'utilise comme +télécharge @file{ed-1.7.tar.g} depuis un miroir GNU et l'utilise comme source pour le paquet @code{ed} : @example @@ -6728,7 +7937,8 @@ utilisez avec précaution ! Build @var{package} from the latest commit of @var{branch}. The @code{source} field of @var{package} must be an origin with the @code{git-fetch} method (@pxref{Référence d'origine}) or a @code{git-checkout} -object; the repository URL is taken from that @code{source}. +object; the repository URL is taken from that @code{source}. Git +sub-modules of the repository are fetched, recursively. For instance, the following command builds @code{guile-sqlite3} from the latest commit of its @code{master} branch, and then builds @code{guix} @@ -6766,9 +7976,10 @@ Les options de la ligne de commande ci-dessous sont spécifiques à @item --quiet @itemx -q -Construire en silence, sans afficher les journaux de construction. À 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}. +Build quietly, without displaying the build log; this is equivalent to +@code{--verbosity=0}. Upon completion, the build log is kept in @file{/var} +(or similar) and can always be retrieved using the @option{--log-file} +option. @item --file=@var{fichier} @itemx -f @var{fichier} @@ -6795,14 +8006,14 @@ 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 monad du dépôt}). La procédure doit renvoyer une +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ême. +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 @@ -6908,7 +8119,7 @@ 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 sourtie différente est gardée +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. @@ -6966,7 +8177,7 @@ construction de GDB sur MIPS, mais que vous n'avez qu'une machine @example $ guix build --log-file gdb -s mips64el-linux -https://hydra.gnu.org/log/@dots{}-gdb-7.10 +https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10 @end example Vous pouvez accéder librement à un vaste bibliothèque de journaux de @@ -7060,7 +8271,7 @@ démon. @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 packagers en plaçant leur éditeur +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 : @@ -7070,7 +8281,8 @@ guix edit gcc@@4.9 vim @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 cele de Vim. +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} @@ -7092,7 +8304,7 @@ 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 : losque les développeurs finissent par construire le paquet +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 @@ -7245,14 +8457,12 @@ OpenPGP manquantes lors de la vérification de la signature d'un paquet. @item pypi @cindex pypi -Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des -paquets Python}@footnote{Cette fonctionnalité requiert l'installation de -Guile-JSON. @xref{Prérequis}.}. 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. +Import metadata from the @uref{https://pypi.python.org/, Python Package +Index}. Information is taken from the JSON-formatted description available +at @code{pypi.python.org} and usually includes all the relevant information, +including package dependencies. For maximum efficiency, it is recommended +to install the @command{unzip} utility, so that the importer can unzip +Python wheels and gather data from them. La commande ci-dessous importe les métadonnées du paquet Python @code{itsdangerous} : @@ -7270,15 +8480,13 @@ expressions de paquets de tous ceux qui ne sont pas déjà dans Guix. @item gem @cindex gem -Importe des métadonnées de @uref{https://rubygems.org/, -RubyGems}@footnote{Cette fonctionnalité requiert l'installation de -Guile-JSON. @xref{Prérequis}.}. 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 pièges -cependant. 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 au packager. +Import metadata from @uref{https://rubygems.org/, RubyGems}. Information is +taken from the JSON-formatted description available at @code{rubygems.org} +and includes most relevant information, including runtime dependencies. +There are some caveats, however. The metadata doesn't distinguish between +synopses and descriptions, so the same string is used for both fields. +Additionally, the details of non-Ruby dependencies required to build native +extensions is unavailable and left as an exercise to the packager. La commande ci-dessous importe les métadonnées pour le paquet Ruby @code{rails} : @@ -7296,15 +8504,13 @@ expressions de paquets de tous ceux qui ne sont pas déjà dans Guix. @item cpan @cindex CPAN -Importe des métadonnées de @uref{https://www.metacpan.org/, -MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de -Guile-JSON. @xref{Prérequis}.}. 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. +Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}. +Information is taken from the JSON-formatted metadata provided through +@uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most +relevant information, such as module dependencies. License information +should be checked closely. If Perl is available in the store, then the +@code{corelist} utility will be used to filter core modules out of the list +of dependencies. La commande ci-dessous importe les métadonnées du module Perl @code{Acme::Boolean} : @@ -7381,10 +8587,8 @@ guix import texlive --archive=generic ifxetex @item json @cindex JSON, import -Importe des métadonnées d'un fichier JSON local@footnote{Cette -fonctionnalité requiert l'installation de Guile-JSON. -@xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de -paquet au format JSON : +Import package metadata from a local JSON file. Consider the following +example package definition in JSON format: @example @{ @@ -7629,6 +8833,23 @@ 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 +Consider the packages specified, and all the packages upon which they +depend. + +@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 @@ -7692,7 +8913,7 @@ Choisi tous les paquets dans @var{subset}, entre @code{core} et 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 rest ». Cela comprend GCC, libc, Binutils, Bash, etc. +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 @@ -7821,6 +9042,22 @@ hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{} 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 +List all the packages which one or more packages depend upon. + +@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 + +The command above lists a set of packages which, when changed, would cause +@code{flex} to be rebuilt. + Les options suivante peuvent être utilisées pour personnaliser les opérations avec GnuPG : @@ -7924,11 +9161,19 @@ natives. @item source @itemx home-page @itemx mirror-url +@itemx github-url @itemx source-file-name Probe @code{home-page} and @code{source} URLs and report those that are -invalid. Suggest a @code{mirror://} URL when applicable. Check that the -source file name is meaningful, e.g.@: is not just a version number or -``git-checkout'', without a declared @code{file-name} (@pxref{Référence d'origine}). +invalid. Suggest a @code{mirror://} URL when applicable. If the +@code{source} URL redirects to a GitHub URL, recommend usage of the GitHub +URL. Check that the source file name is meaningful, e.g.@: is not just a +version number or ``git-checkout'', without a declared @code{file-name} +(@pxref{Référence d'origine}). + +@item source-unstable-tarball +Parse the @code{source} URL to determine if a tarball from GitHub is +autogenerated or if it is a release tarball. Unfortunately GitHub's +autogenerated tarballs are sometimes regenerated. @item cve @cindex vulnérabilités @@ -8044,7 +9289,7 @@ total: 78.9 MiB @end example @cindex closure -Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de +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 : @@ -8054,16 +9299,16 @@ $ guix gc -R /gnu/store/@dots{}-coreutils-8.23 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 cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la +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 cloture de Coreutils pèse 79@tie{}Mio, dont +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 cloture parce qu'elles sont toujours +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 @@ -8095,8 +9340,8 @@ total: 102.3 MiB @end example @noindent -Dans cet exemple on voit que la combinaison des quatre paquets prent -102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures +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 : @@ -8108,13 +9353,13 @@ 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 optinos suivantes : +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 cloture de l'élémente. +la taille totale de la clôture de l'élément. @end table @item --map-file=@var{fichier} @@ -8329,325 +9574,6 @@ que cette option vous permet de visualiser. @end table -@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 -...@: or to browse the profile: - -@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 GuixSD, 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 de GuixSD 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. Cela a pour effet de créer un environnement dans -lequel les chemins de recherche ne contiennent que des entrées de paquets. - -@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/passwod} est -configuré en conséquence. Le processus est lancé en tant que l'utilisateur -actuel en dehors du conteneur, mais a les privilèges root dans le contexte -du conteneur. - -@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/passwod} -dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire -personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera -copiée. @var{utilisateur} 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{soruce} 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 - -@command{guix environment} supporte aussi toutes les options de construction -que @command{guix build} supporte (@pxref{Options de construction communes}). - @node Invoquer guix publish @section Invoquer @command{guix publish} @@ -8657,12 +9583,11 @@ 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{hydra.gnu.org}. +When @command{guix publish} runs, it spawns an HTTP server which allows +anyone with network access to obtain substitutes from it. This means that +any machine running Guix can also act as if it were a build farm, since the +HTTP interface is compatible with Hydra, the software behind the +@code{@value{SUBSTITUTE-SERVER}} build farm. Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux destinataires de vérifier leur authenticité et leur intégrité @@ -8706,7 +9631,7 @@ fournit un manière pratique de vérifier ce qu'un serveur fournit 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 d'origine}). Par exemple, en supposant que @command{guix -publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie +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}) : @@ -8730,8 +9655,9 @@ 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} pace que les navigateurs web les décompressent -automatiquement, ce qui n'est pas le cas avec la compression bzip2. +@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 : @@ -8776,7 +9702,7 @@ 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ésponses, ce qui empêche les clients de savoir +@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 @@ -8840,9 +9766,9 @@ 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 GuixSD est vraiment une seule -ligne : instantiez simplement un service @code{guix-publish-service-type} -dans le champs @code{services} de votre déclaration @code{operating-system} +Enabling @command{guix publish} on Guix System is a one-liner: just +instantiate a @code{guix-publish-service-type} service in the +@code{services} field of the @code{operating-system} declaration (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}). Si vous avez installé Guix sur une « distro extérieure », suivez ces @@ -8904,21 +9830,21 @@ donné. La sortie de la commande ressemble à : @smallexample -$ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org" -mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 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://hydra.gnu.org/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://hydra.gnu.org/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://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax - https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs +$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org" +updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0% +updating list of substitutes from 'https://guix.example.org'... 100.0% +/gnu/store/@dots{}-openssl-1.0.2d contents differ: + local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q + https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q + https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim +/gnu/store/@dots{}-git-2.5.0 contents differ: + local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha + https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f + https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73 +/gnu/store/@dots{}-pius-2.1.1 contents differ: + local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax + https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax + https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs @dots{} @@ -8937,34 +9863,32 @@ 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{hydra.gnu.org} 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. +As an example, @code{guix.example.org} always gets a different answer. +Conversely, @code{@value{SUBSTITUTE-SERVER}} agrees with local builds, +except in the case of Git. This might indicate that the build process of +Git is non-deterministic, meaning that its output varies as a function of +various things that Guix does not fully control, in spite of building +packages in isolated environments (@pxref{Fonctionnalités}). Most common sources +of non-determinism include the addition of timestamps in build results, the +inclusion of random numbers, and directory listings sorted by inode number. +See @uref{https://reproducible-builds.org/docs/}, for more information. 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://hydra.gnu.org/nar/@dots{}-git-2.5.0 \ +$ 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{hydra.gnu.org} (@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. +This command shows the difference between the files resulting from the local +build, and the files resulting from the build on +@code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging +Files,, diffutils, Comparing and Merging Files}). The @command{diff} +command works great for text files. When binary files differ, a better +option is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps +visualize differences for all kinds of files. 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 @@ -8975,9 +9899,9 @@ 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{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même -résultat que vous avec : +If you are writing packages for Guix, you are encouraged to check whether +@code{@value{SUBSTITUTE-SERVER}} and other substitute servers obtain the +same build result as you did with: @example $ guix challenge @var{paquet} @@ -9116,11 +10040,11 @@ guix container exec @var{pid} @var{programme} @var{arguments}@dots{} @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}. +@var{arguments} sont les options supplémentaires à passer à @var{programme}. -La commande suivante lance un shell de connexion interactif dans un -conteneur GuixSD, démarré par @command{guix system container} et dont le PID -est 9001 : +The following command launches an interactive login shell inside a Guix +system container, started by @command{guix system container}, and whose +process ID is 9001: @example guix container exec 9001 /run/current-system/profile/bin/bash --login @@ -9145,7 +10069,7 @@ tourner @command{guix publish} (@pxref{Invoquer guix publish}). @cindex statistiques sur les substituts @cindex disponibilité des substituts -@cindex substuts, disponibilité +@cindex substituts, disponibilité @cindex weather, disponibilité des substituts Voici un exemple : @@ -9173,14 +10097,16 @@ https://guix.example.org @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 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. +As you can see, it reports the fraction of all the packages for which +substitutes are available on the server---regardless of whether substitutes +are enabled, and regardless of whether this server's signing key is +authorized. It also reports the size of the compressed archives (``nars'') +provided by the server, the size the corresponding store items occupy in the +store (assuming deduplication is turned off), and the server's throughput. +The second part gives continuous integration (CI) statistics, if the server +supports it. In addition, using the @option{--coverage} option, +@command{guix weather} can list ``important'' package substitutes missing on +the server (see below). 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 @@ -9210,6 +10136,38 @@ 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}] +Report on substitute coverage for packages: list packages with at least +@var{count} dependents (zero by default) for which substitutes are +unavailable. Dependent packages themselves are not listed: if @var{b} +depends on @var{a} and @var{a} has no substitutes, only @var{a} is listed, +even though @var{b} usually lacks substitutes as well. The result looks +like this: + +@example +$ guix weather --substitute-urls=https://ci.guix.fr.info -c 10 +computing 8,983 package derivations for x86_64-linux... +looking for 9,343 store items on https://ci.guix.fr.info... +updating substitutes from 'https://ci.guix.fr.info'... 100.0% +https://ci.guix.fr.info + 64.7% substitutes available (6,047 out of 9,343) +@dots{} +2502 packages are missing from 'https://ci.guix.fr.info' for 'x86_64-linux', among which: + 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 + +What this example shows is that @code{kcoreaddons} and presumably the 58 +packages that depend on it have no substitutes at @code{ci.guix.fr.info}; +likewise for @code{qgpgme} and the 46 packages that depend on it. + +If you are a Guix developer, or if you are taking care of this build farm, +you'll probably want to have a closer look at these packages: they may +simply fail to build. @end table @node Invoquer guix processes @@ -9270,756 +10228,9 @@ ClientPID: 19419 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{} @end example -@c ********************************************************************* -@node Distribution GNU -@chapter Distribution GNU - -@cindex Distribution Système Guix -@cindex GuixSD -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 « Distribution Système Guix » ou GuixSD. - -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 - -GuixSD lui-même est actuellement disponible sur @code{i686} et -@code{x86_64}. - -@noindent -Pour des informations sur comment porter vers d'autres architectures et -d'autres noyau, @pxref{Porter}. - -@menu -* Installation du système:: Installer le système d'exploitation complet. -* 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. -* Modules de paquets:: Les paquets du point de vu du programmeur. -* Consignes d'empaquetage:: Faire grandir la distribution. -* Bootstrapping:: GNU/Linux depuis zéro. -* Porter:: Cibler une autre plateforme ou un autre noyau. -@end menu - -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. - -@node Installation du système -@section Installation du système - -@cindex installer GuixSD -@cindex Distribution Système Guix -Cette section explique comment installer la distribution système Guix -(GuixSD) sur votre machine. Le gestionnaire de paquets Guix 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. -* Effectuer l'installation:: Pour de vrai. -* Installer GuixSD dans une VM:: Jouer avec GuixSD@. -* Construire l'image d'installation:: D'où vient tout cela. -@end menu - -@node Limitations -@subsection Limitations - -À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est -pas prête pour la production. Elle peut contenir des bogues et ne pas avoir -certaines fonctionnalités importantes. Ainsi, si vous cherche un système de -production stable qui respecte votre liberté en tant qu'utilisateur, une -bonne solution consiste à utiliser -@url{http://www.gnu.org/distros/free-distros.html, une des distributions -GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à -GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser -votre distribution actuelle et essayer le gestionnaire de paquet par dessus -celle-ci (@pxref{Installation}). - -Avant de procéder à l'installation, soyez conscient de ces limitations les -plus importantes qui s'appliquent à la version @value{VERSION} : - -@itemize -@item -Le procédé d'installation n'a pas d'interface utilisateur graphique et -requiert une certaine familiarité avec GNU/Linux (voir les sous-sections -suivantes pour avoir un aperçu de ce que cela signifie). - -@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 -Plus de 7@tie{}500 paquets sont disponibles, mais vous pourrez parfois -trouver qu'un paquet utile est absent. - -@item -GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11. -cependant, certaines applications graphiques peuvent manquer, ainsi que KDE. -@end itemize - -Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à -rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer -la distribution. @xref{Contribuer}, pour plus d'info. - - -@node Considérations matérielles -@subsection Considérations matérielles - -@cindex support matériel sur GuixSD -GNU@tie{}GuixSD 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 supportés. De nos jours, une -grande gamme de matériel qu'on peut acheter est supporté 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 -fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre -utilisation de l'ordinateur, et ces matériels ne sont pas supportés par -GuixSD. - -@cindex WiFi, support matériel -L'un des types de matériels où les pilotes ou les microgiciels sont le moins -disponibles sont les appareils WiFi. Les appareils WiFi connus pour -fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui -correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent -des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui -correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels -libres existent pour les deux et sont disponibles directement sur GuixSD, -dans @var{%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 -@subsection 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/guixsd-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/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig -$ gpg --verify guixsd-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. - -@unnumberedsubsubsec 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 guixsd-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=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX -sync -@end example - -Accéder à @file{/dev/sdX} requiert généralement les privilèges -super-utilisateur. -@end enumerate - -@unnumberedsubsubsec 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 guixsd-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=guixsd-install-@value{VERSION}.x86_64.iso -@end example - -Accéder à @file{/dev/srX} requiert généralement les privilèges -super-utilisateur. -@end enumerate - -@unnumberedsubsubsec 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 GuixSD dans une VM}, si, à la place, vous souhaitez installer -GuixSD dans une machine virtuelle (VM). - - -@node Préparer l'installation -@subsection Préparer l'installation - -Une fois que vous avez démarré votre ordinateur sur le média d'installation, -vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont -configurées et peuvent être utilisés pour lancer des commandes en root. Le -TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer 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 - -Le système d'installation inclus plusieurs outils usuels pour requis pour -cette tâche. Mais c'est aussi un système GuixSD 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}). - -@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-file 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 -devrait être montée dans @file{/boot/efi} 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 -GuixSD 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 un @file{/boot} sur -une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant -pour qu'il puisse être trouvé 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 que ce chemin -est bien monté. - -@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ée — 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}). - -@cindex mettre à jour GuixSD -À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le -souhaitez en lançant @command{guix pull} en tant que @code{root} -(@pxref{Invoquer guix pull}), puis en lançant @command{guix system -reconfigure} pour construire une nouvelle génération du système avec les -derniers paquets et les derniers services (@pxref{Invoquer guix system}). -Nous vous recommandons de le faire régulièrement pour que votre système -inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}). - -Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur -@file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou -mauvaise. - -@node Installer GuixSD dans une VM -@subsection Installer GuixSD sur une machine virtuelle - -@cindex machine virtuelle, installation de GuixSD -@cindex serveur privé virtuel (VPS) -@cindex VPS (serveur privé virtuel) -Si vous souhaitez installer GuixSD 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 GuixSD sur -une image disque, suivez ces étapes : - -@enumerate -@item -Tout d'abord récupérez et décompressez l'image d'installation de GuixSD -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=guixsd-install-@value{VERSION}.@var{system}.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 GuixSD dans une VM}, pour une manière de -faire. - -@node Construire l'image d'installation -@subsection 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 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. - -@subsection 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. @node Configuration système -@section Configuration système +@chapter Configuration système @cindex configuration du système La distribution système Guix utilise un mécanisme de configuration du @@ -10065,13 +10276,12 @@ est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut * Configuration du chargeur d'amorçage:: Configurer le chargeur d'amorçage. * Invoquer guix system:: Instantier une configuration du système. -* Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine - virtuelle. +* Running Guix in a VM:: How to run Guix System in a virtual machine. * Définir des services:: Ajouter de nouvelles définitions de services. @end menu @node Utiliser le système de configuration -@subsection 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 @@ -10095,7 +10305,7 @@ importants (@pxref{Référence de système d'exploitation}, pour des détails su les champs disponibles) et comment @dfn{instancier} le système d'exploitation avec @command{guix system}. -@unnumberedsubsubsec Bootloader +@unnumberedsubsec Bootloader @cindex ancien système de démarrage, sur les machines Intel @cindex démarrage BIOS, sur les machines Intel @@ -10117,7 +10327,7 @@ Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ @xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de configuration disponibles. -@unnumberedsubsubsec Paquets visibles sur tout le système +@unnumberedsubsec Paquets visibles sur tout le système @vindex %base-packages Le champ @code{packages} liste les paquets qui seront visibles sur tout le @@ -10162,18 +10372,17 @@ le meilleur paquet pour un nom donné ou un nom et une version : %base-packages))) @end lisp -@unnumberedsubsubsec Services systèmes +@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 @command{lshd} écoute sur le port 2222 -(@pxref{Services réseau, @code{lsh-service}}). Sous le capot, -@code{lsh-service} s'arrange pour que @code{lshd} 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}). +The @code{services} field lists @dfn{system services} to be made available +when the system starts (@pxref{Services}). The @code{operating-system} +declaration above specifies that, in addition to the basic services, we want +the OpenSSH secure shell daemon listening on port 2222 (@pxref{Services réseau, @code{openssh-service-type}}). Under the hood, +@code{openssh-service-type} arranges so that @command{sshd} is started with +the right command-line options, possibly with supporting configuration files +generated as needed (@pxref{Définir des services}). @cindex personnalisation des services @findex modify-services @@ -10253,7 +10462,7 @@ l'expression suivante renvoie une liste qui contient tous les services dans %desktop-services) @end example -@unnumberedsubsubsec Instancier le système +@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 @@ -10286,10 +10495,10 @@ 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}). -@unnumberedsubsubsec L'interface de programmation +@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 monad du dépôt}) : +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 @@ -10299,13 +10508,13 @@ 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 srevices)} (@pxref{Services}), ce module contient les entrailles -de GuixSD. Ouvrez-le un jour ! +This procedure is provided by the @code{(gnu system)} module. Along with +@code{(gnu services)} (@pxref{Services}), this module contains the guts of +Guix System. Make sure to visit it! @node Référence de système d'exploitation -@subsection Référence de @code{operating-system} +@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}). @@ -10462,7 +10671,7 @@ membres du groupe @code{wheel} peuvent utiliser @code{sudo}. @end deftp @node Systèmes de fichiers -@subsection 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 @@ -10634,7 +10843,7 @@ chargé. @end defvr @node Périphériques mappés -@subsection Périphériques mappés +@section Périphériques mappés @cindex mappage de périphériques @cindex périphériques mappés @@ -10758,7 +10967,7 @@ automatiquement. @node Comptes utilisateurs -@subsection Comptes utilisateurs +@section Comptes utilisateurs @cindex utilisateurs @cindex comptes @@ -10897,7 +11106,7 @@ particulier et il est automatiquement ajouté qu'il soit spécifié ou non. @end defvr @node Régionalisation -@subsection Régionalisation +@section Régionalisation @cindex paramètres linguistiques Un @dfn{paramètre linguistique} définie les conventions culturelles d'une @@ -10989,7 +11198,7 @@ Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais @emph{pas}, disons, @code{uk_UA.UTF-8}. @end defvr -@subsubsection Considérations sur la compatibilité des données linguistiques +@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 @@ -11012,11 +11221,10 @@ 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 GuixSD 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. +The ``problem'' with Guix is that users have a lot of freedom: They can +choose whether and when to upgrade software in their profiles, and might be +using a libc version different from the one the system administrator used to +build the system-wide locale data. 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 @@ -11043,7 +11251,7 @@ linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans @node Services -@subsection Services +@section Services @cindex services systèmes Une part importante de la préparation d'une déclaration @@ -11052,13 +11260,11 @@ 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. -GuixSD 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 : +Guix has a broad definition of ``service'' (@pxref{Composition de services}), +but many services are managed by the GNU@tie{}Shepherd (@pxref{Services Shepherd}). On a running system, the @command{herd} command allows you to +list the available services, show their status, start and stop them, or do +other specific operations (@pxref{Jump Start,,, shepherd, The GNU Shepherd +Manual}). For example: @example # herd status @@ -11096,7 +11302,7 @@ par les services de base qui peuvent être utilisés avec une déclaration * 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. +* 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. @@ -11125,10 +11331,10 @@ par les services de base qui peuvent être utilisés avec une déclaration @end menu @node Services de base -@subsubsection Services de base +@subsection Services de base Le module @code{(gnu services base)} fournit des définitions de services -poru les services de base qu'on peut attendre du système. Les 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 @@ -11143,7 +11349,9 @@ système, vous voudrez ajouter des services à ceux de @var{%base-services}, comme ceci : @example -(cons* (avahi-service) (lsh-service) %base-services) +(append (list (service avahi-service-type) + (service openssh-service-type)) + %base-services) @end example @end defvr @@ -11493,7 +11701,7 @@ actions suivantes : @item invalidate @cindex invalidation du cache, nscd @cindex nscd, invalidation du cache -Cela invalide le cache dnné. Par exemple, en laçant : +Cela invalide le cache donné. Par exemple, en laçant : @example herd invalidate nscd hosts @@ -11526,7 +11734,7 @@ 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 Biblothèque C de GNU qui fournit la commande +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"}) @@ -11645,14 +11853,15 @@ Nombre de comptes utilisateurs de construction à créer. @item @code{authorize-key?} (par défaut : @code{#t}) @cindex substituts, autorisations -Autoriser ou non les clefs de substituts listées dans @code{authorize-keys} -— par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}). +Whether to authorize the substitute keys listed in +@code{authorized-keys}---by default that of @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{hydra.gnu.org} -(@pxref{Substituts}). +The list of authorized key files for archive imports, as a list of +string-valued gexps (@pxref{Invoquer guix archive}). By default, it +contains that of @code{@value{SUBSTITUTE-SERVER}} (@pxref{Substituts}). @item @code{use-substitutes?} (par défaut : @code{#t}) S'il faut utiliser les substituts. @@ -11693,10 +11902,11 @@ 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 litéral @var{contents}. +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 @@ -11711,6 +11921,9 @@ donné. "ATTR@{product@}==\"Example\", " "RUN+=\"/path/to/script\""))) @end example + +The @command{herd rules udev} command, as root, returns the name of the +directory containing all the active udev rules. @end deffn Ici on montre comment le service @var{udev-service} par défaut peut être @@ -11760,7 +11973,7 @@ 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 grope @code{adbusers}, +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 @@ -11786,13 +11999,13 @@ dans le champ @var{groups} de l'enregistrement @var{operating-system}. ;; @dots{} (services - (modify-services %desktop-services - (udev-service-type config => - (udev-configuration (inherit config) - (rules (cons* android-udev-rules - (udev-configuration-rules config)))))))) + (modify-services %desktop-services + (udev-service-type + config => + (udev-configuration (inherit config) + (rules (cons android-udev-rules + (udev-configuration-rules config)))))))) @end example -@end deffn @defvr {Variable Scheme} urandom-seed-service-type Garde de l'entropie dans @var{%random-seed-file} pour démarrer @@ -11952,7 +12165,7 @@ sont souvent utilisés sur les systèmes audio temps-réel. @end deffn @node Exécution de tâches planifiées -@subsubsection Exécution de tâches planifiées +@subsection Exécution de tâches planifiées @cindex cron @cindex mcron @@ -11960,11 +12173,11 @@ sont souvent utilisés sur les systèmes audio temps-réel. 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 -traditionel @command{cron} ; la principale différence est qu'il est +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 qu lance les +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é @@ -12000,9 +12213,11 @@ gexps pour introduire des définitions de tâches qui sont passées à mcron (operating-system ;; @dots{} - (services (cons (mcron-service (list garbage-collector-job - updatedb-job - idutils-job)) + (services (cons (service mcron-service-type + (mcron-configuration + (jobs (list garbage-collector-job + updatedb-job + idutils-job)))) %base-services))) @end lisp @@ -12025,18 +12240,6 @@ pouvez spécifier le nombre de tâches à afficher : # herd schedule mcron 10 @end example -@deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}] -Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches -@var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de -mcron. - -C'est un raccourci pour : -@example -(service mcron-service-type - (mcron-configuration (mcron mcron) (jobs jobs))) -@end example -@end deffn - @defvr {Variable Scheme} mcron-service-type C'est le type du service @code{mcron}, dont la valeur est un objet @code{mcron-configuration} @@ -12062,7 +12265,7 @@ specifications,, mcron, GNU@tie{}mcron}). @node Rotation des journaux -@subsubsection Rotation des journaux +@subsection Rotation des journaux @cindex rottlog @cindex journaux, rotation @@ -12167,7 +12370,7 @@ s'agit de : @code{'("/var/log/messages" "/var/log/secure")} @end defvr @node Services réseau -@subsubsection Services réseau +@subsection Services réseau Le module @code{(gnu services networking)} fournit des services pour configurer les interfaces réseaux. @@ -12260,7 +12463,7 @@ Par exemple : @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ésaux +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 @@ -12540,13 +12743,13 @@ secondes. @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 connexionssur des +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'in service smtp qui transfère le trafic smtp par +@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} : @@ -12642,12 +12845,6 @@ lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe @end defvr -@deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}] -Cette procédure est obsolète et sera supprimée dans les futures versions. -Renvoie un service de type @code{tor-service-type}. @var{config-file} et -@var{tor} ont la même signification que dans @code{<tor-configuration>}. -@end deffn - @deftp {Type de données} tor-configuration @table @asis @item @code{tor} (par défaut : @code{tor}) @@ -12985,6 +13182,19 @@ C'est le symbole qui spécifie le niveau de journalisation : @code{quiet}, 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{""}) +This field can be used to append arbitrary text to the configuration file. +It is especially useful for elaborate configurations that cannot be +expressed otherwise. This configuration, for example, would generally +disable root logins, but permit them from one specific IP address: + +@example +(openssh-configuration + (extra-content "\ +Match Address 192.168.0.1 + PermitRootLogin yes")) +@end example + @end table @end deftp @@ -12994,7 +13204,7 @@ 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} d evotre système d'exploitation : +ajoutez cet appel au champ @code{services} de votre système d'exploitation : @example (dropbear-service (dropbear-configuration @@ -13060,34 +13270,53 @@ des navigateurs Web, ne se connectent à Facebook. Le module @code{(gnu services avahi)} fourni la définition suivante. -@deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @ - [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @ -[#:ipv6? #t] [#:wide-area? #f] @ -[#:domains-to-browse '()] [#:debug? #f] -Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond -aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher -des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et -qui étend le démon de cache de services de noms (nscd) pour qu'il puisse -résoudre des noms en @code{.local} avec -@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus, -ajoute le paquet @var{avahi} au profil du système pour que les commandes -comme @command{avahi-browse} soient directement utilisables. - -Si @var{host-name} 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. - -Lorsque la valeur de @var{publish?} est vraie, la publication des noms -d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon -publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau -local. - -Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est -activé. - -Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut -utiliser un socket IPv4 ou IPv6 respectivement. -@end deffn +@defvr {Scheme Variable} avahi-service-type +This is the service that runs @command{avahi-daemon}, a system-wide +mDNS/DNS-SD responder that allows for service discovery and +``zero-configuration'' host name lookups (see @uref{http://avahi.org/}). +Its value must be a @code{zero-configuration} record---see below. + +This service extends the name service cache daemon (nscd) so that it can +resolve @code{.local} host names using +@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name Service Switch}, for information on host name resolution. + +Additionally, add the @var{avahi} package to the system profile so that +commands such as @command{avahi-browse} are directly usable. +@end defvr + +@deftp {Data Type} avahi-configuration +Data type representation the configuration for Avahi. + +@table @asis + +@item @code{host-name} (default: @code{#f}) +If different from @code{#f}, use that as the host name to publish for this +machine; otherwise, use the machine's actual host name. + +@item @code{publish?} (default: @code{#t}) +When true, allow host names and services to be published (broadcast) over +the network. + +@item @code{publish-workstation?} (default: @code{#t}) +When true, @command{avahi-daemon} publishes the machine's host name and IP +address via mDNS on the local network. To view the host names published on +your local network, you can run: + +@example +avahi-browse _workstation._tcp +@end example + +@item @code{wide-area?} (default: @code{#f}) +When true, DNS-SD over unicast DNS is enabled. + +@item @code{ipv4?} (default: @code{#t}) +@itemx @code{ipv6?} (default: @code{#t}) +These fields determine whether to use IPv4/IPv6 sockets. + +@item @code{domains-to-browse} (default: @code{'()}) +This is a list of domains to browse. +@end table +@end deftp @deffn {Variable Scheme} openvswitch-service-type C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch}, @@ -13107,7 +13336,7 @@ Objet de paquet de Open vSwitch. @end deftp @node Système de fenêtrage X -@subsubsection Système de fenêtrage X +@subsection Système de fenêtrage X @cindex X11 @cindex Système de fenêtrage X @@ -13309,18 +13538,33 @@ avec une configuration de type @code{<sddm-configuration>}. @end deffn @deffn {Procédure Scheme} xorg-start-command [#:guile] @ - [#:modules %default-xorg-modules] @ -[#:fonts %default-xorg-fonts] @ -[#:configuration-file (xorg-configuration-file @dots{})] @ -[#:xorg-server @var{xorg-server}] -Renvoie un script @code{startx} dans lequel @var{modules}, une liste de -paquets de modules X et @var{fonts}, une liste de répertoires de polices X, -sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les -arguments. Le résultat devrait être utilisé à la place de @code{startx}. + [#:modules %default-xorg-modules] @ [#:fonts %default-xorg-fonts] @ +[#:configuration-file (xorg-configuration-file @dots{})] @ [#:xorg-server +@var{xorg-server}] [#:xserver-arguments '("-nolisten" "tcp")] Return a +@code{startx} script in which @var{modules}, a list of X module packages, +and @var{fonts}, a list of X font directories, are available. See +@code{xorg-wrapper} for more details on the arguments. The result should be +used in place of @code{startx}. Habituellement le serveur X est démarré par un gestionnaire de connexion. @end deffn +@cindex @code{-listen tcp}, for X11. +This procedure is useful to override command line options for the X server, +such as having it listen to over TCP: + +@example +(operating-system + ... + (services + (modify-services %desktop-services + (slim-service-type config => + (slim-configuration + (inherit config) + (startx (xorg-start-command + #:xserver-arguments '("-listen" "tcp")))))))) +@end example + @deffn {Procédure Scheme} xorg-configuration-file @ [#:modules %default-xorg-modules] @ [#:fonts %default-xorg-fonts] @ @@ -13401,13 +13645,12 @@ rend utilisable le bon vieux XlockMore. @node Services d'impression -@subsubsection 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 le support d'une imprimante -à un système GuixSD, ajoutez un @code{cups-service} à la définition du -système d'exploitation : +The @code{(gnu services cups)} module provides a Guix service definition for +the CUPS printing service. To add printer support to a Guix system, add a +@code{cups-service} to the operating system definition: @deffn {Variable Scheme} cups-service-type Le type de service pour un serveur d'impression CUPS. Sa valeur devrait @@ -13428,7 +13671,7 @@ 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 our les +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)}) : @@ -13776,7 +14019,7 @@ La valeur par défaut est @samp{stop-printer}. 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 requirt une limite de filtre d'environ 200. +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. @@ -13852,7 +14095,7 @@ La valeur par défaut est @samp{0}. @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 sotit une daresse IPv6 dans +@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 @@ -14275,7 +14518,7 @@ cette manière : @node Services de bureaux -@subsubsection 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 » — @@ -14505,24 +14748,80 @@ exemple, un utilisateur normal peut obtenir le droit de mettre le système en veille si l'utilisateur est connecté localement. @end deffn -@deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @ - [#:watts-up-pro? #f] @ -[#:poll-batteries? #t] @ -[#:ignore-lid? #f] @ -[#:use-percentage-for-policy? #f] @ -[#:percentage-low 10] @ -[#:percentage-critical 3] @ -[#:percentage-action 2] @ -[#:time-low 1200] @ -[#:time-critical 300] @ -[#:time-action 120] @ -[#:critical-power-action 'hybrid-sleep] -Renvoie un service qui lance @uref{http://upower.freedesktop.org/, -@command{upowerd}}, un moniteur système pour la consommation électrique et -le niveau de batterie, avec les paramètres de configuration données. Il -implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment -utilisé par GNOME. -@end deffn +@defvr {Scheme Variable} upower-service-type +Service that runs @uref{http://upower.freedesktop.org/, @command{upowerd}}, +a system-wide monitor for power consumption and battery levels, with the +given configuration settings. + +It implements the @code{org.freedesktop.UPower} D-Bus interface, and is +notably used by GNOME. +@end defvr + +@deftp {Data Type} upower-configuration +Data type representation the configuration for UPower. + +@table @asis + +@item @code{upower} (default: @var{upower}) +Package to use for @code{upower}. + +@item @code{watts-up-pro?} (default: @code{#f}) +Enable the Watts Up Pro device. + +@item @code{poll-batteries?} (default: @code{#t}) +Enable polling the kernel for battery level changes. + +@item @code{ignore-lid?} (default: @code{#f}) +Ignore the lid state, this can be useful if it's incorrect on a device. + +@item @code{use-percentage-for-policy?} (default: @code{#f}) +Whether battery percentage based policy should be used. The default is to +use the time left, change to @code{#t} to use the percentage. + +@item @code{percentage-low} (default: @code{10}) +When @code{use-percentage-for-policy?} is @code{#t}, this sets the +percentage at which the battery is considered low. + +@item @code{percentage-critical} (default: @code{3}) +When @code{use-percentage-for-policy?} is @code{#t}, this sets the +percentage at which the battery is considered critical. + +@item @code{percentage-action} (default: @code{2}) +When @code{use-percentage-for-policy?} is @code{#t}, this sets the +percentage at which action will be taken. + +@item @code{time-low} (default: @code{1200}) +When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining +in seconds at which the battery is considered low. + +@item @code{time-critical} (default: @code{300}) +When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining +in seconds at which the battery is considered critical. + +@item @code{time-action} (default: @code{120}) +When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining +in seconds at which action will be taken. + +@item @code{critical-power-action} (default: @code{'hybrid-sleep}) +The action taken when @code{percentage-action} or @code{time-action} is +reached (depending on the configuration of +@code{use-percentage-for-policy?}). + +Possible values are: + +@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/, @@ -14590,7 +14889,7 @@ service D-Bus. @end deffn @node Services de son -@subsubsection Services de son +@subsection Services de son @cindex support du son @cindex ALSA @@ -14603,7 +14902,7 @@ 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 valer de ce type est un enregistrement +@file{/etc/asound.conf}. La valeur de ce type est un enregistrement @command{alsa-configuration} comme dans cet exemple : @example @@ -14672,22 +14971,57 @@ détails. @node Services de bases de données -@subsubsection 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''] -Renvoie un service qui lance @var{postgresql}, le service de bases de -données PostgreSQL. + [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @ [#:port +5432] [#:locale ``en_US.utf8''] [#:extension-packages '()] Return a service +that runs @var{postgresql}, the PostgreSQL database server. 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 +Additional extensions are loaded from packages listed in +@var{extension-packages}. Extensions are available at runtime. For +instance, to create a geographic database using the @code{postgis} +extension, a user can configure the postgresql-service as in this example: + +@cindex postgis +@example +(use-package-modules databases geo) + +(operating-system + ... + ;; postgresql is required to run `psql' but postgis is not required for + ;; proper operation. + (packages (cons* postgresql %base-packages)) + (services + (cons* + (postgresql-service #:extension-packages (list postgis)) + %base-services))) +@end example + +Then the extension becomes visible and you can initialise an empty +geographic database in this way: + +@example +psql -U postgres +> create database postgistest; +> \connect postgistest; +> create extension postgis; +> create extension postgis_topology; +@end example + +There is no need to add this field for contrib extensions such as hstore or +dblink as they are already loadable by postgresql. This field is only +required to add extensions provided by other packages. @end deffn @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)] @@ -14799,7 +15133,7 @@ Répertoire dans lequel stocker la base de données et les fichiers liés. @end deftp @node Services de courriels -@subsubsection Services de courriels +@subsection Services de courriels @cindex courriel @cindex email @@ -15790,7 +16124,7 @@ par défaut est @samp{#t}. @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 -actifée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est +activée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est @samp{#f}. @end deftypevr @@ -16085,7 +16419,7 @@ Contournements pour divers bogues de certains client : @table @code @item delay-newmail -Envoie des notifications de nouveau message EXISTS/RECENT seulement en +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 @@ -16112,11 +16446,11 @@ autorise tous. La valeur par défaut est @samp{""}. @end deftypevr -Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que GuixSD -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. +Whew! Lots of configuration options. The nice thing about it though is that +Guix has a complete interface to Dovecot's configuration language. This +allows not only a nice way to declare configurations, but also offers +reflective capabilities as well: users can write code to inspect and +transform configurations from within Scheme. Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout prêt. Dans ce cas, vous pouvez passer un objet @@ -16168,7 +16502,7 @@ Objet de paquet du serveur SMTP OpenSMTPD. 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'envoie de courriels à des serveurs distants. Lancez @command{man +l'envoi de courriels à des serveurs distants. Lancez @command{man smtpd.conf} pour plus d'information. @end table @@ -16243,9 +16577,9 @@ système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée @code{bob@@example.com} et @code{bob@@example2.com}). @node Services de messagerie -@subsubsection Services de messagerie +@subsection Services de messagerie -@cindex messagerie intantanée +@cindex messagerie instantanée @cindex jabber @cindex XMPP Le module @code{(gnu services messaging)} fournit des définitions de @@ -16514,10 +16848,9 @@ d'information sur l'utilisation du moteur hashed. Voir aussi @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 dans GuixSD. -Voir @url{https://prosody.im/doc/logging}. La valeur par défaut est -@samp{"*syslog"}. +Set logging options. Advanced logging configuration is not yet supported by +the Guix Prosody Service. See @url{https://prosody.im/doc/logging}. +Defaults to @samp{"*syslog"}. @end deftypevr @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile @@ -16718,7 +17051,7 @@ 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 pourt 6667 sur localhost, ajoutez cette ligne +Pour que BitlBee écoute sur le port 6667 sur localhost, ajoutez cette ligne à vos services : @example @@ -16752,9 +17085,37 @@ BitlBee. @end table @end deftp +@subsubheading Quassel Service + +@cindex IRC (Internet Relay Chat) +@url{https://quassel-irc.org/,Quassel} is a distributed IRC client, meaning +that one or more clients can attach to and detach from the central core. + +@defvr {Scheme Variable} quassel-service-type +This is the service type for the @url{https://quassel-irc.org/,Quassel} IRC +backend daemon. Its value is a @code{quassel-configuration} (see below). +@end defvr + +@deftp {Data Type} quassel-configuration +This is the configuration for Quassel, with the following fields: + +@table @asis +@item @code{quassel} (default: @code{quassel}) +The Quassel package to use. + +@item @code{interface} (default: @code{"::,0.0.0.0"}) +@item @code{port} (default: @code{4242}) +Listen on the network interface(s) corresponding to the IPv4 or IPv6 +interfaces specified in the comma delimited @var{interface}, on @var{port}. + +@item @code{loglevel} (default: @code{"Info"}) +The level of logging desired. Accepted values are Debug, Info, Warning and +Error. +@end table +@end deftp @node Services de téléphonie -@subsubsection Services de téléphonie +@subsection Services de téléphonie @cindex Murmur (serveur VoIP) @cindex serveur VoIP @@ -16770,14 +17131,14 @@ configuration : (service murmur-service-type (murmur-configuration (welcome-text - "Welcome to this Mumble server running on GuixSD!") + "Welcome to this Mumble server running on Guix!") (cert-required? #t) ;disallow text password logins (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 avac la commande qui s'affiche +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 @@ -16978,7 +17339,7 @@ indiquée votre serveur sera listé par son nom d'hôte. @node Services de surveillance -@subsubsection Services de surveillance +@subsection Services de surveillance @subsubheading Service Tailon @@ -17165,8 +17526,327 @@ Lie l'interface web sur l'adresse spécifiée. @end table @end deftp +@subsubheading Zabbix server +@cindex zabbix zabbix-server +Zabbix provides monitoring metrics, among others network utilization, CPU +load and disk space consumption: + +@itemize +@item High performance, high capacity (able to monitor hundreds of thousands of devices). +@item Auto-discovery of servers and network devices and interfaces. +@item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others. +@item Distributed monitoring with centralized web administration. +@item Native high performance agents. +@item SLA, and ITIL KPI metrics on reporting. +@item High-level (business) view of monitored resources through user-defined visual console screens and dashboards. +@item Remote command execution through Zabbix proxies. +@end itemize + +@c %start of fragment + +Available @code{zabbix-server-configuration} fields are: + +@deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server +The zabbix-server package. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string user +User who will run the Zabbix server. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} group group +Group who will run the Zabbix server. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-host +Database host name. + +Defaults to @samp{"127.0.0.1"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-name +Database name. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-user +Database user. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-password +Database password. Please, use @code{include-files} with +@code{DBPassword=SECRET} inside a specified file instead. + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} number db-port +Database port. + +Defaults to @samp{5432}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string log-type +Specifies where log messages are written to: + +@itemize @bullet +@item +@code{system} - syslog. + +@item +@code{file} - file specified with @code{log-file} parameter. + +@item +@code{console} - standard output. + +@end itemize + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string log-file +Log file name for @code{log-type} @code{file} parameter. + +Defaults to @samp{"/var/log/zabbix/server.log"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string pid-file +Name of PID file. + +Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location +The location of certificate authority (CA) files for SSL server certificate +verification. + +Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location +Location of SSL client certificates. + +Defaults to @samp{"/etc/ssl/certs"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string extra-options +Extra options will be appended to Zabbix server configuration file. + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files +You may include individual files or all files in a directory in the +configuration file. + +La valeur par défaut est @samp{()}. + +@end deftypevr + +@c %end of fragment + +@subsubheading Zabbix agent +@cindex zabbix zabbix-agent + +Zabbix agent gathers information for Zabbix server. + +@c %start of fragment + +Available @code{zabbix-agent-configuration} fields are: + +@deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent +The zabbix-agent package. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string user +User who will run the Zabbix agent. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} group group +Group who will run the Zabbix agent. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string hostname +Unique, case sensitive hostname which is required for active checks and must +match hostname as configured on the server. + +Defaults to @samp{"Zabbix server"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string log-type +Specifies where log messages are written to: + +@itemize @bullet +@item +@code{system} - syslog. + +@item +@code{file} - file specified with @code{log-file} parameter. + +@item +@code{console} - standard output. + +@end itemize + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string log-file +Log file name for @code{log-type} @code{file} parameter. + +Defaults to @samp{"/var/log/zabbix/agent.log"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file +Name of PID file. + +Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} list server +List of IP addresses, optionally in CIDR notation, or hostnames of Zabbix +servers and Zabbix proxies. Incoming connections will be accepted only from +the hosts listed here. + +Defaults to @samp{("127.0.0.1")}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} list server-active +List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix +proxies for active checks. If port is not specified, default port is used. +If this parameter is not specified, active checks are disabled. + +Defaults to @samp{("127.0.0.1")}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options +Extra options will be appended to Zabbix server configuration file. + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files +You may include individual files or all files in a directory in the +configuration file. + +La valeur par défaut est @samp{()}. + +@end deftypevr + +@c %end of fragment + +@subsubheading Zabbix front-end +@cindex zabbix zabbix-front-end + +This service provides a WEB interface to Zabbix server. + +@c %start of fragment + +Available @code{zabbix-front-end-configuration} fields are: + +@deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx +Configuration Nginx. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host +Database host name. + +La valeur par défaut est @samp{"localhost"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port +Database port. + +Defaults to @samp{5432}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name +Database name. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user +Database user. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password +Database password. Please, use @code{db-secret-file} instead. + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file +Secret file which will be appended to @file{zabbix.conf.php} file. This +file contains credentials for use by Zabbix front-end. You are expected to +create it manually. + +La valeur par défaut est @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host +Zabbix server hostname. + +La valeur par défaut est @samp{"localhost"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port +Zabbix server port. + +Defaults to @samp{10051}. + +@end deftypevr + + +@c %end of fragment + @node Services Kerberos -@subsubsection Services Kerberos +@subsection Services Kerberos @cindex Kerberos Le module @code{(gnu services kerberos)} fournit des services liés au @@ -17291,7 +17971,7 @@ devraient être tentées. Les comptes locaux avec une valeur plus petite @node Services web -@subsubsection Services web +@subsection Services web @cindex web @cindex www @@ -17518,7 +18198,7 @@ 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émarage se trouvent 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}. @@ -17699,7 +18379,7 @@ 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, +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;")}. @@ -17810,7 +18490,7 @@ Arguments supplémentaires à passer au processus @command{varnishd}. @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ésué ; les nouveaux services devraient +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 @@ -17828,8 +18508,8 @@ 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 d'un service @code{fcgiwrap}. -Ce type a les paramètres suivants : +Data type representing the configuration of the @code{fcgiwrap} service. +This type has the following parameters: @table @asis @item @code{package} (par défaut : @code{fcgiwrap}) Le paquet fcgiwrap à utiliser. @@ -17892,7 +18572,7 @@ Type de données pour la configuration du service php-fpm. @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êts FastCGI. Les syntaxes valides +L'adresse sur laquelle accepter les requêtes FastCGI. Les syntaxes valides sont : @table @asis @item @code{"ip.add.re.ss:port"} @@ -17930,6 +18610,8 @@ 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} (default @code{#f}) +Specifies @code{php_admin_value[date.timezone]} parameter. @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. @@ -17999,7 +18681,7 @@ Une configuration simple de services pour php ressemble à ceci : (root "/srv/http/") (locations (list (nginx-php-location))) - (https-port #f) + (listen '("80")) (ssl-certificate #f) (ssl-certificate-key #f))) %base-services)) @@ -18011,7 +18693,7 @@ 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-serice @ +@deffn {Scheme Procedure} cat-avatar-generator-service @ [#:cache-dir "/var/cache/cat-avatar-generator"] @ [#:package cat-avatar-generator] @ [#:configuration (nginx-server-configuration)] @@ -18111,7 +18793,7 @@ certificats dans le champ @code{packages} de votre configuration. @end quotation @node Services de certificats -@subsubsection Services de certificats +@subsection Services de certificats @cindex Web @cindex HTTP, HTTPS @@ -18202,13 +18884,14 @@ de problème et des notifications importantes sur le compte. Taille de la clef RSA. @item @code{default-location} (par défaut : @i{voir plus bas}) -Le @code{nginx-location-configuration} par défaut. Come @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. +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}. @@ -18254,7 +18937,7 @@ 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 -@subsubsection Services DNS +@subsection Services DNS @cindex DNS (domain name system) @cindex domain name system (DNS) @@ -18657,7 +19340,7 @@ Une politique entre @code{'increment} et @code{'unixtime}. @end deftp @deftp {Type de données} knot-configuration -Type de donées représentant la configuration de Knot. Ce type a les +Type de données représentant la configuration de Knot. Ce type a les paramètres suivants : @table @asis @@ -18749,7 +19432,7 @@ Lorsque la valeur est fausse, désactive le cache des réponses négatives. @subsubheading Service ddclient @cindex ddclient -Le srevice ddclient décrit plus bas lance le démon ddclient, qui prend en +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}. @@ -18857,7 +19540,7 @@ La valeur par défaut est @samp{()}. @node Services VPN -@subsubsection Services VPN +@subsection Services VPN @cindex VPN (réseau privé virtuel) @cindex réseau privé virtuel (VPN) @@ -19167,7 +19850,7 @@ La valeur par défaut est @samp{#f}. 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'envoie du ping, et le second élément est le délai d'attente avant de +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 @@ -19222,7 +19905,7 @@ La valeur par défaut est @samp{#f}. @node Système de fichiers en réseau -@subsubsection 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 @@ -19338,7 +20021,7 @@ domaine pleinement qualifié de l'hôte. @end deftp @node Intégration continue -@subsubsection Intégration continue +@subsection Intégration continue @cindex intégration continue @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est @@ -19458,7 +20141,7 @@ Le paquet Cuirass à utiliser. @end deftp @node Services de gestion de l'énergie -@subsubsection Services de gestion de l'énergie +@subsection Services de gestion de l'énergie @cindex tlp @cindex gestion de l'énergie avec TLP @@ -20003,7 +20686,7 @@ Objet du paquet de thermald. @end deftp @node Services audio -@subsubsection Services audio +@subsection Services audio Le module @code{(gnu services audio)} fournit un service qui lance MPD (le démon de lecture de musique). @@ -20054,7 +20737,7 @@ chemin absolu peut être spécifié ici. @end deftp @node Services de virtualisation -@subsubsection 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 @@ -20377,61 +21060,62 @@ La valeur par défaut est @samp{20}. @end deftypevr @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests -Limit on concurrent requests from a single client connection. To avoid one -client monopolizing the server this should be a small fraction of the global -max_requests and max_workers parameter. +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 -Same as @code{min-workers} but for the admin interface. +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 -Same as @code{max-workers} but for the admin interface. +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 -Same as @code{max-clients} but for the admin interface. +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 -Same as @code{max-queued-clients} but for the admin interface. +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 -Same as @code{max-client-requests} but for the admin interface. +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 -Logging level. 4 errors, 3 warnings, 2 information, 1 debug. +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 -Logging filters. +Filtres de journalisation. -A filter allows to select a different logging level for a given category of -logs The format for a filter is one of: +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 @@ -20442,92 +21126,95 @@ x:+nom @end itemize -where @code{name} is a string which is matched against the category given in -the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g., -"remote", "qemu", or "util.json" (the name in the filter can be a substring -of the full category name, in order to match multiple similar categories), -the optional "+" prefix tells libvirt to log stack trace for each message -matching name, and @code{x} is the minimal level where matching messages -should be logged: +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 +1 : DEBUG @item -2: INFO +2 : INFO @item -3: WARNING +3 : WARNING @item -4: ERROR +4 : ERROR @end itemize -Multiple filters can be defined in a single filters statement, they just -need to be separated by spaces. +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 -Logging outputs. +Sorties de débogage. -An output is one of the places to save logging information The format for an -output can be: +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 -output goes to stderr +la sortie va vers stderr -@item x:syslog:name -use syslog for the output and use the given name as the ident +@item x:syslog:nom +utilise syslog comme sortie et utilise le nom donné comme identifiant -@item x:file:file_path -output to a file, with the given filepath +@item x:file:chemin_fichier +la sortie va vers un fichier, avec le chemin donné @item x:journald -output to journald logging system +la sortie va vers le système de journalisation journald @end table -In all case the x prefix is the minimal level, acting as a filter +Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un +filtre @itemize @bullet @item -1: DEBUG +1 : DEBUG @item -2: INFO +2 : INFO @item -3: WARNING +3 : WARNING @item -4: ERROR +4 : ERROR @end itemize -Multiple outputs can be defined, they just need to be separated by spaces. +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 -Allows usage of the auditing subsystem to be altered +Permet de modifier l'utilisation du sous-système d'audit. @itemize @bullet @item -0: disable all auditing +0 : désactive tout audit @item -1: enable auditing, only if enabled on host +1 : active l'audit, seulement s'il est activé sur l'hôte @item -2: enable auditing, and exit if disabled on host. +2 : active l'audit, et quitte s'il est désactivé sur l'hôte. @end itemize @@ -20536,83 +21223,84 @@ La valeur par défaut est @samp{1}. @end deftypevr @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging -Send audit messages via libvirt logging infrastructure. +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 -Host UUID. UUID must not have all digits be the same. +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 to read host UUID. +Source où lire l'UUID de l'hôte. @itemize @bullet @item -@code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid} +@code{smbios} : récupère l'UUID à partir de @code{dmidecode -s system-uuid} @item -@code{machine-id}: fetch the UUID from @code{/etc/machine-id} +@code{machine-id} : récupère l'UUID à partir de @code{/etc/machine-id} @end itemize -If @code{dmidecode} does not provide a valid UUID a temporary UUID will be -generated. +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 -A keepalive message is sent to a client after @code{keepalive_interval} -seconds of inactivity to check if the client is still responding. If set to --1, libvirtd will never send keepalive requests; however clients can still -send them and the daemon will send responses. +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 -Maximum number of keepalive messages that are allowed to be sent to the -client without getting any response before the connection is considered -broken. +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. -In other words, the connection is automatically closed approximately after -@code{keepalive_interval * (keepalive_count + 1)} seconds since the last -message received from the client. When @code{keepalive-count} is set to 0, -connections will be automatically closed after @code{keepalive-interval} -seconds of inactivity without sending any keepalive messages. +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 -Same as above but for admin interface. +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 -Same as above but for admin interface. +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 -Timeout for Open vSwitch calls. +Délai d'attente pour les appels Open vSwitch. -The @code{ovs-vsctl} utility is used for the configuration and its timeout -option is set by default to 5 seconds to avoid potential infinite waits -blocking libvirt. +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}. @@ -20621,18 +21309,18 @@ La valeur par défaut est @samp{5}. @c %end of autogenerated docs @subsubheading démon Virrlog -The virtlogd service is a server side daemon component of libvirt that is -used to manage logs from virtual machine consoles. +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. -This daemon is not used directly by libvirt client applications, rather it -is called on their behalf by @code{libvirtd}. By maintaining the logs in a -standalone daemon, the main @code{libvirtd} daemon can be restarted without -risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec() -itself upon receiving @code{SIGUSR1}, to allow live upgrades without -downtime. +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 -This is the type of the virtlog daemon. Its value must be a +Le type de service pour le démon virtlogd. Sa valeur doit être un @code{virtlog-configuration}. @example @@ -20643,17 +21331,18 @@ This is the type of the virtlog daemon. Its value must be a @end deffn @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level -Logging level. 4 errors, 3 warnings, 2 information, 1 debug. +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 -Logging filters. +Filtres de journalisation. -A filter allows to select a different logging level for a given category of -logs The format for a filter is one of: +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 @@ -20664,75 +21353,78 @@ x:+nom @end itemize -where @code{name} is a string which is matched against the category given in -the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g., -"remote", "qemu", or "util.json" (the name in the filter can be a substring -of the full category name, in order to match multiple similar categories), -the optional "+" prefix tells libvirt to log stack trace for each message -matching name, and @code{x} is the minimal level where matching messages -should be logged: +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 +1 : DEBUG @item -2: INFO +2 : INFO @item -3: WARNING +3 : WARNING @item -4: ERROR +4 : ERROR @end itemize -Multiple filters can be defined in a single filters statement, they just -need to be separated by spaces. +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 -Logging outputs. +Sorties de débogage. -An output is one of the places to save logging information The format for an -output can be: +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 -output goes to stderr +la sortie va vers stderr -@item x:syslog:name -use syslog for the output and use the given name as the ident +@item x:syslog:nom +utilise syslog comme sortie et utilise le nom donné comme identifiant -@item x:file:file_path -output to a file, with the given filepath +@item x:file:chemin_fichier +la sortie va vers un fichier, avec le chemin donné @item x:journald -output to journald logging system +la sortie va vers le système de journalisation journald @end table -In all case the x prefix is the minimal level, acting as a filter +Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un +filtre @itemize @bullet @item -1: DEBUG +1 : DEBUG @item -2: INFO +2 : INFO @item -3: WARNING +3 : WARNING @item -4: ERROR +4 : ERROR @end itemize -Multiple outputs can be defined, they just need to be separated by spaces. +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"}. @@ -20746,14 +21438,14 @@ La valeur par défaut est @samp{1024}. @end deftypevr @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size -Maximum file size before rolling over. +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 -Maximum number of backup files to keep. +Nombre maximal de fichiers de sauvegardes à garder. La valeur par défaut est @samp{3}. @@ -20763,16 +21455,17 @@ La valeur par défaut est @samp{3}. @cindex émulation @cindex @code{binfmt_misc} -@code{qemu-binfmt-service-type} provides support for transparent emulation -of program binaries built for different architectures---e.g., it allows you -to transparently execute an ARMv7 program on an x86_64 machine. It achieves -this by combining the @uref{https://www.qemu.org, QEMU} emulator and the -@code{binfmt_misc} feature of the kernel Linux. +@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 -This is the type of the QEMU/binfmt service for transparent emulation. Its -value must be a @code{qemu-binfmt-configuration} object, which specifies the -QEMU package to use as well as the architecture we want to emulated: +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 @@ -20780,29 +21473,30 @@ QEMU package to use as well as the architecture we want to emulated: (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc")))) @end example -In this example, we enable transparent emulation for the ARM and aarch64 -platforms. Running @code{herd stop qemu-binfmt} turns it off, and running -@code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the +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 -This is the configuration for the @code{qemu-binfmt} service. +La configuration du service @code{qemu-binfmt}. @table @asis @item @code{platforms} (par défaut : @code{'()}) -The list of emulated QEMU platforms. Each item must be a @dfn{platform -object} as returned by @code{lookup-qemu-platforms} (see below). +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}) -When it is true, QEMU and all its dependencies are added to the build -environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon, -@code{--chroot-directory} option}). This allows the @code{binfmt_misc} -handlers to be used within the build environment, which in turn means that -you can transparently build programs for another architecture. +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. -For example, let's suppose you're on an x86_64 machine and you have this -service: +Par exemple, supposons que vous soyez sur une machine x86_64 et que vous +avez ce services : @example (service qemu-binfmt-service-type @@ -20818,9 +21512,10 @@ guix build -s armhf-linux inkscape @end example @noindent -and it will build Inkscape for ARMv7 @emph{as if it were a native build}, -transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd -like to test a package build for an architecture you don't have access to! +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. @@ -20828,131 +21523,135 @@ Le paquet QEMU à utiliser. @end deftp @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{} -Return the list of QEMU platform objects corresponding to -@var{platforms}@dots{}. @var{platforms} must be a list of strings -corresponding to platform names, such as @code{"arm"}, @code{"sparc"}, -@code{"mips64el"}, and so on. +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} -Return true if @var{obj} is a platform object. +Renvoie vrai s i@var{obj} est un objet de plate-forme. @end deffn @deffn {Procédure Scheme} qemu-platform-name @var{platform} -Return the name of @var{platform}---a string such as @code{"arm"}. +Renvoie le nom de @var{platform} — une chaîne comme @code{"arm"}. @end deffn @node Services de contrôle de version -@subsubsection Services de contrôle de version +@subsection Services de contrôle de version -The @code{(gnu services version-control)} module provides a service to allow -remote access to local Git repositories. There are three options: the -@code{git-daemon-service}, which provides access to repositories via the -@code{git://} unsecured TCP-based protocol, extending the @code{nginx} web -server to proxy some requests to @code{git-http-backend}, or providing a web -interface with @code{cgit-service-type}. +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)] -Return a service that runs @command{git daemon}, a simple TCP server to -expose repositories over the Git protocol for anonymous access. +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. -The optional @var{config} argument should be a -@code{<git-daemon-configuration>} object, by default it allows read-only -access to exported@footnote{By creating the magic file -"git-daemon-export-ok" in the repository directory.} repositories under -@file{/srv/git}. +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 -Data type representing the configuration for @code{git-daemon-service}. +Type de données représentnt la configuration de @code{git-daemon-service}. @table @asis @item @code{package} (par défaut : @var{git}) -Package object of the Git distributed version control system. +Objet de paquet du système de contrôle de version distribué Git. @item @code{export-all?} (par défaut : @var{#f}) -Whether to allow access for all Git repositories, even if they do not have -the @file{git-daemon-export-ok} file. +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}) -Whether to remap all the path requests as relative to the given path. If -you run git daemon with @var{(base-path "/srv/git")} on example.com, then if -you later try to pull @code{git://example.com/hello.git}, git daemon will -interpret the path as @code{/srv/git/hello.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}) -Whether to allow @code{~user} notation to be used in requests. When -specified with empty string, requests to @code{git://host/~alice/foo} is -taken as a request to access @code{foo} repository in the home directory of -user @code{alice}. If @var{(user-path "path")} is specified, the same -request is taken as a request to access @code{path/foo} repository in the -home directory of user @code{alice}. +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{'()}) -Whether to listen on specific IP addresses or hostnames, defaults to all. +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}) -Whether to listen on an alternative port, which defaults to 9418. +Indique s'il faut écouter sur un port particulier, par défaut le 9418. @item @code{whitelist} (par défaut : @var{'()}) -If not empty, only allow access to this list of directories. +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{'()}) -Extra options will be passed to @code{git daemon}, please run @command{man -git-daemon} for more information. +Options supplémentaires qui seront passées à @code{git daemon}, lancez +@command{man git-daemon} pour plus d'informations. @end table @end deftp -The @code{git://} protocol lacks authentication. When you pull from a -repository fetched via @code{git://}, you don't know that the data you -receive was modified is really coming from the specified host, and you have -your connection is subject to eavesdropping. It's better to use an -authenticated and encrypted transport, such as @code{https}. Although Git -allows you to serve repositories using unsophisticated file-based web -servers, there is a faster protocol implemented by the -@code{git-http-backend} program. This program is the back-end of a proper -Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon. - -Guix has a separate configuration data type for serving Git repositories -over HTTP. +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 -Data type representing the configuration for @code{git-http-service}. +Type de données représentant la configuration de @code{git-http-service}. @table @asis @item @code{package} (par défaut : @var{git}) -Package object of the Git distributed version control system. +Objet de paquet du système de contrôle de version distribué Git. @item @code{git-root} (par défaut : @file{/srv/git}) -Directory containing the Git repositories to expose to the world. +Répertoire contenant les dépôts Git à exposer au monde. @item @code{export-all?} (par défaut : @var{#f}) -Whether to expose access for all Git repositories in @var{git-root}, even if -they do not have the @file{git-daemon-export-ok} file. +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/}) -Path prefix for Git access. With the default @code{/git/} prefix, this will -map @code{http://@var{server}/git/@var{repo}.git} to -@code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with -this prefix are not passed on to this Git instance. +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}) -The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}. +Le socket sur lequel le démon @code{fcgiwrap} écoute. @xref{Services web}. @end table @end deftp -There is no @code{git-http-service-type}, currently; instead you can create -an @code{nginx-location-configuration} from a @code{git-http-configuration} -and then add that location to a web server. +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)] Compute an -@code{nginx-location-configuration} that corresponds to the given Git http -configuration. An example nginx service definition to serve the default -@file{/srv/git} over HTTPS might be: + [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 @@ -20972,11 +21671,11 @@ configuration. An example nginx service definition to serve the default (git-http-configuration (uri-path "/")))))))))) @end example -This example assumes that you are using Let's Encrypt to get your TLS -certificate. @xref{Services de certificats}. The default @code{certbot} -service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS. -You will also need to add an @code{fcgiwrap} proxy to your system services. -@xref{Services web}. +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 @@ -20986,15 +21685,15 @@ You will also need to add an @code{fcgiwrap} proxy to your system services. @uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des dépôts Git écrite en C. -The following example will configure the service with default values. By -default, Cgit can be accessed on port 80 (@code{http://localhost:80}). +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 -The @code{file-object} type designates either a file-like object -(@pxref{G-Expressions, file-like objects}) or a string. +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 @@ -21011,276 +21710,278 @@ Configuration Nginx. @end deftypevr @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter -Specifies a command which will be invoked to format the content of about -pages (both top-level and for each repository). +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 -Specifies a path, relative to each repository path, which can be used to -specify the date and time of the youngest commit in the repository. +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 -Specifies a command that will be invoked for authenticating repository -access. +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 -Flag which, when set to @samp{age}, enables date ordering in the branch ref -list, and when set @samp{name} enables ordering by branch name. +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 -Path used to store the cgit cache entries. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of repository pages accessed with a fixed SHA1. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of repository pages accessed without a fixed SHA1. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of the repository summary page. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of the repository index page. +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 -Number which specifies the time-to-live, in minutes, for the result of -scanning a path for Git repositories. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of the repository about page. +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 -Number which specifies the time-to-live, in minutes, for the cached version -of snapshots. +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 -The maximum number of entries in the cgit cache. When set to @samp{0}, -caching is disabled. +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? -Sort items in the repo list case sensitively. +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 -List of common prefixes which, when combined with a repository URL, -generates valid clone URLs for the repository. +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 -List of @code{clone-url} templates. +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 -Command which will be invoked to format commit messages. +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 -Flag which, when set to @samp{date}, enables strict date ordering in the -commit log, and when set to @samp{topo} enables strict topological ordering. +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 which specifies the css document to include in all cgit pages. +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 -Specifies a command which will be invoked to format names and email address -of committers, authors, and taggers, as represented in various places -throughout the cgit interface. +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? -Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment -suitable for embedding in other HTML pages. +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? -Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit -history graph to the left of the commit messages in the repository log page. +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? -Flag which, when set to @samp{#t}, allows all filter settings to be -overridden in repository-specific cgitrc files. +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? -Flag which, when set to @samp{#t}, allows users to follow a file in the log -view. +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? -If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones. +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? -Flag which, when set to @samp{#t}, will make cgit generate extra links -"summary", "commit", "tree" for each repo in the repository index. +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? -Flag which, when set to @samp{#t}, will make cgit display the owner of each -repo in the repository index. +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? -Flag which, when set to @samp{#t}, will make cgit print the number of -modified files for each commit on the repository log page. +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? -Flag which, when set to @samp{#t}, will make cgit print the number of added -and removed lines for each commit on the repository log page. +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? -Flag which, when set to @code{#t}, will make cgit display remote branches in -the summary and refs views. +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? -Flag which, when set to @code{1}, will make cgit use the subject of the -parent commit as link text when generating links to parent commits in commit -view. +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? -Flag which, when set to @samp{#t}, will make cgit use the subject of the -parent commit as link text when generating links to parent commits in commit -view. +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? -Flag which, when set to @samp{#t}, will make cgit generate linenumber links -for plaintext blobs printed in the tree view. +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? -Flag which, when set to @samp{#f}, will allow cgit to use Git config to set -any repo specific settings. +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 used as link to a shortcut icon for cgit. +URL utilisée comme lien vers un icône pour cgit. La valeur par défaut est @samp{"/favicon.ico"}. @@ -21296,129 +21997,131 @@ La valeur par défaut est @samp{""}. @end deftypevr @deftypevr {paramètre de @code{cgit-configuration}} string head-include -The content of the file specified with this option will be included verbatim -in the HTML HEAD section on all pages. +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 -The content of the file specified with this option will be included verbatim -at the top of all pages. +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 -Name of a configfile to include before the rest of the current config- file -is parsed. +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 -The content of the file specified with this option will be included verbatim -above the repository index. +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 -The content of the file specified with this option will be included verbatim -below the heading on the repository index page. +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? -Flag which, if set to @samp{#t}, makes cgit print commit and tag times in -the servers timezone. +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 which specifies the source of an image which will be used as a logo on -all cgit pages. +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 loaded when clicking on the cgit logo image. +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 -Command which will be invoked to format the Owner column of the main page. +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 -Number of items to display in atom feeds view. +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 -Number of entries to list per page in "log" view. +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 -Number of commit message characters to display in "log" view. +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 -Specifies the number of entries to list per page on the repository index -page. +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 -Specifies the maximum number of repo description characters to display on -the repository index page. +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 -Specifies the maximum size of a blob to display HTML for in KBytes. +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 -Maximum statistics period. Valid values are @samp{week},@samp{month}, -@samp{quarter} and @samp{year}. +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 -Mimetype for the specified filename extension. +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") @@ -21427,131 +22130,132 @@ La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg @end deftypevr @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file -Specifies the file to use for automatic mimetype lookup. +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 -Text which will be used as the formatstring for a hyperlink when a submodule -is printed in a directory listing. +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? -If set to the value @samp{#t} caching will be disabled. +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? -If set to @samp{#t} showing full author email addresses will be disabled. +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? -Flag which, when set to @samp{#t}, will make cgit omit the standard header -on all pages. +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 -A list of subdirectories inside of @code{repository-directory}, relative to -it, that should loaded as Git repositories. An empty list means that all -subdirectories will be loaded. +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 -Text which will be used as default value for @code{cgit-repo-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? -If set to @code{#t} and @code{repository-directory} is enabled, if any -repositories are found with a suffix of @code{.git}, this suffix will be -removed for the URL and name. +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 -Maximum number of files to consider when detecting renames. +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 -The way in which repositories in each section are sorted. +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 -Text used as content for the @code{robots} meta-tag. +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 -Text printed below the heading on the repository index page. +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 -The content of the file specified with this option will be included verbatim -below thef "about" link on the repository index page. +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 -Text printed as heading on the repository index page. +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 -If set to @samp{#t} and repository-directory is enabled, -repository-directory will recurse into directories whose name starts with a -period. Otherwise, repository-directory will stay away from such -directories, considered as "hidden". Note that this does not apply to the -".git" directory in non-bare repos. +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 -Text which specifies the default set of snapshot formats that cgit generates -links for. +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 -Name of the directory to scan for repositories (represents +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"}. @@ -21559,328 +22263,329 @@ La valeur par défaut est @samp{"/srv/git"}. @end deftypevr @deftypevr {paramètre de @code{cgit-configuration}} string section -The name of the current repository section - all repositories defined after -this option will inherit the current section name. +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 -Flag which, when set to @samp{1}, will sort the sections on the repository -listing by name. +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 -A number which, if defined prior to repository-directory, specifies how many -path elements from each repo path to use as a default section name. +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? -If set to @samp{#t} shows side-by-side diffs instead of unidiffs per -default. +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 -Specifies a command which will be invoked to format plaintext blobs in the -tree view. +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 -Specifies the number of branches to display in the repository "summary" -view. +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 -Specifies the number of log entries to display in the repository "summary" -view. +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 -Specifies the number of tags to display in the repository "summary" view. +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 -Filename which, if specified, needs to be present within the repository for -cgit to allow access to that repository. +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 which, if specified, will be used as root for all cgit links. +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 -A list of @dfn{cgit-repo} records to use with config. +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 -A mask of snapshot formats for this repo that cgit generates links for, -restricted by the global @code{snapshots} setting. +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 -Override the default @code{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 -The relative URL used to access the repository. +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 -Override the default @code{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 -Flag which, when set to @samp{age}, enables date ordering in the branch ref -list, and when set to @samp{name} enables ordering by branch name. +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 -A list of URLs which can be used to clone repo. +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 -Override the default @code{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 -Flag which, when set to @samp{date}, enables strict date ordering in the -commit log, and when set to @samp{topo} enables strict topological ordering. +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 -The name of the default branch for this repository. If no such branch -exists in the repository, the first branch name (when sorted) is used as -default instead. By default branch pointed to by HEAD, or "master" if there -is no suitable HEAD. +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 -The value to show as repository description. +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 -The value to show as repository 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 -Override the default @code{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? -A flag which can be used to disable the global setting -@code{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? -A flag which can be used to disable the global setting -@code{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? -A flag which can be used to disable the global setting -@code{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? -Flag which, when set to @code{#t}, will make cgit display remote branches in -the summary and refs views. +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? -A flag which can be used to override the global setting -@code{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? -A flag which can be used to override the global setting -@code{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? -Flag which, when set to @code{#t}, hides the repository from the repository -index. +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? -Flag which, when set to @samp{#t}, ignores the repository. +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 which specifies the source of an image which will be used as a logo on -this repo’s pages. +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 loaded when clicking on the cgit logo image. +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 -Override the default @code{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 -Text which will be used as the formatstring for a hyperlink when a submodule -is printed in a directory listing. The arguments for the formatstring are -the path and SHA1 of the submodule commit. +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 -Text which will be used as the formatstring for a hyperlink when a submodule -with the specified subdirectory path is printed in a directory listing. +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 -Override the default maximum statistics period. +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 -The value to show as repository 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 -A value used to identify the owner of the repository. +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 -An absolute path to the repository directory. +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 -A path (relative to repo) which specifies a file to include verbatim as the -"About" page for this repo. +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 -The name of the current repository section - all repositories defined after -this option will inherit the current section name. +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 -Extra options will be appended to cgitrc file. +Options supplémentaires ajoutées à la fin du fichier cgitrc. La valeur par défaut est @samp{()}. @@ -21889,7 +22594,7 @@ La valeur par défaut est @samp{()}. @end deftypevr @deftypevr {paramètre de @code{cgit-configuration}} list extra-options -Extra options will be appended to cgitrc file. +Options supplémentaires ajoutées à la fin du fichier cgitrc. La valeur par défaut est @samp{()}. @@ -21898,23 +22603,24 @@ La valeur par défaut est @samp{()}. @c %end of fragment -However, it could be that you just want to get a @code{cgitrc} up and -running. In that case, you can pass an @code{opaque-cgit-configuration} as -a record to @code{cgit-service-type}. As its name indicates, an opaque -configuration does not have easy reflective capabilities. +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 -The cgit package. +Le paquet cgit. @end deftypevr @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string -The contents of the @code{cgitrc}, as a string. +Le contenu de @code{cgitrc}, en tant que chaîne de caractère. @end deftypevr -For example, if your @code{cgitrc} is just the empty string, you could -instantiate a cgit service like this: +Par exemple, si votre @code{cgitrc} est juste la chaîne vide, vous pouvez +instancier un service cgit ainsi : @example (service cgit-service-type @@ -21926,14 +22632,14 @@ instantiate a cgit service like this: @cindex service Gitolite @cindex Git, hébergement -@uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git -repositories on a central server. +@uref{http://gitolite.com/gitolite/, Gitolite} est un outil pour héberger +des dépôts Git sur un serveur central. -Gitolite can handle multiple repositories and users, and supports flexible -configuration of the permissions for the users on the repositories. +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. -The following example will configure Gitolite using the default @code{git} -user, and the provided SSH public key. +L'exemple suivant configure Gitolite en utilisant l'utilisateur @code{git} +par défaut et la clef SSH fournie. @example (service gitolite-service-type @@ -21943,18 +22649,18 @@ user, and the provided SSH public key. "ssh-rsa AAAA... guix@@example.com")))) @end example -Gitolite is configured through a special admin repository which you can -clone, for example, if you setup Gitolite on @code{example.com}, you would -run the following command to clone the admin repository. +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 -When the Gitolite service is activated, the provided @code{admin-pubkey} -will be inserted in to the @file{keydir} directory in the gitolite-admin -repository. If this results in a change in the repository, it will be -committed using the message ``gitolite setup by GNU Guix''. +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 @@ -21965,8 +22671,8 @@ Type de données représentant la configuration de Le paquet Gitolite à utiliser. @item @code{user} (par défaut : @var{git}) -User to use for Gitolite. This will be user that you use when accessing -Gitolite over SSH. +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. @@ -21983,7 +22689,8 @@ 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. -To specify the SSH key as a string, use the @code{plain-file} function. +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") @@ -21997,40 +22704,43 @@ Type de données représentant le fichier RC de Gitolite. @table @asis @item @code{umask} (par défaut : @code{#o0077}) -This controls the permissions Gitolite sets on the repositories and their -contents. +Cela contrôle les permissions que Gitolite propose sur les dépôts et leur +contenu. -A value like @code{#o0027} will give read access to the group used by -Gitolite (by default: @code{git}). This is necessary when using Gitolite -with software like cgit or gitweb. +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 allows you to set git config values using the "config" -keyword. This setting allows control over the config keys to accept. +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" . ))}) -Set the role names allowed to be used by users running the perms command. +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")}) -This setting controls the commands and features to enable within Gitolite. +Ce paramètre contrôle les commandes et les fonctionnalités à activer dans +Gitolite. @end table @end deftp @node Services de jeu -@subsubsection Services de jeu +@subsection Services de jeu -@subsubheading The Battle for Wesnoth Service +@subsubheading Le service de la Bataille pour Wesnoth @cindex wesnothd -@uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based -tactical strategy game, with several single player campaigns, and -multiplayer games (both networked and local). +@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 -Service type for the wesnothd service. Its value must be a -@code{wesnothd-configuration} object. To run wesnothd in the default -configuration, instantiate it as: +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) @@ -22038,29 +22748,29 @@ configuration, instantiate it as: @end defvar @deftp {Type de données} wesnothd-configuration -Data type representing the configuration of @command{wesnothd}. +Type de donées représentant la configuration de @command{wesnothd}. @table @asis @item @code{package} (par défaut : @code{wesnoth-server}) -The wesnoth server package to use. +Le paquet de serveur de wesnoth à utiliser. @item @code{port} (par défaut : @code{15000}) -The port to bind the server to. +Le pour sur lequel lier le serveur. @end table @end deftp @node Services divers -@subsubsection Services divers +@subsection Services divers -@cindex fingerprint +@cindex empreinte digitale @subsubheading Service d'empreintes digitales Le module @code{(gnu services fingerprint)} fournit un service DBus pour lire et identifier les empreintes digitales via un lecteur d'empreinte. @defvr {Variable Scheme} fprintd-service-type -The service type for @command{fprintd}, which provides the fingerprint -reading capability. +Le type de service pour @command{fprintd}, qui fournit des capacités de +lecture d'empreinte. @example (service fprintd-service-type) @@ -22068,15 +22778,15 @@ reading capability. @end defvr @cindex sysctl -@subsubheading System Control Service +@subsubheading Service de contrôle du système -The @code{(gnu services sysctl)} provides a service to configure kernel -parameters at boot. +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 -The service type for @command{sysctl}, which modifies kernel parameters -under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated -as: +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 @@ -22086,26 +22796,25 @@ as: @end defvr @deftp {Type de données} sysctl-configuration -The data type representing the configuration of @command{sysctl}. +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"}) -The @command{sysctl} executable to use. +L'exécutable @command{sysctl} à utiliser. @item @code{settings} (par défaut : @code{'()}) -An association list specifies kernel parameters and their values. +Une liste d'association spécifiant les paramètres du noyau et leur valeur. @end table @end deftp @cindex pcscd -@subsubheading PC/SC Smart Card Daemon Service +@subsubheading Service du démon PC/SC Smart Card -The @code{(gnu services security-token)} module provides the following -service to run @command{pcscd}, the PC/SC Smart Card Daemon. -@command{pcscd} is the daemon program for pcsc-lite and the MuscleCard -framework. It is a resource manager that coordinates communications with -smart card readers, smart cards and cryptographic tokens that are connected -to the system. +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 @@ -22124,120 +22833,129 @@ Type de données représentant la configuration de @command{pcscd}. @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)}) -List of packages that provide USB drivers to pcscd. Drivers are expected to -be under @file{pcsc/drivers} in the store directory of the package. +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 Lirc Service +@subsubheading Service Lirc -The @code{(gnu services lirc)} module provides the following service. +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 '()] -Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that -decodes infrared signals from remote controls. + [#: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. -Optionally, @var{device}, @var{driver} and @var{config-file} (configuration -file name) may be specified. See @command{lircd} manual for details. +É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. -Finally, @var{extra-options} is a list of additional command-line options -passed to @command{lircd}. +Enfin, @var{extra-options} est une liste d'options de la ligne de commande +supplémentaires à passer à @command{lircd}. @end deffn @cindex spice -@subsubheading Spice Service +@subsubheading Service Spice -The @code{(gnu services spice)} module provides the following service. +Le module @code{(gnu services spice)} fournit le service suivant. @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent] -Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a -daemon that enables sharing the clipboard with a vm and setting the guest -display resolution when the graphical console window resizes. +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 -@subsubsection Dictionary Services -@cindex dictionary -The @code{(gnu services dict)} module provides the following service: +@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)] -Return a service that runs the @command{dicod} daemon, an implementation of -DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). +Renvoie un service qui lance le démon @command{dicod}, une implémentation du +serveur DICT (@pxref{Dicod,,, dico, GNU Dico Manual}). -The optional @var{config} argument specifies the configuration for -@command{dicod}, which should be a @code{<dicod-configuration>} object, by -default it serves the GNU Collaborative International Dictonary of English. +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. -You can add @command{open localhost} to your @file{~/.dico} file to make -@code{localhost} the default server for @command{dico} client -(@pxref{Initialization File,,, dico, GNU Dico Manual}). +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 -Data type representing the configuration of dicod. +Type de données représentant la configuration de dicod. @table @asis @item @code{dico} (par défaut : @var{dico}) -Package object of the GNU Dico dictionary server. +Objet de paquet du serveur de dictionnaire GNU Dico. @item @code{interfaces} (par défaut : @var{'("localhost")}) -This is the list of IP addresses and ports and possibly socket file names to -listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico -Manual}). +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{'()}) -List of @code{<dicod-handler>} objects denoting handlers (module instances). +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)}) -List of @code{<dicod-database>} objects denoting dictionaries to be served. +Liste d'objets @code{<dicod-database>} qui définissent des dictionnaires à +servir. @end table @end deftp @deftp {Type de données} dicod-handler -Data type representing a dictionary handler (module instance). +Type de données représentant un gestionnaire de dictionnaire (instance de +module). @table @asis @item @code{name} -Name of the handler (module instance). +Nom du gestionnaire (instance de module). @item @code{module} (par défaut : @var{#f}) -Name of the dicod module of the handler (instance). If it is @code{#f}, the -module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico -Manual}). +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} -List of strings or gexps representing the arguments for the module handler +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 -Data type representing a dictionary database. +Type de données représentant une base de données de dictionnaire. @table @asis @item @code{name} -Name of the database, will be used in DICT commands. +Nom de la base de données, qui sera utilisée dans les commande DICT. @item @code{handler} -Name of the dicod handler (module instance) used by this database -(@pxref{Handlers,,, dico, GNU Dico Manual}). +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}) -Whether the database configuration complex. The complex configuration will -need a corresponding @code{<dicod-handler>} object, otherwise not. +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} -List of strings or gexps representing the arguments for the database -(@pxref{Databases,,, dico, GNU Dico Manual}). +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 -A @code{<dicod-database>} object serving the GNU Collaborative International -Dictionary of English using the @code{gcide} package. +Un objet @code{<dicod-database>} servant le dictionnaire international +collaboratif en anglais via le paquet @code{gcide}. @end defvr -The following is an example @code{dicod-service} configuration. +Voici un exemple de configuration de @code{dicod-service}. @example (dicod-service #:config @@ -22255,91 +22973,127 @@ The following is an example @code{dicod-service} configuration. %dicod-database:gcide)))) @end example +@cindex Docker +@subsubheading Docker Service + +The @code{(gnu services docker)} module provides the following service. + +@defvr {Scheme Variable} docker-service-type + +This is the type of the service that runs +@url{http://www.docker.com,Docker}, a daemon that can execute application +bundles (sometimes referred to as ``containers'') in isolated environments. + +@end defvr + +@deftp {Data Type} docker-configuration +This is the data type representing the configuration of Docker and +Containerd. + +@table @asis + +@item @code{package} (default: @code{docker}) +The Docker package to use. + +@item @code{containerd} (default: @var{containerd}) +The Containerd package to use. + +@end table +@end deftp + @node Programmes setuid -@subsection Programmes setuid - -@cindex setuid programs -Some programs need to run with ``root'' privileges, even when they are -launched by unprivileged users. A notorious example is the @command{passwd} -program, which users can run to change their password, and which needs to -access the @file{/etc/passwd} and @file{/etc/shadow} files---something -normally restricted to root, for obvious security reasons. To address that, -these executables are @dfn{setuid-root}, meaning that they always run with -root privileges (@pxref{How Change Persona,,, libc, The GNU C Library -Reference Manual}, for more info about the setuid mechanism.) - -The store itself @emph{cannot} contain setuid programs: that would be a -security issue since any user on the system can write derivations that -populate the store (@pxref{Le dépôt}). Thus, a different mechanism is -used: instead of changing the setuid bit directly on files that are in the -store, we let the system administrator @emph{declare} which programs should -be setuid root. - -The @code{setuid-programs} field of an @code{operating-system} declaration -contains a list of G-expressions denoting the names of programs to be -setuid-root (@pxref{Utiliser le système de configuration}). For instance, the -@command{passwd} program, which is part of the Shadow package, can be -designated by this G-expression (@pxref{G-Expressions}): +@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 -A default set of setuid programs is defined by the @code{%setuid-programs} -variable of the @code{(gnu system)} module. +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 -A list of G-expressions denoting common programs that are setuid-root. +Une liste de G-expressions qui dénotent les programmes communément +setuid-root. -The list includes commands such as @command{passwd}, @command{ping}, -@command{su}, and @command{sudo}. +La liste inclus des commandes comme @command{passwd}, @command{ping}, +@command{su} et @command{sudo}. @end defvr -Under the hood, the actual setuid programs are created in the -@file{/run/setuid-programs} directory at system activation time. The files -in this directory refer to the ``real'' binaries, which are in the store. +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 -@subsection Certificats X.509 +@section Certificats X.509 -@cindex HTTPS, certificates -@cindex X.509 certificates +@cindex HTTPS, certificats +@cindex certificats X.509 @cindex TLS -Web servers available over HTTPS (that is, HTTP over the transport-layer -security mechanism, TLS) send client programs an @dfn{X.509 certificate} -that the client can then use to @emph{authenticate} the server. To do that, -clients verify that the server's certificate is signed by a so-called -@dfn{certificate authority} (CA). But to verify the CA's signature, clients -must have first acquired the CA's certificate. - -Web browsers such as GNU@tie{}IceCat include their own set of CA -certificates, such that they are able to verify CA signatures -out-of-the-box. - -However, most other programs that can talk HTTPS---@command{wget}, -@command{git}, @command{w3m}, etc.---need to be told where CA certificates -can be found. +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} -In GuixSD, this is done by adding a package that provides certificates to -the @code{packages} field of the @code{operating-system} declaration -(@pxref{Référence de système d'exploitation}). GuixSD includes one such package, +In Guix, this is done by adding a package that provides certificates to the +@code{packages} field of the @code{operating-system} declaration +(@pxref{Référence de système d'exploitation}). Guix includes one such package, @code{nss-certs}, which is a set of CA certificates provided as part of Mozilla's Network Security Services. -Note that it is @emph{not} part of @var{%base-packages}, so you need to -explicitly add it. The @file{/etc/ssl/certs} directory, which is where most -applications and libraries look for certificates by default, points to the -certificates installed globally. - -Unprivileged users, including users of Guix on a foreign distro, can also -install their own certificate package in their profile. A number of -environment variables need to be defined so that applications and libraries -know where to find them. Namely, the OpenSSL library honors the -@code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications -add their own environment variables; for instance, the Git version control -system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO} -environment variable. Thus, you would typically run something like: +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 @@ -22348,107 +23102,110 @@ $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" $ export GIT_SSL_CAINFO="$SSL_CERT_FILE" @end example -As another example, R requires the @code{CURL_CA_BUNDLE} environment -variable to point to a certificate bundle, so you would have to run -something like this: +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 -For other applications you may want to look up the required environment -variable in the relevant documentation. +Pour d'autres applications vous pourriez avoir besoin de chercher la +variable d'environnement requise dans leur documentation. @node Name Service Switch -@subsection Name Service Switch +@section Name Service Switch @cindex name service switch @cindex NSS -The @code{(gnu system nss)} module provides bindings to the configuration -file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS -Configuration File,,, libc, The GNU C Library Reference Manual}). In a -nutshell, the NSS is a mechanism that allows libc to be extended with new -``name'' lookup methods for system databases, which includes host names, -service names, user accounts, and more (@pxref{Name Service Switch, System +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}). -The NSS configuration specifies, for each system database, which lookup -method is to be used, and how the various methods are chained together---for -instance, under which circumstances NSS should try the next method in the -list. The NSS configuration is given in the @code{name-service-switch} -field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}). +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, host name lookup -As an example, the declaration below configures the NSS to use the -@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns} -back-end}, which supports host name lookups over multicast DNS (mDNS) for -host names ending in @code{.local}: +@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 - ;; If the above did not succeed, try - ;; with 'mdns_minimal'. + ;; Si ce qui précède n'a pas fonctionné, essayer + ;; avec « mdns_minimal ». (name-service (name "mdns_minimal") - ;; 'mdns_minimal' is authoritative for - ;; '.local'. When it returns "not found", - ;; no need to try the next methods. + ;; « mdns_minimal » fait autorité pour + ;; « .local ». Lorsqu'il renvoie « pas trouvé », + ;; inutile d'essayer la méthode suivante. (reaction (lookup-specification (not-found => return)))) - ;; Then fall back to DNS. + ;; Puis revenir sur DNS. (name-service (name "dns")) - ;; Finally, try with the "full" 'mdns'. + ;; Enfin, essayer avec « mdns complet ». (name-service (name "mdns"))))) @end example -Do not worry: the @code{%mdns-host-lookup-nss} variable (see below) -contains this configuration, so you will not have to type it if all you want -is to have @code{.local} host lookup working. +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. Note that, in this case, in addition to setting the @code{name-service-switch} of the @code{operating-system} declaration, you -also need to use @code{avahi-service} (@pxref{Services réseau, -@code{avahi-service}}), or @var{%desktop-services}, which includes it +also need to use @code{avahi-service-type} (@pxref{Services réseau, +@code{avahi-service-type}}), or @var{%desktop-services}, which includes it (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to the name service cache daemon (@pxref{Services de base, @code{nscd-service}}). -For convenience, the following variables provide typical NSS configurations. +Pour votre confort, les variables suivantes contiennent des configurations +NSS typiques. @defvr {Variable Scheme} %default-nss -This is the default name service switch configuration, a -@code{name-service-switch} object. +C'est la configuration NSS par défaut, un objet @code{name-service-switch}. @end defvr @defvr {Variable Scheme} %mdns-host-lookup-nss -This is the name service switch configuration with support for host name -lookup over multicast DNS (mDNS) for host names ending in @code{.local}. +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 -The reference for name service switch configuration is given below. It is a -direct mapping of the configuration file format of the C library , so please -refer to the C library manual for more information (@pxref{NSS Configuration -File,,, libc, The GNU C Library Reference Manual}). Compared to the -configuration file format of libc NSS, it has the advantage not only of -adding this warm parenthetic feel that we like, but also static checks: you -will know about syntax errors and typos as soon as you run @command{guix +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 -This is the data type representation the configuration of libc's name -service switch (NSS). Each field below represents one of the supported -system databases. +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 @@ -22464,30 +23221,30 @@ system databases. @itemx rpc @itemx services @itemx shadow -The system databases handled by the NSS. Each of these fields must be a -list of @code{<name-service>} objects (see below). +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 -This is the data type representing an actual name service and the associated -lookup action. +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 -A string denoting the name service (@pxref{Services in the NSS +Une chaîne dénotant le service de nom (@pxref{Services in the NSS configuration,,, libc, The GNU C Library Reference Manual}). -Note that name services listed here must be visible to nscd. This is -achieved by passing the @code{#:name-services} argument to -@code{nscd-service} the list of packages providing the needed name services +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 -An action specified using the @code{lookup-specification} macro +Une action spécifiée par la macro @code{lookup-specification} (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library -Reference Manual}). For example: +Reference Manual}). Par exemple : @example (lookup-specification (unavailable => continue) @@ -22497,23 +23254,24 @@ Reference Manual}). For example: @end deftp @node Disque de RAM initial -@subsection Disque de RAM initial +@section Disque de RAM initial @cindex initrd @cindex disque de RAM initial -For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial -RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system -as well as an initialization script. The latter is responsible for mounting -the real root file system, and for loading any kernel modules that may be -needed to achieve that. - -The @code{initrd-modules} field of an @code{operating-system} declaration -allows you to specify Linux-libre kernel modules that must be available in -the initrd. In particular, this is where you would list modules needed to -actually drive the hard disk where your root partition is---although the -default value of @code{initrd-modules} should cover most use cases. For -example, assuming you need the @code{megaraid_sas} module in addition to the -default modules to be able to access your root file system, you would write: +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 @@ -22522,372 +23280,388 @@ default modules to be able to access your root file system, you would write: @end example @defvr {Variable Scheme} %base-initrd-modules -This is the list of kernel modules included in the initrd by default. +C'est la liste des modules du noyau inclus dans l'initrd par défaut. @end defvr -Furthermore, if you need lower-level customization, the @code{initrd} field -of an @code{operating-system} declaration allows you to specify which initrd -you would like to use. The @code{(gnu system linux-initrd)} module provides -three ways to build an initrd: the high-level @code{base-initrd} procedure -and the low-level @code{raw-initrd} and @code{expression->initrd} -procedures. +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. -The @code{base-initrd} procedure is intended to cover most common uses. For -example, if you want to add a bunch of kernel modules to be loaded at boot -time, you can define the @code{initrd} field of the operating system -declaration like this: +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) - ;; Create a standard initrd but set up networking - ;; with the parameters QEMU expects by default. + ;; 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 -The @code{base-initrd} procedure also handles common use cases that involves -using the system as a QEMU guest, or as a ``live'' system with volatile root -file system. +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. -The @code{base-initrd} procedure is built from @code{raw-initrd} procedure. -Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level, -such as trying to guess which kernel modules and packages should be included -to the initrd. An example use of @code{raw-initrd} is when a user has a -custom Linux kernel configuration and default kernel modules included by -@code{base-initrd} are not available. +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. -The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd} -honors several options passed on the Linux kernel command line (that is, -arguments passed @i{via} the @code{linux} command of GRUB, or the -@code{-append} option of QEMU), notably: +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} -Tell the initial RAM disk to load @var{boot}, a file containing a Scheme -program, once it has mounted the root file system. +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. -GuixSD uses this option to yield control to a boot program that runs the +Guix uses this option to yield control to a boot program that runs the service activation programs and then spawns the GNU@tie{}Shepherd, the initialization system. @item --root=@var{root} -Mount @var{root} as the root file system. @var{root} can be a device name -like @code{/dev/sda1}, a file system label, or a file system UUID. +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} -Have @file{/run/booted-system} and @file{/run/current-system} point to -@var{system}. +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-listing -@cindex black list, of kernel modules -Instruct the initial RAM disk as well as the @command{modprobe} command -(from the kmod package) to refuse to load @var{modules}. @var{modules} must -be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}. +@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 -Start a read-eval-print loop (REPL) from the initial RAM disk before it -tries to load kernel modules and to mount the root file system. Our -marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love -it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}, -for more information on Guile's 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 -Now that you know all the features that initial RAM disks produced by -@code{base-initrd} and @code{raw-initrd} provide, here is how to use it and -customize it further. +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 '()] @ [#:helper-packages '()] -[#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that -builds a raw initrd. @var{file-systems} is a list of file systems to be -mounted by the initrd, possibly in addition to the root file system -specified on the kernel command line via @code{--root}. @var{linux-modules} -is a list of kernel modules to be loaded at boot time. @var{mapped-devices} -is a list of device mappings to realize before @var{file-systems} are -mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of -packages to be copied in the initrd. It may include @code{e2fsck/static} or -other packages needed by the initrd to check the root file system. - -When @var{qemu-networking?} is true, set up networking with the standard -QEMU parameters. When @var{virtio?} is true, load additional modules so -that the initrd can be used as a QEMU guest with para-virtualized I/O -drivers. - -When @var{volatile-root?} is true, the root file system is writable but any -changes to it are lost. + [#:linux-modules '()] [#:mapped-devices '()] @ +[#: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 @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 '()] [#:qemu-networking? #f] [#:volatile-root? #f]@ -[#:linux-modules '()] Return as a file-like object a generic initrd, with -kernel modules taken from @var{linux}. @var{file-systems} is a list of -file-systems to be mounted by the initrd, possibly in addition to the root -file system specified on the kernel command line via @code{--root}. -@var{mapped-devices} is a list of device mappings to realize before -@var{file-systems} are mounted. - -@var{qemu-networking?} and @var{volatile-root?} behaves as in + [#:mapped-devices '()] [#: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}. + +@var{qemu-networking?} et @var{volatile-root?} se comportent comme pour @code{raw-initrd}. -The initrd is automatically populated with all the kernel modules necessary -for @var{file-systems} and for the given options. Additional kernel modules -can be listed in @var{linux-modules}. They will be added to the initrd, and -loaded at boot time in the order in which they appear. +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 -Needless to say, the initrds we produce and use embed a statically-linked -Guile, and the initialization program is a Guile program. That gives a lot -of flexibility. The @code{expression->initrd} procedure builds such an -initrd, given the program to run in that initrd. +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"] Return as a -file-like object a Linux initrd (a gzipped cpio archive) containing -@var{guile} and that evaluates @var{exp}, a G-expression, upon booting. All -the derivations referenced by @var{exp} are automatically copied to the -initrd. + [#: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 -@subsection Configuration du chargeur d'amorçage +@section Configuration du chargeur d'amorçage @cindex bootloader -@cindex boot loader +@cindex chargeur d'amorçage -The operating system supports multiple bootloaders. The bootloader is -configured using @code{bootloader-configuration} declaration. All the -fields of this structure are bootloader agnostic except for one field, -@code{bootloader} that indicates the bootloader to be configured and -installed. +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. -Some of the bootloaders do not honor every field of -@code{bootloader-configuration}. For instance, the extlinux bootloader does -not support themes and thus ignores the @code{theme} field. +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 -The type of a bootloader configuration declaration. +Le type d'une déclaration de configuration de chargeur d'amorçage. @table @asis @item @code{bootloader} -@cindex EFI, bootloader -@cindex UEFI, bootloader -@cindex BIOS, bootloader -The bootloader to use, as a @code{bootloader} object. For now -@code{grub-bootloader}, @code{grub-efi-bootloader}, -@code{extlinux-bootloader} and @code{u-boot-bootloader} are supported. +@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} allows to boot on modern systems using the -@dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should -use if the installation image contains a @file{/sys/firmware/efi} directory -when you boot it on your system. +@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} allows you to boot in particular Intel-based machines -in ``legacy'' BIOS mode. +@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 -Available bootloaders are described in @code{(gnu bootloader @dots{})} -modules. In particular, @code{(gnu bootloader u-boot)} contains definitions -of bootloaders for a wide range of ARM and AArch64 systems, using the -@uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}. +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} -This is a string denoting the target onto which to install the bootloader. +C'est une chaîne qui dénote la cible sur laquelle installer le chargeur +d'amorçage. -The interpretation depends on the bootloader in question. For -@code{grub-bootloader}, for example, it should be a device name understood -by the bootloader @command{installer} command, such as @code{/dev/sda} or -@code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For -@code{grub-efi-bootloader}, it should be the mount point of the EFI file -system, usually @file{/boot/efi}. +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{()}) -A possibly empty list of @code{menu-entry} objects (see below), denoting -entries to appear in the bootloader menu, in addition to the current system -entry and the entry pointing to previous system generations. +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}) -The index of the default boot menu entry. Index 0 is for the entry of the -current system. +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}) -The number of seconds to wait for keyboard input before booting. Set to 0 -to boot immediately, and to -1 to wait indefinitely. +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. @item @code{theme} (par défaut : @var{#f}) -The bootloader theme object describing the theme to use. If no theme is -provided, some bootloaders might use a default theme, that's true for GRUB. +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}) -The output terminals used for the bootloader boot menu, as a list of -symbols. GRUB accepts the values: @code{console}, @code{serial}, -@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text}, -@code{morse}, and @code{pkmodem}. This field corresponds to the GRUB -variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,, -grub,GNU GRUB manual}). +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{'()}) -The input terminals used for the bootloader boot menu, as a list of -symbols. For GRUB, the default is the native platform terminal as -determined at run-time. GRUB accepts the values: @code{console}, -@code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and -@code{usb_keyboard}. This field corresponds to the GRUB variable -@code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB -manual}). +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}) -The serial unit used by the bootloader, as an integer from 0 to 3. For -GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds -to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}). +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}) -The speed of the serial interface, as an integer. For GRUB, the default -value is chosen at run-time; currently GRUB chooses 9600@tie{}bps -(@pxref{Serial terminal,,, grub,GNU GRUB manual}). +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 boot menu -Should you want to list additional boot menu entries @i{via} the -@code{menu-entries} field above, you will need to create them with the -@code{menu-entry} form. For example, imagine you want to be able to boot -another distro (hard to imagine!), you can define a menu entry along these -lines: +@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 "The Other Distro") + (label "L'autre distro") (linux "/boot/old/vmlinux-2.6.32") (linux-arguments '("root=/dev/sda2")) (initrd "/boot/old/initrd")) @end example -Details below. +Les détails suivent. @deftp {Type de données} menu-entry -The type of an entry in the bootloader menu. +Le type d'une entrée dans le menu du chargeur d'amorçage. @table @asis @item @code{label} -The label to show in the menu---e.g., @code{"GNU"}. +L'étiquette à montrer dans le menu — p.@: ex.@: @code{"GNU"}. @item @code{linux} -The Linux kernel image to boot, for example: +L'image du noyau Linux à démarrer, par exemple : @example (file-append linux-libre "/bzImage") @end example -For GRUB, it is also possible to specify a device explicitly in the file -path using GRUB's device naming convention (@pxref{Naming convention,,, -grub, GNU GRUB manual}), for 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 -If the device is specified explicitly as above, then the @code{device} field -is ignored entirely. +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{()}) -The list of extra Linux kernel command-line arguments---e.g., -@code{("console=ttyS0")}. +La liste des arguments de la ligne de commande du noyau supplémentaires — +p.@: ex.@: @code{("console=ttyS0")}. @item @code{initrd} -A G-Expression or string denoting the file name of the initial RAM disk to -use (@pxref{G-Expressions}). +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}) -The device where the kernel and initrd are to be found---i.e., for GRUB, -@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}). +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}). -This may be a file system label (a string), a file system UUID (a -bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the -bootloader will search the device containing the file specified by the -@code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must -@emph{not} be an OS device name such as @file{/dev/sda1}. +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. -Fow now only GRUB has theme support. GRUB themes are created using the -@code{grub-theme} form, which is not documented yet. +Pour l'instant seul GRUB supporte les thèmes. On crée un thème GRUB avec la +forme @code{grub-theme}, qui n'est pas encore documentée. @defvr {Variable Scheme} %default-theme -This is the default GRUB theme used by the operating system if no -@code{theme} field is specified in @code{bootloader-configuration} record. +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}. -It comes with a fancy background image displaying the GNU and Guix logos. +Il contient une image de fond sympathique avec les logos de GNU et de Guix. @end defvr @node Invoquer guix system -@subsection Invoquer @code{guix system} +@section Invoquer @code{guix system} -Once you have written an operating system declaration as seen in the -previous section, it can be @dfn{instantiated} using the @command{guix -system} command. The synopsis is: +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} must be the name of a file containing an @code{operating-system} -declaration. @var{action} specifies how the operating system is -instantiated. Currently the following values are supported: +@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 -Display available service type definitions that match the given regular -expressions, sorted by relevance: +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:729:2 +location: gnu/services/base.scm:773:2 extends: shepherd-root -description: Install the given fonts on the specified ttys (fonts are -+ per virtual console on GNU/Linux). The value of this service is a list -+ of tty/font pairs like: +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: 20 +relevance: 16 name: mingetty -location: gnu/services/base.scm:1048:2 +location: gnu/services/base.scm:1144:2 extends: shepherd-root -description: Provide console login using the `mingetty' program. -relevance: 2 +description: Fournit la connexion en console avec le programme `mingetty'. +relevance: 4 name: login -location: gnu/services/base.scm:775:2 +location: gnu/services/base.scm:819:2 extends: pam -description: Provide a console log-in service as specified by its -+ configuration value, a `login-configuration' object. -relevance: 2 +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 -As for @command{guix package --search}, the result is written in -@code{recutils} format, which makes it easy to filter the output -(@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}). +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 Build the operating system described in @var{file}, activate it, and switch to it@footnote{This action (and the related actions @code{switch-generation} -and @code{roll-back}) are usable only on systems already running GuixSD.}. +and @code{roll-back}) are usable only on systems already running Guix +System.}. This effects all the configuration specified in @var{file}: user accounts, system services, global package list, setuid programs, etc. The command @@ -22896,168 +23670,217 @@ running; if a service is currently running this command will arrange for it to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or @code{herd restart X}). -This command creates a new generation whose number is one greater than the -current generation (as reported by @command{guix system list-generations}). -If that generation already exists, it will be overwritten. This behavior -mirrors that of @command{guix package} (@pxref{Invoquer guix package}). +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}). -It also adds a bootloader menu entry for the new OS configuration, ---unless -@option{--no-bootloader} is passed. For GRUB, it moves entries for older -configurations to a submenu, allowing you to choose an older system -generation at boot time should you need it. +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>. -It is highly recommended to run @command{guix pull} once before you run -@command{guix system reconfigure} for the first time (@pxref{Invoquer guix pull}). Failing to do that you would see an older version of Guix once -@command{reconfigure} has completed. +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 -Switch to an existing system generation. This action atomically switches -the system profile to the specified system generation. It also rearranges -the system's existing bootloader menu entries. It makes the menu entry for -the specified system generation the default, and it moves the entries for -the other generatiors to a submenu, if supported by the bootloader being -used. The next time the system boots, it will use the specified system -generation. +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. -The bootloader itself is not being reinstalled when using this command. -Thus, the installed bootloader is used with an updated configuration file. +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. -The target generation can be specified explicitly by its generation number. -For example, the following invocation would switch to system generation 7: +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 -The target generation can also be specified relative to the current -generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3 -generations ahead of the current generation,'' and @code{-1} means ``1 -generation prior to the current generation.'' When specifying a negative -value such as @code{-1}, you must precede it with @code{--} to prevent it -from being parsed as an option. For 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 -Currently, the effect of invoking this action is @emph{only} to switch the -system profile to an existing generation and rearrange the bootloader menu -entries. To actually start using the target system generation, you must -reboot after running this action. In the future, it will be updated to do -the same things as @command{reconfigure}, like activating and deactivating -services. +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. -This action will fail if the specified generation does not exist. +Cette action échouera si la génération spécifiée n'existe pas. @item roll-back @cindex revenir en arrière -Switch to the preceding system generation. The next time the system boots, -it will use the preceding system generation. This is the inverse of -@command{reconfigure}, and it is exactly the same as invoking -@command{switch-generation} with an argument of @code{-1}. +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 deleting system generations +@cindex saving space +Delete system generations, making them candidates for garbage collection +(@pxref{Invoquer guix gc}, for information on how to run the ``garbage +collector''). + +This works in the same way as @command{guix package --delete-generations} +(@pxref{Invoquer guix package, @code{--delete-generations}}). With no +arguments, all system generations but the current one are deleted: + +@example +guix system delete-generations +@end example -Currently, as with @command{switch-generation}, you must reboot after -running this action to actually start using the preceding system generation. +You can also select the generations you want to delete. The example below +deletes all the system generations that are more than two month old: + +@example +guix system delete-generations 2m +@end example + +Running this command automatically reinstalls the bootloader with an updated +list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no +longer lists the generations that have been deleted. @item build -Build the derivation of the operating system, which includes all the -configuration files and programs needed to boot and run the system. This -action does not actually install anything. +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 Populate the given directory with all the files necessary to run the operating system specified in @var{file}. This is useful for first-time -installations of GuixSD. For instance: +installations of Guix System. For instance: @example guix system init my-os-config.scm /mnt @end example -copies to @file{/mnt} all the store items required by the configuration -specified in @file{my-os-config.scm}. This includes configuration files, -packages, and so on. It also creates other essential files needed for the -system to operate correctly---e.g., the @file{/etc}, @file{/var}, and -@file{/run} directories, and the @file{/bin/sh} file. +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}. -This command also installs bootloader on the target specified in -@file{my-os-config}, unless the @option{--no-bootloader} option was passed. +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 virtual machine +@cindex machine virtuelle @cindex VM @anchor{guix system vm} Build a virtual machine that contains the operating system declared in -@var{file}, and return a script to run that virtual machine (VM). Arguments -given to the script are passed to QEMU as in the example below, which -enables networking and requests 1@tie{}GiB of RAM for the emulated machine: +@var{file}, and return a script to run that virtual machine (VM). + +@quotation Remarque +The @code{vm} action and others below can use KVM support in the Linux-libre +kernel. Specifically, if the machine has hardware virtualization support, +the corresponding KVM kernel module should be loaded, and the +@file{/dev/kvm} device node must exist and be readable and writable by the +user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}). +@end quotation + +Arguments given to the script are passed to QEMU as in the example below, +which enables networking and requests 1@tie{}GiB of RAM for the emulated +machine: @example $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user @end example -The VM shares its store with the host system. +La VM partage sont dépôt avec le système hôte. -Additional file systems can be shared between the host and the VM using the -@code{--share} and @code{--expose} command-line options: the former -specifies a directory to be shared with write access, while the latter -provides read-only access to the shared directory. +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é. -The example below creates a VM in which the user's home directory is -accessible read-only, and where the @file{/exchange} directory is a -read-write mapping of @file{$HOME/tmp} on the host: +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 -On GNU/Linux, the default is to boot directly to the kernel; this has the -advantage of requiring only a very tiny root disk image since the store of -the host can then be mounted. +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é. -The @code{--full-boot} option forces a complete boot sequence, starting with -the bootloader. This requires more disk space since a root image containing -at least the kernel, initrd, and bootloader data files must be created. The -@code{--image-size} option can be used to specify the size of the image. +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 System images, creation in various formats -@cindex Creating system images in various formats +@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 -Return a virtual machine, disk image, or Docker image of the operating -system declared in @var{file} that stands alone. By default, @command{guix -system} estimates the size of the image needed to store the system, but you -can use the @option{--image-size} option to specify a value. Docker images -are built to contain exactly what they need, so the @option{--image-size} -option is ignored in the case of @code{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}. -You can specify the root file system type by using the -@option{--file-system-type} option. It defaults to @code{ext4}. +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}. When using @code{vm-image}, the returned image is in qcow2 format, which the -QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more +QEMU emulator can efficiently use. @xref{Running Guix in a VM}, for more information on how to run the image in a virtual machine. -When using @code{disk-image}, a raw disk image is produced; it can be copied -as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device -corresponding to a USB stick, one can copy the image to it using the -following command: +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 -When using @code{docker-image}, a Docker image is produced. Guix builds the -image from scratch, not from a pre-existing Docker base image. As a result, -it contains @emph{exactly} what you define in the operating system -configuration file. You can then load the image and launch a Docker -container using commands like the following: +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 < guixsd-docker-image.tar.gz)" @@ -23067,27 +23890,29 @@ docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\ @end example This command starts a new Docker container from the specified image. It -will boot the GuixSD system in the usual manner, which means it will start -any services you have defined in the operating system configuration. -Depending on what you run in the Docker container, it may be necessary to -give the container additional permissions. For example, if you intend to -build software using Guix inside of the Docker container, you may need to -pass the @option{--privileged} option to @code{docker run}. +will boot the Guix system in the usual manner, which means it will start any +services you have defined in the operating system configuration. Depending +on what you run in the Docker container, it may be necessary to give the +container additional permissions. For example, if you intend to build +software using Guix inside of the Docker container, you may need to pass the +@option{--privileged} option to @code{docker run}. @item conteneur -Return a script to run the operating system declared in @var{file} within a -container. Containers are a set of lightweight isolation mechanisms -provided by the kernel Linux-libre. Containers are substantially less -resource-demanding than full virtual machines since the kernel, shared -objects, and other resources can be shared with the host system; this also -means they provide thinner isolation. +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. -Currently, the script must be run as root in order to support more than a -single user and group. The container shares its store with the host system. +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. -As with the @code{vm} action (@pxref{guix system vm}), additional file -systems to be shared between the host and container can be specified using -the @option{--share} and @option{--expose} options: +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 \ @@ -23095,52 +23920,53 @@ guix system container my-config.scm \ @end example @quotation Remarque -This option requires Linux-libre 3.19 or newer. +Cette option requiert Linux-libre ou supérieur. @end quotation @end table -@var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the -following: +@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} Consider the operating-system @var{expr} evaluates to. This is an alternative to specifying a file which evaluates to an operating system. -This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}). +This is used to generate the Guix system installer @pxref{Construire l'image d'installation}). @item --system=@var{système} @itemx -s @var{système} -Attempt to build for @var{system} instead of the host system type. This -works as per @command{guix build} (@pxref{Invoquer guix build}). +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 -Return the derivation file name of the given operating system without -building anything. +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} -For the @code{disk-image} action, create a file system of the given -@var{type} on the image. +Pour l'action @code{disk-image}, crée un système de fichier du @var{type} +donné sur l'image. -When this option is omitted, @command{guix system} uses @code{ext4}. +Lorsque cette option est omise, @command{guix system} utilise @code{ext4}. -@cindex ISO-9660 format -@cindex CD image format -@cindex DVD image format -@code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for -burning on CDs and DVDs. +@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} -For the @code{vm-image} and @code{disk-image} actions, create an image of -the given @var{size}. @var{size} may be a number of bytes, or it may -include a unit as a suffix (@pxref{Block size, size specifications,, +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}). -When this option is omitted, @command{guix system} computes an estimate of -the image size as a function of the size of the system declared in +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} @@ -23149,59 +23975,58 @@ Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre en tant que racine du ramasse-miettes. @item --skip-checks -Skip pre-installation safety checks. - -By default, @command{guix system init} and @command{guix system reconfigure} -perform safety checks: they make sure the file systems that appear in the -@code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}), -and that any Linux kernel modules that may be needed at boot time are listed -in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option -skips these tests altogether. - +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 on-error strategy +@cindex error strategy @item --on-error=@var{strategy} -Apply @var{strategy} when an error occurs when reading @var{file}. -@var{strategy} may be one of the following: +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 -Report the error concisely and exit. This is the default strategy. +Rapporte l'erreur de manière concise et quitte. C'est la stratégie par +défaut. @item backtrace -Likewise, but also display a backtrace. +Pareil, mais affiche aussi une trace de débogage. @item debug -Report the error and enter Guile's debugger. From there, you can run -commands such as @code{,bt} to get a backtrace, @code{,locals} to display -local variable values, and more generally inspect the state of the program. -@xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of -available debugging commands. +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 -@quotation Remarque -All the actions above, except @code{build} and @code{init}, can use KVM -support in the Linux-libre kernel. Specifically, if the machine has -hardware virtualization support, the corresponding KVM kernel module should -be loaded, and the @file{/dev/kvm} device node must exist and be readable -and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}). -@end quotation - Once you have built, configured, re-configured, and re-re-configured your -GuixSD installation, you may find it useful to list the operating system +Guix installation, you may find it useful to list the operating system generations available on disk---and that you can choose from the bootloader boot menu: @table @code @item list-generations -List a summary of each generation of the operating system available on disk, -in a human-readable way. This is similar to the @option{--list-generations} -option of @command{guix package} (@pxref{Invoquer guix package}). +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}). -Optionally, one can specify a pattern, with the same syntax that is used in -@command{guix package --list-generations}, to restrict the list of -generations displayed. For instance, the following command displays -generations that are up to 10 days old: +É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 @@ -23209,39 +24034,43 @@ $ guix system list-generations 10d @end table -The @command{guix system} command has even more to offer! The following -sub-commands allow you to visualize how your system services relate to each -other: +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 -Emit in Dot/Graphviz format to standard output the @dfn{service extension -graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.) +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). -The command: +La commande : @example $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf @end example -produces a PDF file showing the extension relations among services. +produit un fichier PDF montrant les relations d'extension entre les +services. @anchor{system-shepherd-graph} @item shepherd-graph -Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of -shepherd services of the operating system defined in @var{file}. -@xref{Services Shepherd}, for more information and for an example 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 GuixSD dans une VM -@subsection Running GuixSD in a Virtual Machine +@node Running Guix in a VM +@section Running Guix in a Virtual Machine -@cindex virtual machine -To run GuixSD in a virtual machine (VM), one can either use the pre-built -GuixSD VM image distributed at +@cindex machine virtuelle +To run Guix in a virtual machine (VM), one can either use the pre-built Guix +VM image distributed at @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz} , or build their own virtual machine image using @command{guix system vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2 @@ -23249,10 +24078,12 @@ format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently use. @cindex QEMU -If you built your own image, you must copy it out of the store (@pxref{Le dépôt}) and give yourself permission to write to the copy before you can use -it. When invoking QEMU, you must choose a system emulator that is suitable -for your hardware platform. Here is a minimal QEMU invocation that will -boot the result of @command{guix system vm-image} on x86_64 hardware: +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 \ @@ -23260,84 +24091,85 @@ $ qemu-system-x86_64 \ -enable-kvm -m 256 /tmp/qemu-image @end example -Here is what each of these options means: +Voici la signification de ces options : @table @code @item qemu-system-x86_64 -This specifies the hardware platform to emulate. This should match the -host. +Cela spécifie la plate-forme matérielle à émuler. Elle doit correspondre à +l'hôte. @item -net user -Enable the unprivileged user-mode network stack. The guest OS can access -the host but not vice versa. This is the simplest way to get the guest OS -online. +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 -You must create a network interface of a given model. If you do not create -a NIC, the boot will fail. Assuming your hardware platform is x86_64, you -can get a list of available NIC models by running -@command{qemu-system-x86_64 -net nic,model=help}. +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 -If your system has hardware virtualization extensions, enabling the virtual -machine support (KVM) of the Linux kernel will make things run faster. +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 available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB, -which may be insufficient for some operations. +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 -The file name of the qcow2 image. +Le nom de fichier de l'image qcow2. @end table -The default @command{run-vm.sh} script that is returned by an invocation of -@command{guix system vm} does not add a @command{-net user} flag by -default. To get network access from within the vm add the -@code{(dhcp-client-service)} to your system definition and start the VM -using @command{`guix system vm config.scm` -net user}. An important caveat -of using @command{-net user} for networking is that @command{ping} will not -work, because it uses the ICMP protocol. You'll have to use a different -command to check for network connectivity, for example @command{guix +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}. -@subsubsection Connecting Through SSH +@subsection Se connecter par SSH @cindex SSH @cindex serveur SSH -To enable SSH inside a VM you need to add a SSH server like -@code{(dropbear-service)} or @code{(lsh-service)} to your VM. The -@code{(lsh-service}) doesn't currently boot unsupervised. It requires you -to type some characters to initialize the randomness generator. In addition -you need to forward the SSH port, 22 by default, to the host. You can do -this with +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 -To connect to the VM you can run +Pour vous connecter à la VM vous pouvez lancer @example ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 @end example -The @command{-p} tells @command{ssh} the port you want to connect to. -@command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from -complaining every time you modify your @command{config.scm} file and the -@command{-o StrictHostKeyChecking=no} prevents you from having to allow a -connection to an unknown host every time you connect. +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. -@subsubsection Using @command{virt-viewer} with Spice +@subsection Utiliser @command{virt-viewer} avec Spice -As an alternative to the default @command{qemu} graphical client you can use -the @command{remote-viewer} from the @command{virt-viewer} package. To -connect pass the @command{-spice port=5930,disable-ticketing} flag to -@command{qemu}. See previous section for further information on how to do -this. +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 also allows you to do some nice stuff like share your clipboard with -your VM. To enable that you'll also have to pass the following flags to -@command{qemu}: +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 @@ -23346,14 +24178,14 @@ your VM. To enable that you'll also have to pass the following flags to name=com.redhat.spice.0 @end example -You'll also need to add the @pxref{Services divers, Spice service}. +Vous devrez aussi ajouter le @pxref{Services divers, Spice service}. @node Définir des services -@subsection Définir des services +@section Définir des services -The previous sections show the available services and how one can combine -them in an @code{operating-system} declaration. But how do we define them -in the first place? And what is a service anyway? +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. @@ -23363,65 +24195,68 @@ in the first place? And what is a service anyway? @end menu @node Composition de services -@subsubsection Composition de services +@subsection Composition de services @cindex services -@cindex daemons -Here we define a @dfn{service} as, broadly, something that extends the -functionality of the operating system. Often a service is a process---a -@dfn{daemon}---started when the system boots: a secure shell server, a Web -server, the Guix build daemon, etc. Sometimes a service is a daemon whose -execution can be triggered by another daemon---e.g., an FTP server started -by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}. -Occasionally, a service does not map to a daemon. For instance, the -``account'' service collects user accounts and makes sure they exist when -the system runs; the ``udev'' service collects device management rules and -makes them available to the eudev daemon; the @file{/etc} service populates -the @file{/etc} directory of the system. - -@cindex service extensions -GuixSD services are connected by @dfn{extensions}. For instance, the secure -shell service @emph{extends} the Shepherd---the GuixSD initialization +@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 +Guix system services are connected by @dfn{extensions}. For instance, the +secure shell service @emph{extends} the Shepherd---the initialization system, running as PID@tie{}1---by giving it the command lines to start and stop the secure shell daemon (@pxref{Services réseau, -@code{lsh-service}}); the UPower service extends the D-Bus service by -passing it its @file{.service} specification, and extends the udev service -by passing it device management rules (@pxref{Services de bureaux, +@code{openssh-service-type}}); the UPower service extends the D-Bus service +by passing it its @file{.service} specification, and extends the udev +service by passing it device management rules (@pxref{Services de bureaux, @code{upower-service}}); the Guix daemon service extends the Shepherd by passing it the command lines to start and stop the daemon, and extends the account service by passing it a list of required build user accounts (@pxref{Services de base}). -All in all, services and their ``extends'' relations form a directed acyclic -graph (DAG). If we represent services as boxes and extensions as arrows, a -typical system might provide something like this: +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,Typical service extension graph.} +@image{images/service-graph,,5in,Graphe d'extension des services typique.} -@cindex system service -At the bottom, we see the @dfn{system service}, which produces the directory -containing everything to run and boot the system, as returned by the -@command{guix system build} command. @xref{Référence de service}, to learn -about the other service types shown here. @xref{system-extension-graph, the -@command{guix system extension-graph} command}, for information on how to -generate this representation for a particular operating system definition. +@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 service types +@cindex types de services Technically, developers can define @dfn{service types} to express these relations. There can be any number of services of a given type on the system---for instance, a system running two instances of the GNU secure -shell server (lsh) has two instances of @var{lsh-service-type}, with +shell server (lsh) has two instances of @code{lsh-service-type}, with different parameters. -The following section describes the programming interface for service types -and services. +La section suivante décrit l'interface de programmation des types de +services et des services. @node Types service et services -@subsubsection Types service et services +@subsection Types service et services -A @dfn{service type} is a node in the DAG described above. Let us start -with a simple example, the service type for the Guix build daemon -(@pxref{Invoquer guix-daemon}): +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 @@ -23435,44 +24270,45 @@ with a simple example, the service type for the Guix build daemon @end example @noindent -It defines three things: +Il définit trois choses : @enumerate @item -A name, whose sole purpose is to make inspection and debugging easier. +Un nom, dont le seul but de rendre l'inspection et le débogage plus faciles. @item -A list of @dfn{service extensions}, where each extension designates the -target service type and a procedure that, given the parameters of the -service, returns a list of objects to extend the service of that type. +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. -Every service type has at least one service extension. The only exception -is the @dfn{boot service type}, which is the ultimate service. +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 -Optionally, a default value for instances of this type. +Éventuellement, une valeur par défaut pour les instances de ce type. @end enumerate -In this example, @var{guix-service-type} extends three services: +Dans cet exemple, @var{guix-service-type} étend trois services : @table @var @item shepherd-root-service-type -The @var{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}). +La procédure @var{guix-shepherd-service} définit comment le service du +Shepherd est étendu. En fait, elle renvoie un objet +@code{<shepherd-service>} qui définit comment @command{guix-daemon} est +démarré et stoppé (@pxref{Services Shepherd}). @item account-service-type -This extension for this service is computed by @var{guix-accounts}, which -returns a list of @code{user-group} and @code{user-account} objects -representing the build user accounts (@pxref{Invoquer guix-daemon}). +Cette extension pour ce service est calculée par @var{guix-accounts}, qui +renvoie une liste d'objets @code{user-group} et @code{user-account} +représentant les comptes des utilisateurs de construction (@pxref{Invoquer guix-daemon}). @item activation-service-type -Here @var{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. +Ici, @var{guix-activation} est une procédure qui renvoie une gexp, qui est +un bout de code qui s'exécute au moment de l'activation — p.@: ex.@: lorsque +le service est démarré. @end table -A service of this type is instantiated like this: +Un service de ce type est instancié de cette manière : @example (service guix-service-type @@ -23481,22 +24317,23 @@ A service of this type is instantiated like this: (use-substitutes? #f))) @end example -The second argument to the @code{service} form is a value representing the -parameters of this specific service instance. -@xref{guix-configuration-type, @code{guix-configuration}}, for information -about the @code{guix-configuration} data type. When the value is omitted, -the default value specified by @code{guix-service-type} is used: +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 -@var{guix-service-type} is quite simple because it extends other services -but is not extensible itself. +@var{guix-service-type} est très simple car il étend d'autres services mais +ne peut pas être étendu. @c @subsubsubsection Extensible Service Types -The service type for an @emph{extensible} service looks like this: +Le type de service pour un service @emph{extensible} ressemble à ceci : @example (define udev-service-type @@ -23505,98 +24342,100 @@ The service type for an @emph{extensible} service looks like this: (list (service-extension shepherd-root-service-type udev-shepherd-service))) - (compose concatenate) ;concatenate the list of rules + (compose concatenate) ; concatène la liste des règles (extend (lambda (config rules) (match config (($ <udev-configuration> udev initial-rules) (udev-configuration - (udev udev) ;the udev package to use + (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 -@var{shepherd-root-service-type}, we see two new fields: +C'est le type de service pour le +@uref{https://wiki.gentoo.org/wiki/Project:Eudev, le démon de gestion des +périphériques eudev}. Comparé à l'exemple précédent, en plus d'une +extension de @var{shepherd-root-service-type}, on trouve deux nouveaux +champs : @table @code @item compose -This is the procedure to @dfn{compose} the list of extensions to services of -this type. +C'est la procédure pour @dfn{composer} la liste des extensions de services +de ce type. -Services can extend the udev service by passing it lists of rules; we -compose those extensions simply by concatenating them. +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 -This procedure defines how the value of the service is @dfn{extended} with -the composition of the extensions. +Cette procédure définie comme la valeur du service est @dfn{étendue} avec la +composition des extensions. -Udev extensions are composed into a list of rules, but the udev service -value is itself a @code{<udev-configuration>} record. So here, we extend -that record by appending the list of rules it contains to the list of -contributed rules. +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 -This is a string giving an overview of the service type. The string can -contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The -@command{guix system search} command searches these strings and displays -them (@pxref{Invoquer guix system}). +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 -@var{udev-service-type}. If there were more, the @code{service-extension} -specifications would be ambiguous. +Il ne peut y avoir qu'une instance d'un type de service extensible comme +@var{udev-service-type}. S'il y en avait plus, les spécification +@code{service-extension} seraient ambiguës. -Still here? The next section provides a reference of the programming -interface for services. +Toujours ici ? La section suivante fournit une référence de l'interface de +programmation des services. @node Référence de service -@subsubsection Référence de service +@subsection Référence de service -We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services -and service types. This interface is provided by the @code{(gnu services)} -module. +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}] -Return a new service of @var{type}, a @code{<service-type>} object (see -below.) @var{value} can be any object; it represents the parameters of this -particular service instance. +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. -When @var{value} is omitted, the default value specified by @var{type} is -used; if @var{type} does not specify a default value, an error is raised. +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. -For instance, this: +Par exemple ceci : @example (service openssh-service-type) @end example @noindent -is equivalent to this: +est équivalent à ceci : @example (service openssh-service-type (openssh-configuration)) @end example -In both cases the result is an instance of @code{openssh-service-type} with -the default configuration. +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} -Return true if @var{obj} is a service. +Renvoie vrai si @var{obj} est un service. @end deffn @deffn {Procédure Scheme} service-kind @var{service} -Return the type of @var{service}---i.e., a @code{<service-type>} object. +Renvoie le type de @var{service} — c.-à-d.@: un objet @code{<service-type>}. @end deffn @deffn {Procédure Scheme} service-value @var{service} -Return the value associated with @var{service}. It represents its -parameters. +Renvoie la valeur associée à @var{service}. Elle représente ses paramètres. @end deffn -Here is an example of how a service is created and manipulated: +Voici un exemple de la manière dont un service est créé et manipulé : @example (define s @@ -23614,102 +24453,105 @@ Here is an example of how a service is created and manipulated: @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 @var{%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. +La forme @code{modify-services} fournit une manière pratique de modifier les +paramètres de certains services d'une liste comme @var{%base-services} +(@pxref{Services de base, @code{%base-services}}). Elle s'évalue en une liste +de services. Bien sûr, vous pouvez toujours utiliser les combinateurs de +liste standards comme @code{map} et @code{fold} pour cela (@pxref{SRFI-1, +List Library,, guile, GNU Guile Reference Manual}) ; @code{modify-services} +fournit simplement une manière plus concise pour ce besoin commun. -@deffn {Scheme Syntax} modify-services @var{services} @ +@deffn {Syntaxe Scheme} modify-services @var{services} @ (@var{type} @var{variable} => @var{body}) @dots{} -Modify the services listed in @var{services} according to the given -clauses. Each clause has the form: +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 -where @var{type} is a service type---e.g., @code{guix-service-type}---and -@var{variable} is an identifier that is bound within the @var{body} to the -service parameters---e.g., a @code{guix-configuration} instance---of the -original service of that @var{type}. +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}. -The @var{body} should evaluate to the new service parameters, which will be -used to configure the new service. This new service will replace the -original in the resulting list. Because a service's service parameters are -created using @code{define-record-type*}, you can write a succinct -@var{body} that evaluates to the new service parameters by using the -@code{inherit} feature that @code{define-record-type*} provides. +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}, for example usage. +@xref{Utiliser le système de configuration} pour des exemples d'utilisation. @end deffn -Next comes the programming interface for service types. This is something -you want to know when writing new service definitions, but not necessarily -when simply looking for ways to customize your @code{operating-system} -declaration. +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 -This is the representation of a @dfn{service type} (@pxref{Types service et services}). +C'est la représentation d'un @dfn{type de service} (@pxref{Types service et services}). @table @asis @item @code{name} -This is a symbol, used only to simplify inspection and debugging. +C'est un symbole, utilisé seulement pour simplifier l'inspection et le +débogage. @item @code{extensions} -A non-empty list of @code{<service-extension>} objects (see below). +Une liste non-vide d'objets @code{<service-extension>} (voir plus bas). @item @code{compose} (par défaut : @code{#f}) -If this is @code{#f}, then the service type denotes services that cannot be -extended---i.e., services that do not receive ``values'' from other -services. +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. -Otherwise, it must be a one-argument procedure. The procedure is called by -@code{fold-services} and is passed a list of values collected from -extensions. It may return any single value. +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}) -If this is @code{#f}, services of this type cannot be extended. - -Otherwise, it must be a two-argument procedure: @code{fold-services} calls -it, passing it the initial value of the service as the first argument and -the result of applying @code{compose} to the extension values as the second -argument. It must return a value that is a valid parameter value for the -service instance. +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}, for examples. +@xref{Types service et services}, pour des exemples. @end deftp @deffn {Procédure Scheme} service-extension @var{target-type} @ - @var{compute} Return a new extension for services of type -@var{target-type}. @var{compute} must be a one-argument procedure: -@code{fold-services} calls it, passing it the value associated with the -service that provides the extension; it must return a valid value for the -target service. + @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} -Return true if @var{obj} is a service extension. +Renvoie vrai si @var{obj} est une extension de service. @end deffn -Occasionally, you might want to simply extend an existing service. This -involves creating a new service type and specifying the extension of -interest, which can be verbose; the @code{simple-service} procedure provides -a shorthand for this. +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} -Return a service that extends @var{target} with @var{value}. This works by -creating a singleton service type @var{name}, of which the returned service -is an instance. +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. -For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an -additional job: +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 @@ -23717,219 +24559,230 @@ additional job: @end example @end deffn -At the core of the service abstraction lies the @code{fold-services} -procedure, which is responsible for ``compiling'' a list of services down to -a single directory that contains everything needed to boot and run the -system---the directory shown by the @command{guix system build} command -(@pxref{Invoquer guix system}). In essence, it propagates service -extensions down the service graph, updating each node parameters on the way, -until it reaches the root node. +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}] Fold @var{services} by propagating -their extensions down to the root of type @var{target-type}; return the root -service adjusted accordingly. + [#: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 -Lastly, the @code{(gnu services)} module also defines several essential -service types, some of which are listed below. +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 -This is the root of the service graph. It produces the system directory as -returned by the @command{guix system build} command. +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 -The type of the ``boot service'', which produces the @dfn{boot script}. The -boot script is what the initial RAM disk runs when booting. +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 -The type of the @file{/etc} service. This service is used to create files -under @file{/etc} and can be extended by passing it name/file tuples such -as: +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" "Welcome!\n"))) +(list `("issue" ,(plain-file "issue" "Bienvenue !\n"))) @end example -In this example, the effect would be to add an @file{/etc/issue} file -pointing to the given file. +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 -Type for the ``setuid-program service''. This service collects lists of -executable file names, passed as gexps, and adds them to the set of -setuid-root programs on the system (@pxref{Programmes setuid}). +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 -Type of the service that populates the @dfn{system profile}---i.e., the -programs under @file{/run/current-system/profile}. Other services can -extend it by passing it lists of packages to add to the system profile. +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 -@subsubsection Services Shepherd +@subsection Services Shepherd @cindex services shepherd @cindex PID 1 -@cindex init system +@cindex système d'init The @code{(gnu services shepherd)} module provides a way to define services -managed by the GNU@tie{}Shepherd, which is the GuixSD initialization -system---the first process that is started when the system boots, also known -as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}). +managed by the GNU@tie{}Shepherd, which is the initialization system---the +first process that is started when the system boots, also known as +PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}). -Services in the Shepherd can depend on each other. For instance, the SSH -daemon may need to be started after the syslog daemon has been started, -which in turn can only happen once all the file systems have been mounted. -The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this: +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,Typical shepherd service graph.} +@image{images/shepherd-graph,,5in,Graphe de service typique du shepherd.} -You can actually generate such a graph for any operating system definition -using the @command{guix system shepherd-graph} command +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 @var{%shepherd-root-service} is a service object representing -PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by -passing it lists of @code{<shepherd-service>} objects. +La variable @var{%shepherd-root-service} est un objet de service +représentant le PID@tie{}1, de type @var{shepherd-root-service-type} ; il +peut être étendu en lui passant des listes d'objets +@code{<shepherd-service>}. @deftp {Type de données} shepherd-service -The data type representing a service managed by the Shepherd. +Le type de données représentant un service géré par le Shepherd. @table @asis @item @code{provision} -This is a list of symbols denoting what the service provides. +C'est une liste de symboles dénotant ce que le service fournit. -These are the names that may be passed to @command{herd start}, -@command{herd status}, and similar commands (@pxref{Invoking herd,,, +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}, for details. +@code{provides} slot,, shepherd, The GNU Shepherd Manual}, pour plus de +détails. @item @code{requirements} (par défaut : @code{'()}) -List of symbols denoting the Shepherd services this one depends on. +Liste de symboles dénotant les services du Shepherd dont celui-ci dépend. @item @code{respawn?} (par défaut : @code{#t}) -Whether to restart the service when it stops, for instance when the -underlying process dies. +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)}) -The @code{start} and @code{stop} fields refer to the Shepherd's facilities -to start and stop processes (@pxref{Service De- and Constructors,,, -shepherd, The GNU Shepherd Manual}). They are given as G-expressions that -get expanded in the Shepherd configuration file (@pxref{G-Expressions}). +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 -This is a list of @code{shepherd-action} objects (see below) defining -@dfn{actions} supported by the service, in addition to the standard -@code{start} and @code{stop} actions. Actions listed here become available -as @command{herd} sub-commands: +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} -A documentation string, as shown when running: +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 @var{provision} +où @var{service-name} est l'un des symboles dans @var{provision} (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}). @item @code{modules} (par défaut : @var{%default-modules}) -This is the list of modules that must be in scope when @code{start} and -@code{stop} are evaluated. +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 -This is the data type that defines additional actions implemented by a -Shepherd service (see above). +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 -This is a documentation string for the action. It can be viewed by running: +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 -This should be a gexp that evaluates to a procedure of at least one -argument, which is the ``running value'' of the service (@pxref{Slots of -services,,, shepherd, The GNU Shepherd Manual}). +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 -The following example defines an action called @code{say-hello} that kindly -greets the user: +L'exemple suivant définie une action nommée @code{dire-bonjour} qui salue +amicalement l'utilisateur : @example (shepherd-action - (name 'say-hello) - (documentation "Say hi!") + (name 'dire-bonjour) + (documentation "Dit salut !") (procedure #~(lambda (running . args) - (format #t "Hello, friend! arguments: ~s\n" + (format #t "Salut, l'ami ! arguments : ~s\n" args) #t))) @end example -Assuming this action is added to the @code{example} service, then you can -do: +En supposant que cette action est ajoutée dans le service @code{example}, +vous pouvez écrire : @example -# herd say-hello example -Hello, friend! arguments: () -# herd say-hello example a b c -Hello, friend! arguments: ("a" "b" "c") +# herd dire-bonjour example +Salut, l'ami ! arguments : () +# herd dire-bonjour example a b c +Salut, l'ami ! arguments : ("a" "b" "c") @end example -This, as you can see, is a fairly sophisticated way to say hello. -@xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more -info on actions. +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 -The service type for the Shepherd ``root service''---i.e., PID@tie{}1. +Le type de service pour le « service racine » du Shepherd — c.-à-d.@: le +PID@tie{}1. -This is the service type that extensions target when they want to create -shepherd services (@pxref{Types service et services}, for an example). -Each extension must pass a list of @code{<shepherd-service>}. +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 -This service represents PID@tie{}1. +Ce service représente le PID@tie{}1. @end defvr @node Documentation -@section Documentation - -@cindex documentation, searching for -@cindex searching for documentation -@cindex Info, documentation format -@cindex man pages -@cindex manual pages -In most cases packages installed with Guix come with documentation. There -are two main documentation formats: ``Info'', a browseable hypertext format -used for GNU software, and ``manual pages'' (or ``man pages''), the linear -documentation format traditionally found on Unix. Info manuals are accessed -with the @command{info} command or with Emacs, and man pages are accessed -using @command{man}. - -You can look for documentation of software installed on your system by -keyword. For example, the following command searches for information about -``TLS'' in Info manuals: +@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 @@ -23941,7 +24794,7 @@ $ info -k TLS @end example @noindent -The command below searches for the same keyword in man pages: +La commande suivante recherche le même mot-clef dans les pages de man : @example $ man -k TLS @@ -23950,40 +24803,42 @@ certtool (1) - GnuTLS certificate tool @dots {} @end example -These searches are purely local to your computer so you have the guarantee -that documentation you find corresponds to what you have actually installed, -you can access it off-line, and your privacy is respected. +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. -Once you have these results, you can view the relevant documentation by -running, say: +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 -or: +ou : @example $ man certtool @end example -Info manuals contain sections and indices as well as hyperlinks like those -found in Web pages. The @command{info} reader (@pxref{Top, Info reader,, -info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc -Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to -navigate manuals. @xref{Getting Started,,, info, Info: An Introduction}, -for an introduction to Info navigation. +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 -@section Installer les fichiers de débogage +@chapter Installer les fichiers de débogage -@cindex debugging files -Program binaries, as produced by the GCC compilers for instance, are -typically written in the ELF format, with a section containing -@dfn{debugging information}. Debugging information is what allows the -debugger, GDB, to map binary code to source code; it is required to debug a -compiled program in good conditions. +@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 @@ -23994,76 +24849,79 @@ 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}). -Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism -that allows users to get the best of both worlds: debugging information can -be stripped from the binaries and stored in separate files. GDB is then -able to load debugging information from those files, when they are available +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}). -The GNU distribution takes advantage of this by storing debugging -information in the @code{lib/debug} sub-directory of a separate package -output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package -when they need it. For instance, the following command installs the -debugging information for the GNU C Library and for GNU Guile: +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 -GDB must then be told to look for debug files in the user's profile, by -setting the @code{debug-file-directory} variable (consider setting it from -the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}): +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 -From there on, GDB will pick up debugging information from the @code{.debug} -files under @file{~/.guix-profile/lib/debug}. +À partir de maintenant, GDB récupérera les informations de débogage dans les +fichiers @code{.debug} de @file{~/.guix-profile/lib/debug}. -In addition, you will most likely want GDB to be able to show the source -code being debugged. To do that, you will have to unpack the source code of -the package of interest (obtained with @code{guix build --source}, -@pxref{Invoquer guix build}), and to point GDB to that source directory -using the @code{directory} command (@pxref{Source Path, @code{directory},, -gdb, Debugging with GDB}). +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 -The @code{debug} output mechanism in Guix is implemented by the -@code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is -opt-in---debugging information is available only for the packages with -definitions explicitly declaring a @code{debug} output. This may be changed -to opt-out in the future if our build farm servers can handle the load. To -check whether a package has a @code{debug} output, use @command{guix package ---list-available} (@pxref{Invoquer guix package}). +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é -@section Mises à jour de sécurité +@chapter Mises à jour de sécurité -@cindex security updates +@cindex mises à jour de sécurité @cindex vulnérabilités -Occasionally, important security vulnerabilities are discovered in software -packages and must be patched. Guix developers try hard to keep track of -known vulnerabilities and to apply fixes as soon as possible in the -@code{master} branch of Guix (we do not yet provide a ``stable'' branch -containing only security updates.) The @command{guix lint} tool helps -developers find out about vulnerable versions of software packages in the -distribution: +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: probably vulnerable to CVE-2015-1781, CVE-2015-7547 -gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276 -gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924 +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}, for more information. +@xref{Invoquer guix lint}, pour plus d'informations. @quotation Remarque -As of version @value{VERSION}, the feature described below is considered -``beta''. +À 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 @@ -24076,20 +24934,22 @@ d'être reconstruite. Cela aide d'utiliser des binaires pré-construits temps de souhaité. @cindex greffes -To address this, Guix implements @dfn{grafts}, a mechanism that allows for -fast deployment of critical updates without the costs associated with a -whole-distribution rebuild. The idea is to rebuild only the package that -needs to be patched, and then to ``graft'' it onto packages explicitly -installed by the user and that were previously referring to the original -package. The cost of grafting is typically very low, and order of -magnitudes lower than a full rebuild of the dependency chain. - -@cindex replacements of packages, for grafts -For instance, suppose a security update needs to be applied to Bash. Guix -developers will provide a package definition for the ``fixed'' Bash, say -@var{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: +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 +Par exemple, supposons qu'une mise à jour de sécurité doive être appliquée à +Bash. Les développeurs de Guix fourniront une définition de paquet pour le +Bash « corrigé », disons @var{bash-fixed}, de la manière habituelle +(@pxref{Définition des paquets}). Ensuite, la définition originale du paquet est +augmentée avec un champ @code{replacement} qui pointe vers le paquet +contenant le correctif de sécurité : @example (define bash @@ -24099,44 +24959,44 @@ pointing to the package containing the bug fix: (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 @var{bash-fixed} -instead of @var{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. +À partir de maintenant, tout paquet dépendant directement ou indirectement +de Bash — rapporté par @command{guix gc --requisites} (@pxref{Invoquer guix gc}) — installé est automatiquement « réécrit » pour se référer à +@var{bash-fixed} au lieu de @var{bash}. Ce processus de greffe prend du +temps en proportion de la taille du paquet, typiquement moins d'une minute +pour un paquet de taille « moyenne » sur une machine récente. La greffe est +récursive : lorsqu'une dépendance indirecte a besoin d'être greffée, la +greffe se « propage » jusqu'au paquet que l'utilisateur installe. -Currently, the length of the name and version of the graft and that of the -package it replaces (@var{bash-fixed} and @var{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. +Actuellement la longueur du nom et la version de la greffe et du paquet +qu'il remplace (@var{bash-fixed} et @var{bash} dans l'exemple ci-dessus) +doivent être identiques. Cette restriction vient surtout du fait que la +greffe fonctionne en corrigeant les fichiers, dont des fichiers binaires, +directement. D'autres restrictions peuvent apparaître : par exemple, si +vous ajoutez une greffe à un paquet fournissant une bibliothèque partagée, +la bibliothèque partagée originale et son remplacement doivent avoir le même +@code{SONAME} et être compatibles au niveau binaire. -The @option{--no-grafts} command-line option allows you to forcefully avoid -grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the -command: +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 -returns the store file name of the original Bash, whereas: +renvoie le nom de fichier dans les dépôt du Bash original, alors que : @example guix build bash @end example @noindent -returns the store file name of the ``fixed'', replacement Bash. This allows -you to distinguish between the two variants of Bash. +renvoie le nom de fichier du Bash « corrigé » de remplacement. Cela vous +permet de distinguer les deux variantes de Bash. -To verify which Bash your whole profile refers to, you can run -(@pxref{Invoquer guix gc}): +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 @@ -24144,554 +25004,62 @@ guix gc -R `readlink -f ~/.guix-profile` | grep bash @noindent @dots{} and compare the store file names that you get with those above. -Likewise for a complete GuixSD system generation: +Likewise for a complete Guix system generation: @example guix gc -R `guix system build my-config.scm` | grep bash @end example -Lastly, to check which Bash running processes are using, you can use the -@command{lsof} command: +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 Modules de paquets -@section Modules de paquets - -From a programming viewpoint, the package definitions of the GNU -distribution are provided by Guile modules in the @code{(gnu packages -@dots{})} name space@footnote{Note that packages under the @code{(gnu -packages @dots{})} module name space are not necessarily ``GNU packages''. -This module naming scheme follows the usual Guile module naming convention: -@code{gnu} means that these modules are distributed as part of the GNU -system, and @code{packages} identifies modules that define packages.} -(@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For -instance, the @code{(gnu packages emacs)} module exports a variable named -@code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}). - -The @code{(gnu packages @dots{})} module name space is automatically scanned -for packages by the command-line tools. For instance, when running -@code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules -are scanned until one that exports a package object whose name is -@code{emacs} is found. This package search facility is implemented in the -@code{(gnu packages)} module. - -@cindex personnalisation, des paquets -@cindex package module search path -Users can store package definitions in modules with different names---e.g., -@code{(my-packages emacs)}@footnote{Note that the file name and module name -must match. For instance, the @code{(my-packages emacs)} module must be -stored in a @file{my-packages/emacs.scm} file relative to the load path -specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}. -@xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for -details.}. There are two ways to make these package definitions visible to -the user interfaces: - -@enumerate -@item -By adding the directory containing your package modules to the search path -with the @code{-L} flag of @command{guix package} and other commands -(@pxref{Options de construction communes}), or by setting the @code{GUIX_PACKAGE_PATH} -environment variable described below. - -@item -By defining a @dfn{channel} and configuring @command{guix pull} so that it -pulls from it. A channel is essentially a Git repository containing package -modules. @xref{Canaux}, for more information on how to define and use -channels. -@end enumerate - -@code{GUIX_PACKAGE_PATH} works similarly to other search path variables: - -@defvr {Environment Variable} GUIX_PACKAGE_PATH -This is a colon-separated list of directories to search for additional -package modules. Directories listed in this variable take precedence over -the own modules of the distribution. -@end defvr - -The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each -package is built based solely on other packages in the distribution. The -root of this dependency graph is a small set of @dfn{bootstrap binaries}, -provided by the @code{(gnu packages bootstrap)} module. For more -information on bootstrapping, @pxref{Bootstrapping}. - -@node Consignes d'empaquetage -@section Consignes d'empaquetage - -@cindex packages, creating -The GNU distribution is nascent and may well lack some of your favorite -packages. This section describes how you can help make the distribution -grow. @xref{Contribuer}, for additional information on how you can help. - -Free software packages are usually distributed in the form of @dfn{source -code tarballs}---typically @file{tar.gz} files that contain all the source -files. Adding a package to the distribution means essentially two things: -adding a @dfn{recipe} that describes how to build the package, including a -list of other packages required to build it, and adding @dfn{package -metadata} along with that recipe, such as a description and licensing -information. - -In Guix all this information is embodied in @dfn{package definitions}. -Package definitions provide a high-level view of the package. They are -written using the syntax of the Scheme programming language; in fact, for -each package we define a variable bound to the package definition, and -export that variable from a module (@pxref{Modules de paquets}). However, -in-depth Scheme knowledge is @emph{not} a prerequisite for creating -packages. For more information on package definitions, @pxref{Définition des paquets}. - -Once a package definition is in place, stored in a file in the Guix source -tree, it can be tested using the @command{guix build} command -(@pxref{Invoquer guix build}). For example, assuming the new package is -called @code{gnew}, you may run this command from the Guix build tree -(@pxref{Lancer Guix avant qu'il ne soit installé}): - -@example -./pre-inst-env guix build gnew --keep-failed -@end example - -Using @code{--keep-failed} makes it easier to debug build failures since it -provides access to the failed build tree. Another useful command-line -option when debugging is @code{--log-file}, to access the build log. - -If the package is unknown to the @command{guix} command, it may be that the -source file contains a syntax error, or lacks a @code{define-public} clause -to export the package variable. To figure it out, you may load the module -from Guile to get more information about the actual error: - -@example -./pre-inst-env guile -c '(use-modules (gnu packages gnew))' -@end example - -Once your package builds correctly, please send us a patch -(@pxref{Contribuer}). Well, if you need help, we will be happy to help -you too. Once the patch is committed in the Guix repository, the new -package automatically gets built on the supported platforms by -@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration -system}. - -@cindex substituter -On peut obtenir la nouvelle définition du paquet simplement en lançant -@command{guix pull} (@pxref{Invoquer guix pull}). Lorsque -@code{hydra.gnu.org} a fini de construire le paquet, l'installation du -paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La -seule intervention humaine requise est pendant la revue et l'application du -correctif. - - -@menu -* Liberté logiciel:: Ce que la distribution peut contenir. -* Conventions de nommage:: Qu'est-ce qu'un bon nom ? -* Numéros de version:: Lorsque le nom n'est pas suffisant. -* Synopsis et descriptions:: Aider les utilisateurs à trouver le bon - paquet. -* Modules python:: Un peu de comédie anglaise. -* Modules perl:: Petites perles. -* Paquets java:: Pause café. -* Polices de caractères:: À fond les fontes. -@end menu - -@node Liberté logiciel -@subsection Liberté logiciel - -@c Adapted from http://www.gnu.org/philosophy/philosophy.html. -@cindex free software -The GNU operating system has been developed so that users can have freedom -in their computing. GNU is @dfn{free software}, meaning that users have the -@url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to -run the program, to study and change the program in source code form, to -redistribute exact copies, and to distribute modified versions. Packages -found in the GNU distribution provide only software that conveys these four -freedoms. - -In addition, the GNU distribution follow the -@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free -software distribution guidelines}. Among other things, these guidelines -reject non-free firmware, recommendations of non-free software, and discuss -ways to deal with trademarks and patents. - -Some otherwise free upstream package sources contain a small and optional -subset that violates the above guidelines, for instance because this subset -is itself non-free code. When that happens, the offending items are removed -with appropriate patches or code snippets in the @code{origin} form of the -package (@pxref{Définition des paquets}). This way, @code{guix build --source} -returns the ``freed'' source rather than the unmodified upstream source. - - -@node Conventions de nommage -@subsection Conventions de nommage - -@cindex package name -A package has actually two names associated with it: First, there is the -name of the @emph{Scheme variable}, the one following @code{define-public}. -By this name, the package can be made known in the Scheme code, for instance -as input to another package. Second, there is the string in the @code{name} -field of a package definition. This name is used by package management -commands such as @command{guix package} and @command{guix build}. - -Both are usually the same and correspond to the lowercase conversion of the -project name chosen upstream, with underscores replaced with hyphens. For -instance, GNUnet is available as @code{gnunet}, and SDL_net as -@code{sdl-net}. - -We do not add @code{lib} prefixes for library packages, unless these are -already part of the official project name. But @pxref{Modules python} and -@ref{Modules perl} for special rules concerning modules for the Python and -Perl languages. - -Font package names are handled differently, @pxref{Polices de caractères}. - - -@node Numéros de version -@subsection Numéros de version - -@cindex package version -We usually package only the latest version of a given free software -project. But sometimes, for instance for incompatible library versions, two -(or more) versions of the same package are needed. These require different -Scheme variable names. We use the name as defined in @ref{Conventions de nommage} -for the most recent version; previous versions use the same name, suffixed -by @code{-} and the smallest prefix of the version number that may -distinguish the two versions. - -The name inside the package definition is the same for all versions of a -package and does not contain any version number. - -For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as -follows: - -@example -(define-public gtk+ - (package - (name "gtk+") - (version "3.9.12") - ...)) -(define-public gtk+-2 - (package - (name "gtk+") - (version "2.24.20") - ...)) -@end example -If we also wanted GTK+ 3.8.2, this would be packaged as -@example -(define-public gtk+-3.8 - (package - (name "gtk+") - (version "3.8.2") - ...)) -@end example - -@c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>, -@c for a discussion of what follows. -@cindex version number, for VCS snapshots -Occasionally, we package snapshots of upstream's version control system -(VCS) instead of formal releases. This should remain exceptional, because -it is up to upstream developers to clarify what the stable release is. Yet, -it is sometimes necessary. So, what should we put in the @code{version} -field? - -Clearly, we need to make the commit identifier of the VCS snapshot visible -in the version string, but we also need to make sure that the version string -is monotonically increasing so that @command{guix package --upgrade} can -determine which version is newer. Since commit identifiers, notably with -Git, are not monotonically increasing, we add a revision number that we -increase each time we upgrade to a newer snapshot. The resulting version -string looks like this: - -@example -2.0.11-3.cabba9e - ^ ^ ^ - | | `-- upstream commit ID - | | - | `--- Guix package revision - | -latest upstream version -@end example - -It is a good idea to strip commit identifiers in the @code{version} field -to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics -have a role to play here) as well as problems related to OS limits such as -the maximum shebang length (127 bytes for the Linux kernel.) It is best to -use the full commit identifiers in @code{origin}s, though, to avoid -ambiguities. A typical package definition may look like this: - -@example -(define my-package - (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7") - (revision "1")) ;révision du paquet Guix - (package - (version (git-version "0.9" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "git://example.org/my-package.git") - (commit commit))) - (sha256 (base32 "1mbikn@dots{}")) - (file-name (git-file-name name version)))) - ;; @dots{} - ))) -@end example - -@node Synopsis et descriptions -@subsection Synopsis et descriptions - -@cindex package description -@cindex package synopsis -As we have seen before, each package in GNU@tie{}Guix includes a synopsis -and a description (@pxref{Définition des paquets}). Synopses and descriptions -are important: They are what @command{guix package --search} searches, and a -crucial piece of information to help users determine whether a given package -suits their needs. Consequently, packagers should pay attention to what -goes into them. - -Synopses must start with a capital letter and must not end with a period. -They must not start with ``a'' or ``the'', which usually does not bring -anything; for instance, prefer ``File-frobbing tool'' over ``A tool that -frobs files''. The synopsis should say what the package is---e.g., ``Core -GNU utilities (file, text, shell)''---or what it is used for---e.g., the -synopsis for GNU@tie{}grep is ``Print lines matching a pattern''. - -Keep in mind that the synopsis must be meaningful for a very wide audience. -For example, ``Manipulate alignments in the SAM format'' might make sense -for a seasoned bioinformatics researcher, but might be fairly unhelpful or -even misleading to a non-specialized audience. It is a good idea to come up -with a synopsis that gives an idea of the application domain of the -package. In this example, this might give something like ``Manipulate -nucleotide sequence alignments'', which hopefully gives the user a better -idea of whether this is what they are looking for. - -Descriptions should take between five and ten lines. Use full sentences, -and avoid using acronyms without first introducing them. Please avoid -marketing phrases such as ``world-leading'', ``industrial-strength'', and -``next-generation'', and avoid superlatives like ``the most -advanced''---they are not helpful to users looking for a package and may -even sound suspicious. Instead, try to be factual, mentioning use cases and -features. - -@cindex Texinfo markup, in package descriptions -Descriptions can include Texinfo markup, which is useful to introduce -ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks -(@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful -when using some characters for example @samp{@@} and curly braces which are -the basic special characters in Texinfo (@pxref{Special Characters,,, -texinfo, GNU Texinfo}). User interfaces such as @command{guix package ---show} take care of rendering it appropriately. - -Synopses and descriptions are translated by volunteers -@uref{http://translationproject.org/domain/guix-packages.html, at the -Translation Project} so that as many users as possible can read them in -their native language. User interfaces search them and display them in the -language specified by the current locale. - -To allow @command{xgettext} to extract them as translatable strings, -synopses and descriptions @emph{must be literal strings}. This means that -you cannot use @code{string-append} or @code{format} to construct these -strings: - -@lisp -(package - ;; @dots{} - (synopsis "This is translatable") - (description (string-append "This is " "*not*" " translatable."))) -@end lisp - -Translation is a lot of work so, as a packager, please pay even more -attention to your synopses and descriptions as every change may entail -additional work for translators. In order to help them, it is possible to -make recommendations or instructions visible to them by inserting special -comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}): - -@example -;; TRANSLATORS: "X11 resize-and-rotate" should not be translated. -(description "ARandR is designed to provide a simple visual front end -for the X11 resize-and-rotate (RandR) extension. @dots{}") -@end example - - -@node Modules python -@subsection Modules python - -@cindex python -We currently package Python 2 and Python 3, under the Scheme variable names -@code{python-2} and @code{python} as explained in @ref{Numéros de version}. To -avoid confusion and naming clashes with other programming languages, it -seems desirable that the name of a package for a Python module contains the -word @code{python}. - -Some modules are compatible with only one version of Python, others with -both. If the package Foo compiles only with Python 3, we name it -@code{python-foo}; if it compiles only with Python 2, we name it -@code{python2-foo}. If it is compatible with both versions, we create two -packages with the corresponding names. - -If a project already contains the word @code{python}, we drop this; for -instance, the module python-dateutil is packaged under the names -@code{python-dateutil} and @code{python2-dateutil}. If the project name -starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as -described above. - -@subsubsection Specifying Dependencies -@cindex inputs, for Python packages - -Dependency information for Python packages is usually available in the -package source tree, with varying degrees of accuracy: in the -@file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}. - -Your mission, when writing a recipe for a Python package, is to map these -dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet, -inputs}). Although the @code{pypi} importer normally does a good job -(@pxref{Invoquer guix import}), you may want to check the following check -list to determine which dependency goes where. - -@itemize - -@item -We currently package Python 2 with @code{setuptools} and @code{pip} -installed like Python 3.4 has per default. Thus you don't need to specify -either of these as an input. @command{guix lint} will warn you if you do. - -@item -Python dependencies required at run time go into @code{propagated-inputs}. -They are typically defined with the @code{install_requires} keyword in -@file{setup.py}, or in the @file{requirements.txt} file. - -@item -Python packages required only at build time---e.g., those listed with the -@code{setup_requires} keyword in @file{setup.py}---or only for -testing---e.g., those in @code{tests_require}---go into -@code{native-inputs}. The rationale is that (1) they do not need to be -propagated because they are not needed at run time, and (2) in a -cross-compilation context, it's the ``native'' input that we'd want. - -Examples are the @code{pytest}, @code{mock}, and @code{nose} test -frameworks. Of course if any of these packages is also required at -run-time, it needs to go to @code{propagated-inputs}. - -@item -Anything that does not fall in the previous categories goes to -@code{inputs}, for example programs or C libraries required for building -Python packages containing C extensions. - -@item -If a Python package has optional dependencies (@code{extras_require}), it is -up to you to decide whether to add them or not, based on their -usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}). - -@end itemize - - -@node Modules perl -@subsection Modules perl - -@cindex perl -Perl programs standing for themselves are named as any other package, using -the lowercase upstream name. For Perl packages containing a single class, -we use the lowercase class name, replace all occurrences of @code{::} by -dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser} -becomes @code{perl-xml-parser}. Modules containing several classes keep -their lowercase upstream name and are also prepended by @code{perl-}. Such -modules tend to have the word @code{perl} somewhere in their name, which -gets dropped in favor of the prefix. For instance, @code{libwww-perl} -becomes @code{perl-libwww}. - - -@node Paquets java -@subsection Paquets java - -@cindex java -Java programs standing for themselves are named as any other package, using -the lowercase upstream name. - -To avoid confusion and naming clashes with other programming languages, it -is desirable that the name of a package for a Java package is prefixed with -@code{java-}. If a project already contains the word @code{java}, we drop -this; for instance, the package @code{ngsjava} is packaged under the name -@code{java-ngs}. - -For Java packages containing a single class or a small class hierarchy, we -use the lowercase class name, replace all occurrences of @code{.} by dashes -and prepend the prefix @code{java-}. So the class @code{apache.commons.cli} -becomes package @code{java-apache-commons-cli}. - - -@node Polices de caractères -@subsection Polices de caractères - -@cindex polices -For fonts that are in general not installed by a user for typesetting -purposes, or that are distributed as part of a larger software package, we -rely on the general packaging rules for software; for instance, this applies -to the fonts delivered as part of the X.Org system or fonts that are part of -TeX Live. - -To make it easier for a user to search for fonts, names for other packages -containing only fonts are constructed as follows, independently of the -upstream package name. - -The name of a package containing only one font family starts with -@code{font-}; it is followed by the foundry name and a dash @code{-} if the -foundry is known, and the font family name, in which spaces are replaced by -dashes (and as usual, all upper case letters are transformed to lower -case). For example, the Gentium font family by SIL is packaged under the -name @code{font-sil-gentium}. - -For a package containing several font families, the name of the collection -is used in the place of the font family name. For instance, the Liberation -fonts consist of three families, Liberation Sans, Liberation Serif and -Liberation Mono. These could be packaged separately under the names -@code{font-liberation-sans} and so on; but as they are distributed together -under a common name, we prefer to package them together as -@code{font-liberation}. - -In the case where several formats of the same font family or font collection -are packaged separately, a short form of the format, prepended by a dash, is -added to the package name. We use @code{-ttf} for TrueType fonts, -@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1 -fonts. - - - @node Bootstrapping -@section Bootstrapping +@chapter Bootstrapping @c Adapted from the ELS 2013 paper. -@cindex bootstrapping - -Bootstrapping in our context refers to how the distribution gets built -``from nothing''. Remember that the build environment of a derivation -contains nothing but its declared inputs (@pxref{Introduction}). So there's -an obvious chicken-and-egg problem: how does the first package get built? -How does the first compiler get compiled? Note that this is a question of -interest only to the curious hacker, not to the regular user, so you can -shamelessly skip this section if you consider yourself a ``regular user''. - -@cindex bootstrap binaries -The GNU system is primarily made of C code, with libc at its core. The GNU -build system itself assumes the availability of a Bourne shell and -command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and -`grep'. Furthermore, build programs---programs that run @code{./configure}, -@code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}). -Consequently, to be able to build anything at all, from scratch, Guix relies -on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages -mentioned above---the @dfn{bootstrap binaries}. - -These bootstrap binaries are ``taken for granted'', though we can also -re-create them if needed (more on that later). - -@unnumberedsubsec Preparing to Use the Bootstrap Binaries +@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,,Dependency graph of the early bootstrap -derivations} +@image{images/bootstrap-graph,6in,,Graphe de dépendance des premières +dérivations de bootstrap} -The figure above shows the very beginning of the dependency graph of the -distribution, corresponding to the package definitions of the @code{(gnu -packages bootstrap)} module. A similar figure can be generated with -@command{guix graph} (@pxref{Invoquer guix graph}), along the lines of: +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 \ @@ -24699,54 +25067,57 @@ guix graph -t derivation \ | dot -Tps > t.ps @end example -At this level of detail, things are slightly complex. First, Guile itself -consists of an ELF executable, along with many source and compiled Scheme -files that are dynamically loaded when it runs. This gets stored in the -@file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part -of Guix's ``source'' distribution, and gets inserted into the store with -@code{add-to-store} (@pxref{Le dépôt}). - -But how do we write a derivation that unpacks this tarball and adds it to -the store? To solve this problem, the @code{guile-bootstrap-2.0.drv} -derivation---the first one that gets built---uses @code{bash} as its -builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls -@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz}, -and @file{mkdir} are statically-linked binaries, also part of the Guix -source distribution, whose sole purpose is to allow the Guile tarball to be -unpacked. - -Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile -that can be used to run subsequent build programs. Its first task is to -download tarballs containing the other pre-built binaries---this is what the -@code{.tar.xz.drv} derivations do. Guix modules such as -@code{ftp-client.scm} are used for this purpose. The -@code{module-import.drv} derivations import those modules in a directory in -the store, using the original layout. The @code{module-import-compiled.drv} -derivations compile those modules, and write them in an output directory -with the right layout. This corresponds to the @code{#:modules} argument of -@code{build-expression->derivation} (@pxref{Dérivations}). - -Finally, the various tarballs are unpacked by the derivations -@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which -point we have a working C tool chain. - - -@unnumberedsubsec Building the Build Tools - -Bootstrapping is complete when we have a full tool chain that does not -depend on the pre-built bootstrap tools discussed above. This no-dependency -requirement is verified by checking whether the files of the final tool -chain contain references to the @file{/gnu/store} directories of the -bootstrap inputs. The process that leads to this ``final'' tool chain is -described by the package definitions found in the @code{(gnu packages -commencement)} module. - -The @command{guix graph} command allows us to ``zoom out'' compared to the -graph above, by looking at the level of package objects instead of -individual derivations---remember that a package may translate to several -derivations, typically one derivation to download its source, one to build -the Guile modules it needs, and one to actually build the package from -source. The command: +À 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 \ @@ -24755,123 +25126,132 @@ guix graph -t bag \ @end example @noindent -produces the dependency graph leading to the ``final'' C -library@footnote{You may notice the @code{glibc-intermediate} label, -suggesting that it is not @emph{quite} final, but as a good approximation, -we will consider it final.}, depicted below. +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>. -The first tool that gets built with the bootstrap binaries is -GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for -all the following packages. From there Findutils and Diffutils get built. +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. -Then come the first-stage Binutils and GCC, built as pseudo cross -tools---i.e., with @code{--target} equal to @code{--host}. They are used to -build libc. Thanks to this cross-build trick, this libc is guaranteed not -to hold any reference to the initial tool chain. +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. -From there the final Binutils and GCC (not shown above) are built. GCC uses -@code{ld} from the final Binutils, and links programs against the just-built -libc. This tool chain is used to build the other packages used by Guix and -by the GNU Build System: Guile, Bash, Coreutils, etc. +À 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. -And voilà! At this point we have the complete set of build tools that the -GNU Build System expects. These are in the @code{%final-inputs} variable of -the @code{(gnu packages commencement)} module, and are implicitly used by -any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction, -@code{gnu-build-system}}). +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}}). -@unnumberedsubsec Building the Bootstrap Binaries +@unnumberedsec Construire les binaires de bootstrap -@cindex bootstrap binaries -Because the final tool chain does not depend on the bootstrap binaries, -those rarely need to be updated. Nevertheless, it is useful to have an -automated way to produce them, should an update occur, and this is what the -@code{(gnu packages make-bootstrap)} module provides. +@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. -The following command builds the tarballs containing the bootstrap binaries -(Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils -and other basic command-line tools): +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 -The generated tarballs are those that should be referred to in the -@code{(gnu packages bootstrap)} module mentioned at the beginning of this -section. +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. -Still here? Then perhaps by now you've started to wonder: when do we reach a -fixed point? That is an interesting question! The answer is unknown, but if -you would like to investigate further (and have significant computational -and storage resources to do so), then let us know. +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. -@unnumberedsubsec Reducing the Set of Bootstrap Binaries +@unnumberedsec Réduire l'ensemble des binaires de bootstrap -Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of -binary code! Why is that a problem? It's a problem because these big chunks -of binary code are practically non-auditable, which makes it hard to -establish what source code produced them. Every unauditable binary also -leaves us vulnerable to compiler backdoors as described by Ken Thompson in -the 1984 paper @emph{Reflections on Trusting Trust}. +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}. -This is mitigated by the fact that our bootstrap binaries were generated -from an earlier Guix revision. Nevertheless it lacks the level of -transparency that we get in the rest of the package dependency graph, where -Guix always gives us a source-to-binary mapping. Thus, our goal is to -reduce the set of bootstrap binaries to the bare minimum. +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. -The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists -on-going projects to do that. One of these is about replacing the bootstrap -GCC with a sequence of assemblers, interpreters, and compilers of increasing -complexity, which could be built from source starting from a simple and -auditable assembler. Your help is welcome! +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 -@section Porter vers une nouvelle plateforme +@chapter Porter vers une nouvelle plateforme -As discussed above, the GNU distribution is self-contained, and -self-containment is achieved by relying on pre-built ``bootstrap binaries'' -(@pxref{Bootstrapping}). These binaries are specific to an operating system -kernel, CPU architecture, and application binary interface (ABI). Thus, to -port the distribution to a platform that is not yet supported, one must -build those bootstrap binaries, and update the @code{(gnu packages -bootstrap)} module to use them on that platform. +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. -Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When -everything goes well, and assuming the GNU tool chain supports the target -platform, this can be as simple as running a command like this one: +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 -For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu -packages bootstrap)} must be augmented to return the right file name for -libc's dynamic linker on that platform; likewise, -@code{system->linux-architecture} in @code{(gnu packages linux)} must be -taught about the new platform. - -Once these are built, the @code{(gnu packages bootstrap)} module needs to be -updated to refer to these binaries on the target platform. That is, the -hashes and URLs of the bootstrap tarballs for the new platform must be added -alongside those of the currently supported platforms. The bootstrap Guile -tarball is treated specially: it is expected to be available locally, and -@file{gnu/local.mk} has rules to download it for the supported -architectures; a rule for the new platform must be added as well. - -In practice, there may be some complications. First, it may be that the -extended GNU triplet that specifies an ABI (like the @code{eabi} suffix -above) is not recognized by all the GNU tools. Typically, glibc recognizes -some of these, whereas GCC uses an extra @code{--with-abi} configure flag -(see @code{gcc.scm} for examples of how to handle this). Second, some of -the required packages could fail to build for that platform. Lastly, the -generated binaries could be broken for some reason. +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 @@ -24881,7 +25261,7 @@ generated binaries could be broken for some reason. @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 constributions d'autres +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 |