24923 lines
984 KiB
Text
24923 lines
984 KiB
Text
\input texinfo
|
||
@c ===========================================================================
|
||
@c
|
||
@c This file was generated with po4a. Translate the source file.
|
||
@c
|
||
@c ===========================================================================
|
||
@c -*-texinfo-*-
|
||
|
||
@c %**start of header
|
||
@setfilename guix.fr.info
|
||
@documentencoding UTF-8
|
||
@documentlanguage fr
|
||
@frenchspacing on
|
||
@settitle Manuel de référence de GNU Guix
|
||
@c %**end of header
|
||
|
||
@include version-fr.texi
|
||
|
||
@c Identifier of the OpenPGP key used to sign tarballs and such.
|
||
@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
|
||
@set KEY-SERVER pool.sks-keyservers.net
|
||
|
||
@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{} 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
|
||
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@*
|
||
Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
|
||
2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
|
||
Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
|
||
Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
|
||
Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
|
||
Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
|
||
Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
|
||
Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
|
||
@copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
|
||
Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
|
||
Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
|
||
@copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
|
||
Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
|
||
2018 Alex Vong@*
|
||
|
||
Vous avez la permission de copier, distribuer ou modifier ce document sous
|
||
les termes de la Licence GNU Free Documentation, version 1.3 ou toute
|
||
version ultérieure publiée par la Free Software Foundation ; sans section
|
||
invariante, texte de couverture et sans texte de quatrième de couverture.
|
||
Une copie de la licence est incluse dans la section intitulée « GNU Free
|
||
Documentation License ».
|
||
@end copying
|
||
|
||
@dircategory Administration système
|
||
@direntry
|
||
* Guix: (guix.fr). Gérer les logiciels installés et la
|
||
configuration du système.
|
||
* guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
|
||
mettre à jour des
|
||
paquets.
|
||
* guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
|
||
inutilisé.
|
||
* guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
|
||
paquets disponibles.
|
||
* guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
|
||
système d'exploitation.
|
||
@end direntry
|
||
|
||
@dircategory Développement logiciel
|
||
@direntry
|
||
* guix environment : (guix.fr)Invoquer guix environment. Construire des
|
||
environnements
|
||
de construction
|
||
avec Guix.
|
||
* guix build : (guix.fr)Invoquer guix build. Construire des paquets.
|
||
* guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
|
||
@end direntry
|
||
|
||
@titlepage
|
||
@title Manuel de référence de GNU Guix
|
||
@subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
|
||
@author Les développeurs de GNU Guix
|
||
|
||
@page
|
||
@vskip 0pt plus 1filll
|
||
Édition @value{EDITION} @* @value{UPDATED} @*
|
||
|
||
@insertcopying
|
||
@end titlepage
|
||
|
||
@contents
|
||
|
||
@c *********************************************************************
|
||
@node Top
|
||
@top GNU Guix
|
||
|
||
Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
|
||
gestion de paquets fonctionnel écrit pour le système GNU@.
|
||
|
||
@c TRANSLATORS: You can replace the following paragraph with information on
|
||
@c how to join your own translation team and how to report issues with the
|
||
@c translation.
|
||
Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
|
||
Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
|
||
zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
|
||
français, vous pouvez nous rejoindre sur le
|
||
@uref{https://translationproject.org/domain/guix-manual.html, projet de
|
||
traduction} et sur la liste de diffusion
|
||
@uref{https://listes.traduc.org/mailman/listinfo/traduc/,
|
||
traduc@@traduc.org}.
|
||
|
||
@menu
|
||
* Introduction:: Qu'est-ce que Guix ?
|
||
* Installation:: Installer Guix.
|
||
* Gestion de paquets:: Installation des paquets, mises à jour, etc.
|
||
* Interface de programmation:: Utiliser Guix en Scheme.
|
||
* Utilitaires:: Commandes de gestion de paquets.
|
||
* Distribution GNU:: Des logiciels pour un système GNU convivial.
|
||
* Contribuer:: Nous avons besoin de votre aide !
|
||
|
||
* Remerciements:: Merci !
|
||
* La licence GNU Free Documentation:: La licence de ce manuel.
|
||
* Index des concepts:: Les concepts.
|
||
* Index de programmation:: Types de données, fonctions et variables.
|
||
|
||
@detailmenu
|
||
--- Liste détaillée des nœuds ---
|
||
|
||
|
||
|
||
Installation
|
||
|
||
|
||
|
||
* Installation binaire:: Commencer à utiliser Guix en un rien de temps
|
||
!
|
||
* Prérequis:: Logiciels requis pour construire et lancer
|
||
Guix.
|
||
* Lancer la suite de tests:: Tester Guix.
|
||
* Paramétrer le démon:: Préparer l'environnement du démon de
|
||
construction.
|
||
* Invoquer guix-daemon:: Lancer le démon de construction.
|
||
* Réglages applicatifs:: Réglages spécifiques pour les application.
|
||
|
||
Paramétrer le démon
|
||
|
||
|
||
|
||
* Réglages de l'environnement de construction:: Préparer l'environnement
|
||
de construction isolé.
|
||
* Réglages du délestage du démon:: Envoyer des constructions à des
|
||
machines distantes.
|
||
* Support de SELinux:: Utiliser une politique SELinux pour le démon.
|
||
|
||
Gestion de paquets
|
||
|
||
|
||
|
||
* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
|
||
* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
|
||
* Substituts:: Télécharger des binaire déjà construits.
|
||
* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
|
||
résultats.
|
||
* Invoquer guix gc:: Lancer le ramasse-miettes.
|
||
* Invoquer guix pull:: Récupérer la dernière version de Guix et de
|
||
la distribution.
|
||
* Canaux:: Personnaliser la collection des paquets.
|
||
* Inférieurs:: Interagir avec une autre révision de Guix.
|
||
* Invoquer guix describe:: Affiche des informations sur la révision Guix
|
||
actuelle.
|
||
* Invoquer guix pack:: Créer des lots de logiciels.
|
||
* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
|
||
|
||
Substituts
|
||
|
||
|
||
|
||
* Serveur de substituts officiel:: Une source particulière de substituts.
|
||
* Autoriser un serveur de substituts:: Comment activer ou désactiver les
|
||
substituts.
|
||
* Authentification des substituts:: Coment 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 ?
|
||
|
||
Interface de programmation
|
||
|
||
|
||
|
||
* 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
|
||
dépôt.
|
||
* G-Expressions:: Manipuler les expressions de construction.
|
||
* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
|
||
|
||
Définition des paquets
|
||
|
||
|
||
|
||
* Référence de paquet:: Le type de donnée des paquets.
|
||
* Référence d'origine:: Le type de données d'origine.
|
||
|
||
Utilitaires
|
||
|
||
|
||
|
||
* Invoquer guix build:: Construire des paquets depuis la ligne de
|
||
commande.
|
||
* Invoquer guix edit:: Modifier les définitions de paquets.
|
||
* Invoquer guix download:: Télécharger un fichier et afficher son hash.
|
||
* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
|
||
* Invoquer guix import:: Importer des définitions de paquets.
|
||
* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
|
||
* Invoquer guix lint:: Trouver des erreurs dans les définitions de
|
||
paquets.
|
||
* Invoquer guix size:: Profiler l'utilisation du disque.
|
||
* Invoquer guix graph:: Visualiser le graphe des paquets.
|
||
* Invoquer guix 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.
|
||
* Invoquer guix container:: Isolation de processus.
|
||
* Invoquer guix weather:: Mesurer la disponibilité des substituts.
|
||
* Invoquer guix processes:: Lister les processus clients.
|
||
|
||
Invoquer @command{guix build}
|
||
|
||
|
||
|
||
* Options de construction communes:: Options de construction pour la
|
||
plupart des commandes.
|
||
* Options de transformation de paquets:: Créer des variantes de paquets.
|
||
* Options de construction supplémentaires:: Options spécifiques à «
|
||
guix build ».
|
||
* Débogage des échecs de construction:: La vie d'un empaqueteur.
|
||
|
||
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
|
||
|
||
|
||
|
||
* Utiliser le système de configuration:: Personnaliser votre système
|
||
GNU@.
|
||
* Référence de système d'exploitation:: Détail sur la déclaration de
|
||
système d'exploitation.
|
||
* Systèmes de fichiers:: Configurer les montages de systèmes de
|
||
fichiers.
|
||
* Périphériques mappés:: Gestion des périphériques de bloc.
|
||
* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
|
||
* Régionalisation:: Paramétrer la langue et les conventions
|
||
culturelles.
|
||
* Services:: Spécifier les services du système.
|
||
* Programmes setuid:: Programmes tournant avec les privilèges root.
|
||
* Certificats X.509:: Authentifier les serveurs HTTPS@.
|
||
* Name Service Switch:: Configurer le « name service switch » de la
|
||
libc.
|
||
* Disque de RAM initial:: Démarrage de Linux-Libre.
|
||
* Configuration du chargeur d'amorçage:: Configurer le chargeur
|
||
d'amorçage.
|
||
* Invoquer guix system:: Instantier une configuration du système.
|
||
* Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
|
||
virtuelle.
|
||
* Définir des services:: Ajouter de nouvelles définitions de services.
|
||
|
||
Services
|
||
|
||
|
||
|
||
* Services de base:: Services systèmes essentiels.
|
||
* Exécution de tâches planifiées:: Le service mcron.
|
||
* Rotation des journaux:: Le service rottlog.
|
||
* Services réseau:: Paramétres réseau, démon SSH, etc.
|
||
* Système de fenêtrage X:: Affichage graphique.
|
||
* Services d'impression:: Support pour les imprimantes locales et
|
||
distantes.
|
||
* Services de bureaux:: D-Bus et les services de bureaux.
|
||
* Services de son:: Services ALSA et Pulseaudio.
|
||
* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
|
||
* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
|
||
* Services de messagerie:: Services de messagerie.
|
||
* Services de téléphonie:: Services de téléphonie.
|
||
* Services de surveillance:: Services de surveillance.
|
||
* Services Kerberos:: Services Kerberos.
|
||
* Services web:: Services web.
|
||
* Services de certificats:: Certificats TLS via Let's Encrypt.
|
||
* Services DNS:: Démons DNS@.
|
||
* Services VPN:: Démons VPN
|
||
* Système de fichiers en réseau:: Services liés à NFS@.
|
||
* Intégration continue:: Le service Cuirass.
|
||
* Services de gestion de l'énergie:: Augmenter la durée de vie de la
|
||
batterie.
|
||
* Services audio:: MPD@.
|
||
* Services de virtualisation:: Services de virtualisation.
|
||
* Services de contrôle de version:: Fournit des accès distants à des
|
||
dépôts Git.
|
||
* Services de jeu:: Serveurs de jeu.
|
||
* Services divers:: D'autres services.
|
||
|
||
Définir des services
|
||
|
||
|
||
|
||
* Composition de services:: Le modèle de composition des services.
|
||
* Types service et services:: Types et services.
|
||
* Référence de service:: Référence de l'API@.
|
||
* Services Shepherd:: Un type de service particulier.
|
||
|
||
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
|
||
|
||
@c *********************************************************************
|
||
@node Introduction
|
||
@chapter Introduction
|
||
|
||
@cindex but
|
||
GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
|
||
« s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
|
||
outil de gestion de paquets pour le système GNU@. Guix facilite pour les
|
||
utilisateurs non privilégiés l'installation, la mise à jour et la
|
||
suppression de paquets, la restauration à un ensemble de paquets précédent,
|
||
la construction de paquets depuis les sources et plus généralement aide à la
|
||
création et à la maintenance d'environnements logiciels.
|
||
|
||
@cindex 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}).
|
||
@cindex démon de construction
|
||
Son @dfn{démon de construction} est responsable de la construction des
|
||
paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
|
||
téléchargement des binaires pré-construits depuis les sources autorisées
|
||
(@pxref{Substituts}).
|
||
|
||
@cindex extensibilité de la distribution
|
||
@cindex personnalisation, des paquets
|
||
Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
|
||
respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
|
||
libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
|
||
peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
|
||
indépendants (@pxref{Modules de paquets}). Il est aussi
|
||
@emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
|
||
définitions de paquets spécialisées à partir de définitions existantes, même
|
||
depuis la ligne de commande (@pxref{Options de transformation de paquets}).
|
||
|
||
@cindex 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
|
||
fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
|
||
processus de construction et d'installation des paquets est vu comme une
|
||
@emph{fonction} dans le sens mathématique du terme. Cette fonction a des
|
||
entrées (comme des scripts de construction, un compilateur et des
|
||
bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
|
||
son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
|
||
faire référence à des logiciels ou des scripts qui n'ont pas été
|
||
explicitement passés en entrée. Une fonction de construction produit
|
||
toujours le même résultat quand on lui donne le même ensemble d'entrée.
|
||
Elle ne peut pas modifier l'environnement du système en cours d'exécution
|
||
d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
|
||
des fichiers en dehors de ses répertoires de construction et
|
||
d'installation. Ce résultat s'obtient en lançant les processus de
|
||
construction dans des environnements isolés (ou des @dfn{conteneurs}) où
|
||
seules les entrées explicites sont visibles.
|
||
|
||
@cindex dépôt
|
||
Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
|
||
dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
|
||
(@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
|
||
dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
|
||
contient un hash de toutes les entrées utilisées pour construire le paquet ;
|
||
ainsi, changer une entrée donnera un nom de répertoire différent.
|
||
|
||
Cette approche est le fondement des fonctionnalités les plus importante de
|
||
Guix : le support des mises à jour des paquets et des retours en arrière
|
||
transactionnels, l'installation différenciée par utilisateur et le ramassage
|
||
de miettes pour les paquets (@pxref{Fonctionnalités}).
|
||
|
||
|
||
@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}.
|
||
|
||
@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.
|
||
|
||
Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
|
||
(@pxref{Invoquer guix pull}).
|
||
|
||
@menu
|
||
* Installation binaire:: Commencer à utiliser Guix en un rien de temps
|
||
!
|
||
* Prérequis:: Logiciels requis pour construire et lancer
|
||
Guix.
|
||
* Lancer la suite de tests:: Tester Guix.
|
||
* Paramétrer le démon:: Préparer l'environnement du démon de
|
||
construction.
|
||
* Invoquer guix-daemon:: Lancer le démon de construction.
|
||
* Réglages applicatifs:: Réglages spécifiques pour les application.
|
||
@end menu
|
||
|
||
@node Installation binaire
|
||
@section Installation binaire
|
||
|
||
@cindex installer Guix depuis les binaires
|
||
@cindex script d'installation
|
||
Cette section décrit comment intaller Guix sur un système quelconque depuis
|
||
un archive autonome qui fournit les binaires pour Guix et toutes ses
|
||
dépendances. C'est souvent plus rapide que d'installer depuis les sources,
|
||
ce qui est décrit dans les sections suivantes. Le seul pré-requis est
|
||
d'avoir GNU@tie{}tar et Xz.
|
||
|
||
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
|
||
@item
|
||
@cindex téléchargement du Guix binaire
|
||
Téléchargez l'archive binaire depuis
|
||
@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
|
||
où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
|
||
laquelle tourne déjà le noyau Linux, etc.
|
||
|
||
@c The following is somewhat duplicated in ``System Installation''.
|
||
Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
|
||
l'authenticité de l'archive avec, comme ceci :
|
||
|
||
@example
|
||
$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
|
||
$ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
|
||
@end example
|
||
|
||
Si cette commande échoue parce que vous n'avez pas la clef publique requise,
|
||
lancez cette commande pour l'importer :
|
||
|
||
@example
|
||
$ gpg --keyserver @value{KEY-SERVER} \
|
||
--recv-keys @value{OPENPGP-SIGNING-KEY-ID}
|
||
@end example
|
||
|
||
@noindent
|
||
@c end authentication part
|
||
et relancez la commande @code{gpg --verify}.
|
||
|
||
@item
|
||
Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
|
||
votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
|
||
tant que @code{root}, lancez :
|
||
|
||
@example
|
||
# cd /tmp
|
||
# tar --warning=no-timestamp -xf \
|
||
guix-binary-@value{VERSION}.@var{système}.tar.xz
|
||
# mv var/guix /var/ && mv gnu /
|
||
@end example
|
||
|
||
Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
|
||
deuxième dossier contient un profil pret à être utilisé pour @code{root}
|
||
(voir les étapes suivantes).
|
||
|
||
Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
|
||
écraserait ses propres fichiers essentiels.
|
||
|
||
L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
|
||
pas d'avertissement disant que « l'horodatage est trop vieux pour être
|
||
plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
|
||
précédents ; les versions récentes n'ont pas ce problème). Cela vient du
|
||
fait que les fichiers de l'archive ont pour date de modification zéro (ce
|
||
qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
|
||
contenu de l'archive ne dépende pas de la date de création, ce qui la rend
|
||
reproductible.
|
||
|
||
@item
|
||
Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
|
||
l'emplacement où @command{guix pull} installera les mises à jour
|
||
(@pxref{Invoquer guix pull}) :
|
||
|
||
@example
|
||
# mkdir -p ~root/.config/guix
|
||
# ln -sf /var/guix/profiles/per-user/root/current-guix \
|
||
~root/.config/guix/current
|
||
@end example
|
||
|
||
Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
|
||
variables d'environnement nécessaires :
|
||
|
||
@example
|
||
# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
|
||
source $GUIX_PROFILE/etc/profile
|
||
@end example
|
||
|
||
@item
|
||
Créez le groupe et les comptes utilisateurs pour les utilisateurs de
|
||
construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
|
||
|
||
@item
|
||
Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
|
||
|
||
Si votre distribution hôte utilise le système d'initialisation systemd, cela
|
||
peut se faire avec ces commandes :
|
||
|
||
@c Versions of systemd that supported symlinked service files are not
|
||
@c yet widely deployed, so we should suggest that users copy the service
|
||
@c files into place.
|
||
@c
|
||
@c See this thread for more information:
|
||
@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
|
||
|
||
@example
|
||
# cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
|
||
/etc/systemd/system/
|
||
# systemctl start guix-daemon && systemctl enable guix-daemon
|
||
@end example
|
||
|
||
Si votre distribution hôte utilise le système d'initialisation Upstart :
|
||
|
||
@example
|
||
# initctl reload-configuration
|
||
# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
|
||
/etc/init/
|
||
# start guix-daemon
|
||
@end example
|
||
|
||
Sinon, vous pouvez toujours démarrer le démon manuellement avec :
|
||
|
||
@example
|
||
# ~root/.config/guix/current/bin/guix-daemon \
|
||
--build-users-group=guixbuild
|
||
@end example
|
||
|
||
@item
|
||
Rendez la commande @command{guix} disponible pour les autres utilisateurs
|
||
sur la machine, par exemple avec :
|
||
|
||
@example
|
||
# mkdir -p /usr/local/bin
|
||
# cd /usr/local/bin
|
||
# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
|
||
@end example
|
||
|
||
C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
|
||
ici :
|
||
|
||
@example
|
||
# mkdir -p /usr/local/share/info
|
||
# cd /usr/local/share/info
|
||
# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
|
||
do ln -s $i ; done
|
||
@end example
|
||
|
||
Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
|
||
de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
|
||
Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
|
||
changer le chemin de recherche de Info).
|
||
|
||
@item
|
||
@cindex substituts, autorisations
|
||
Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
|
||
(@pxref{Substituts}), autorisez-les :
|
||
|
||
@example
|
||
# guix archive --authorize < \
|
||
~root/.config/guix/current/share/guix/hydra.gnu.org.pub
|
||
@end example
|
||
|
||
@item
|
||
Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
|
||
pour que leur environnement Guix soit prêt à être utilisé,
|
||
@pxref{Réglages applicatifs}.
|
||
@end enumerate
|
||
|
||
Voilà, l'installation est terminée !
|
||
|
||
Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
|
||
dans le profil de root :
|
||
|
||
@example
|
||
# guix package -i hello
|
||
@end example
|
||
|
||
Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
|
||
ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
|
||
retrouveriez gravement handicapé par l'absence de la commande
|
||
@command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
|
||
@code{guix package -r guix}.
|
||
|
||
L'archive d'installation binaire peut être (re)produite et vérifiée
|
||
simplement en lançaint la commande suivante dans l'arborescence des sources
|
||
de Guix :
|
||
|
||
@example
|
||
make guix-binary.@var{system}.tar.xz
|
||
@end example
|
||
|
||
@noindent
|
||
...@: which, in turn, runs:
|
||
|
||
@example
|
||
guix pack -s @var{system} --localstatedir \
|
||
--profile-name=current-guix guix
|
||
@end example
|
||
|
||
@xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
|
||
|
||
@node Prérequis
|
||
@section Prérequis
|
||
|
||
Cette section dresse la liste des pré-requis pour la construction de Guix
|
||
depuis les sources. La procédure de construction pour Guix est la même que
|
||
pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
|
||
fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
|
||
Guix pour plus de détails.
|
||
|
||
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{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
|
||
0.1.0 ou supérieure,
|
||
@item
|
||
@uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
|
||
(@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
|
||
gnutls-guile, GnuTLS-Guile}),
|
||
@item
|
||
@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
|
||
version 0.1.0 ou supérieure,
|
||
@item
|
||
@c FIXME: Specify a version number once a release has been made.
|
||
@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
|
||
ultérieur,
|
||
@item @url{http://zlib.net, zlib},
|
||
@item @url{http://www.gnu.org/software/make/, GNU Make}.
|
||
@end itemize
|
||
|
||
Les dépendances suivantes sont facultatives :
|
||
|
||
@itemize
|
||
@item
|
||
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.
|
||
|
||
@item
|
||
Lorsque @url{http://www.bzip.org, libbz2} est disponible,
|
||
@command{guix-daemon} peut l'utiliser pour compresser les journaux de
|
||
construction.
|
||
@end itemize
|
||
|
||
À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
|
||
paquets suivants sont aussi requis :
|
||
|
||
@itemize
|
||
@item @url{http://gnupg.org/, GNU libgcrypt},
|
||
@item @url{http://sqlite.org, SQLite 3},
|
||
@item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
|
||
standard C++11.
|
||
@end itemize
|
||
|
||
@cindex répertoire d'état
|
||
Lorsque vous configurez Guix sur un système qui a déjà une installation de
|
||
Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
|
||
existante avec l'option @code{--localstatedir} du script @command{configure}
|
||
(@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
|
||
Standards}). Le script @command{configure} vous protège des mauvaises
|
||
configurations involontaires de @var{localstatedir} pour éviter que vous ne
|
||
corrompiez votre dépôt (@pxref{Le dépôt}).
|
||
|
||
@cindex Nix, compatibilité
|
||
Lorsque vous avez une installation fonctionnelle du
|
||
@url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
|
||
configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
|
||
trois dépendances au dessus.
|
||
|
||
Guix est compatible avec Nix, donc il est possible de partager le même dépôt
|
||
entre les deux. Pour cela, vous devez passer à @command{configure} non
|
||
seulement la même valeur de @code{--with-store-dir} mais aussi la même
|
||
valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
|
||
spécifie l'emplacement de la base de données qui stocke les métadonnées sur
|
||
le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
|
||
@code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
|
||
Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
|
||
partager le dépôt avec Nix.
|
||
|
||
@node Lancer la suite de tests
|
||
@section Lancer la suite de tests
|
||
|
||
@cindex suite de tests
|
||
Après avoir lancé @command{configure} et @code{make} correctement, c'est une
|
||
bonne idée de lancer la suite de tests. Elle peut aider à trouver des
|
||
erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
|
||
lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
|
||
d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
|
||
|
||
@example
|
||
make check
|
||
@end example
|
||
|
||
Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
|
||
l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
|
||
lancement peut prendre plusieurs minutes sur une machine récente ; les
|
||
lancements suivants seront plus rapides car le dépôt créé pour les tests
|
||
aura déjà plusieurs choses en cache.
|
||
|
||
Il est aussi possible de lancer un sous-ensemble des tests en définissant la
|
||
variable makefile @code{TESTS} comme dans cet exemple :
|
||
|
||
@example
|
||
make check TESTS="tests/store.scm tests/cpio.scm"
|
||
@end example
|
||
|
||
Par défaut, les résultats des tests sont affichés au niveau du fichier.
|
||
Pour voir les détails de chaque cas de test individuel, il est possible de
|
||
définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
|
||
exemple :
|
||
|
||
@example
|
||
make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
|
||
@end example
|
||
|
||
Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
|
||
le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
|
||
ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
|
||
dans votre message.
|
||
|
||
Guix possède aussi une suite de tests de systèmes complets qui test des
|
||
instances complètes du système d'exploitation GuixSD@. Elle ne peut être
|
||
lancée qui sur un système où Guix est déjà installé, avec :
|
||
|
||
@example
|
||
make check-system
|
||
@end example
|
||
|
||
@noindent
|
||
Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
|
||
des tests à lancer :
|
||
|
||
@example
|
||
make check-system TESTS="basic mcron"
|
||
@end example
|
||
|
||
Ces tests systèmes sont définis dans les modules @code{(gnu tests
|
||
@dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
|
||
avec une instrumentation légère dans une machine virtuelle (VM). Ils
|
||
peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
|
||
la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
|
||
Certains requièrent beaucoup d'espace disque pour contenir les images des
|
||
VM@.
|
||
|
||
De nouveau, en cas d'échec, envoyez tous les détails à
|
||
@email{bug-guix@@gnu.org}.
|
||
|
||
@node Paramétrer le démon
|
||
@section Paramétrer le démon
|
||
|
||
@cindex démon
|
||
Les opérations comme la construction d'un paquet ou le lancement du
|
||
ramasse-miettes sont toutes effectuées par un processus spécialisé, le
|
||
@dfn{démon de construction}, pour le compte des clients. Seul le démon peut
|
||
accéder au dépôt et à sa base de données associée. Ainsi, toute opération
|
||
manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
|
||
commande comme @command{guix package} et @command{guix build} communiquent
|
||
avec le démon (@i{via} des appels de procédures distantes) pour lui dire
|
||
quoi faire.
|
||
|
||
Les sections suivantes expliquent comment préparer l'environnement du démon
|
||
de construction. Voir aussi @ref{Substituts} pour apprendre comment
|
||
permettre le téléchargement de binaires pré-construits.
|
||
|
||
@menu
|
||
* Réglages de l'environnement de construction:: Préparer l'environnement
|
||
de construction isolé.
|
||
* Réglages du délestage du démon:: Envoyer des constructions à des
|
||
machines distantes.
|
||
* Support de SELinux:: Utiliser une politique SELinux pour le démon.
|
||
@end menu
|
||
|
||
@node Réglages de l'environnement de construction
|
||
@subsection Réglages de l'environnement de construction
|
||
|
||
@cindex environnement de construction
|
||
Dans une installation standard multi-utilisateurs, Guix et son démon — le
|
||
programme @command{guix-daemon} — sont installé par l'administrateur système
|
||
; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
|
||
lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
|
||
outils Guix pour construire des paquets ou accéder au dépôt et le démon le
|
||
fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
|
||
permet le partage des paquets déjà construits entre les utilisateurs.
|
||
|
||
@cindex utilisateurs de construction
|
||
Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
|
||
forcément envie que les processus de construction de paquets tournent aussi
|
||
en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
|
||
vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
|
||
que les processus de construction démarrés par le démon utiliseront. Ces
|
||
utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
|
||
personnel ; ils seront seulement utilisés quand le démon délaissera ses
|
||
privilèges @code{root} dans les processus de construction. En ayant
|
||
plusieurs de ces utilisateurs, vous permettez au démon de lancer des
|
||
processus de construction distincts sous des UID différent, ce qui garanti
|
||
qu'aucune interférence n'ait lieu entre les uns et les autres — une
|
||
fonctionnalité essentielle puisque les constructions sont supposées être des
|
||
fonctions pures (@pxref{Introduction}).
|
||
|
||
Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
|
||
construction comme ceci (avec la syntaxe Bash et les commandes
|
||
@code{shadow}) :
|
||
|
||
@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
|
||
@c for why `-G' is needed.
|
||
@example
|
||
# groupadd --system guixbuild
|
||
# for i in `seq -w 1 10`;
|
||
do
|
||
useradd -g guixbuild -G guixbuild \
|
||
-d /var/empty -s `which nologin` \
|
||
-c "Utilisateur de construction Guix $i" --system \
|
||
guixbuilder$i;
|
||
done
|
||
@end example
|
||
|
||
@noindent
|
||
Le nombre d'utilisateurs de construction détermine le nombre de tâches de
|
||
constructions qui peuvent tourner en parallèle, tel que spécifié par
|
||
l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
|
||
@option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
|
||
commandes liées, vous devrez ajouter les utilisateurs de construction au
|
||
groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
|
||
@code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
|
||
|
||
Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
|
||
la commande suivante@footnote{Si votre machine utilise le système
|
||
d'initialisation systemd, copiez le fichier
|
||
@file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
|
||
@file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
|
||
démarré automatiquement. De même, si votre machine utilise le système
|
||
d'initialisation Upstart, copiez le fichier
|
||
@file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
|
||
@file{/etc/init}.} :
|
||
|
||
@example
|
||
# guix-daemon --build-users-group=guixbuild
|
||
@end example
|
||
|
||
@cindex chroot
|
||
@noindent
|
||
De cette façon, le démon démarre les processus de construction dans un
|
||
chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
|
||
défaut, l'environnement chroot ne contient rien d'autre que :
|
||
|
||
@c Keep this list in sync with libstore/build.cc! -----------------------
|
||
@itemize
|
||
@item
|
||
un répertoire @code{/dev} minimal, créé presque indépendamment du
|
||
@code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
|
||
fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
|
||
l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
|
||
a pas.} ;
|
||
|
||
@item
|
||
le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
|
||
on utilise une espace de nom séparé pour les PID ;
|
||
|
||
@item
|
||
@file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
|
||
pour l'utilisateur @file{nobody} ;
|
||
|
||
@item
|
||
@file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
|
||
|
||
@item
|
||
@file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
|
||
@code{127.0.0.1} ;
|
||
|
||
@item
|
||
un répertoire @file{/tmp} inscriptible.
|
||
@end itemize
|
||
|
||
Vous pouvez influencer le répertoire où le démon stocke les arbres de
|
||
construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
|
||
l'arbre de construction dans le chroot sera toujours appelé
|
||
@file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
|
||
dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
|
||
@code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
|
||
ce qui évite des différences lorsque le processus de construction retient le
|
||
nom de leur répertoire de construction.
|
||
|
||
@vindex http_proxy
|
||
Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
|
||
pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
|
||
fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
|
||
|
||
Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
|
||
toujours possible de lancer @command{guix-daemon} si vous passez
|
||
@code{--disable-chroot}. Cependant, les processus de construction ne seront
|
||
pas isolés les uns des autres ni du reste du système. Ainsi les processus
|
||
de construction peuvent interférer les uns avec les autres, et peuvent
|
||
accéder à des programmes, des bibliothèques et d'autres fichiers présents
|
||
sur le système — ce qui rend plus difficile de les voir comme des fonctions
|
||
@emph{pures}.
|
||
|
||
|
||
@node Réglages du délestage du démon
|
||
@subsection Utiliser le dispositif de déchargement
|
||
|
||
@cindex déchargement
|
||
@cindex crochet de construction
|
||
Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
|
||
constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
|
||
de construction} @code{offload}@footnote{Cette fonctionnalité n'est
|
||
disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
|
||
Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
|
||
lit une liste de machines de constructions spécifiée par l'utilisateur dans
|
||
@file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
|
||
demandée, par exemple par @code{guix build}, le démon essaie de la décharger
|
||
sur une des machines qui satisfont les contraintes de la dérivation, en
|
||
particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
|
||
prérequis manquants pour la construction sont copiés par SSH sur la machine
|
||
de construction qui procède ensuite à la construction ; si elle réussi, les
|
||
sorties de la construction sont copiés vers la machine de départ.
|
||
|
||
Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
|
||
|
||
@example
|
||
(list (build-machine
|
||
(name "eightysix.example.org")
|
||
(system "x86_64-linux")
|
||
(host-key "ssh-ed25519 AAAAC3Nza@dots{}")
|
||
(user "bob")
|
||
(speed 2.)) ;très rapide !
|
||
|
||
(build-machine
|
||
(name "meeps.example.org")
|
||
(system "mips64el-linux")
|
||
(host-key "ssh-rsa AAAAB3Nza@dots{}")
|
||
(user "alice")
|
||
(private-key
|
||
(string-append (getenv "HOME")
|
||
"/.ssh/identity-for-guix"))))
|
||
@end example
|
||
|
||
@noindent
|
||
Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
|
||
construction, une pour l'architecture @code{x86_64} et une pour
|
||
l'architecture @code{mips64el}.
|
||
|
||
En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
|
||
fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
|
||
valeur de retour doit être une liste d'objets @code{build-machine}. Même si
|
||
cet exemple montre une liste fixée de machines de construction, on pourrait
|
||
imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
|
||
constructions potentielles découvertes sur le réseau local
|
||
(@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
|
||
Programs}). Le type de données @code{build-machine} est détaillé plus bas.
|
||
|
||
@deftp {Type de données} build-machine
|
||
Ce type de données représente les machines de construction sur lesquelles le
|
||
démon peut décharger des constructions. Les champs importants sont :
|
||
|
||
@table @code
|
||
|
||
@item name
|
||
Le nom d'hôte de la machine distante.
|
||
|
||
@item system
|
||
Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
|
||
|
||
@item user
|
||
Le compte utilisateur à utiliser lors de la connexion à la machine distante
|
||
par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
|
||
protégée par mot de passe pour permettre des connexions non-interactives.
|
||
|
||
@item host-key
|
||
Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
|
||
OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
|
||
connexion. C'est une longue chaîne qui ressemble à cela :
|
||
|
||
@example
|
||
ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
|
||
@end example
|
||
|
||
Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
|
||
trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
|
||
|
||
Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
|
||
@file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
|
||
convertie au format OpenSSH avec @command{lsh-export-key}
|
||
(@pxref{Converting keys,,, lsh, LSH Manual}) :
|
||
|
||
@example
|
||
$ lsh-export-key --openssh < /etc/lsh/host-key.pub
|
||
ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
|
||
@end example
|
||
|
||
@end table
|
||
|
||
Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
|
||
|
||
@table @asis
|
||
|
||
@item @code{port} (par défaut : @code{22})
|
||
Numéro de port du serveur SSH sur la machine.
|
||
|
||
@item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
|
||
Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
|
||
au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
|
||
passe.
|
||
|
||
Remarquez que la valeur par défaut est la clef privée @emph{du compte
|
||
root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
|
||
|
||
@item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
|
||
@itemx @code{compression-level} (par défaut : @code{3})
|
||
Les méthodes de compression au niveau SSH et le niveau de compression
|
||
demandé.
|
||
|
||
Remarquez que le déchargement utilise la compression SSH pour réduire la
|
||
bande passante utilisée lors du transfert vers et depuis les machines de
|
||
construction.
|
||
|
||
@item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
|
||
Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
|
||
écoute sur cette machine.
|
||
|
||
@item @code{parallel-builds} (par défaut : @code{1})
|
||
Le nombre de constructions qui peuvent tourner simultanément sur la machine.
|
||
|
||
@item @code{speed} (par défaut : @code{1.0})
|
||
Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
|
||
à préférer les machines avec un plus grand facteur de vitesse.
|
||
|
||
@item @code{features} (par défaut : @code{'()})
|
||
Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
|
||
par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
|
||
module Linux KVM et le support matériel correspondant. Les dérivations
|
||
peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
|
||
les machines de construction correspondantes.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
La commande @code{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 :
|
||
|
||
@example
|
||
ssh build-machine guile -c "'(use-modules (guix config))'"
|
||
@end example
|
||
|
||
Il reste une dernière chose à faire maintenant que @file{machines.scm} est
|
||
en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
|
||
transférés entre les dépôts des machines. Pour que cela fonctionne, vous
|
||
devez d'abord générer une paire de clef sur chaque machine pour permettre au
|
||
démon d'exporter des archives signées des fichiers de son dépôt
|
||
(@pxref{Invoquer guix archive}) :
|
||
|
||
@example
|
||
# guix archive --generate-key
|
||
@end example
|
||
|
||
@noindent
|
||
Chaque machine de construction doit autoriser la clef de la machine
|
||
maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
|
||
|
||
@example
|
||
# guix archive --authorize < master-public-key.txt
|
||
@end example
|
||
|
||
@noindent
|
||
De même, la machine maîtresse doit autoriser les clefs de chaque machine de
|
||
construction.
|
||
|
||
Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
|
||
deux-à-deux entre le maître et les machines de construction. Concrètement,
|
||
lorsque le maître reçoit des fichiers d'une machine de construction (et
|
||
vice-versa), son démon de construction s'assure qu'ils sont authentiques,
|
||
n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
|
||
autorisée.
|
||
|
||
@cindex test du déchargement
|
||
Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
|
||
nœud maître :
|
||
|
||
@example
|
||
# guix offload test
|
||
@end example
|
||
|
||
Cela essaiera de se connecter à toutes les machines de construction
|
||
spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
|
||
modules Guix sont disponibles sur toutes les machines et tentera d'exporter
|
||
vers la machine et d'importer depuis elle, et rapportera toute erreur
|
||
survenu pendant le processus.
|
||
|
||
Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
|
||
la ligne de commande :
|
||
|
||
@example
|
||
# guix offload test machines-qualif.scm
|
||
@end example
|
||
|
||
Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
|
||
correspond à une expression rationnelle comme ceci :
|
||
|
||
@example
|
||
# guix offload test machines.scm '\.gnu\.org$'
|
||
@end example
|
||
|
||
@cindex statut du déchargement
|
||
Pour afficher la charge actuelle de tous les hôtes de construction, lancez
|
||
cette commande sur le nœud principal :
|
||
|
||
@example
|
||
# guix offload status
|
||
@end example
|
||
|
||
|
||
@node Support de SELinux
|
||
@subsection Support de SELinux
|
||
|
||
@cindex SELinux, politique du démon
|
||
@cindex contrôle d'accès obligatoire, SELinux
|
||
@cindex sécurité, guix-daemon
|
||
Guix inclus un fichier de politique 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@.
|
||
|
||
@subsubsection Installer la politique SELinux
|
||
@cindex SELinux, installation de la politique
|
||
Pour installer la politique, lancez cette commande en root :
|
||
|
||
@example
|
||
semodule -i etc/guix-daemon.cil
|
||
@end example
|
||
|
||
Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
|
||
mécanisme différent fournit par votre système.
|
||
|
||
Une fois la politique installée, le système de fichier ré-étiqueté et le
|
||
démon redémarré, il devrait être lancé dans le contexte
|
||
@code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
|
||
|
||
@example
|
||
ps -Zax | grep guix-daemon
|
||
@end example
|
||
|
||
Surveillez les fichiers journaux de SELinux pendant que vous lancez une
|
||
commande comme @code{guix build hello} pour vous convaincre que SELniux
|
||
permet toutes les opérations nécessaires.
|
||
|
||
@subsubsection Limitations
|
||
@cindex SELinux, limites
|
||
|
||
La politique n'et pas parfaite. Voici une liste de limitations et de
|
||
bizarreries qui vous devriez prendre en compte avant de déployer la
|
||
politique SELinux fournie pour le démon Guix.
|
||
|
||
@enumerate
|
||
@item
|
||
@code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
|
||
opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
|
||
soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
|
||
une étiquette inutilisée, mais il serait préférable de définir des règles
|
||
sur les sockets uniquement pour cette étiquette.
|
||
|
||
@item
|
||
@code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
|
||
Par conception, l'étiquette de fichier de la destination d'un lien
|
||
symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
|
||
les profils sous $localstatedir aient une étiquette, les liens vers ces
|
||
profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
|
||
Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
|
||
Mais pour les liens du répertoire personnel de l'utilisateur root, ou
|
||
@file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
|
||
fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
|
||
ces liens.
|
||
|
||
@item
|
||
La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
|
||
fonctionner. Cela demande des règles supplémentaires car SELinux traite les
|
||
sockets réseau différemment des fichiers.
|
||
|
||
@item
|
||
Actuellement tous les fichiers qui correspondent à l'expression rationnelle
|
||
@code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
|
||
@code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
|
||
nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
|
||
@code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
|
||
un paquet qui fournit cet exécutable et convaincre un utilisateur de
|
||
l'installer et de le lancer, ce qui l'élève dans le domaine
|
||
@code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
|
||
d'accéder à des fichiers autorisés pour les processus de ce domaine.
|
||
|
||
Nous pourrions générer une politique bien plus restrictive à l'installation,
|
||
pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
|
||
@code{guix-daemon} actuellement installé soit étiqueté avec
|
||
@code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
|
||
plus large. L'inconvénient c'est que root devrait installer ou mettre à
|
||
jour la politique à l'installation à chaque fois que le paquet Guix qui
|
||
fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
|
||
jour.
|
||
@end enumerate
|
||
|
||
@node Invoquer guix-daemon
|
||
@section Invoquer @command{guix-daemon}
|
||
|
||
Le programme @command{guix-daemon} implémente toutes les fonctionnalités
|
||
d'accès au dépôt. Cela inclus le lancement des processus de construction,
|
||
le lancement du ramasse-miettes, la demande de disponibilité des résultats
|
||
de construction, etc. Il tourne normalement en @code{root} comme ceci :
|
||
|
||
@example
|
||
# guix-daemon --build-users-group=guixbuild
|
||
@end example
|
||
|
||
@noindent
|
||
Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
|
||
|
||
@cindex chroot
|
||
@cindex conteneur, environnement de construction
|
||
@cindex environnement de construction
|
||
@cindex constructions reproductibles
|
||
Par défaut, @command{guix-daemon} lance les processus de construction sous
|
||
différents UID récupérés depuis le groupe de construction spécifié avec
|
||
@code{--build-users-group}. En plus, chaque processus de construction est
|
||
lancé dans un environnement chroot qui ne contient que le sous-ensemble du
|
||
dépôt dont le processus de construction dépend, tel que spécifié par sa
|
||
dérivation (@pxref{Interface de programmation, dérivation}), plus un
|
||
ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
|
||
contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
|
||
l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
|
||
propre arborescence du système de fichier, elle a un espace de montage
|
||
séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
|
||
obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
|
||
|
||
Lorsque le démon effectue une construction pour le compte de l'utilisateur,
|
||
il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
|
||
variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
|
||
conteneur pendant la durée de la construction, bien que dans le conteneur,
|
||
l'arborescence de construction est toujours appelée
|
||
@file{/tmp/guix-build-@var{name}.drv-0}.
|
||
|
||
Le répertoire de construction est automatiquement supprimé à la fin, à moins
|
||
que la construction n'ait échoué et que le client ait spécifié
|
||
@option{--keep-failed} (@pxref{Invoquer guix build,
|
||
@option{--keep-failed}}).
|
||
|
||
Le démon écoute les connexions et démarre un sous-processus pour chaque
|
||
session démarrée par un client (l'une des sous-commandes de
|
||
@command{guix}). La commande @command{guix processes} vous permet d'obtenir
|
||
un aperçu de l'activité sur votre système en affichant chaque session et
|
||
client actif. @xref{Invoquer guix processes} pour plus d'informations.
|
||
|
||
Les options en ligne de commande suivantes sont disponibles :
|
||
|
||
@table @code
|
||
@item --build-users-group=@var{groupe}
|
||
Prendre les utilisateurs de @var{group} pour lancer les processus de
|
||
construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
|
||
|
||
@item --no-substitutes
|
||
@cindex substituts
|
||
Ne pas utiliser de substitut pour les résultats de la construction.
|
||
C'est-à-dire, toujours construire localement plutôt que de permettre le
|
||
téléchargement de binaires pré-construits (@pxref{Substituts}).
|
||
|
||
Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
|
||
toujours activer explicitement la substitution @i{via} l'appel de procédure
|
||
distante @code{set-build-options} (@pxref{Le dépôt}).
|
||
|
||
@item --substitute-urls=@var{urls}
|
||
@anchor{daemon-substitute-urls}
|
||
Considèrer @var{urls} comme la liste séparée par des espaces des URL des
|
||
sources de substituts par défaut. Lorsque cette option est omise,
|
||
@indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
|
||
(@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
|
||
|
||
Cela signifie que les substituts sont téléchargés depuis les @var{urls},
|
||
tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
|
||
|
||
@cindex crochet de construction
|
||
@item --no-build-hook
|
||
Ne pas utiliser le @dfn{crochet de construction}.
|
||
|
||
Le crochet de construction est un programme d'aide qui le démon peut
|
||
démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
|
||
utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
|
||
|
||
@item --cache-failures
|
||
Mettre les échecs de construction en cache. Par défaut, seules les
|
||
constructions réussies sont mises en cache.
|
||
|
||
Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
|
||
être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
|
||
échoués ; @command{guix gc --clear-failures} vide la liste des éléments
|
||
aillant échoué. @xref{Invoquer guix gc}.
|
||
|
||
@item --cores=@var{n}
|
||
@itemx -c @var{n}
|
||
Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
|
||
signifie autant que possible.
|
||
|
||
La valeur par défaut est @code{0}, mais elle peut être modifiée par les
|
||
clients comme avec l'option @code{--cores} de @command{guix build}
|
||
(@pxref{Invoquer guix build}).
|
||
|
||
L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
|
||
dans le processus de construction, qui peut ensuite l'utiliser pour
|
||
exploiter le parallélisme en interne — par exemple en lançant @code{make
|
||
-j$NIX_BUILD_CORES}.
|
||
|
||
@item --max-jobs=@var{n}
|
||
@itemx -M @var{n}
|
||
Permettre au plus @var{n} travaux de construction en parallèle. La valeur
|
||
par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
|
||
construction ne sera effectuée localement ; à la place, le démon déchargera
|
||
les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
|
||
|
||
@item --max-silent-time=@var{secondes}
|
||
Lorsque le processus de construction ou de substitution restent silencieux
|
||
pendant plus de @var{secondes}, le terminer et rapporter une erreur de
|
||
construction.
|
||
|
||
La valeur par défaut est @code{0}, ce qui désactive le délai.
|
||
|
||
La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
|
||
|
||
@item --timeout=@var{secondes}
|
||
De même, lorsque le processus de construction ou de substitution dure plus
|
||
de @var{secondes}, le terminer et rapporter une erreur de construction.
|
||
|
||
La valeur par défaut est @code{0}, ce qui désactive le délai.
|
||
|
||
La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
|
||
|
||
@item --rounds=@var{N}
|
||
Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
|
||
si les résultats de construction consécutifs ne sont pas identiques
|
||
bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
|
||
comme @command{guix build} (@pxref{Invoquer guix build}).
|
||
|
||
Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
|
||
dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
|
||
l'étude des différences entre les deux résultats.
|
||
|
||
@item --debug
|
||
Produire une sortie de débogage.
|
||
|
||
Cela est utile pour déboguer des problèmes de démarrage du démon, mais
|
||
ensuite elle peut être modifiée par les clients, par exemple par l'option
|
||
@code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
|
||
|
||
@item --chroot-directory=@var{rép}
|
||
Ajouter @var{rép} au chroot de construction
|
||
|
||
Cela peut changer le résultat d'un processus de construction — par exemple
|
||
s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
|
||
est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
|
||
d'utiliser cette option. À la place, assurez-vous que chaque dérivation
|
||
déclare toutes les entrées dont elle a besoin.
|
||
|
||
@item --disable-chroot
|
||
Désactive les constructions dans un chroot.
|
||
|
||
Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
|
||
processus de construction d'accéder à des dépendances non déclarées. Elle
|
||
est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
|
||
qu'utilisateur non privilégié.
|
||
|
||
@item --log-compression=@var{type}
|
||
Compresser les journaux de construction suivant le @var{type}, parmi
|
||
@code{gzip}, @code{bzip2} ou @code{none}.
|
||
|
||
À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
|
||
construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
|
||
le démon les compresse automatiquement avec bzip2 par défaut.
|
||
|
||
@item --disable-deduplication
|
||
@cindex déduplication
|
||
Désactiver la « déduplication » automatique des fichiers dans le dépôt.
|
||
|
||
Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
|
||
» : si un nouveau fichier est identique à un autre fichier trouvé dans le
|
||
dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
|
||
considérablement l'utilisation de l'espace disque au prix d'une charge en
|
||
entrée/sortie plus grande à la fin d'un processus de construction. Cette
|
||
option désactive cette optimisation.
|
||
|
||
@item --gc-keep-outputs[=yes|no]
|
||
Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
|
||
utilisées.
|
||
|
||
@cindex racines du GC
|
||
@cindex racines du ramasse-miettes
|
||
Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
|
||
dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
|
||
valeur par défaut est « no », ce qui signifie que les sorties des
|
||
dérivations ne sont gardées que si elles sont accessibles à partir d'une
|
||
racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
|
||
racines du GC.
|
||
|
||
@item --gc-keep-derivations[=yes|no]
|
||
Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
|
||
des sorties utilisées.
|
||
|
||
Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
|
||
dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
|
||
leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
|
||
trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
|
||
peu d'espace disque.
|
||
|
||
De cette manière, avec @code{--gc-keep-derivations} à « yes »,
|
||
l'accessibilité des sorties s'étend des sorties aux dérivations et avec
|
||
@code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
|
||
sorties. Quand les deux options sont à « yes », le GC gardera tous les
|
||
prérequis de construction (les sources, le compilateur, les bibliothèques,
|
||
et les autres outils de construction) des objets accessibles dans le dépôt,
|
||
indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
|
||
GC. Cela est pratique pour les développeurs car ça leur fait gagner du
|
||
temps de reconstruction et de téléchargement.
|
||
|
||
@item --impersonate-linux-2.6
|
||
Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
|
||
signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
|
||
numéro de version.
|
||
|
||
Cela peut être utile pour construire des programmes qui dépendent
|
||
(généralement sans fondement) du numéro de version du noyau.
|
||
|
||
@item --lose-logs
|
||
Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
|
||
@code{@var{localstatedir}/guix/log}.
|
||
|
||
@item --system=@var{système}
|
||
Supposer que @var{système} est le type de système actuel. Par défaut c'est
|
||
la paire architecture-noyau trouvée à la configuration, comme
|
||
@code{x86_64-linux}.
|
||
|
||
@item --listen=@var{extrémité}
|
||
Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
|
||
comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
|
||
(barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
|
||
domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
|
||
|
||
@table @code
|
||
@item --listen=/gnu/var/daemon
|
||
Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
|
||
le créant si besoin.
|
||
|
||
@item --listen=localhost
|
||
@cindex démon, accès distant
|
||
@cindex accès distant au démon
|
||
@cindex démon, paramètres de grappes
|
||
@cindex grappes, paramètres du démon
|
||
Écouter les connexions TCP sur l'interface réseau correspondant à
|
||
@code{localhost} sur le port 44146.
|
||
|
||
@item --listen=128.0.0.42:1234
|
||
Écouter les connexions TCP sur l'interface réseau correspondant à
|
||
@code{128.0.0.42} sur le port 1234.
|
||
@end table
|
||
|
||
Cette option peut être répétée plusieurs fois, auquel cas
|
||
@command{guix-daemon} accepte des connexions sur toutes les extrémités
|
||
spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
|
||
extrémité se connecter en paramétrant la variable d'environnement
|
||
@code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
|
||
|
||
@quotation Remarque
|
||
Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
|
||
@code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
|
||
grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
|
||
démon de construction. Dans les autres cas où l'accès à distance au démon
|
||
est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
|
||
@end quotation
|
||
|
||
Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
|
||
connexions sur le socket Unix-domain situé à
|
||
@file{@var{localstatedir}/guix/daemon-socket/socket}.
|
||
@end table
|
||
|
||
|
||
@node Réglages applicatifs
|
||
@section Réglages applicatifs
|
||
|
||
@cindex distro 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.
|
||
|
||
@subsection Régionalisation
|
||
|
||
@anchor{locales-and-locpath}
|
||
@cindex régionalisation, en dehors de GuixSD
|
||
@vindex LOCPATH
|
||
@vindex GUIX_LOCPATH
|
||
Les paquets installés @i{via} Guix n'utiliseront pas les données de
|
||
régionalisation du système hôte. À la place, vous devrez d'abord installer
|
||
l'un des paquets linguistiques disponibles dans Guix puis définir la
|
||
variable d'environnement @code{GUIX_LOCPATH} :
|
||
|
||
@example
|
||
$ guix package -i glibc-locales
|
||
$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
|
||
@end example
|
||
|
||
Remarquez que le paquet @code{glibc-locales} contient les données pour tous
|
||
les environnement linguistiques supportés par la GNU@tie{}libc et pèse
|
||
environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
|
||
petit mais limité à quelques environnements UTF-8.
|
||
|
||
La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
|
||
(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
|
||
Manual}). Il y a deux différences importantes cependant :
|
||
|
||
@enumerate
|
||
@item
|
||
@code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
|
||
libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
|
||
vous permet de vous assurer que les programmes de la distro externe ne
|
||
chargeront pas de données linguistiques incompatibles.
|
||
|
||
@item
|
||
La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
|
||
@code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
|
||
@code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
|
||
de programmes liés avec des versions différentes de la libc, chaque version
|
||
de la libc essaiera de charger les environnements linguistiques dans le bon
|
||
format.
|
||
@end enumerate
|
||
|
||
Cela est important car le format des données linguistiques utilisés par
|
||
différentes version de la libc peuvent être incompatibles.
|
||
|
||
@subsection Name Service Switch
|
||
|
||
@cindex name service switch, glibc
|
||
@cindex NSS (name service switch), glibc
|
||
@cindex nscd (name service caching daemon)
|
||
@cindex name service caching daemon (nscd)
|
||
Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
|
||
fortement} que ce système fasse tourner le @dfn{démon de cache de service de
|
||
noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
|
||
le socket @file{/var/run/nscd/socket}. Sans cela, les applications
|
||
installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
|
||
d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
|
||
pourquoi.
|
||
|
||
@cindex @file{nsswitch.conf}
|
||
La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
|
||
est un mécanisme d'extension pour les « résolutions de noms » en général :
|
||
résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
|
||
|
||
@cindex Network information service (NIS)
|
||
@cindex NIS (Network information service)
|
||
Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
|
||
nouvelle implémentation de résolution de nom : par exemple le greffon
|
||
@code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
|
||
greffon @code{nis} permet la résolution de comptes utilisateurs avec le
|
||
Network Information Service (NIS), etc. Ces « services de recherches »
|
||
supplémentaires sont configurés au niveau du système dans
|
||
@file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
|
||
système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
|
||
GNU C Reference Manual})
|
||
|
||
Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
|
||
appelant la fonction @code{getaddrinfo} en C — les applications essayent
|
||
d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
|
||
résolution de nom pour eux. Si le nscd ne tourne pas, alors ils 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).
|
||
|
||
Et c'est là que se trouve le problème : si votre application est liée à la
|
||
bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
|
||
greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
|
||
glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
|
||
échoue de manière inattendue.
|
||
|
||
Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
|
||
problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
|
||
chargés par le processus @command{nscd}, pas par l'application elle-même.
|
||
|
||
@subsection Polices X11
|
||
|
||
@cindex polices
|
||
La majorité des applications graphiques utilisent fontconfig pour trouver et
|
||
charger les police et effectuer le rendu côté client X11. Le paquet
|
||
@code{fontconfig} dans Guix cherche les polices dans
|
||
@file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
|
||
applications graphiques installées avec Guix d'afficher des polices, vous
|
||
devez aussi installer des polices avec Guix. Les paquets de polices
|
||
essentiels sont @code{gs-fonts}, @code{font-dejavu} et
|
||
@code{font-gnu-freefont-ttf}.
|
||
|
||
Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
|
||
les applications graphiques, installez @code{font-adobe-source-han-sans} ou
|
||
@code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
|
||
langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
|
||
suivante installe les polices pour le chinois :
|
||
|
||
@example
|
||
guix package -i font-adobe-source-han-sans:cn
|
||
@end example
|
||
|
||
@cindex @code{xterm}
|
||
Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
|
||
s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
|
||
spécifier le nom complet de la police en utlisant XLFD (X Logical Font
|
||
Description), comme ceci :
|
||
|
||
@example
|
||
-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
|
||
@end example
|
||
|
||
Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
|
||
dans votre profil Guix, vous devez étendre le chemin des polices du serveur
|
||
X :
|
||
|
||
@c Note: 'xset' does not accept symlinks so the trick below arranges to
|
||
@c get at the real directory. See <https://bugs.gnu.org/30655>.
|
||
@example
|
||
xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
|
||
@end example
|
||
|
||
@cindex @code{xlsfonts}
|
||
Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
|
||
vous assurer que vos polices TrueType y sont listées.
|
||
|
||
@cindex @code{fc-cache}
|
||
@cindex cache de polices
|
||
Après l'installation des polices vous devrez peut-être rafraîchir le cache
|
||
des polices pour pouvoir les utiliser dans les applications. Ça s'applique
|
||
aussi lorsque les applications installées avec Guix n'ont pas l'air de
|
||
trouver les polices. Pour forcer la reconstruction du cache de polices
|
||
lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
|
||
paquet @code{fontconfig}.
|
||
|
||
@subsection Certificats X.509
|
||
|
||
@cindex @code{nss-certs}
|
||
Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
|
||
programmes d'authentifier les serveurs web par HTTPS@.
|
||
|
||
Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
|
||
installer ce paquet et définir les variables d'environnement adéquates pour
|
||
que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
|
||
|
||
@subsection Paquets emacs
|
||
|
||
@cindex @code{emacs}
|
||
Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
|
||
peuvent être placés soit dans
|
||
@file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
|
||
sous-répertoires de
|
||
@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
|
||
car il existe potentiellement des milliers de paquets Emacs et stocker leurs
|
||
fichiers dans un seul répertoire peut ne pas être fiable (à cause de
|
||
conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
|
||
bonne idée. C'est très similaire à la manière dont le système de paquet
|
||
d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
|
||
The GNU Emacs Manual}).
|
||
|
||
Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
|
||
donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
|
||
ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
|
||
installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
|
||
@code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
|
||
|
||
@subsection La chaîne d'outils GCC
|
||
|
||
@cindex GCC
|
||
@cindex ld-wrapper
|
||
|
||
Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
|
||
vous avez besoin d'une chaîne de compilation complète pour compiler et lier
|
||
du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
|
||
paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
|
||
lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
|
||
symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
|
||
pour l'éditeur de liens.
|
||
|
||
@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}.
|
||
|
||
@c TODO What else?
|
||
|
||
@c *********************************************************************
|
||
@node Gestion de paquets
|
||
@chapter Gestion de paquets
|
||
|
||
@cindex paquets
|
||
Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
|
||
jour et supprimer facilement des paquets logiciels sans devoir connaître
|
||
leur procédure de construction ou leurs dépendances. Guix va aussi plus
|
||
loin que ces fonctionnalités évidentes.
|
||
|
||
Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
|
||
outils de gestion des paquets qu'il fournit. En plus de l'interface en
|
||
ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
|
||
@code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
|
||
(@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
|
||
avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
|
||
guix-help} pour le démarrer) :
|
||
|
||
@example
|
||
guix package -i emacs-guix
|
||
@end example
|
||
|
||
@menu
|
||
* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
|
||
* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
|
||
* Substituts:: Télécharger des binaire déjà construits.
|
||
* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
|
||
résultats.
|
||
* Invoquer guix gc:: Lancer le ramasse-miettes.
|
||
* Invoquer guix pull:: Récupérer la dernière version de Guix et de
|
||
la distribution.
|
||
* Canaux:: Personnaliser la collection des paquets.
|
||
* Inférieurs:: Interagir avec une autre révision de Guix.
|
||
* Invoquer guix describe:: Affiche des informations sur la révision Guix
|
||
actuelle.
|
||
* Invoquer guix pack:: Créer des lots de logiciels.
|
||
* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
|
||
@end menu
|
||
|
||
@node Fonctionnalités
|
||
@section Fonctionnalités
|
||
|
||
Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
|
||
paquets}, dans son propre répertoire — quelque chose comme
|
||
@file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
|
||
|
||
Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
|
||
propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
|
||
utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
|
||
utilisateur dans @code{$HOME/.guix-profile}.
|
||
|
||
Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
|
||
@file{/home/alice/.guix-profile/bin/gcc} pointe vers
|
||
@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
|
||
machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
|
||
continue simplement de pointer vers
|
||
@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
|
||
GCC coexistent surs le même système sans aucune interférence.
|
||
|
||
La commande @command{guix package} est l'outil central pour gérer les
|
||
paquets (@pxref{Invoquer guix package}). Il opère sur les profils
|
||
utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
|
||
normaux}.
|
||
|
||
@cindex transactions
|
||
La commande fournit les opérations évidentes d'installation, de suppression
|
||
et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
|
||
soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
|
||
processus @command{guix package} est terminé pendant la transaction ou si
|
||
une panne de courant arrive pendant la transaction, le profil de
|
||
l'utilisateur reste dans son état précédent et reste utilisable.
|
||
|
||
En plus, il est possible @emph{d'annuler} toute transaction sur les
|
||
paquets. Donc si par exemple un mise à jour installe une nouvelle version
|
||
d'un paquet qui révèle un bogue sérieux, 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
|
||
(@pxref{Utiliser le système de configuration}).
|
||
|
||
Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
|
||
déterminer quels paquets sont toujours référencés par les profils des
|
||
utilisateurs et supprimer ceux qui ne sont plus référencés de manière
|
||
prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
|
||
explicitement supprimer les anciennes générations de leur profil pour que
|
||
les paquets auxquels elles faisaient référence puissent être glanés.
|
||
|
||
@cindex reproductibilité
|
||
@cindex constructions reproductibles
|
||
Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
|
||
paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
|
||
Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
|
||
de toutes les entrées qui ont été utilisées pendant la construction de ce
|
||
paquet — le compilateur, les bibliothèques, les scripts de construction,
|
||
etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
|
||
l'installation d'un paquet donné correspond à l'état actuel de leur
|
||
distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
|
||
aux environnements de construction utilisés, une construction donnée à de
|
||
forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
|
||
effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
|
||
container}).
|
||
|
||
@cindex substituts
|
||
Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
|
||
binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
|
||
@file{/gnu/store} est disponible depuis une source externe (un
|
||
@dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
|
||
il construit le paquet depuis les sources localement (@pxref{Substituts}).
|
||
Comme les résultats des constructions sont généralement reproductibles au
|
||
bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
|
||
fournissent les substituts : vous pouvez forcer une construction locale et
|
||
@emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
|
||
|
||
Le contrôle de l'environnement de construction est aussi une fonctionnalité
|
||
utile pour les développeurs. La commande @command{guix environment} permet
|
||
aux développeurs d'un paquet de mettre en place rapidement le bon
|
||
environnement de développement pour leur paquet, sans avoir à installer
|
||
manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
|
||
|
||
@cindex réplication, des environnements logiciels
|
||
@cindex suivi de la provenance, des artefacts logiciels
|
||
La totalité de Guix et des définitions de paquets sont placés sous contrôle
|
||
de version, et @command{guix pull} vous permet de « voyager dans le temps »
|
||
de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
|
||
rend possible la réplication d'une instance Guix sur une machine différente
|
||
ou plus tard, ce qui vous permet de @emph{répliquer des environnements
|
||
logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
|
||
précis des logiciels.
|
||
|
||
@node Invoquer guix package
|
||
@section Invoquer @command{guix package}
|
||
|
||
@cindex installer des paquets
|
||
@cindex supprimer des paquets
|
||
@cindex installation de paquets
|
||
@cindex suppression de paquets
|
||
La commande @command{guix package} est l'outil qui permet d'installer,
|
||
mettre à jour et supprimer les paquets ainsi que de revenir à une
|
||
configuration précédente. Elle n'opère que dans le profil de l'utilisateur
|
||
et fonctionne avec les privilèges utilisateurs normaux
|
||
(@pxref{Fonctionnalités}). Sa syntaxe est :
|
||
|
||
@example
|
||
guix package @var{options}
|
||
@end example
|
||
@cindex transactions
|
||
@var{options} spécifie d'abord les opérations à effectuer pendant la
|
||
transaction. À la fin, une nouvelle génération du profil est créée mais les
|
||
@dfn{générations} précédentes du profil restent disponibles si l'utilisateur
|
||
souhaite y revenir.
|
||
|
||
Par exemple, pour supprimer @code{lua} et installer @code{guile} et
|
||
@code{guile-cairo} en une seule transaction :
|
||
|
||
@example
|
||
guix package -r lua -i guile guile-cairo
|
||
@end example
|
||
|
||
@command{guix package} supporte aussi une @dfn{approche déclarative} où
|
||
l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
|
||
disponibles le passe @i{via} l'option @option{--manifest}
|
||
(@pxref{profile-manifest, @option{--manifest}}).
|
||
|
||
@cindex profil
|
||
Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
|
||
utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
|
||
lien symbolique pointe toujours vers la génération actuelle du profil par
|
||
défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
|
||
@file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
|
||
etc.
|
||
@cindex chemins de recherche
|
||
Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
|
||
les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
|
||
Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
|
||
ensuite aient les bonnes définitions des variables d'environnement :
|
||
|
||
@example
|
||
GUIX_PROFILE="$HOME/.guix-profile" ; \
|
||
source "$HOME/.guix-profile/etc/profile"
|
||
@end example
|
||
|
||
Dans un environnement multi-utilisateur, les profils utilisateurs sont
|
||
stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
|
||
@file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
|
||
normalement
|
||
@code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
|
||
@var{localstatedir} est la valeur passée à @code{configure} avec
|
||
@code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
|
||
répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
|
||
démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
|
||
package}.
|
||
|
||
Les @var{options} peuvent être les suivante :
|
||
|
||
@table @code
|
||
|
||
@item --install=@var{paquet} @dots{}
|
||
@itemx -i @var{paquet} @dots{}
|
||
Installer les @var{paquet}s spécifiés.
|
||
|
||
Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
|
||
@code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
|
||
version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
|
||
dernier cas, la version la plus récente commençant par @code{1.8} est
|
||
utilisée).
|
||
|
||
Si aucun numéro de version n'est spécifié, la version la plus récente
|
||
disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
|
||
suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
|
||
@code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
|
||
paquets avec un nom correspondant et (éventuellement une version) sont
|
||
recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
|
||
|
||
@cindex entrées propagées
|
||
Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
|
||
dépendances qui sont installées automatiquement avec le paquet demandé
|
||
(@pxref{package-propagated-inputs, @code{propagated-inputs} in
|
||
@code{package} objects} pour plus d'informations sur les entrées propagées
|
||
dans les définitions des paquets).
|
||
|
||
@anchor{package-cmd-propagated-inputs}
|
||
Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
|
||
réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
|
||
ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
|
||
bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
|
||
MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
|
||
installés explicitement par l'utilisateur.
|
||
|
||
D'autre part, les paquets dépendent parfois de la définition de variables
|
||
d'environnement pour leur chemin de recherche (voir les explications sur
|
||
@code{--search-paths} plus bas). Toute définition de variable
|
||
d'environnement manquante ou possiblement incorrecte est rapportée ici.
|
||
|
||
@item --install-from-expression=@var{exp}
|
||
@itemx -e @var{exp}
|
||
Installer le paquet évalué par @var{exp}
|
||
|
||
@var{exp} doit être une expression Scheme qui s'évalue en un objet
|
||
@code{<package>}. Cette option est notamment utile pour distinguer les
|
||
variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
|
||
(gnu packages base) guile-final)}.
|
||
|
||
Remarquez que cette option installe la première sortie du paquet, ce qui
|
||
peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
|
||
paquet à plusieurs sorties.
|
||
|
||
@item --install-from-file=@var{fichier}
|
||
@itemx -f @var{fichier}
|
||
Installer le paquet évalué par le code dans le @var{fichier}.
|
||
|
||
Par exemple, @var{fichier} peut contenir une définition comme celle-ci
|
||
(@pxref{Définition des paquets}) :
|
||
|
||
@example
|
||
@verbatiminclude package-hello.scm
|
||
@end example
|
||
|
||
Les développeurs peuvent trouver utile d'inclure un tel fichier
|
||
@file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
|
||
pourrait être utilisé pour tester des versions de développement et créer des
|
||
environnements de développement reproductibles (@pxref{Invoquer guix environment}).
|
||
|
||
@item --remove=@var{paquet} @dots{}
|
||
@itemx -r @var{paquet} @dots{}
|
||
Supprimer les @var{paquet}s spécifiés.
|
||
|
||
Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
|
||
version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
|
||
glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
|
||
|
||
@item --upgrade[=@var{regexp} @dots{}]
|
||
@itemx -u [@var{regexp} @dots{}]
|
||
@cindex mettre à jour des paquets
|
||
Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
|
||
spécifiée, la mise à jour n'installera que les paquets dont le nom
|
||
correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
|
||
dessous.
|
||
|
||
Remarquez que cela met à jour vers la dernière version des paquets trouvée
|
||
dans la distribution actuellement installée. Pour mettre à jour votre
|
||
distribution, vous devriez lancer régulièrement @command{guix pull}
|
||
(@pxref{Invoquer guix pull}).
|
||
|
||
@item --do-not-upgrade[=@var{regexp} @dots{}]
|
||
Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
|
||
mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
|
||
exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
|
||
de ceux qui contiennent la chaîne « emacs » :
|
||
|
||
@example
|
||
$ guix package --upgrade . --do-not-upgrade emacs
|
||
@end example
|
||
|
||
@item @anchor{profile-manifest}--manifest=@var{fichier}
|
||
@itemx -m @var{fichier}
|
||
@cindex déclaration de profil
|
||
@cindex manifest de profil
|
||
Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
|
||
le code Scheme dans @var{fichier}.
|
||
|
||
Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
|
||
construire avec une série de @code{--install} et de commandes similaires.
|
||
L'avantage étant que le @var{fichier} peut être placé sous contrôle de
|
||
version, copié vers d'autres machines pour reproduire le même profil, etc.
|
||
|
||
@c FIXME: Add reference to (guix profile) documentation when available.
|
||
@var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
|
||
liste de paquets :
|
||
|
||
@findex packages->manifest
|
||
@example
|
||
(use-package-modules guile emacs)
|
||
|
||
(packages->manifest
|
||
(list emacs
|
||
guile-2.0
|
||
;; Utiliser une sortie spécifique d'un paquet.
|
||
(list guile-2.0 "debug")))
|
||
@end example
|
||
|
||
@findex specifications->manifest
|
||
Dans cet exemple on doit savoir quels modules définissent les variables
|
||
@code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
|
||
@code{use-package-modules} ce qui peut être embêtant. On peut à la place
|
||
fournir des spécifications de paquets normales et laisser
|
||
@code{specifications->manifest} rechercher les objets de paquets
|
||
correspondants, comme ceci :
|
||
|
||
@example
|
||
(specifications->manifest
|
||
'("emacs" "guile@@2.2" "guile@@2.2:debug"))
|
||
@end example
|
||
|
||
@item --roll-back
|
||
@cindex revenir en arrière
|
||
@cindex défaire des transactions
|
||
@cindex transactions, défaire
|
||
Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
|
||
dernière transaction.
|
||
|
||
Lorsqu'elle est combinée avec des options comme @code{--install}, cette
|
||
option revient en arrière avant toute autre action.
|
||
|
||
Lorsque vous revenez de la première génération qui contient des fichiers, le
|
||
profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
|
||
fichier en dehors de ses propres métadonnées.
|
||
|
||
Après être revenu en arrière, l'installation, la suppression et la mise à
|
||
jour de paquets réécrit les futures générations précédentes. Ainsi,
|
||
l'historique des générations dans un profil est toujours linéaire.
|
||
|
||
@item --switch-generation=@var{motif}
|
||
@itemx -S @var{motif}
|
||
@cindex générations
|
||
Basculer vers une génération particulière définie par le @var{motif}.
|
||
|
||
Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
|
||
de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
|
||
d'un nombre donné de générations. Par exemple, si vous voulez retourner à
|
||
la dernière génération après @code{--roll-back}, utilisez
|
||
@code{--switch-generation=+1}.
|
||
|
||
La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
|
||
que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
|
||
donc si la génération demandée n'existe pas la génération actuelle ne
|
||
changera pas.
|
||
|
||
@item --search-paths[=@var{genre}]
|
||
@cindex chemins de recherche
|
||
Rapporter les définitions des variables d'environnement dans la syntaxe Bash
|
||
qui peuvent être requises pour utiliser l'ensemble des paquets installés.
|
||
Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
|
||
de recherche} de fichiers utilisés par les paquets installés.
|
||
|
||
Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
|
||
@code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
|
||
profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
|
||
Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
|
||
installés dans le profil, alors @code{--search-paths} suggérera
|
||
d'initialiser ces variables à @code{@var{profil}/include} et
|
||
@code{@var{profil}/lib}, respectivement.
|
||
|
||
Le cas d'utilisation typique est de définir ces variables d'environnement
|
||
dans le shell :
|
||
|
||
@example
|
||
$ eval `guix package --search-paths`
|
||
@end example
|
||
|
||
@var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
|
||
@code{suffix}, ce qui signifie que les définitions des variables
|
||
d'environnement retournées seront soit les paramètres exactes, ou placés
|
||
avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
|
||
@var{genre} a pour valeur par défaut @code{exact}.
|
||
|
||
Cette option peut aussi être utilisé pour calculer les chemins de recherche
|
||
@emph{combinés} de plusieurs profils. Regardez cet exemple :
|
||
|
||
@example
|
||
$ guix package -p foo -i guile
|
||
$ guix package -p bar -i guile-json
|
||
$ guix package -p foo -p bar --search-paths
|
||
@end example
|
||
|
||
La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
|
||
bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
|
||
donné cette recommendation.
|
||
|
||
|
||
@item --profile=@var{profil}
|
||
@itemx -p @var{profil}
|
||
Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
|
||
|
||
@cindex collisions, dans un profil
|
||
@cindex faire des collisions de paquets dans des profils
|
||
@cindex profil, collisions
|
||
@item --allow-collisions
|
||
Permettre des collisions de paquets dans le nouveau profil. À utiliser à
|
||
vos risques et périls !
|
||
|
||
Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
|
||
profil comme des erreurs. Les collisions ont lieu quand deux version ou
|
||
variantes d'un paquet donné se retrouvent dans le profil.
|
||
|
||
@item --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.
|
||
|
||
@end table
|
||
|
||
En plus de ces actions, @command{guix package} supporte les options
|
||
suivantes pour demander l'état actuel d'un profil ou la disponibilité des
|
||
paquets :
|
||
|
||
@table @option
|
||
|
||
@item --search=@var{regexp}
|
||
@itemx -s @var{regexp}
|
||
@cindex chercher des paquets
|
||
Lister les paquets disponibles dont le nom, le synopsis ou la description
|
||
correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
|
||
métadonnées des paquets correspondants au format @code{recutils}
|
||
(@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
|
||
|
||
Cela permet à des champs spécifiques d'être extraits avec la commande
|
||
@command{recsel}, par exemple :
|
||
|
||
@example
|
||
$ guix package -s malloc | recsel -p name,version,relevance
|
||
name: jemalloc
|
||
version: 4.5.0
|
||
relevance: 6
|
||
|
||
name: glibc
|
||
version: 2.25
|
||
relevance: 1
|
||
|
||
name: libgc
|
||
version: 7.6.0
|
||
relevance: 1
|
||
@end example
|
||
|
||
De manière similaire, pour montrer le nom de tous les paquets disponibles
|
||
sous license GNU@tie{}LGPL version 3 :
|
||
|
||
@example
|
||
$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
|
||
name: elfutils
|
||
|
||
name: gmp
|
||
@dots{}
|
||
@end example
|
||
|
||
Il est aussi possible de raffiner les résultats de la recherche avec
|
||
plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
|
||
liste des jeux de plateau :
|
||
|
||
@example
|
||
$ guix package -s '\<board\>' -s game | recsel -p name
|
||
name: gnubg
|
||
@dots{}
|
||
@end example
|
||
|
||
Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
|
||
qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
|
||
les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
|
||
parlent de clavier (en anglais : key@emph{board}).
|
||
|
||
Et maintenant un exemple plus élaboré. La commande suivante recherche les
|
||
bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
|
||
Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
|
||
|
||
@example
|
||
$ guix package -s crypto -s library | \
|
||
recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
|
||
@end example
|
||
|
||
@noindent
|
||
@xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
|
||
d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
|
||
|
||
@item --show=@var{paquet}
|
||
Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
|
||
au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
|
||
GNU recutils manual}).
|
||
|
||
@example
|
||
$ guix package --show=python | recsel -p name,version
|
||
name: python
|
||
version: 2.7.6
|
||
|
||
name: python
|
||
version: 3.3.5
|
||
@end example
|
||
|
||
Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
|
||
détails concernant une version spécifique :
|
||
@example
|
||
$ guix package --show=python@@3.4 | recsel -p name,version
|
||
name: python
|
||
version: 3.4.3
|
||
@end example
|
||
|
||
|
||
|
||
@item --list-installed[=@var{regexp}]
|
||
@itemx -I [@var{regexp}]
|
||
Liste les paquets actuellement installés dans le profil spécifié, avec les
|
||
paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
|
||
spécifié, liste uniquement les paquets installés dont le nom correspond à
|
||
@var{regexp}.
|
||
|
||
Pour chaque paquet installé, affiche les éléments suivants, séparés par des
|
||
tabulations : le nom du paquet, sa version, la partie du paquet qui est
|
||
installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
|
||
pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
|
||
|
||
@item --list-available[=@var{regexp}]
|
||
@itemx -A [@var{regexp}]
|
||
Lister les paquets actuellement disponibles dans la distribution pour ce
|
||
système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
|
||
liste uniquement les paquets dont le nom correspond à @var{regexp}.
|
||
|
||
Pour chaque paquet, affiche les éléments suivants séparés par des
|
||
tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
|
||
|
||
@item --list-generations[=@var{motif}]
|
||
@itemx -l [@var{motif}]
|
||
@cindex générations
|
||
Renvoyer la liste des générations avec leur date de création ; pour chaque
|
||
génération, montre les paquets installés avec les paquets installés les plus
|
||
récemment en dernier. Remarquez que la zéroième génération n'est jamais
|
||
montrée.
|
||
|
||
Pour chaque paquet installé, afficher les éléments suivants, séparés par des
|
||
tabulations : le nom du paquet, sa version, la partie du paquet qui a été
|
||
installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
|
||
paquet dans le dépôt.
|
||
|
||
Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
|
||
correspondantes. Les motifs valides sont :
|
||
|
||
@itemize
|
||
@item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
|
||
à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
|
||
la première.
|
||
|
||
Et @code{--list-generations=1,8,2} renvoie les trois générations dans
|
||
l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
|
||
|
||
@item @emph{Des interval}. @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.
|
||
|
||
Il est aussi possible d'omettre le numéro final. Par exemple,
|
||
@code{--list-generations=2..} renvoie toutes les générations à partir de la
|
||
deuxième.
|
||
|
||
@item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
|
||
ou moins en passant un entier avec la première lettre de la durée (en
|
||
anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
|
||
générations qui sont agées d'au plus 20 jours.
|
||
@end itemize
|
||
|
||
@item --delete-generations[=@var{motif}]
|
||
@itemx -d [@var{motif}]
|
||
Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
|
||
l'actuelle.
|
||
|
||
Cette commande accepte les même motifs que @option{--list-generations}.
|
||
Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
|
||
Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
|
||
que la durée spécifiée correspondent. Par exemple
|
||
@code{--delete-generations=1m} supprime les générations vieilles de plus
|
||
d'un mois.
|
||
|
||
Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
|
||
zéroième génération n'est elle non plus jamais supprimée.
|
||
|
||
Remarquez que supprimer des générations empêche de revenir en arrière vers
|
||
elles. Ainsi, cette commande doit être utilisée avec précaution.
|
||
|
||
@end table
|
||
|
||
Enfin, comme @command{guix package} peut démarrer des processus de
|
||
construction, elle supporte les options de construction communes
|
||
(@pxref{Options de construction communes}). Elle supporte aussi les options de
|
||
transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
|
||
paquets sont perdues à la mise à jour ; pour les préserver à travers les
|
||
mises à jours, vous devriez définir vos propres variantes des paquets dans
|
||
une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
|
||
|
||
@node Substituts
|
||
@section Substituts
|
||
|
||
@cindex substituts
|
||
@cindex binaires pré-construits
|
||
Guix gère le déploiement depuis des binaires ou des sources de manière
|
||
transparente ce qui signifie qu'il peut aussi bien construire localement que
|
||
télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
|
||
appelons ces éléments pré-construits des @dfn{substituts} — ils se
|
||
substituent aux résultats des constructions locales. Dans la plupart des
|
||
cas, télécharger un substitut est bien plus rapide que de construire les
|
||
choses localement.
|
||
|
||
Les substituts peuvent être tout ce qui résulte d'une construction de
|
||
dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
|
||
de paquets binaires pré-construits, mais les archives des sources par
|
||
exemple résultent aussi de la construction d'une dérivation qui peut aussi
|
||
être disponible en tant que substitut.
|
||
|
||
@menu
|
||
* Serveur de substituts officiel:: Une source particulière de substituts.
|
||
* Autoriser un serveur de substituts:: Comment activer ou désactiver les
|
||
substituts.
|
||
* Authentification des substituts:: Coment Guix vérifie les substituts.
|
||
* Paramètres de serveur mandataire:: Comment récupérer des substituts à
|
||
travers un serveur mandataire.
|
||
* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
|
||
* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
|
||
un paquet binaire ?
|
||
@end menu
|
||
|
||
@node Serveur de substituts officiel
|
||
@subsection Serveur de substituts officiel
|
||
|
||
@cindex hydra
|
||
@cindex ferme de construction
|
||
Le serveur @code{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}
|
||
(@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
|
||
|
||
Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
|
||
est recommandé parce que les communications sont chiffrées ; à l'inverse
|
||
HTTP rend les communications visibles pour un espion qui peut utiliser les
|
||
informations accumulées sur vous pour déterminer par exemple si votre
|
||
système a des vulnérabilités de sécurités non corrigées.
|
||
|
||
Les substituts de la ferme de construction officielle sont activés par
|
||
défaut dans la distribution système Guix (@pxref{Distribution GNU}).
|
||
Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
|
||
distribution externe, à moins que vous ne les ayez explicitement activés via
|
||
l'une des étapes d'installation recommandées (@pxref{Installation}). Les
|
||
paragraphes suivants décrivent comment activer ou désactiver les substituts
|
||
de la ferme de construction ; la même procédure peut être utilisée pour
|
||
activer les substituts de n'importe quel autre serveur de substituts.
|
||
|
||
@node Autoriser un serveur de substituts
|
||
@subsection Autoriser un serveur de substituts
|
||
|
||
@cindex sécurité
|
||
@cindex substituts, autorisations
|
||
@cindex liste de contrôle d'accès (ACL), pour les substituts
|
||
@cindex ACL (liste de contrôle d'accès), pour les substituts
|
||
Pour permettre à Guix de télécharger les substituts depuis
|
||
@code{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.
|
||
|
||
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 :
|
||
|
||
@example
|
||
# guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.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}
|
||
@end quotation
|
||
|
||
Une fois que cela est en place, la sortie d'une commande comme @code{guix
|
||
build} devrait changer de quelque chose comme :
|
||
|
||
@example
|
||
$ guix build emacs --dry-run
|
||
Les dérivations suivantes seraient construites :
|
||
/gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
|
||
/gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
|
||
/gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
|
||
/gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
|
||
@dots{}
|
||
@end example
|
||
|
||
@noindent
|
||
à quelque chose comme :
|
||
|
||
@example
|
||
$ guix build emacs --dry-run
|
||
112.3 Mo seraient téléchargés :
|
||
/gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
|
||
/gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
|
||
/gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
|
||
/gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
|
||
@dots{}
|
||
@end example
|
||
|
||
@noindent
|
||
Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
|
||
seront téléchargés, si possible, pour les futures constructions.
|
||
|
||
@cindex substituts, comment les désactiver
|
||
Le mécanisme de substitution peut être désactivé globalement en lançant
|
||
@code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
|
||
l'option @code{--no-substitutes} à @command{guix package}, @command{guix
|
||
build} et aux autres outils en ligne de commande.
|
||
|
||
@node Authentification des substituts
|
||
@subsection Authentification des substituts
|
||
|
||
@cindex signatures numériques
|
||
Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
|
||
qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
|
||
ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
|
||
|
||
Il y a une exception cependant : si un serveur non autorisé fournit des
|
||
substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
|
||
serveur autorisé, alors le serveur non autorisé devient disponible pour les
|
||
téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
|
||
substituts avec cette option :
|
||
|
||
@example
|
||
--substitute-urls="https://a.example.org https://b.example.org"
|
||
@end example
|
||
|
||
@noindent
|
||
@cindex constructions reproductibles
|
||
Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
|
||
@code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
|
||
téléchargera les substituts de @code{a.example.org} parce qu'il vient en
|
||
premier dans la liste et peut être considéré comme un mirroir de
|
||
@code{b.example.org}. En pratique, des machines de constructions produisent
|
||
souvent les mêmes binaires grâce à des construction reproductibles au bit
|
||
près (voir plus bas).
|
||
|
||
Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
|
||
validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
|
||
à ce que des clients HTTPS comme des navigateurs web font habituellement.
|
||
Cela est dû au fait que Guix authentifie les informations sur les substituts
|
||
eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
|
||
que les certificats X.509 authentifie la relation entre nom de domaine et
|
||
clef publique).
|
||
|
||
@node Paramètres de serveur mandataire
|
||
@subsection Paramètres de serveur mandataire
|
||
|
||
@vindex http_proxy
|
||
Les substituts sont téléchargés par HTTP ou HTTPS. La variable
|
||
d'environnement @code{http_proxy} peut être initialisée dans l'environnement
|
||
de @command{guix-daemon} et est respectée pour le téléchargement des
|
||
substituts. Remarquez que la valeur de @code{http_proxy} dans
|
||
l'environnement où tournent @command{guix build}, @command{guix package} et
|
||
les autres clients n'a @emph{absolument aucun effet}.
|
||
|
||
@node Échec de substitution
|
||
@subsection Échec de substitution
|
||
|
||
Même lorsqu'un substitut pour une dérivation est disponible, la substitution
|
||
échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
|
||
substitut peut être hors ligne, le substitut a récemment été supprimé du
|
||
serveur, la connexion peut avoir été interrompue, etc.
|
||
|
||
Lorsque les substituts sont activés et qu'un substitut pour une dérivation
|
||
est disponible, mais que la tentative de substitution échoue, Guix essaiera
|
||
de construire la dérivation localement si @code{--fallback} a été passé en
|
||
argument (@pxref{option de repli,, common build option @code{--fallback}}).
|
||
Plus spécifiquement, si cet option n'a pas été passée en argument, alors
|
||
aucune construction locale n'est effectuée et la dérivation est considérée
|
||
comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
|
||
alors Guix essaiera de construire la dérivation localement et l'échec ou le
|
||
succès de la dérivation dépend de l'échec ou du succès de la construction
|
||
locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
|
||
substitut n'est disponible pour la dérivation en question, une construction
|
||
locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
|
||
@code{--fallback} ait été ou non passé.
|
||
|
||
Pour se donner une idée du nombre de substituts disponibles maintenant, vous
|
||
pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
|
||
fournis par un serveur.
|
||
|
||
@node De la confiance en des binaires
|
||
@subsection De la confiance en des binaires
|
||
|
||
@cindex confiance, en des binaires pré-construits
|
||
De nos jours, le contrôle individuel sur son utilisation propre de
|
||
l'informatique est à la merci d'institutions, de sociétés et de groupes avec
|
||
assez de pouvoir et de détermination pour contourner les infrastructures
|
||
informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
|
||
substituts de @code{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}).
|
||
|
||
Guix possède les fondations pour maximiser la reproductibilité logicielle
|
||
(@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
|
||
indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
|
||
résultats identiques au bit près. Ainsi, à travers un ensemble de
|
||
constructions de paquets indépendantes il est possible de renforcer
|
||
l'intégrité du système. La commande @command{guix challenge} a pour but
|
||
d'aider les utilisateurs à tester les serveurs de substituts et à aider les
|
||
développeurs à trouver les constructions de paquets non-déterministes
|
||
(@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
|
||
@command{guix build} permet aux utilisateurs de vérifier si les substituts
|
||
précédemment installés sont authentiques en les reconstruisant localement
|
||
(@pxref{vérification de la construction, @command{guix build --check}}).
|
||
|
||
Dans le futur, nous aimerions que Guix puisse publier et recevoir des
|
||
binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
|
||
discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
|
||
|
||
@node Des paquets avec plusieurs résultats
|
||
@section Des paquets avec plusieurs résultats
|
||
|
||
@cindex paquets avec plusieurs résultats
|
||
@cindex sorties de paquets
|
||
@cindex sorties
|
||
|
||
Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
|
||
c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
|
||
dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
|
||
la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
|
||
@code{out} mais son nom peut être omis comme le montre cette commande. Dans
|
||
ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
|
||
fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
|
||
statiques, la documentation Info et les autres fichiers de support.
|
||
|
||
Parfois il est plus approprié de séparer les divers types de fichiers
|
||
produits par un même paquet source en plusieurs sorties. Par exemple, la
|
||
bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
|
||
plus de 20 Mo de documentation de référence dans des pages HTML. Pour
|
||
préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
|
||
documentation va dans une sortie séparée nommée @code{doc}. Pour installer
|
||
la sortie principale de GLib, qui contient tout sauf la documentation, on
|
||
devrait lancer :
|
||
|
||
@example
|
||
guix package -i glib
|
||
@end example
|
||
|
||
@cindex documentation
|
||
La commande pour installer la documentation est :
|
||
|
||
@example
|
||
guix package -i glib:doc
|
||
@end example
|
||
|
||
Certains paquets installent des programmes avec des « empreintes dépendances
|
||
» différentes. Par exemple le paquet WordNet installe à la fois les outils
|
||
en ligne de commande et les interfaces graphiques (GUI). La première ne
|
||
dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
|
||
et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
|
||
en ligne de commande dans la sortie par défaut et l'interface graphique dans
|
||
une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
|
||
d'interface graphique de gagner de la place. La commande @command{guix
|
||
size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
|
||
|
||
Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
|
||
D'autres noms de sorties conventionnels sont @code{lib} pour les
|
||
bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
|
||
programmes indépendants et @code{debug} pour les informations de débogage
|
||
(@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
|
||
dans la troisième colonne de la sortie de @command{guix package
|
||
--list-available} (@pxref{Invoquer guix package}).
|
||
|
||
|
||
@node Invoquer guix gc
|
||
@section Invoquer @command{guix gc}
|
||
|
||
@cindex ramasse-miettes
|
||
@cindex espace disque
|
||
Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
|
||
La commande @command{guix gc} permet aux utilisateurs de lancer
|
||
explicitement le ramasse-miettes pour récupérer de l'espace dans le
|
||
répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
|
||
des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
|
||
répertoires à la main peut le casser de manière impossible à réparer !
|
||
|
||
@cindex racines du GC
|
||
@cindex racines du ramasse-miettes
|
||
Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
|
||
dans @file{/gnu/store} atteignable depuis une racine est considéré comme
|
||
@dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
|
||
considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
|
||
racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
|
||
les profils par défaut des utilisateurs ; par défaut les liens symboliques
|
||
sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
|
||
racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
|
||
exemple (@pxref{Invoquer guix build}).
|
||
|
||
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}).
|
||
|
||
Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
|
||
avez besoin d'espace disque. Par exemple pour garantir qu'au moins
|
||
5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
|
||
|
||
@example
|
||
guix gc -F 5G
|
||
@end example
|
||
|
||
Il est parfaitement possible de le lancer comme une tâche périodique
|
||
non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
|
||
paramétrer une telle tâche 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.
|
||
|
||
La command @command{guix gc} a trois modes d'opération : il peut être
|
||
utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
|
||
fichiers spécifiques (l'option @code{--delete}), pour afficher des
|
||
informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
|
||
options du ramasse-miettes sont :
|
||
|
||
@table @code
|
||
@item --collect-garbage[=@var{min}]
|
||
@itemx -C [@var{min}]
|
||
Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
|
||
@file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
|
||
lorsqu'aucune option n'est spécifiée.
|
||
|
||
Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
|
||
collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
|
||
d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
|
||
(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
|
||
|
||
Lorsque @var{min} est omis, tout glaner.
|
||
|
||
@item --free-space=@var{libre}
|
||
@itemx -F @var{libre}
|
||
Glaner jusqu'à ce que @var{libre} espace soit disponible dans
|
||
@file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
|
||
comme @code{500MiB} comme décrit ci-dessus.
|
||
|
||
Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
|
||
faire et s'arrêter immédiatement.
|
||
|
||
@item --delete
|
||
@itemx -d
|
||
Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
|
||
en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
|
||
ou s'ils sont toujours utilisés.
|
||
|
||
@item --list-failures
|
||
Lister les éléments du dépôt qui correspondent à des échecs de construction
|
||
|
||
Cela n'affiche rien à moins que le démon n'ait été démarré avec
|
||
@option{--cache-failures} (@pxref{Invoquer guix-daemon,
|
||
@option{--cache-failures}}).
|
||
|
||
@item --clear-failures
|
||
Supprimer les éléments du dépôt spécifiés du cache des constructions
|
||
échouées.
|
||
|
||
De nouveau, cette option ne fait de sens que lorsque le démon est démarré
|
||
avec @option{--cache-failures}. Autrement elle ne fait rien.
|
||
|
||
@item --list-dead
|
||
Montrer la liste des fichiers et des répertoires inutilisés encore présents
|
||
dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
|
||
atteignables par aucune racine.
|
||
|
||
@item --list-live
|
||
Montrer la liste des fichiers et des répertoires du dépôt utilisés.
|
||
|
||
@end table
|
||
|
||
En plus, les références entre les fichiers existants du dépôt peuvent être
|
||
demandés :
|
||
|
||
@table @code
|
||
|
||
@item --references
|
||
@itemx --referrers
|
||
@cindex dépendances des paquets
|
||
Lister les références (respectivement les référents) des fichiers du dépôt
|
||
en argument.
|
||
|
||
@item --requisites
|
||
@itemx -R
|
||
@cindex closure
|
||
Lister les prérequis des fichiers du dépôt passés en argument. Les
|
||
prérequis sont le fichier du dépôt lui-même, leur références et les
|
||
références de ces références, récursivement. En d'autre termes, la liste
|
||
retournée est la @dfn{closure transitive} des fichiers du dépôt.
|
||
|
||
@xref{Invoquer guix size} pour un outil pour surveiller la taille de la
|
||
closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
|
||
visualiser le graphe des références.
|
||
|
||
@item --derivers
|
||
@cindex dérivation
|
||
Renvoie les dérivations menant aux éléments du dépôt donnés
|
||
(@pxref{Dérivations}).
|
||
|
||
Par exemple cette commande :
|
||
|
||
@example
|
||
guix gc --derivers `guix package -I ^emacs$ | cut -f4`
|
||
@end example
|
||
|
||
@noindent
|
||
renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
|
||
votre profil.
|
||
|
||
Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
|
||
ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
|
||
@file{.drv} correspondant à cause de dérivations à sortie fixées.
|
||
@end table
|
||
|
||
Enfin, les options suivantes vous permettent de vérifier l'intégrité du
|
||
dépôt et de contrôler l'utilisation du disque.
|
||
|
||
@table @option
|
||
|
||
@item --verify[=@var{options}]
|
||
@cindex intégrité, du dépôt
|
||
@cindex vérification d'intégrité
|
||
Vérifier l'intégrité du dépôt.
|
||
|
||
Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
|
||
dans la base de données du démon existent bien dans @file{/gnu/store}.
|
||
|
||
Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
|
||
virgule de l'un ou plus parmi @code{contents} et @code{repair}.
|
||
|
||
Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
|
||
contenu de chaque élément du dépôt et le compare au hash de sa base de
|
||
données. Les différences de hash sont rapportées comme des corruptions de
|
||
données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
|
||
commande peut prendre très longtemps pour terminer, surtout sur un système
|
||
avec un disque lent.
|
||
|
||
@cindex réparer le dépôt
|
||
@cindex corruption, récupérer de
|
||
Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
|
||
que le démon essaie de réparer les objets du dépôt corrompus en récupérant
|
||
leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
|
||
atomique et donc potentiellement dangereuse, elle n'est disponible que pour
|
||
l'administrateur système. Une alternative plus légère lorsque vous
|
||
connaissez exactement quelle entrée est corrompue consiste à lancer
|
||
@command{guix build --repair} (@pxref{Invoquer guix build}).
|
||
|
||
@item --optimize
|
||
@cindex déduplication
|
||
Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
|
||
@dfn{déduplication}.
|
||
|
||
Le démon effectue une déduplication à chaque construction réussie ou import
|
||
d'archive à moins qu'il n'ait été démarré avec
|
||
@code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
|
||
@code{--disable-deduplication}}). Ainsi, cette option est surtout utile
|
||
lorsque le démon tourne avec @code{--disable-deduplication}.
|
||
|
||
@end table
|
||
|
||
@node Invoquer guix pull
|
||
@section Invoquer @command{guix pull}
|
||
|
||
@cindex mettre à niveau Guix
|
||
@cindex mettre à jour Guix
|
||
@cindex @command{guix pull}
|
||
@cindex pull
|
||
Les paquets sont installés ou mis à jour vers la dernière version disponible
|
||
dans la distribution actuellement disponible sur votre machine locale. Pour
|
||
mettre à jour cette distribution, en même temps que les outils Guix, vous
|
||
devez lancer @command{guix pull} ; la commande télécharge le dernier code
|
||
source de Guix et des descriptions de paquets et le déploie. Le code source
|
||
est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
|
||
le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
|
||
|
||
À la fin, @command{guix package} utilisera les paquets et les versions des
|
||
paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
|
||
toutes les commandes Guix et les modules Scheme seront aussi récupérés
|
||
depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
|
||
ajoutés par la mise à jour sont aussi maintenant disponibles.
|
||
|
||
Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
|
||
pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
|
||
pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
|
||
pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
|
||
vice-versa
|
||
|
||
Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
|
||
disponible sous @file{~/.config/guix/current} contenant la dernière version
|
||
de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
|
||
recherche pour que vous utilisiez la dernière version. Le même conseil
|
||
s'applique au manuel Info (@pxref{Documentation}) :
|
||
|
||
@example
|
||
export PATH="$HOME/.config/guix/current/bin:$PATH"
|
||
export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
|
||
@end example
|
||
|
||
L'option @code{--list-generations} ou @code{-l} liste les anciennes
|
||
générations produites par @command{guix pull}, avec des détails sur leur
|
||
origine :
|
||
|
||
@example
|
||
$ guix pull -l
|
||
Génération 1 10 juin 2018 00:18:18
|
||
guix 65956ad
|
||
URL du dépôt : https://git.savannah.gnu.org/git/guix.git
|
||
branche : origin/master
|
||
commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
|
||
|
||
Génération 2 11 juin 2018 11:02:49
|
||
guix e0cc7f6
|
||
URL du dépôt : https://git.savannah.gnu.org/git/guix.git
|
||
branche : origin/master
|
||
commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
|
||
2 nouveaux paquets : keepalived, libnfnetlink
|
||
6 paquets mis à jour : emacs-nix-mode@@2.0.4,
|
||
guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
|
||
heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
|
||
|
||
Génération 3 13 juin 2018 23:31:07 (actuelle)
|
||
guix 844cc1c
|
||
URL du dépôt : https://git.savannah.gnu.org/git/guix.git
|
||
branche : origin/master
|
||
commit : 844cc1c8f394f03b404c5bb3aee086922373490c
|
||
28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
|
||
69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
|
||
@end example
|
||
|
||
@ref{Invoquer guix describe, @command{guix describe}} pour d'autres manières
|
||
de décrire le statut actuel de Guix.
|
||
|
||
Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
|
||
créés par @command{guix package} (@pxref{Invoquer guix package}).
|
||
C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
|
||
une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
|
||
|
||
@example
|
||
$ guix package -p ~/.config/guix/current --roll-back
|
||
passé de la génération 3 à 2
|
||
$ guix package -p ~/.config/guix/current --delete-generations=1
|
||
suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
|
||
@end example
|
||
|
||
La commande @command{guix pull} est typiquement invoquée sans arguments mais
|
||
il supporte les options suivantes :
|
||
|
||
@table @code
|
||
@item --url=@var{url}
|
||
@itemx --commit=@var{commit}
|
||
@itemx --branch=@var{branche}
|
||
Télécharger le code depuis l'@var{url} spécifié, au @var{commit} donné (un
|
||
commit Git valide représenté par une chaîne hexadécimale) ou à la branche
|
||
@var{branch}.
|
||
|
||
@cindex @file{channels.scm}, fichier de configuration
|
||
@cindex fichier de configuration pour les canaux
|
||
Ces options sont fournies pour votre confort, mais vous pouvez aussi
|
||
spécifier votre configuration dans le fichier
|
||
@file{~/.config/guix/channels.scm} ou en utilisant l'option
|
||
@option{--channels} (voir plus bas).
|
||
|
||
@item --channels=@var{file}
|
||
@itemx -C @var{file}
|
||
Lit la liste des canaux dans @var{file} plutôt que dans
|
||
@file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
|
||
qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
|
||
d'informations.
|
||
|
||
@item --list-generations[=@var{motif}]
|
||
@itemx -l [@var{motif}]
|
||
Liste toutes les générations de @file{~/.config/guix/current} ou, si
|
||
@var{motif} est fournit, le sous-ensemble des générations qui correspondent
|
||
à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
|
||
package --list-generations} (@pxref{Invoquer guix package}).
|
||
|
||
@ref{Invoquer guix describe}, pour une manière d'afficher des informations
|
||
sur la génération actuelle uniquement.
|
||
|
||
@item --profile=@var{profil}
|
||
@itemx -p @var{profil}
|
||
Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
|
||
|
||
@item --dry-run
|
||
@itemx -n
|
||
Montrer quels commits des canaux seraient utilisés et ce qui serait
|
||
construit ou substitué mais ne pas le faire vraiment.
|
||
|
||
@item --verbose
|
||
Produire une sortie verbeuse, en écrivant les journaux de construction sur
|
||
la sortie d'erreur standard.
|
||
|
||
@item --bootstrap
|
||
Utiliser le programme d'amorçage Guile pour construire la dernière version
|
||
de Guix. Cette option n'est utile que pour les développeurs de Guix.
|
||
@end table
|
||
|
||
Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
|
||
répertoires et branches récupérer, ainsi que les dépôts
|
||
@emph{supplémentaires} contenant des modules de paquets qui devraient être
|
||
déployés. @xref{Canaux} pour plus d'information.
|
||
|
||
En plus, @command{guix pull} supporte toutes les options de construction
|
||
communes (@pxref{Options de construction communes}).
|
||
|
||
@node Canaux
|
||
@section Canaux
|
||
|
||
@cindex canaux
|
||
@cindex @file{channels.scm}, fichier de configuration
|
||
@cindex fichier de configuration pour les canaux
|
||
@cindex @command{guix pull}, fichier de configuration
|
||
@cindex configuration de @command{guix pull}
|
||
Guix et sa collection de paquets sont mis à jour en lançant @command{guix
|
||
pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
|
||
télécharge et déploie Guix lui-même depuis le dépôt officiel de
|
||
GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
|
||
dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
|
||
et la branche d'un répertoire Git à déployer et on peut demander à
|
||
@command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
|
||
termes, les canaux peuvent être utilisés pour personnaliser et pour
|
||
@emph{étendre} Guix, comme on le verra plus bas.
|
||
|
||
@subsection Utiliser un canal Guix personnalisé
|
||
|
||
Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
|
||
de commande ainsi que sa collection de paquets — sera téléchargé. Par
|
||
exemple, supposons que vous voulez effectuer les mises à jour depuis votre
|
||
propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
|
||
depuis la branche @code{super-hacks}. Vous pouvez écrire cette
|
||
spécification dans @code{~/.config/guix/channels.scm} :
|
||
|
||
@lisp
|
||
;; Dit à « guix pull » d'utiliser mon propre dépôt.
|
||
(list (channel
|
||
(name 'guix)
|
||
(url "https://example.org/my-guix.git")
|
||
(branch "super-hacks")))
|
||
@end lisp
|
||
|
||
@noindent
|
||
Maintenant, @command{guix pull} récupérera le code depuis la branche
|
||
@code{super-hacks} du dépôt sur @code{example.org}.
|
||
|
||
@subsection Spécifier des canaux supplémentaires
|
||
|
||
@cindex étendre la collection de paquets (canaux)
|
||
@cindex paquets personnels (canaux)
|
||
@cindex canaux, pour des paquets personnels
|
||
Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
|
||
Disons que vous avez un ensemble de paquets personnels ou de variantes
|
||
personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
|
||
mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
|
||
de commande. Vous écririez d'abord des modules contenant ces définitions de
|
||
paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
|
||
vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
|
||
supplémentaire où trouver ces paquets. Sympa, non ?
|
||
|
||
@c What follows stems from discussions at
|
||
@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
|
||
@c earlier discussions on guix-devel@gnu.org.
|
||
@quotation Attention
|
||
Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
|
||
@emph{super génial} ! » et que vous ne publiez vos canaux personnels
|
||
publiquement, nous voudrions vous donner quelques avertissements :
|
||
|
||
@itemize
|
||
@item
|
||
Avant de publier un canal, envisagez de contribuer vos définitions de
|
||
paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
|
||
ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
|
||
Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
|
||
des processus d'assurance qualité du projet.
|
||
|
||
@item
|
||
Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
|
||
les développeurs de Guix, considérons que @emph{la charge de la
|
||
compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
|
||
les définitions de paquets ne sont que du code Scheme qui utilise diverses
|
||
interfaces de programmation (API). Nous souhaitons rester libres de changer
|
||
ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
|
||
casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
|
||
ne nous engageons @emph{pas} à geler les API non plus.
|
||
|
||
@item
|
||
Corollaire : si vous utilisez un canal externe et que le canal est cassé,
|
||
merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
|
||
Guix.
|
||
@end itemize
|
||
|
||
Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
|
||
sont une manière pratique d'exercer votre liberté pour augmenter la
|
||
collection de paquets de Guix et de partager vos améliorations, qui sont les
|
||
principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
|
||
logiciel libe}. 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 :
|
||
|
||
@vindex %default-channels
|
||
@lisp
|
||
;; Ajouter mes paquets personnels à ceux fournis par Guix.
|
||
(cons (channel
|
||
(name 'my-personal-packages)
|
||
(url "https://example.org/personal-packages.git"))
|
||
%default-channels)
|
||
@end lisp
|
||
|
||
@noindent
|
||
Note that the snippet above is (as always!)@: Scheme code; we use
|
||
@code{cons} to add a channel the list of channels that the variable
|
||
@code{%default-channels} is bound to (@pxref{Pairs, @code{cons} and lists,,
|
||
guile, GNU Guile Reference Manual}). With this file in place, @command{guix
|
||
pull} builds not only Guix but also the package modules from your own
|
||
repository. The result in @file{~/.config/guix/current} is the union of
|
||
Guix with your own package modules:
|
||
|
||
@example
|
||
$ guix pull --list-generations
|
||
@dots{}
|
||
Génération 19 Aug 27 2018 16:20:48
|
||
guix d894ab8
|
||
URL du dépôt : https://git.savannah.gnu.org/git/guix.git
|
||
branche : master
|
||
commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
|
||
my-personal-packages dd3df5e
|
||
URL du dépôt : https://example.org/personal-packages.git
|
||
branche : master
|
||
commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
|
||
11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
|
||
4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
|
||
@end example
|
||
|
||
@noindent
|
||
La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
|
||
contient aussi bien Guix que les paquets du canal
|
||
@code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
|
||
à jour qui sont listés, certains comme @code{my-gimp} et
|
||
@code{my-emacs-with-cool-features} peuvent provenir de
|
||
@code{my-personal-packages}, tandis que d'autres viennent du canal par
|
||
défaut de Guix.
|
||
|
||
@subsection Répliquer Guix
|
||
|
||
@cindex épinglage, canaux
|
||
@cindex répliquer Guix
|
||
@cindex reproductibilité, de Guix
|
||
La sortie de @command{guix pull --list-generations} ci-dessus montre
|
||
précisément quels commits ont été utilisés pour construire cette instance de
|
||
Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
|
||
fournissant une spécification de canal dans
|
||
@file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
|
||
|
||
@lisp
|
||
;; Déployer des commits précis de mes canaux préférés.
|
||
(list (channel
|
||
(name 'guix)
|
||
(url "https://git.savannah.gnu.org/git/guix.git")
|
||
(commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
|
||
(channel
|
||
(name 'my-personal-packages)
|
||
(url "https://example.org/personal-packages.git")
|
||
(branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
|
||
@end lisp
|
||
|
||
La commande @command{guix describe --format=channels} peut même générer
|
||
cette liste de canaux directement (@pxref{Invoquer guix describe}).
|
||
|
||
À ce moment les deux machines font tourner @emph{exactement le même Guix},
|
||
avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
|
||
build gimp} sur une machine sera exactement la même, au bit près, que la
|
||
sortie de la même commande sur l'autre machine. Cela signifie aussi que les
|
||
deux machines ont accès à tous les codes sources de Guix, et transitivement,
|
||
à tous les codes sources de tous les paquets qu'il définit.
|
||
|
||
Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
|
||
provenance des artefacts binaires avec un grain très fin et de reproduire
|
||
les environnements logiciels à volonté — une sorte de capacité de «
|
||
méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
|
||
manière d'utiliser ces super-pouvoirs.
|
||
|
||
@node Inférieurs
|
||
@section Inférieurs
|
||
|
||
@c TODO: Remove this once we're more confident about API stability.
|
||
@quotation Remarque
|
||
La fonctionnalité décrite ici est un « démonstrateur technique » à la
|
||
version @value{VERSION}. Ainsi, l'interface est sujette à changements.
|
||
@end quotation
|
||
|
||
@cindex inférieurs
|
||
@cindex composition de révisions de Guix
|
||
Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
|
||
avec des paquets disponibles dans une révision différente de Guix. Les
|
||
@dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
|
||
composant différentes versions de Guix de manière arbitraire.
|
||
|
||
@cindex paquets inférieurs
|
||
Techniquement, un « inférieur » est surtout un processus Guix séparé
|
||
connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
|
||
inférieurs et de communiquer avec eux. Il fournit aussi une interface de
|
||
haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
|
||
inférieurs} — et les manipuler.
|
||
|
||
Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
|
||
fournissent une manière simple d'interagir avec un révision de Guix
|
||
séparée. Par exemple, disons que vous souhaitiez installer dans votre
|
||
profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
|
||
révision de Guix — peut-être parce que la nouvelle version de
|
||
@code{guile-json} a une API incompatible et que vous voulez lancer du code
|
||
avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
|
||
utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
|
||
; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
|
||
Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
|
||
l'inférieur :
|
||
|
||
@lisp
|
||
(use-modules (guix inferior) (guix channels)
|
||
(srfi srfi-1)) ;pour « first »
|
||
|
||
(define channels
|
||
;; L'ancienne révision depuis laquelle on veut
|
||
;; extraire guile-json.
|
||
(list (channel
|
||
(name 'guix)
|
||
(url "https://git.savannah.gnu.org/git/guix.git")
|
||
(commit
|
||
"65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
|
||
|
||
(define inferior
|
||
;; Un inférieur représentant la révision ci-dessus.
|
||
(inferior-for-channels channels))
|
||
|
||
;; Maintenant on crée un manifeste avec le paquet « guile » actuel
|
||
;; et l'ancien paquet « guile-json ».
|
||
(packages->manifest
|
||
(list (first (lookup-inferior-packages inferior "guile-json"))
|
||
(specification->package "guile")))
|
||
@end lisp
|
||
|
||
Durant la première exécution, @command{guix package --manifest} pourrait
|
||
avoir besoin de construire le canal que vous avez spécifié avant de créer
|
||
l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
|
||
révision de Guix sera déjà en cache.
|
||
|
||
Le module @code{(guix inferior)} fournit les procédures suivantes pour
|
||
ouvrir un inférieur :
|
||
|
||
@deffn {Procédure Scheme} inferior-for-channels @var{channels} @
|
||
[#:cache-directory] [#:ttl]
|
||
Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
|
||
le cache dans @var{cache-directory}, où les entrées peuvent être glanées
|
||
après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
|
||
démon de construction.
|
||
|
||
Elle a pour effet de bord de construire ou de substituer des binaires pour
|
||
@var{channels}, ce qui peut prendre du temps.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} open-inferior @var{directory} @
|
||
[#:command "bin/guix"]
|
||
Ouvre le Guix inférieur dans @var{directory} et lance
|
||
@code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
|
||
si l'inférieur n'a pas pu être lancé.
|
||
@end deffn
|
||
|
||
@cindex paquets inférieurs
|
||
Les procédures listées plus bas vous permettent d'obtenir et de manipuler
|
||
des paquets inférieurs.
|
||
|
||
@deffn {Procédure Scheme} inferior-packages @var{inferior}
|
||
Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
|
||
[@var{version}]
|
||
Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
|
||
dans @var{inferior}, avec le plus haut numéro de version en premier. Si
|
||
@var{version} est vrai, renvoie seulement les paquets avec un numéro de
|
||
version préfixé par @var{version}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} inferior-package? @var{obj}
|
||
Renvoie vrai si @var{obj} est un paquet inférieur.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} inferior-package-name @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-version @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-description @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-home-page @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-location @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-inputs @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
|
||
@deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
|
||
Ces procédures sont la contrepartie des accesseurs des enregistrements de
|
||
paquets (@pxref{Référence de paquet}). La plupart fonctionne en effectuant
|
||
des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
|
||
doit toujours être disponible lorsque vous appelez ces procédures.
|
||
@end deffn
|
||
|
||
Les paquets inférieurs peuvent être utilisés de manière transparente comme
|
||
tout autre paquet ou objet simili-fichier dans des G-expressions
|
||
(@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
|
||
la procédure @code{packages->manifest}, qui est typiquement utilisée dans
|
||
des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
|
||
de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
|
||
à peu près n'importe où vous utiliseriez un paquet normal : dans des
|
||
manifestes, dans le champ @code{packages} de votre déclaration
|
||
@code{operating-system}, etc.
|
||
|
||
@node Invoquer guix describe
|
||
@section Invoquer @command{guix describe}
|
||
|
||
@cindex reproductibilité
|
||
@cindex répliquer Guix
|
||
Souvent vous voudrez répondre à des questions comme « quelle révision de
|
||
Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
|
||
information utile dans de nombreuses situations : si vous voulez
|
||
@emph{répliquer} un environnement sur une machine différente ou un compte
|
||
utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
|
||
changement dans les canaux que vous utilisez l'a causé ou si vous voulez
|
||
enregistrer l'état de votre système pour le reproduire. La commande
|
||
@command{guix describe} répond à ces questions.
|
||
|
||
Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
|
||
@command{guix pull}, @command{guix describe} affiche les canaux qui ont été
|
||
construits, avec l'URL de leur dépôt et l'ID de leur commit
|
||
(@pxref{Canaux}) :
|
||
|
||
@example
|
||
$ guix describe
|
||
Generation 10 03 sep. 2018 17:32:44 (actuelle)
|
||
guix e0fa68c
|
||
URL du dépôt : https://git.savannah.gnu.org/git/guix.git
|
||
branche : master
|
||
commit : e0fa68c7718fffd33d81af415279d6ddb518f727
|
||
@end example
|
||
|
||
Si vous connaissez bien le système de contrôle de version Git, cela
|
||
ressemble en essence à @command{git describe} ; la sortie est aussi
|
||
similaire à celle de @command{guix pull --list-generations}, mais limitée à
|
||
la génération actuelle (@pxref{Invoquer guix pull, l'option
|
||
@option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
|
||
réfère sans aucune ambiguïté à un instantané de Guix, cette information est
|
||
tout ce dont vous avez besoin pour décrire la révision de Guix que vous
|
||
utilisez et pour la répliquer.
|
||
|
||
Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
|
||
aussi renvoyer une liste de canaux plutôt que la description lisible par un
|
||
humain au-dessus :
|
||
|
||
@example
|
||
$ guix describe -f channels
|
||
(list (channel
|
||
(name 'guix)
|
||
(url "https://git.savannah.gnu.org/git/guix.git")
|
||
(commit
|
||
"e0fa68c7718fffd33d81af415279d6ddb518f727")))
|
||
@end example
|
||
|
||
@noindent
|
||
Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
|
||
pull -C} sur une autre machine ou plus tard, ce qui instantiera
|
||
@emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
|
||
l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
|
||
révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
|
||
logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
|
||
espérons que vous aimerez ça aussi !
|
||
|
||
Voici les détails des options supportées par @command{guix describe} :
|
||
|
||
@table @code
|
||
@item --format=@var{format}
|
||
@itemx -f @var{format}
|
||
Produire la sortie dans le @var{format} donné, parmi :
|
||
|
||
@table @code
|
||
@item human
|
||
produire une sortie lisible par un humain,
|
||
@item canaux
|
||
produire une liste de spécifications de canaux qui peut être passée à
|
||
@command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
|
||
(@pxref{Invoquer guix pull}),
|
||
@item json
|
||
@cindex JSON
|
||
produire une liste de spécifications de canaux dans le format JSON,
|
||
@item recutils
|
||
produire une liste de spécifications de canaux dans le format Recutils.
|
||
@end table
|
||
|
||
@item --profile=@var{profil}
|
||
@itemx -p @var{profil}
|
||
Afficher les informations sur le @var{profil}.
|
||
@end table
|
||
|
||
@node Invoquer guix pack
|
||
@section Invoquer @command{guix pack}
|
||
|
||
Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
|
||
la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
|
||
package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
|
||
C'est là que @command{guix pack} entre en jeu.
|
||
|
||
@quotation Remarque
|
||
Si vous cherchez comment échanger des binaires entre des machines où Guix
|
||
est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
|
||
et @ref{Invoquer guix archive}.
|
||
@end quotation
|
||
|
||
@cindex pack
|
||
@cindex lot
|
||
@cindex lot d'applications
|
||
@cindex lot de logiciels
|
||
La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
|
||
: elle crée une archive tar ou un autre type d'archive contenunt les
|
||
binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
|
||
L'archive qui en résulte peut être utilisée sur toutes les machines qui
|
||
n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
|
||
ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
|
||
reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
|
||
contient bien les résultats que vous prétendez proposer.
|
||
|
||
Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
|
||
leurs dépendances, vous pouvez lancer :
|
||
|
||
@example
|
||
$ guix pack guile emacs geiser
|
||
@dots{}
|
||
/gnu/store/@dots{}-pack.tar.gz
|
||
@end example
|
||
|
||
Le résultat ici est une archive tar contenant un répertoire
|
||
@file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
|
||
résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
|
||
; le profil est le même qui celui qui aurait été créé avec @command{guix
|
||
package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
|
||
binaires indépendantes de Guix (@pxref{Installation binaire}).
|
||
|
||
Les utilisateurs de ce pack devraient lancer
|
||
@file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
|
||
pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
|
||
symbolique @file{/opt/gnu/bin} vers le profil :
|
||
|
||
@example
|
||
guix pack -S /opt/gnu/bin=bin guile emacs geiser
|
||
@end example
|
||
|
||
@noindent
|
||
De cette façon, les utilisateurs peuvent joyeusement taper
|
||
@file{/opt/gnu/bin/guile} et profiter.
|
||
|
||
@cindex binaires repositionnables, avec @command{guix pack}
|
||
Et si le destinataire de votre pack n'a pas les privilèges root sur sa
|
||
machine, et ne peut donc pas le décompresser dans le système de fichiers
|
||
racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
|
||
(voir plus bas). Cette option produite des @dfn{binaire repositionnables},
|
||
ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
|
||
du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
|
||
décompresser votre archive dans leur répertoire personnel et lancer
|
||
directement @file{./opt/gnu/bin/guile}.
|
||
|
||
@cindex Docker, construire une image avec guix pack
|
||
Autrement, vous pouvez produire un pack au format d'image Docker avec la
|
||
commande suivante :
|
||
|
||
@example
|
||
guix pack -f docker guile emacs geiser
|
||
@end example
|
||
|
||
@noindent
|
||
Le résultat est une archive tar qui peut être passée à la commande
|
||
@command{docker load}. Voir la
|
||
@uref{https://docs.docker.com/engine/reference/commandline/load/,
|
||
documentation de Docker} pour plus d'informations.
|
||
|
||
@cindex Singularity, construire une image avec guix pack
|
||
@cindex SquashFS, construire une image avec guix pack
|
||
Autrement, vous pouvez produire une image SquashFS avec la commande suivante
|
||
:
|
||
|
||
@example
|
||
guix pack -f squashfs guile emacs geiser
|
||
@end example
|
||
|
||
@noindent
|
||
Le résultat est une image de système de fichiers SquashFS qui peut soit être
|
||
montée directement soit être utilisée comme image de conteneur de système de
|
||
fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
|
||
conteneurisé Singularity}, avec des commandes comme @command{singularity
|
||
shell} ou @command{singularity exec}.
|
||
|
||
Diverses options en ligne de commande vous permettent de personnaliser votre
|
||
pack :
|
||
|
||
@table @code
|
||
@item --format=@var{format}
|
||
@itemx -f @var{format}
|
||
Produire un pack dans le @var{format} donné.
|
||
|
||
Les formats disponibles sont :
|
||
|
||
@table @code
|
||
@item tarball
|
||
C'est le format par défaut. Il produit une archive tar contenant tous les
|
||
binaires et les liens symboliques spécifiés.
|
||
|
||
@item docker
|
||
Cela produit une archive tar qui suit la
|
||
@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
|
||
spécification des images Docker}.
|
||
|
||
@item squashfs
|
||
Cela produit une image SquashFS contenant tous les binaires et liens
|
||
symboliques spécifiés, ainsi que des points de montages vides pour les
|
||
systèmes de fichiers virtuels comme procfs.
|
||
@end table
|
||
|
||
@item --relocatable
|
||
@itemx -R
|
||
Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
|
||
vous pouvez placer n'importe où dans l'arborescence du système de fichiers
|
||
et les lancer à partir de là. Par exemple, si vous créez un pack contenant
|
||
Bash avec :
|
||
|
||
@example
|
||
guix pack -R -S /mybin=bin bash
|
||
@end example
|
||
|
||
@noindent
|
||
...@: you can copy that pack to a machine that lacks Guix, and from your
|
||
home directory as a normal user, run:
|
||
|
||
@example
|
||
tar xf pack.tar.gz
|
||
./mybin/sh
|
||
@end example
|
||
|
||
@noindent
|
||
Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
|
||
@file{/gnu/store} apparaît et contient toutes les dépendances de
|
||
@code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
|
||
C'est sans doute la manière la plus simple de déployer du logiciel construit
|
||
avec Guix sur une machine sans Guix.
|
||
|
||
Il y a un inconvénient cependant : cette technique repose sur les
|
||
@dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
|
||
non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
|
||
Les anciennes versions de Linux ne le supportaient pas et certaines
|
||
distributions GNU/Linux les désactivent ; sur ces système, les programme du
|
||
pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
|
||
racine du système de fichiers.
|
||
|
||
@item --expression=@var{expr}
|
||
@itemx -e @var{expr}
|
||
Considérer le paquet évalué par @var{expr}.
|
||
|
||
Cela a le même but que l'option de même nom de @command{guix build}
|
||
(@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
|
||
build}}).
|
||
|
||
@item --manifest=@var{fichier}
|
||
@itemx -m @var{fichier}
|
||
Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
|
||
Scheme dans @var{fichier}
|
||
|
||
Elle a un but similaire à l'option de même nom dans @command{guix package}
|
||
(@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
|
||
fichiers manifeste. Ils vous permettent de définir une collection de
|
||
paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
|
||
créer des archives pour des machines qui n'ont pas Guix d'installé.
|
||
Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
|
||
@emph{soit} une liste de paquet, mais pas les deux.
|
||
|
||
@item --system=@var{système}
|
||
@itemx -s @var{système}
|
||
Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
|
||
plutôt que pour le type de système de l'hôte de construction.
|
||
|
||
@item --target=@var{triplet}
|
||
@cindex compilation croisée
|
||
Effectuer une compilation croisée pour @var{triplet} qui doit être un
|
||
triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
|
||
target triplets, GNU configuration triplets,, autoconf, Autoconf}).
|
||
|
||
@item --compression=@var{outil}
|
||
@itemx -C @var{outil}
|
||
Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
|
||
@code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
|
||
|
||
@item --symlink=@var{spec}
|
||
@itemx -S @var{spec}
|
||
Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
|
||
option peut apparaître plusieurs fois.
|
||
|
||
@var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
|
||
le lien symbolique qui sera créé et @var{cible} est la cible du lien.
|
||
|
||
Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
|
||
@file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
|
||
|
||
@item --localstatedir
|
||
@itemx --profile-name=@var{nom}
|
||
Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
|
||
résulte, et notamment le profil
|
||
@file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
|
||
@code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
|
||
|
||
@file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
|
||
ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
|
||
fournir dans le pack signifie que le dépôt et « complet » et gérable par
|
||
Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
|
||
aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
|
||
|
||
Un cas d'utilisation est l'archive binaire indépendante de Guix
|
||
(@pxref{Installation binaire}).
|
||
|
||
@item --bootstrap
|
||
Utiliser les programmes d'amorçage pour construire le pack. Cette option
|
||
n'est utile que pour les développeurs de Guix.
|
||
@end table
|
||
|
||
En plus, @command{guix pack} supporte toutes les options de construction
|
||
communes (@pxref{Options de construction communes}) et toutes les options de
|
||
transformation de paquets (@pxref{Options de transformation de paquets}).
|
||
|
||
|
||
@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
|
||
|
||
GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
|
||
définir, construire et faire des requêtes sur des paquets. La première
|
||
interface permet aux utilisateurs d'écrire des définitions de paquets de
|
||
haut-niveau. Ces définitions se réfèrent à des concepts de création de
|
||
paquets familiers, comme le nom et la version du paquet, son système de
|
||
construction et ses dépendances. Ces définitions peuvent ensuite être
|
||
transformées en actions concrètes lors de la construction.
|
||
|
||
Les actions de construction sont effectuées par le démon Guix, pour le
|
||
compte des utilisateurs. Dans un environnement standard, le démon possède
|
||
les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
|
||
pas les utilisateurs. La configuration recommandée permet aussi au démon
|
||
d'effectuer la construction dans des chroots, avec un utilisateur de
|
||
construction spécifique pour minimiser les interférences avec le reste du
|
||
système.
|
||
|
||
@cindex dérivation
|
||
Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
|
||
Pour demander au démon d'effectuer une action de construction, les
|
||
utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
|
||
une représentation à bas-niveau des actions de construction à entreprendre
|
||
et l'environnement dans lequel elles devraient avoir lieu — les dérivations
|
||
sont aux définitions de paquets ce que l'assembleur est aux programmes C.
|
||
Le terme de « dérivation » vient du fait que les résultats de la
|
||
construction en @emph{dérivent}.
|
||
|
||
Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
|
||
paquets à haut-niveau.
|
||
|
||
@menu
|
||
* 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
|
||
dépôt.
|
||
* G-Expressions:: Manipuler les expressions de construction.
|
||
* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
|
||
@end menu
|
||
|
||
@node Définition des paquets
|
||
@section Définition des paquets
|
||
|
||
L'interface de haut-niveau pour les définitions de paquets est implémentée
|
||
dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
|
||
exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
|
||
ressemble à cela :
|
||
|
||
@example
|
||
(define-module (gnu packages hello)
|
||
#:use-module (guix packages)
|
||
#:use-module (guix download)
|
||
#:use-module (guix build-system gnu)
|
||
#:use-module (guix licenses)
|
||
#:use-module (gnu packages gawk))
|
||
|
||
(define-public hello
|
||
(package
|
||
(name "hello")
|
||
(version "2.10")
|
||
(source (origin
|
||
(method url-fetch)
|
||
(uri (string-append "mirror://gnu/hello/hello-" version
|
||
".tar.gz"))
|
||
(sha256
|
||
(base32
|
||
"0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
|
||
(build-system gnu-build-system)
|
||
(arguments '(#:configure-flags '("--enable-silent-rules")))
|
||
(inputs `(("gawk" ,gawk)))
|
||
(synopsis "Hello, GNU world: An example GNU package")
|
||
(description "Guess what GNU Hello prints!")
|
||
(home-page "http://www.gnu.org/software/hello/")
|
||
(license gpl3+)))
|
||
@end example
|
||
|
||
@noindent
|
||
Sans être un expert Scheme, le lecteur peut comprendre la signification des
|
||
différents champs présents. Cette expression lie la variable @code{hello} à
|
||
un objet @code{<package>}, qui est essentiellement un enregistrement
|
||
(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
|
||
peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
|
||
le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
|
||
renvoie — oh surprise ! — @code{"hello"}.
|
||
|
||
Avec un peu de chance, vous pourrez importer tout ou partie de la définition
|
||
du paquet qui vous intéresse depuis un autre répertoire avec la commande
|
||
@code{guix import} (@pxref{Invoquer guix import}).
|
||
|
||
Dans l'exemple précédent, @var{hello} est défini dans un module à part,
|
||
@code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
|
||
nécessaire, mais c'est pratique : tous les paquets définis dans des modules
|
||
sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
|
||
ligne de commande (@pxref{Modules de paquets}).
|
||
|
||
Il y a quelques points à remarquer dans la définition de paquet précédente :
|
||
|
||
@itemize
|
||
@item
|
||
Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence d'origine}, pour la référence complète). Ici, on utilise la méthode
|
||
@code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
|
||
est un fichier à télécharger par FTP ou HTTP.
|
||
|
||
Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
|
||
des miroirs GNU définis dans @code{(guix download)}.
|
||
|
||
Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
|
||
téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
|
||
fichier. La forme @code{(base32 @dots{})} introduit a représentation en
|
||
base32 du hash. Vous pouvez obtenir cette information avec @code{guix
|
||
download} (@pxref{Invoquer guix download}) et @code{guix hash}
|
||
(@pxref{Invoquer guix hash}).
|
||
|
||
@cindex correctifs
|
||
Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
|
||
@code{patches} qui liste les correctifs à appliquer et un champ
|
||
@code{snippet} qui donne une expression Scheme pour modifier le code source.
|
||
|
||
@item
|
||
@cindex Système de construction GNU
|
||
Le champ @code{build-system} spécifie la procédure pour construire le paquet
|
||
(@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
|
||
de construction GNU familier, où les paquets peuvent être configurés,
|
||
construits et installés avec la séquence @code{./configure && make && make
|
||
check && make install} habituelle.
|
||
|
||
@item
|
||
Le champ @code{arguments} spécifie des options pour le système de
|
||
construction (@pxref{Systèmes de construction}). Ici il est interprété par
|
||
@var{gnu-build-system} comme une demande de lancer @file{configure} avec le
|
||
drapeau @code{--enable-silent-rules}.
|
||
|
||
@cindex quote
|
||
@cindex quoting
|
||
@findex '
|
||
@findex quote
|
||
Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
|
||
introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
|
||
@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
|
||
des détails. Ice la valeur du champ @code{arguments} est une liste
|
||
d'arguments passés au système de construction plus tard, comme avec
|
||
@code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
|
||
Reference Manual}).
|
||
|
||
La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
|
||
(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
|
||
@code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
|
||
système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
|
||
Reference Manual}).
|
||
|
||
@item
|
||
Le champ @code{inputs} spécifie les entrées du processus de construction —
|
||
c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
|
||
on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
|
||
@var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
|
||
|
||
@cindex accent grave (quasiquote)
|
||
@findex `
|
||
@findex quasiquote
|
||
@cindex virgule (unquote)
|
||
@findex ,
|
||
@findex unquote
|
||
@findex ,@@
|
||
@findex unquote-splicing
|
||
De nouveau, @code{`} (un accent grave, synonyme de la fonction
|
||
@code{quasiquote}) nous permet d'introduire une liste 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
|
||
(@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
|
||
|
||
Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
|
||
besoin d'être spécifiés en tant qu'entrées ici. À la place, le
|
||
@var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
|
||
(@pxref{Systèmes de construction}).
|
||
|
||
Cependant, toutes les autres dépendances doivent être spécifiées dans le
|
||
champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
|
||
simplement indisponible pour le processus de construction, ce qui peut mener
|
||
à un échec de la construction.
|
||
@end itemize
|
||
|
||
@xref{Référence de paquet}, pour une description complète des champs
|
||
possibles.
|
||
|
||
Lorsqu'une définition de paquet est en place, le paquet peut enfin être
|
||
construit avec l'outil en ligne de commande @code{guix build}
|
||
(@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
|
||
vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
|
||
aisément revenir à la définition du paquet avec la commande @command{guix
|
||
edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
|
||
d'inforamtions 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.
|
||
@vindex GUIX_PACKAGE_PATH
|
||
Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
|
||
distribution en ajoutant vos propres définitions de paquets dans un « canal
|
||
».
|
||
|
||
Finalement, la mise à jour de la définition du paquet à une nouvelle version
|
||
amont peut en partie s'automatiser avec la commande @command{guix refresh}
|
||
(@pxref{Invoquer guix refresh}).
|
||
|
||
Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
|
||
d'abord calculé par la procédure @code{package-derivation}. Cette
|
||
dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
|
||
Les actions de construction qu'il prescrit peuvent ensuite être réalisées
|
||
par la procédure @code{build-derivation} (@pxref{Le dépôt}).
|
||
|
||
@deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
|
||
Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
|
||
(@pxref{Dérivations}).
|
||
|
||
@var{paquet} doit être un objet @code{<package>} valide et @var{système} une
|
||
chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
|
||
pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
|
||
connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
|
||
@end deffn
|
||
|
||
@noindent
|
||
@cindex compilation croisée
|
||
De manière identique, il est possible de calculer une dérivation qui
|
||
effectue une compilation croisée d'un paquet pour un autre système :
|
||
|
||
@deffn {Procédure Scheme} package-cross-derivation @var{store} @
|
||
@var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
|
||
duof @var{paquet} construit depuis @var{système} pour @var{cible}.
|
||
|
||
@var{cible} doit être un triplet GNU valide indiquant le matériel cible et
|
||
le système d'exploitation, comme @code{"mips64el-linux-gnu"}
|
||
(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
|
||
Configure and Build System}).
|
||
@end deffn
|
||
|
||
@cindex transformations de paquets
|
||
@cindex réécriture d'entrées
|
||
@cindex réécriture de l'arbre des dépendances
|
||
On peut manipuler les paquets de manière arbitraire. Une transformation
|
||
utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
|
||
dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
|
||
d'autres :
|
||
|
||
@deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
|
||
[@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
|
||
paquet, remplace des dépendances directes et indirectes (mais pas ses
|
||
entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
|
||
est une liste de paires de paquets ; le premier élément de chaque pair est
|
||
le paquet à remplacer, le second son remplaçant.
|
||
|
||
De manière facultative, @var{nom-réécrit} est une procédure à un argument
|
||
qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
|
||
réécrit.
|
||
@end deffn
|
||
|
||
@noindent
|
||
Regardez cet exemple :
|
||
|
||
@example
|
||
(define libressl-instead-of-openssl
|
||
;; Cette procédure remplace OPENSSL par LIBRESSL,
|
||
;; récursivement.
|
||
(package-input-rewriting `((,openssl . ,libressl))))
|
||
|
||
(define git-with-libressl
|
||
(libressl-instead-of-openssl git))
|
||
@end example
|
||
|
||
@noindent
|
||
Ici nous définissons d'abord une procédure de réécriture qui remplace
|
||
@var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
|
||
@dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
|
||
@var{openssl}. cela est exactement ce que l'option en ligne de commande
|
||
@option{--with-input} fait (@pxref{Options de transformation de paquets,
|
||
@option{--with-input}}).
|
||
|
||
Une procédure plus générique pour réécrire un graphe de dépendance d'un
|
||
paquet est @code{package-mapping} : elle supporte n'importe quel changement
|
||
dans les nœuds du graphe.
|
||
|
||
@deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
|
||
Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
|
||
paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
|
||
arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
|
||
@end deffn
|
||
|
||
@menu
|
||
* Référence de paquet:: Le type de donnée des paquets.
|
||
* Référence d'origine:: Le type de données d'origine.
|
||
@end menu
|
||
|
||
|
||
@node Référence de paquet
|
||
@subsection Référence de @code{package}
|
||
|
||
Cette section résume toutes les options disponibles dans les déclarations
|
||
@code{package} (@pxref{Définition des paquets}).
|
||
|
||
@deftp {Type de données} package
|
||
C'est le type de donnée représentant une recette de paquets
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Le nom du paquet, comme une chaîne de caractères.
|
||
|
||
@item @code{version}
|
||
La version du paquet, comme une chaîne de caractères.
|
||
|
||
@item @code{source}
|
||
Un objet qui indique comment le code source du paquet devrait être
|
||
récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
|
||
fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
|
||
s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
|
||
indique un fichier du système de fichier local (@pxref{G-Expressions,
|
||
@code{local-file}}).
|
||
|
||
@item @code{build-system}
|
||
Le système de construction qui devrait être utilisé pour construire le
|
||
paquet (@pxref{Systèmes de construction}).
|
||
|
||
@item @code{arguments} (par défaut : @code{'()})
|
||
Les arguments à passer au système de construction. C'est une liste qui
|
||
contient typiquement une séquence de paires de clefs-valeurs.
|
||
|
||
@item @code{inputs} (par défaut : @code{'()})
|
||
@itemx @code{native-inputs} (par défaut : @code{'()})
|
||
@itemx @code{propagated-inputs} (par défaut : @code{'()})
|
||
@cindex entrées, des paquets
|
||
Ces champs listent les dépendances du paquet. Chacune est une liste de
|
||
tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
|
||
caractères) comme premier élément, un paquet, une origine ou une dérivation
|
||
comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
|
||
est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
|
||
plus d'informations sur les sorties des paquets). Par exemple, la liste
|
||
suivante spécifie trois entrées :
|
||
|
||
@example
|
||
`(("libffi" ,libffi)
|
||
("libunistring" ,libunistring)
|
||
("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
|
||
@end example
|
||
|
||
@cindex compilation croisée, dépendances des paquets
|
||
La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
|
||
lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
|
||
les dépendances listées dans @code{inputs} sont construites pour
|
||
l'architecture @emph{cible} ; inversement, les dépendances listées dans
|
||
@code{native-inputs} sont construites pour l'architecture de la machine de
|
||
@emph{construction}.
|
||
|
||
@code{native-inputs} est typiquement utilisé pour lister les outils requis à
|
||
la construction mais pas à l'exécution, comme Autoconf, Automake,
|
||
pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
|
||
erreurs de ce type (@pxref{Invoquer guix lint}).
|
||
|
||
@anchor{package-propagated-inputs}
|
||
Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
|
||
paquets spécifiés seront automatiquement installés avec le paquet auquel ils
|
||
appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
|
||
package}}, pour des informations sur la manière dont @command{guix package}
|
||
traite les entrées propagées).
|
||
|
||
Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
|
||
d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
|
||
pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
|
||
|
||
Un autre exemple où @code{propagated-inputs} est utile est pour les langages
|
||
auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
|
||
cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
|
||
et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
|
||
peuvent trouver le code des bibliothèques dont elles dépendent à
|
||
l'exécution, les dépendances à l'exécution doivent être listées dans
|
||
@code{propagated-inputs} plutôt que @code{inputs}.
|
||
|
||
@item @code{self-native-input?} (par défaut : @code{#f})
|
||
C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
|
||
comme entrée native lors de la compilation croisée.
|
||
|
||
@item @code{outputs} (par défaut : @code{'("out")})
|
||
La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
|
||
supplémentaires.
|
||
|
||
@item @code{native-search-paths} (par défaut : @code{'()})
|
||
@itemx @code{search-paths} (par défaut : @code{'()})
|
||
Une liste d'objets @code{search-path-specification} décrivant les variables
|
||
d'environnement de recherche de chemins que ce paquet utilise.
|
||
|
||
@item @code{replacement} (par défaut : @code{#f})
|
||
Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
|
||
comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
|
||
plus de détails.
|
||
|
||
@item @code{synopsis}
|
||
Une description sur une ligne du paquet.
|
||
|
||
@item @code{description}
|
||
Une description plus détaillée du paquet.
|
||
|
||
@item @code{license}
|
||
@cindex licence, des paquets
|
||
La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
|
||
liste de ces valeurs.
|
||
|
||
@item @code{home-page}
|
||
L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
|
||
|
||
@item @code{supported-systems} (par défaut : @var{%supported-systems})
|
||
La liste des systèmes supportés par le paquet, comme des chaînes de
|
||
caractères de la forme @code{architecture-noyau}, par exemple
|
||
@code{"x86_64-linux"}.
|
||
|
||
@item @code{maintainers} (par défaut : @code{'()})
|
||
La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
|
||
|
||
@item @code{location} (par défaut : emplacement de la source de la forme @code{package})
|
||
L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
|
||
hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
|
||
corrigé.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Référence d'origine
|
||
@subsection Référence de @code{origin}
|
||
|
||
Cette section résume toutes les options disponibles dans le déclarations
|
||
@code{origin} (@pxref{Définition des paquets}).
|
||
|
||
@deftp {Type de données} origin
|
||
C'est le type de donnée qui représente l'origine d'un code source.
|
||
|
||
@table @asis
|
||
@item @code{uri}
|
||
Un objet contenant l'URI de la source. Le type d'objet dépend de la
|
||
@code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
|
||
de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
|
||
représentée par une chaîne de caractères, ou une liste de chaînes de
|
||
caractères.
|
||
|
||
@item @code{method}
|
||
Un procédure qui gère l'URI.
|
||
|
||
Quelques exemples :
|
||
|
||
@table @asis
|
||
@item @var{url-fetch} de @code{(guix download)}
|
||
télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
|
||
champ @code{uri} ;
|
||
|
||
@vindex git-fetch
|
||
@item @var{git-fetch} de @code{(guix git-download)}
|
||
clone le dépôt sous contrôle de version Git et récupère la révision
|
||
spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
|
||
un objet @code{git-reference} ressemble à cela :
|
||
|
||
@example
|
||
(git-reference
|
||
(url "git://git.debian.org/git/pkg-shadow/shadow")
|
||
(commit "v4.1.5.1"))
|
||
@end example
|
||
@end table
|
||
|
||
@item @code{sha256}
|
||
Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
|
||
@code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
|
||
de caractères en base-32.
|
||
|
||
Vous pouvez obtenir cette information avec @code{guix download}
|
||
(@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
|
||
|
||
@item @code{file-name} (par défaut : @code{#f})
|
||
Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
|
||
@code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
|
||
des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
|
||
fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
|
||
contrôle de version, il est recommandé de fournir un nom de fichier
|
||
explicitement parce que le nom par défaut n'est pas très descriptif.
|
||
|
||
@item @code{patches} (par défaut : @code{'()})
|
||
Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
|
||
(@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
|
||
à appliquer sur la source.
|
||
|
||
Cette liste de correctifs doit être inconditionnelle. En particulier, elle
|
||
ne peut pas dépendre des valeurs de @code{%current-system} ou
|
||
@code{%current-target-system}.
|
||
|
||
@item @code{snippet} (par défaut : @code{#f})
|
||
Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
|
||
dans le répertoire des sources. C'est une manière pratique de modifier la
|
||
source, parfois plus qu'un correctif.
|
||
|
||
@item @code{patch-flags} (par défaut : @code{'("-p1")})
|
||
Une liste de drapeaux à passer à la commande @code{patch}.
|
||
|
||
@item @code{patch-inputs} (par défaut : @code{#f})
|
||
Paquets d'entrées ou dérivations pour le processus de correction.
|
||
Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
|
||
pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
|
||
|
||
@item @code{modules} (par défaut : @code{'()})
|
||
Une liste de modules Guile qui devraient être chargés pendant le processus
|
||
de correction et pendant que le lancement du code du champ @code{snippet}.
|
||
|
||
@item @code{patch-guile} (par défaut : @code{#f})
|
||
Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
|
||
à @code{#f}, une valeur par défaut raisonnable est utilisée.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Systèmes de construction
|
||
@section Systèmes de construction
|
||
|
||
@cindex système de construction
|
||
Chaque définition de paquet définie un @dfn{système de construction} et des
|
||
arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
|
||
champ @code{build-system} représente la procédure de construction du paquet,
|
||
ainsi que des dépendances implicites pour cette procédure de construction.
|
||
|
||
Les systèmes de construction sont des objets
|
||
@code{<build-system>}. L'interface pour les créer et les manipuler est
|
||
fournie par le module @code{(guix build-system)} et les systèmes de
|
||
construction eux-mêmes sont exportés par des modules spécifiques.
|
||
|
||
@cindex sac (représentation à bas-niveau des paquets)
|
||
Sous le capot, les systèmes de construction compilent d'abord des objets
|
||
paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
|
||
décoration — en d'autres mots, un sac est une représentation à bas-niveau
|
||
d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
|
||
été implicitement ajoutées par le système de construction. Cette
|
||
représentation intermédiaire est ensuite compilée en une dérivation
|
||
(@pxref{Dérivations}).
|
||
|
||
Les systèmes de construction acceptent une liste d'@dfn{arguments}
|
||
facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
|
||
champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
|
||
arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
|
||
Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
|
||
habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
|
||
un processus Guile lancé par le démon (@pxref{Dérivations}).
|
||
|
||
Le système de construction principal est le @var{gnu-build-system} qui
|
||
implémente les procédures de construction standard pour les paquets GNU et
|
||
de nombreux autres. Il est fournit par le module @code{(guix build-system
|
||
gnu)}.
|
||
|
||
@defvr {Variable Scheme} gnu-build-system
|
||
@var{gnu-build-system} représente le système de construction GNU et ses
|
||
variantes (@pxref{Configuration, configuration and makefile conventions,,
|
||
standards, GNU Coding Standards}).
|
||
|
||
@cindex phases de construction
|
||
En résumé, les paquets qui l'utilisent sont configurés, construits et
|
||
installés avec la séquence @code{./configure && make && make check && make
|
||
install} habituelle. En pratique, des étapes supplémentaires sont souvent
|
||
requises. Toutes ces étapes sont séparées dans des @dfn{phases}
|
||
différentes, notamment@footnote{Regardez les modules @code{(guix build
|
||
gnu-build-system)} pour plus de détails sur les phases de construction.}:
|
||
|
||
@table @code
|
||
@item unpack
|
||
Décompresse l'archive des sources et se déplace dans l'arborescence des
|
||
sources fraîchement extraites. Si la source est en fait un répertoire, le
|
||
copie dans l'arborescence de construction et entre dans ce répertoire.
|
||
|
||
@item patch-source-shebangs
|
||
Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
|
||
réfèrent aux bons noms de fichiers. Par exemple, elle change
|
||
@code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
|
||
|
||
@item configure
|
||
Lance le script @code{configure} avec un certain nombre d'options par
|
||
défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
|
||
spécifiées par l'argument @code{#:configure-flags}.
|
||
|
||
@item build
|
||
Lance @code{make} avec la liste des drapeaux spécifiés avec
|
||
@code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
|
||
défaut), construit avec @code{make -j}.
|
||
|
||
@item check
|
||
Lance @code{make check}, ou une autre cible spécifiée par
|
||
@code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
|
||
l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
|
||
check -j}.
|
||
|
||
@item install
|
||
Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
|
||
|
||
@item patch-shebangs
|
||
Corrige les shebangs des fichiers exécutables installés.
|
||
|
||
@item strip
|
||
Nettoie les symboles de débogage dans les fichiers ELF (à moins que
|
||
@code{#:strip-binaries?} ne soit faux), les copie dans la sortie
|
||
@code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
|
||
@end table
|
||
|
||
@vindex %standard-phases
|
||
Le module du côté du constructeur @code{(guix build gnu-build-system)}
|
||
définie @var{%standard-phases} comme la liste par défaut des phases de
|
||
construction. @var{%standard-phases} est une liste de paires de symboles
|
||
et de procédures, où la procédure implémente la phase en question.
|
||
|
||
La liste des phases utilisées par un paquet particulier peut être modifiée
|
||
avec le paramètre @code{#:phases}. Par exemple, en passant :
|
||
|
||
@example
|
||
#:phases (modify-phases %standard-phases (delete 'configure))
|
||
@end example
|
||
|
||
signifie que toutes les procédures décrites plus haut seront utilisées, sauf
|
||
la phase @code{configure}.
|
||
|
||
En plus, ce système de construction s'assure que l'environnement « standard
|
||
» pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
|
||
libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
|
||
@code{(guix build-system gnu)} pour une liste complète). Nous les appelons
|
||
les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
|
||
ne les mentionne pas.
|
||
@end defvr
|
||
|
||
D'autres objets @code{<build-system>} sont définis pour supporter d'autres
|
||
conventions et outils utilisés par les paquets de logiciels libres. Ils
|
||
héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
|
||
l'ensemble des entrées implicites ajoutées au processus de construction et
|
||
dans la liste des phases exécutées. Certains de ces systèmes de
|
||
construction sont listés ci-dessous.
|
||
|
||
@defvr {Variable Scheme} ant-build-system
|
||
Cette variable est exportée par @code{(guix build-system ant)}. Elle
|
||
implémente la procédure de construction pour les paquets Java qui peuvent
|
||
être construits avec @url{http://ant.apache.org/, l'outil de construction
|
||
Ant}.
|
||
|
||
Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
|
||
(JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
|
||
paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
|
||
et @code{#:jdk} respectivement.
|
||
|
||
Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
|
||
acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
|
||
fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
|
||
construire l'archive jar spécifiée. Dans ce cas, le paramètre
|
||
@code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
|
||
sources, par défaut « src ».
|
||
|
||
Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
|
||
construction minimal pour spécifier la classe principale du jar. Cela rend
|
||
le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
|
||
utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
|
||
défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
|
||
peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
|
||
@code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
|
||
peuvent pas être utilisées comme des tests.
|
||
|
||
Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
|
||
Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
|
||
tâche « jar » sera lancée.
|
||
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} android-ndk-build-system
|
||
@cindex Distribution android
|
||
@cindex système de construction Android NDK
|
||
Cette variable est exportée par @code{(guix build-system android-ndk)}.
|
||
Elle implémente une procédure de construction pour les paquets du NDK
|
||
Android (@i{native development kit}) avec des processus de construction
|
||
spécifiques à Guix.
|
||
|
||
Le système de construction suppose que les paquets installent leur interface
|
||
publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
|
||
« out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
|
||
« out ».
|
||
|
||
Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
|
||
pas de fichiers en conflit.
|
||
|
||
Pour l'instant, la compilation croisée n'est pas supportées — donc pour
|
||
l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
|
||
des outils de l'hôte.
|
||
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} asdf-build-system/source
|
||
@defvrx {Variable Scheme} asdf-build-system/sbcl
|
||
@defvrx {Variable Scheme} asdf-build-system/ecl
|
||
|
||
Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
|
||
les procédures de constructions pour les paquets en Common Lisp qui
|
||
utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
|
||
un dispositif de définition de systèmes pour les programmes et les
|
||
bibliothèques en Common Lisp.
|
||
|
||
Le système @code{asdf-build-system/source} installe les paquets au format
|
||
source qui peuvent être chargés avec n'importe quelle implémentation de
|
||
common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
|
||
installent des binaires au format qu'un implémentation particulière
|
||
comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
|
||
produire des programmes exécutables ou des images lisp qui contiennent un
|
||
ensemble de paquets pré-chargés.
|
||
|
||
Le système de construction utilise des conventions de nommage. Pour les
|
||
paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
|
||
lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
|
||
|
||
En plus, le paquet source correspondant devrait étiquetté avec la même
|
||
convention que les paquets python (voir @ref{Modules python}), avec le
|
||
préfixe @code{cl-}.
|
||
|
||
Pour les paquets binaires, chaque système devrait être défini comme un
|
||
paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
|
||
peut créer des variantes du paquet pour construire tous les systèmes. Les
|
||
paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
|
||
contenir plusieurs systèmes.
|
||
|
||
Pour créer des programmes exécutables et des images, les procédures côté
|
||
construction @code{build-program} et @code{build-image} peuvent être
|
||
utilisées. Elles devraient être appelées dans une phase de construction
|
||
après la phase @code{create-symlinks} pour que le système qui vient d'être
|
||
construit puisse être utilisé dans l'image créée. @code{build-program}
|
||
requiert une liste d'expressions Common Lisp dans l'argument
|
||
@code{#:entry-program}.
|
||
|
||
Si le système n'est pas défini dans son propre fichier @code{.asd} du même
|
||
nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
|
||
spécifier dans quel fichier le système est défini. De plus, si le paquet
|
||
défini un système pour ses tests dans un fichier séparé, il sera chargé
|
||
avant que les tests ne soient lancés s'il est spécifié par le paramètre
|
||
@code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
|
||
@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
|
||
@code{test.asd} seront testés.
|
||
|
||
Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
|
||
différente de ce que la convention de nommage suggère, le paramètre
|
||
@code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
|
||
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} cargo-build-system
|
||
@cindex Langage de programmation Rust
|
||
@cindex Cargo (système de construction Rust)
|
||
Cette variable est exportée par @code{(guix build-system cargo)}. Elle
|
||
supporte les construction de paquets avec Cargo, le système de construction
|
||
du @uref{https://www.rust-lang.org, langage de programmation Rust}.
|
||
|
||
Dans sa phase @code{configure}, ce système de construction remplace les
|
||
dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
|
||
Guix. La phase @code{install} installe les binaires et installe aussi le
|
||
code source et le fichier @file{Cargo.toml}.
|
||
@end defvr
|
||
|
||
@cindex Clojure (langage de programmation)
|
||
@cindex système de construction Clojure simple
|
||
@defvr {Variable Scheme} clojure-build-system
|
||
Cette variable est exportée par @code{(guix build-system clojure)}. Elle
|
||
implémente une procédure de construction des paquets simple qui utilise le
|
||
bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
|
||
encore supportée.
|
||
|
||
Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
|
||
entrées. Des paquets différents peuvent être spécifiés avec les paramètres
|
||
@code{#:clojure}, @code{#:jdk} et @code{#:zip}.
|
||
|
||
Une liste de répertoires sources, de répertoires de tests et de noms de jar
|
||
peuvent être spécifiés avec les paramètres @code{#:source-dirs},
|
||
@code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
|
||
la classe principale peuvent être spécifiés avec les paramètres
|
||
@code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
|
||
documentés plus bas.
|
||
|
||
Ce système de construction est une extension de @var{ant-build-system}, mais
|
||
avec les phases suivantes modifiées :
|
||
|
||
@table @code
|
||
|
||
@item build
|
||
Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
|
||
sources et lance @command{jar} pour créer les fichiers jar à partir des
|
||
fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
|
||
d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
|
||
La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
|
||
consistent en des symboles représentant des bibliothèque Clojure ou le mot
|
||
clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
|
||
trouvées dans les répertoires des sources. Le paramètre
|
||
@code{#:omit-source?} décide si les sources devraient être incluses dans les
|
||
fichiers jar.
|
||
|
||
@item check
|
||
Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
|
||
spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
|
||
signification est analogue à celle de @code{#:aot-include} et
|
||
@code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
|
||
maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
|
||
tests. Le paramètre @code{#:tests?} décide si les tests devraient être
|
||
lancés.
|
||
|
||
@item install
|
||
Cette phase installe tous les fichiers jar précédemment construits.
|
||
@end table
|
||
|
||
En dehors de cela, le système de construction contient aussi la phase
|
||
suivante :
|
||
|
||
@table @code
|
||
|
||
@item install-doc
|
||
Cette phase installe tous les fichiers dans le répertoire de plus haut
|
||
niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
|
||
regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
|
||
(récursivement) dans les répertoires de documentations spécifiés dans
|
||
@code{#:doc-dirs} sont aussi installés.
|
||
@end table
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} cmake-build-system
|
||
Cette variable est exportée par @code{(guix build-system cmake)}. Elle
|
||
implémente la procédure de construction des paquets qui utilisent
|
||
l'@url{http://www.cmake.org, outil de construction CMake}.
|
||
|
||
Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
|
||
entrées. Le paquet utilisé peut être spécifié par le paramètre
|
||
@code{#:cmake}.
|
||
|
||
Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
|
||
passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
|
||
spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
|
||
par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
|
||
les informations de débogage » en plus court), ce qui signifie en gros que
|
||
le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
|
||
défaut.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} go-build-system
|
||
Cette variable est exportée par @code{(guix build-system go)}. Elle
|
||
implémente la procédure pour les paquets Go utilisant les
|
||
@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
|
||
mécanismes de construction Go} standard.
|
||
|
||
L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
|
||
dans certains cas, @code{#:unpack-path}. Le
|
||
@url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
|
||
correspond au chemin dans le système de fichiers attendu par le script de
|
||
construction du paquet et les paquets qui s'y réfèrent et fournit une
|
||
manière unique de se référer à un paquet Go. Il est typiquement basé sur
|
||
une combinaison de l'URI du code source du paquet et d'une structure
|
||
hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
|
||
le code source du paquet dans une structure de répertoires différente que
|
||
celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
|
||
utilisé dans ces cas-là.
|
||
|
||
Les paquets qui fournissent des bibliothèques Go devraient être installées
|
||
avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
|
||
par défaut, contrôle l'installation du code source. Elle peut être mise à
|
||
@code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} glib-or-gtk-build-system
|
||
Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
|
||
Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
|
||
GTK+.
|
||
|
||
Ce système de construction ajoute les deux phases suivantes à celles
|
||
définies par @var{gnu-build-system} :
|
||
|
||
@table @code
|
||
@item glib-or-gtk-wrap
|
||
La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
|
||
@file{bin/} sont capable de trouver les « schemas » GLib et les
|
||
@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
|
||
GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
|
||
lancement qui initialisent correctement les variables d'environnement
|
||
@code{XDG_DATA_DIRS} et @code{GTK_PATH}.
|
||
|
||
Il est possible d'exclure des sorties spécifiques de ce processus
|
||
d'enveloppage en listant leur nom dans le paramètre
|
||
@code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
|
||
est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
|
||
ajouterait une dépendance inutile vers GLib et GTK+.
|
||
|
||
@item glib-or-gtk-compile-schemas
|
||
La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
|
||
@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
|
||
schémas GSettings} de GLib sont compilés. La compilation est effectuée par
|
||
le programme @command{glib-compile-schemas}. Il est fournit par le paquet
|
||
@code{glib:bin} qui est automatiquement importé par le système de
|
||
construction. Le paquet @code{glib} qui fournit
|
||
@command{glib-compile-schemas} peut être spécifié avec le paramètre
|
||
@code{#:glib}.
|
||
@end table
|
||
|
||
Ces deux phases sont exécutées après la phase @code{install}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} guile-build-system
|
||
Ce système de construction sert aux paquets Guile qui consistent
|
||
exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
|
||
makefile, sans parler d'un script @file{configure}. Il compile le code
|
||
Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
|
||
GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
|
||
@file{.go} aux bons emplacements. Il installe aussi la documentation.
|
||
|
||
Ce système de construction supporte la compilation croisée en utilisant
|
||
l'option @code{--target} de @command{guild compile}.
|
||
|
||
Les paquets construits avec @code{guile-build-system} doivent fournir un
|
||
paquet Guile dans leur champ @code{native-inputs}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} minify-build-system
|
||
Cette variable est exportée par @code{(guix build-system minify)}. Elle
|
||
implémente une procédure de minification pour des paquets JavaScript
|
||
simples.
|
||
|
||
Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
|
||
compresser tous les fichiers JavaScript du répertoire @file{src}. Un
|
||
minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
|
||
mais il est attendu que ce paquet écrive le code minifié sur la sortie
|
||
standard.
|
||
|
||
Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
|
||
répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
|
||
utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} ocaml-build-system
|
||
Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
|
||
implémente une procédure de construction pour les paquets
|
||
@uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
|
||
commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
|
||
des commandes diverses pour être construit. Ce système de construction en
|
||
essaye certaines.
|
||
|
||
Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
|
||
haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
|
||
setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
|
||
construction supposera que ces fichiers ont été générés par
|
||
@uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
|
||
d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
|
||
désactivés. Vous pouvez passer des drapeaux de configuration et de
|
||
consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
|
||
@code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
|
||
utilisés pour activer les tests. La clef @code{#:use-make?} peut être
|
||
utilisée pour outrepasser ce système dans les phases de construction et
|
||
d'installation.
|
||
|
||
Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
|
||
d'un script configure écrit à la main qui demande un format différent de
|
||
celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
|
||
la clef @code{#:configure-flags}.
|
||
|
||
Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
|
||
@code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
|
||
construction et l'installation avec la clef @code{#:make-flags}.
|
||
|
||
Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
|
||
plus ou moins standard pour leur système de construction. Dans ce cas, le
|
||
système de construction lancera @code{ocaml pkg/pkg.ml} ou
|
||
@code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
|
||
requis. Des drapeaux supplémentaires peuvent être passés via la clef
|
||
@code{#:bulid-flags}. L'installation se fait avec
|
||
@command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
|
||
ajouté au champ @code{native-inputs} de la définition du paquet.
|
||
|
||
Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
|
||
dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
|
||
dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
|
||
leur propre répertoire de module, ce qui est normalement correct puisqu'il
|
||
s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
|
||
bibliothèques ne peuvent pas y être trouvées et on utilise
|
||
@code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
|
||
@file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
|
||
@file{.so} devraient être installées.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} python-build-system
|
||
Cette variable est exportée par @code{(guix build-system python)}. Elle
|
||
implémente la procédure de construction plus ou moins 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{}}.
|
||
|
||
Pour les paquets qui installent des programmes autonomes dans @code{bin/},
|
||
elle prend soin d'envelopper ces binaires pour que leur variable
|
||
d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
|
||
Python dont ils dépendent.
|
||
|
||
Le paquet Python utilisé pour effectuer la construction peut être spécifié
|
||
avec le paramètre @code{#:python}. C'est une manière utile de forcer un
|
||
paquet à être construit avec une version particulière de l'interpréteur
|
||
python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
|
||
une version de l'interpréteur.
|
||
|
||
Par défaut Guix appelle @code{setup.py} sous le contrôle de
|
||
@code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
|
||
pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
|
||
en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} perl-build-system
|
||
Cette variable est exportée par @code{(guix build-system perl)}. Elle
|
||
implémente la procédure de construction standarde des paquets Perl, qui
|
||
consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
|
||
suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
|
||
Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
|
||
install}, en fonction de la présence de @code{Build.PL} ou
|
||
@code{Makefile.PL} dans la distribution du paquet. Le premier a la
|
||
préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
|
||
la distribution du paquet. Cette préférence peut être inversée en
|
||
spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
|
||
|
||
L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
|
||
passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
|
||
@code{#:module-build-flags}, respectivement.
|
||
|
||
Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} r-build-system
|
||
Cette variable est exportée par @code{(guix build-system r)}. Elle
|
||
implémente la procédure de construction utilisée par les paquets
|
||
@uref{http://r-project.org, R} qui consiste à lancer à peine plus que
|
||
@code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
|
||
@code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
|
||
sont lancés après l'installation avec la fonction R
|
||
@code{tools::testInstalledPackage}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} texlive-build-system
|
||
Cette variable est exportée par @code{(guix build-system texlive)}. Elle
|
||
est utilisée pour construire des paquets TeX en mode batch avec le moteur
|
||
spécifié. Le système de construction initialise la variable
|
||
@code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
|
||
|
||
Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
|
||
par @code{ins}. Un moteur et un format différent peuvent être spécifiés
|
||
avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
|
||
peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
|
||
liste de noms de fichiers. Le système de construction ajoute uniquement
|
||
@code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
|
||
tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
|
||
arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
|
||
respectivement.
|
||
|
||
Le paramètre @code{#:tex-directory} dit au système de construction où
|
||
installer les fichiers construit dans l'arbre texmf.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} ruby-build-system
|
||
Cette variable est exportée par @code{(guix build-system ruby)}. Elle
|
||
implémenter la procédure de construction RubyGems utilisée par les paquets
|
||
Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
|
||
|
||
Le champ @code{source} d'un paquet qui utilise ce système de construction
|
||
référence le plus souvent une archive gem, puisque c'est le format utilisé
|
||
par les développeurs Ruby quand ils publient leur logiciel. Le système de
|
||
construction décompresse l'archive gem, éventuellement en corrigeant les
|
||
sources, lance la suite de tests, recompresse la gemme et l'installe. En
|
||
plus, des répertoires et des archives peuvent être référencés pour permettre
|
||
de construire des gemmes qui n'ont pas été publiées depuis Git ou une
|
||
archive de sources traditionnelle.
|
||
|
||
Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
|
||
Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
|
||
peut être spécifiée avec le paramètre @code{#:gem-flags}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} waf-build-system
|
||
Cette variable est exportée par @code{(guix build-system waf)}. Elle
|
||
implémente une procédure de construction autour du script @code{waf}. Les
|
||
phases usuelles — @code{configure}, @code{build} et @code{install} — sont
|
||
implémentée en passant leur nom en argument au script @code{waf}.
|
||
|
||
Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
|
||
Python utilisé pour lancer le script peut être spécifié avec le paramètre
|
||
@code{#:python}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} scons-build-system
|
||
Cette variable est exportée par @code{(guix build-system scons)}. Elle
|
||
implémente la procédure de construction utilisée par l'outil de construction
|
||
SCons. Ce système de construction lance @code{scons} pour construire le
|
||
paquet, @code{scons test} pour lancer les tests puis @code{scons install}
|
||
pour installer le paquet.
|
||
|
||
On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
|
||
avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
|
||
lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
|
||
avec le paramètre @code{#:scons}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} haskell-build-system
|
||
Cette variable est exportée par @code{(guix build-system haskell)}. Elle
|
||
implémente la procédure de construction Cabal utilisée par les paquets
|
||
Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
|
||
--prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
|
||
que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
|
||
pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
|
||
dépôt en lecture-seule du compilateur, le système de construction utilise
|
||
@code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
|
||
register}. En plus, le système de construction génère la documentation du
|
||
paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
|
||
@code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
|
||
peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
|
||
fichier @code{Setup.hs} n'est pas trouvé, le système de construction
|
||
cherchera @code{Setup.lhs} à la place.
|
||
|
||
Le compilateur Haskell utilisé peut être spécifié avec le paramètre
|
||
@code{#:haskell} qui a pour valeur par défaut @code{ghc}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} dub-build-system
|
||
Cette variable est exportée par @code{(guix build-system dub)}. Elle
|
||
implémente la procédure de construction Dub utilisée par les paquets D qui
|
||
consiste à lancer @code{dub build} et @code{dub run}. L'installation est
|
||
effectuée en copiant les fichiers manuellement.
|
||
|
||
Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
|
||
qui vaut par défaut @code{ldc}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} emacs-build-system
|
||
Cette variable est exportée par @code{(guix build-system emacs)}. Elle
|
||
implémente une procédure d'installation similaire au système de gestion de
|
||
paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
|
||
|
||
Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
|
||
tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
|
||
gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
|
||
dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
|
||
paquet est installé dans son propre répertoire dans
|
||
@file{share/emacs/site-lisp/guix.d}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} font-build-system
|
||
This variable is exported by @code{(guix build-system font)}. It implements
|
||
an installation procedure for font packages where upstream provides
|
||
pre-compiled TrueType, OpenType, etc.@: font files that merely need to be
|
||
copied into place. It copies font files to standard locations in the output
|
||
directory.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} meson-build-system
|
||
Cette variable est exportée par @code{(guix build-system meson)}. Elle
|
||
implémente la procédure de construction des paquets qui utilisent
|
||
@url{http://mesonbuild.com, Meson} comme système de construction.
|
||
|
||
Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
|
||
l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
|
||
@code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
|
||
@code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
|
||
@code{RUNPATH} des binaires et les bibliothèques qu'il installe.
|
||
|
||
Ce système de construction est une extension de @var{gnu-build-system}, mais
|
||
avec les phases suivantes modifiées pour Meson :
|
||
|
||
@table @code
|
||
|
||
@item configure
|
||
La phase lance @code{meson} avec les drapeaux spécifiés dans
|
||
@code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
|
||
initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
|
||
dans @code{#:build-type}.
|
||
|
||
@item build
|
||
La phase lance @code{ninja} pour construire le paquet en parallèle par
|
||
défaut, mais cela peut être changé avec @code{#:parallel-build?}.
|
||
|
||
@item check
|
||
La phase lance @code{ninja} avec la cible spécifiée dans
|
||
@code{#:test-target}, qui est @code{"test"} par défaut.
|
||
|
||
@item install
|
||
La phase lance @code{ninja install} et ne peut pas être changée.
|
||
@end table
|
||
|
||
En dehors de cela, le système de construction ajoute aussi la phase suivante
|
||
:
|
||
|
||
@table @code
|
||
|
||
@item fix-runpath
|
||
Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
|
||
dont ils ont besoin. Elle cherche les bibliothèques requises dans les
|
||
sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
|
||
là où c'est nécessaire. Elle supprime aussi les références aux
|
||
bibliothèques laissées là par la phase de construction par
|
||
@code{meson-for-build} comme les dépendances des tests, qui ne sont pas
|
||
vraiment requises pour le programme.
|
||
|
||
@item glib-or-gtk-wrap
|
||
Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
|
||
n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
|
||
|
||
@item glib-or-gtk-compile-schemas
|
||
Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
|
||
n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
|
||
@end table
|
||
@end defvr
|
||
|
||
Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
|
||
système de construction « trivial » est disponible. Il est trivial dans le
|
||
sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
|
||
implicite, et n'a pas de notion de phase de construction.
|
||
|
||
@defvr {Variable Scheme} trivial-build-system
|
||
Cette variable est exportée par @code{(guix build-system trivial)}.
|
||
|
||
Ce système de construction requiert un argument @code{#:builder}. Cet
|
||
argument doit être une expression Scheme qui construit la sortie du paquet —
|
||
comme avec @code{build-expression->derivation} (@pxref{Dérivations,
|
||
@code{build-expression->derivation}}).
|
||
@end defvr
|
||
|
||
@node Le dépôt
|
||
@section Le dépôt
|
||
|
||
@cindex dépôt
|
||
@cindex éléments du dépôt
|
||
@cindex chemins dans le dépôt
|
||
|
||
Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
|
||
bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
|
||
sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
|
||
parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
|
||
qui contient des informations comme les chemins du dépôt auxquels se
|
||
réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
|
||
@emph{valides} — les résultats d'une construction réussie. Cette base de
|
||
données se trouve dans @file{@var{localstatedir}/guix/db} où
|
||
@var{localstatedir} est le répertoire d'états spécifié @i{via} @option
|
||
{--localstatedir} à la configuration, typiquement @file{/var}.
|
||
|
||
C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
|
||
clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
|
||
clients se connectent au démon par un socket Unix-domain, envoient une
|
||
requête dessus et lisent le résultat — ce sont des appels de procédures
|
||
distantes, ou RPC.
|
||
|
||
@quotation Remarque
|
||
Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
|
||
@file{/gnu/store} directement. Cela entraînerait des incohérences et
|
||
casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
|
||
(@pxref{Introduction}).
|
||
|
||
@xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
|
||
sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
|
||
modifications accidentelles.
|
||
@end quotation
|
||
|
||
Le module @code{(guix store)} fournit des procédures pour se connecter au
|
||
démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
|
||
@code{open-connection}, et donc toutes les commandes @command{guix} se
|
||
connectent au démon local ou à l'URI spécifiée par la variable
|
||
d'environnement @code{GUIX_DAEMON_SOCKET}.
|
||
|
||
@defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
|
||
Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
|
||
de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
|
||
nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
|
||
des noms de fichiers, les schémas d'URI supportés sont :
|
||
|
||
@table @code
|
||
@item file
|
||
@itemx unix
|
||
Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
|
||
est équivalent à @file{/var/guix/daemon-socket/socket}.
|
||
|
||
@item guix
|
||
@cindex démon, accès distant
|
||
@cindex accès distant au démon
|
||
@cindex démon, paramètres de grappes
|
||
@cindex grappes, paramètres du démon
|
||
Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
|
||
authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
|
||
éventuellement un numéro de port (par défaut 44146) :
|
||
|
||
@example
|
||
guix://master.guix.example.org:1234
|
||
@end example
|
||
|
||
Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
|
||
de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
|
||
construction sur @code{master.guix.example.org}.
|
||
|
||
L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
|
||
dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
|
||
@code{--listen}}).
|
||
|
||
@item ssh
|
||
@cindex accès SSH au démon de construction
|
||
Ces URI vous permettent de vous connecter au démon à distance à travers
|
||
SSH@footnote{Cette fonctionnalité requiert Guile-SSH
|
||
(@pxref{Prérequis}).}.
|
||
|
||
@example
|
||
ssh://charlie@@guix.example.org:22
|
||
@end example
|
||
|
||
Comme pour @command{guix copy}, les fichiers de configuration du client
|
||
OpenSSH sont respectés (@pxref{Invoquer guix copy}).
|
||
@end table
|
||
|
||
Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
|
||
|
||
@c XXX: Remove this note when the protocol incurs fewer round trips
|
||
@c and when (guix derivations) no longer relies on file system access.
|
||
@quotation Remarque
|
||
La capacité de se connecter à un démon de construction distant est considéré
|
||
comme expérimental à la version @value{VERSION}. Contactez-nous pour
|
||
partager vos problèmes ou des suggestions que vous pourriez avoir
|
||
(@pxref{Contribuer}).
|
||
@end quotation
|
||
@end defvr
|
||
|
||
@deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
|
||
Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
|
||
de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
|
||
réserver un peu de place supplémentaire sur le système de fichiers pour que
|
||
le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
|
||
un objet serveur.
|
||
|
||
@var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
|
||
l'emplacement normal en fonction des options données à @command{configure}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} close-connection @var{server}
|
||
Ferme la connexion au @var{serveur}.
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} current-build-output-port
|
||
Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
|
||
journaux de construction et d'erreur envoyés par le démon devraient être
|
||
écrits.
|
||
@end defvr
|
||
|
||
Les procédures qui font des RPC prennent toutes un objet serveur comme
|
||
premier argument.
|
||
|
||
@deffn {Procédure Scheme} valid-path? @var{server} @var{path}
|
||
@cindex éléments du dépôt invalides
|
||
Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
|
||
@code{#f} sinon (un élément invalide peut exister sur le disque mais rester
|
||
invalide, par exemple parce que c'est le résultat d'une construction annulée
|
||
ou échouée).
|
||
|
||
Une condition @code{&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}).
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
|
||
Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
|
||
chemin. @var{references} est la liste des chemins du dépôt référencés par
|
||
le chemin du dépôt qui en résulte.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
|
||
Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
|
||
chemins de dérivations) et retourne quand le travailleur a fini de les
|
||
construire. Renvoie @code{#t} en cas de réussite.
|
||
@end deffn
|
||
|
||
Remarque que le module @code{(guix monads)} fournit une monad 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}).
|
||
|
||
@c FIXME
|
||
@i{Cette section est actuellement incomplète.}
|
||
|
||
@node Dérivations
|
||
@section Dérivations
|
||
|
||
@cindex dérivations
|
||
Les actions de construction à bas-niveau et l'environnement dans lequel
|
||
elles sont effectuées sont représentés par des @dfn{dérivations}. Une
|
||
dérivation contient cet ensemble d'informations :
|
||
|
||
@itemize
|
||
@item
|
||
Les sorties de la dérivation — les dérivations produisent au moins un
|
||
fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
|
||
|
||
@item
|
||
Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
|
||
fichiers dans le dépôt (correctifs, scripts de construction, etc).
|
||
|
||
@item
|
||
Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
|
||
|
||
@item
|
||
Le nom de fichier d'un script de construction dans le dépôt avec les
|
||
arguments à lui passer.
|
||
|
||
@item
|
||
Une liste de variables d'environnement à définir.
|
||
|
||
@end itemize
|
||
|
||
@cindex chemin de dérivation
|
||
Les dérivations permettent aux client du démon de communiquer des actions de
|
||
construction dans le dépôt. Elles existent sous deux formes : en tant que
|
||
représentation en mémoire, à la fois côté client et démon, et en tant que
|
||
fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
|
||
des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
|
||
passés à la procédure @code{build-derivations} pour effectuer les actions de
|
||
construction qu'ils prescrivent (@pxref{Le dépôt}).
|
||
|
||
@cindex dérivations à sortie fixe
|
||
Des opérations comme le téléchargement de fichiers et la récupération de
|
||
sources gérés par un logiciel de contrôle de version pour lesquels le hash
|
||
du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
|
||
sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
|
||
dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
|
||
source téléchargé produit le même résultat quelque soit la méthode de
|
||
téléchargement utilisée.
|
||
|
||
Le module @code{(guix derivations)} fournit une représentation des
|
||
dérivations comme des objets Scheme, avec des procédures pour créer et
|
||
manipuler des dérivations. La primitive de plus bas-niveau pour créer une
|
||
dérivation est la procédure @code{derivation} :
|
||
|
||
@deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
|
||
@var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
|
||
[#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
|
||
[#:system (%current-system)] [#:references-graphs #f] @
|
||
[#:allowed-references #f] [#:disallowed-references #f] @
|
||
[#:leaked-env-vars #f] [#:local-build? #f] @
|
||
[#:substitutable? #t] [#:properties '()]
|
||
Construit une dérivation avec les arguments donnés et renvoie l'objet
|
||
@code{<derivation>} obtenu.
|
||
|
||
Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
|
||
sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
|
||
à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
|
||
@var{recursive?} est vrai, alors la sortie fixe peut être un fichier
|
||
exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
|
||
contenant la sortie.
|
||
|
||
Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
|
||
paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
|
||
des références de chaque chemin du dépôt est exporté dans l'environnement de
|
||
construction dans le fichier correspondant, dans un simple format texte.
|
||
|
||
Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
|
||
d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
|
||
peut faire référence. De même, @var{disallowed-references}, si vrai, doit
|
||
être une liste de choses que la sortie ne doit @emph{pas} référencer.
|
||
|
||
Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
|
||
chaînes de caractères qui désignent les variables d'environnements qui
|
||
peuvent « fuiter » de l'environnement du démon dans l'environnement de
|
||
construction. Ce n'est possible que pour les dérivations à sortie fixe —
|
||
c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
|
||
permettre à des variables comme @code{http_proxy} d'être passées aux
|
||
dérivations qui téléchargent des fichiers.
|
||
|
||
Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
|
||
bon candidat pour le déchargement et devrait plutôt être construit
|
||
localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
|
||
dérivations où le coût du transfert de données est plus important que les
|
||
bénéfices.
|
||
|
||
Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
|
||
sortie de la dérivation ne devraient pas être utilisés
|
||
(@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
|
||
qui utilisent des détails du jeu d'instruction du CPU hôte.
|
||
|
||
@var{properties} doit être une liste d'association décrivant les «
|
||
propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
|
||
interprétée, dans la dérivation.
|
||
@end deffn
|
||
|
||
@noindent
|
||
Voici un exemple avec un script shell comme constructeur, en supposant que
|
||
@var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
|
||
exécutable Bash dans le dépôt :
|
||
|
||
@lisp
|
||
(use-modules (guix utils)
|
||
(guix store)
|
||
(guix derivations))
|
||
|
||
(let ((builder ; ajoute le script Bash au dépôt
|
||
(add-text-to-store store "my-builder.sh"
|
||
"echo hello world > $out\n" '())))
|
||
(derivation store "foo"
|
||
bash `("-e" ,builder)
|
||
#:inputs `((,bash) (,builder))
|
||
#:env-vars '(("HOME" . "/homeless"))))
|
||
@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
|
||
@end lisp
|
||
|
||
Comme on pourrait s'en douter, cette primitive est difficile à utiliser
|
||
directement. Une meilleure approche est d'écrire les scripts de
|
||
construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
|
||
le code de construction comme une « G-expression » et de la passer à
|
||
@code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
|
||
|
||
Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
|
||
une dérivation donc le code de construction était écrit en Scheme se faisait
|
||
avec @code{build-expression->derivation}, documenté plus bas. Cette
|
||
procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
|
||
est meilleure.
|
||
|
||
@deffn {Procédure Scheme} build-expression->derivation @var{store} @
|
||
@var{name} @var{exp} @
|
||
[#:system (%current-system)] [#:inputs '()] @
|
||
[#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
|
||
[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
|
||
[#:references-graphs #f] [#:allowed-references #f] @
|
||
[#:disallowed-references #f] @
|
||
[#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
|
||
Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
|
||
constructeur pour la dérivation @var{name}. @var{inputs} doit être une
|
||
liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
|
||
omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
|
||
modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
|
||
compilés et rendus disponibles dans le chemin de chargement pendant
|
||
l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
|
||
gnu-build-system))}.
|
||
|
||
@var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
|
||
une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
|
||
une liste de paires de chaînes de caractères et de chemin de sortie
|
||
construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
|
||
liste de paires de chaînes de caractères spécifiant le nom et la valeur de
|
||
variables d'environnement visibles pour le constructeur. Le constructeur
|
||
termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
|
||
@var{exp} renvoie @code{#f}, la construction est considérée en échec.
|
||
|
||
@var{exp} est construite avec @var{guile-for-build} (une dérivation).
|
||
Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
|
||
@code{%guile-for-build} est utilisée à la place.
|
||
|
||
Voir la procédure @code{derivation} pour la signification de
|
||
@var{references-graph}, @var{allowed-references},
|
||
@var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
|
||
@end deffn
|
||
|
||
@noindent
|
||
Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
|
||
un fichier :
|
||
|
||
@lisp
|
||
(let ((builder '(let ((out (assoc-ref %outputs "out")))
|
||
(mkdir out) ; create /gnu/store/@dots{}-goo
|
||
(call-with-output-file (string-append out "/test")
|
||
(lambda (p)
|
||
(display '(hello guix) p))))))
|
||
(build-expression->derivation store "goo" builder))
|
||
|
||
@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
|
||
@end lisp
|
||
|
||
|
||
@node La monad du dépôt
|
||
@section La monad du dépôt
|
||
|
||
@cindex monad
|
||
|
||
Les procédures qui travaillent sur le dépôt décrites dans les sections
|
||
précédentes prennent toutes une connexion ouverte au démon de construction
|
||
comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
|
||
elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
|
||
|
||
Le premier point est embêtant : on doit se balader avec la connexion au
|
||
démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
|
||
des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
|
||
prennent. Le deuxième point est problématique : comme les opérations sur le
|
||
dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
|
||
être enchaînés correctement.
|
||
|
||
@cindex valeurs monadiques
|
||
@cindex fonctions monadiques
|
||
C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
|
||
module fournit un cadre pour travailler avec des @dfn{monads}, en
|
||
particulier une 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}.
|
||
|
||
Considérez cette procédure « normale » :
|
||
|
||
@example
|
||
(define (sh-symlink store)
|
||
;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
|
||
(let* ((drv (package-derivation store bash))
|
||
(out (derivation->output-path drv))
|
||
(sh (string-append out "/bin/bash")))
|
||
(build-expression->derivation store "sh"
|
||
`(symlink ,sh %output))))
|
||
@end example
|
||
|
||
En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
|
||
en une fonction monadique :
|
||
|
||
@example
|
||
(define (sh-symlink)
|
||
;; Pareil, mais renvoie une valeur monadique.
|
||
(mlet %store-monad ((drv (package->derivation bash)))
|
||
(gexp->derivation "sh"
|
||
#~(symlink (string-append #$drv "/bin/bash")
|
||
#$output))))
|
||
@end example
|
||
|
||
Il y a plusieurs choses à remarquer avec cette deuxième version : le
|
||
paramètre @code{store} est maintenant implicitement « enfilé » dans les
|
||
appels aux procédures monadiques @code{package->derivation} et
|
||
@code{gexp->derivation}, et la valeur monadique renvoyée par
|
||
@code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
|
||
simple @code{let}.
|
||
|
||
Il se trouve que l'appel à @code{package->derivation} peut même être omis
|
||
puisqu'il aura lieu implicitement, comme nous le verrons plus tard
|
||
(@pxref{G-Expressions}) :
|
||
|
||
@example
|
||
(define (sh-symlink)
|
||
(gexp->derivation "sh"
|
||
#~(symlink (string-append #$bash "/bin/bash")
|
||
#$output)))
|
||
@end example
|
||
|
||
@c See
|
||
@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
|
||
@c for the funny quote.
|
||
L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. 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
|
||
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
|
||
@code{run-with-store}.
|
||
|
||
@example
|
||
(run-with-store (open-connection) (sh-symlink))
|
||
@result{} /gnu/store/...-sh-symlink
|
||
@end example
|
||
|
||
Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
|
||
de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
|
||
procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
|
||
première est utilisée pour « lancer » une seule valeur monadique à travers
|
||
le dépôt :
|
||
|
||
@example
|
||
scheme@@(guile-user)> ,run-in-store (package->derivation hello)
|
||
$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
|
||
@end example
|
||
|
||
La deuxième entre dans une console récursive, où toutes les valeurs de
|
||
retour sont automatiquement lancées à travers le dépôt :
|
||
|
||
@example
|
||
scheme@@(guile-user)> ,enter-store-monad
|
||
store-monad@@(guile-user) [1]> (package->derivation hello)
|
||
$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
|
||
store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
|
||
$3 = "/gnu/store/@dots{}-foo"
|
||
store-monad@@(guile-user) [1]> ,q
|
||
scheme@@(guile-user)>
|
||
@end example
|
||
|
||
@noindent
|
||
Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
|
||
@code{store-monad}.
|
||
|
||
Les formes syntaxiques principales pour utiliser des monads en général sont
|
||
disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
|
||
|
||
@deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
|
||
Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
|
||
comme une @var{monad}.
|
||
@end deffn
|
||
|
||
@deffn {Syntaxe Scheme} return @var{val}
|
||
Renvoie une valeur monadique qui encapsule @var{val}.
|
||
@end deffn
|
||
|
||
@deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
|
||
@dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
|
||
procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
|
||
souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
|
||
voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
|
||
langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
|
||
cet exemple :
|
||
|
||
@example
|
||
(run-with-state
|
||
(with-monad %state-monad
|
||
(>>= (return 1)
|
||
(lambda (x) (return (+ 1 x)))
|
||
(lambda (x) (return (* 2 x)))))
|
||
'some-state)
|
||
|
||
@result{} 4
|
||
@result{} some-state
|
||
@end example
|
||
@end deffn
|
||
|
||
@deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
|
||
@var{body} ...
|
||
@deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
|
||
@var{body} ...
|
||
Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
|
||
@var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
|
||
on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
|
||
» dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
|
||
cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
|
||
(@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
|
||
comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
|
||
vers la droite. La dernière expression de @var{body} doit être une
|
||
expression monadique et son résultat deviendra le résultat de @code{mlet} ou
|
||
@code{mlet*} lorsque lancé dans la @var{monad}.
|
||
|
||
@code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
|
||
(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
|
||
@end deffn
|
||
|
||
@deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
|
||
Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
|
||
renvoie le résultat de la dernière expression. Chaque expression dans la
|
||
séquence doit être une expression monadique.
|
||
|
||
Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
|
||
des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
|
||
@code{begin}, mais appliqué à des expressions monadiques.
|
||
@end deffn
|
||
|
||
@deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
|
||
Lorsque la @var{condition} est vraie, évalue la séquence des expressions
|
||
monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
|
||
@var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
|
||
actuelle. Cahque 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
|
||
monadique.
|
||
@end deffn
|
||
|
||
@cindex monad d'état
|
||
Le module @code{(guix monads)} fournit la @dfn{monad 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
|
||
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
|
||
incrémente aussi la valeur actuelle de l'état :
|
||
|
||
@example
|
||
(define (square x)
|
||
(mlet %state-monad ((count (current-state)))
|
||
(mbegin %state-monad
|
||
(set-current-state (+ 1 count))
|
||
(return (* x x)))))
|
||
|
||
(run-with-state (sequence %state-monad (map square (iota 3))) 0)
|
||
@result{} (0 1 4)
|
||
@result{} 3
|
||
@end example
|
||
|
||
Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
|
||
d'état supplémentaire, qui est le nombre d'appels à @code{square}.
|
||
@end defvr
|
||
|
||
@deffn {Procédure monadique} current-state
|
||
Renvoie l'état actuel dans une valeur monadique.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} set-current-state @var{value}
|
||
Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
|
||
valeur monadique.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} state-push @var{value}
|
||
Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
|
||
renvoie l'état précédent dans une valeur monadique.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} state-pop
|
||
Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
|
||
monadique. L'état est supposé être une liste.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
|
||
Lance la valeur monadique @var{mval} avec @var{state} comme valeur
|
||
initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
|
||
résultat.
|
||
@end deffn
|
||
|
||
L'interface principale avec la monad 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}.
|
||
|
||
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 »
|
||
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
|
||
@var{store}, une connexion ouvert au dépôt.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
|
||
Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
|
||
du fichier contenant @var{text}, une chaîne de caractères. @var{references}
|
||
est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
|
||
réfère ; c'est la liste vide par défaut.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
|
||
Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
|
||
dépôt du fichier contenant @var{data}, un vecteur d'octets.
|
||
@var{references} est une liste d'éléments du dépôt auxquels le fichier
|
||
binaire en résultat se réfère ; c'est la liste vide par défaut.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
|
||
[#:recursive? #t] [#:select? (const #t)]
|
||
Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
|
||
comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
|
||
omis.
|
||
|
||
Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
|
||
récursivement ; si @var{file} désigne un fichier simple et que
|
||
@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
|
||
sont préservés.
|
||
|
||
Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
|
||
@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
|
||
absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
|
||
l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
|
||
|
||
L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
|
||
|
||
@example
|
||
(run-with-store (open-connection)
|
||
(mlet %store-monad ((a (interned-file "README"))
|
||
(b (interned-file "README" "LEGU-MIN")))
|
||
(return (list a b))))
|
||
|
||
@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
|
||
@end example
|
||
|
||
@end deffn
|
||
|
||
Le module @code{(guix packages)} exporte les procédures monadiques liées aux
|
||
paquets suivantes :
|
||
|
||
@deffn {Procédure monadique} package-file @var{package} [@var{file}] @
|
||
[#:system (%current-system)] [#:target #f] @
|
||
[#:output "out"]
|
||
Renvoie une valeur monadique qui contient le nom de fichier absolu de
|
||
@var{file} dans le répertoire @var{output} de @var{package}. Lorsque
|
||
@var{file} est omis, renvoie le nom du répertoire @var{output} de
|
||
@var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
|
||
cible pour la compilation croisée.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
|
||
@deffnx {Procédure monadique} package->cross-derivation @var{package} @
|
||
@var{target} [@var{system}]
|
||
Version monadique de @code{package-derivation} et
|
||
@code{package-cross-derivation} (@pxref{Définition des paquets}).
|
||
@end deffn
|
||
|
||
|
||
@node G-Expressions
|
||
@section G-Expressions
|
||
|
||
@cindex G-expression
|
||
@cindex quoting du code de construction
|
||
On a donc des « dérivations » qui représentent une séquence d'actions de
|
||
construction à effectuer pour produire un élément du dépôt
|
||
(@pxref{Dérivations}). Ces actions de construction sont effectuées
|
||
lorsqu'on demande au démon de construire effectivement les dérivations ;
|
||
elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
|
||
|
||
@cindex strate de code
|
||
Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
|
||
construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
|
||
de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
|
||
par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
|
||
sur Hop. Oleg Kiselyov, qui a écrit des
|
||
@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
|
||
et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
|
||
genre de génération de code.} : le « code hôte » — le code qui défini les
|
||
paquets, parle au démon, etc — et le « code côté construction » — le code
|
||
qui effectue effectivement les actions de construction, comme créer des
|
||
répertoires, invoquer @code{make}, etc.
|
||
|
||
Pour décrire une dérivation et ses actions de construction, on a typiquement
|
||
besoin d'intégrer le code de construction dans le code hôte. Ça revient à
|
||
manipuler le code de construction comme de la donnée, et l'homoiconicité de
|
||
Scheme — le code a une représentation directe en tant que donnée — est très
|
||
utile pour cela. Mais on a besoin de plus que le mécanisme de
|
||
@code{quasiquote} en Scheme pour construire des expressions de construction.
|
||
|
||
Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
|
||
de S-expression adaptée aux expressions de construction. Les G-expression,
|
||
ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
|
||
@code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
|
||
@code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
|
||
@code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
|
||
(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
|
||
Manual}). Cependant il y a des différences majeures :
|
||
|
||
@itemize
|
||
@item
|
||
Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
|
||
manipulées par d'autres processus.
|
||
|
||
@item
|
||
Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
|
||
unquotée dans une gexp, le résultat est comme si le nom de fichier de son
|
||
résultat avait été introduit.
|
||
|
||
@item
|
||
Les gexps transportent des informatinos sur les paquets ou les dérivations
|
||
auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
|
||
comme des entrées du processus de construction qui les utilise.
|
||
@end itemize
|
||
|
||
@cindex abaissement, des objets haut-niveau dans les gepxs
|
||
Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
|
||
définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
|
||
haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
|
||
aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
|
||
utiles qui pourraient être insérées dans une gexp sont les « objets
|
||
simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
|
||
les références vers eux dans les dérivations et autres (voir
|
||
@code{local-file} et @code{plain-file} ci-dessous).
|
||
|
||
Pour illustrer cette idée, voici un exemple de gexp :
|
||
|
||
@example
|
||
(define build-exp
|
||
#~(begin
|
||
(mkdir #$output)
|
||
(chdir #$output)
|
||
(symlink (string-append #$coreutils "/bin/ls")
|
||
"list-files")))
|
||
@end example
|
||
|
||
Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
|
||
dérivation qui construit une répertoire contenant exactement un lien
|
||
symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
|
||
|
||
@example
|
||
(gexp->derivation "the-thing" build-exp)
|
||
@end example
|
||
|
||
Comme on pourrait s'y attendre, la chaîne
|
||
@code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
|
||
référence au paquet @var{coreutils} dans le code de construction final, et
|
||
@var{coreutils} est automatiquement devenu une entrée de la dérivation. De
|
||
même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
|
||
une chaîne de caractères contenant le nom du répertoire de la sortie de la
|
||
dérivation.
|
||
|
||
@cindex compilation croisée
|
||
Dans le contexte d'une compilation croisée, il est utile de distinguer entre
|
||
des références à la construction @emph{native} d'un paquet — qui peut être
|
||
lancé par l'hôte — et des références à la construction croisée d'un paquet.
|
||
Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
|
||
construction native d'un paquet :
|
||
|
||
@example
|
||
(gexp->derivation "vi"
|
||
#~(begin
|
||
(mkdir #$output)
|
||
(system* (string-append #+coreutils "/bin/ln")
|
||
"-s"
|
||
(string-append #$emacs "/bin/emacs")
|
||
(string-append #$output "/bin/vi")))
|
||
#:target "mips64el-linux-gnu")
|
||
@end example
|
||
|
||
@noindent
|
||
Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
|
||
utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
|
||
mais ensuite la construction croisée d'@var{emacs} est utilisée.
|
||
|
||
@cindex modules importés, pour les gexps
|
||
@findex with-imported-modules
|
||
Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
|
||
voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
|
||
dans la gexp, donc ces modules devraient être importés dans «
|
||
l'environnement de construction ». La forme @code{with-imported-modules}
|
||
vous permet d'exprimer ça :
|
||
|
||
@example
|
||
(let ((build (with-imported-modules '((guix build utils))
|
||
#~(begin
|
||
(use-modules (guix build utils))
|
||
(mkdir-p (string-append #$output "/bin"))))))
|
||
(gexp->derivation "empty-dir"
|
||
#~(begin
|
||
#$build
|
||
(display "success!\n")
|
||
#t)))
|
||
@end example
|
||
|
||
@noindent
|
||
Dans cet exemple, le module @code{(guix build utils)} est automatiquement
|
||
récupéré dans l'environnement de construction isolé de notre gexp, pour que
|
||
@code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
|
||
|
||
@cindex closure de module
|
||
@findex source-module-closure
|
||
Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
|
||
importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
|
||
plutôt que seulement le module ; sinon, une tentative de chargement du
|
||
module échouera à cause des modules dépendants manquants. La procédure
|
||
@code{source-module-closure} calcule la closure d'un module en cherchant
|
||
dans ses en-têtes sources, ce qui est pratique dans ce cas :
|
||
|
||
@example
|
||
(use-modules (guix modules)) ;pour 'source-module-closure'
|
||
|
||
(with-imported-modules (source-module-closure
|
||
'((guix build utils)
|
||
(gnu build vm)))
|
||
(gexp->derivation "something-with-vms"
|
||
#~(begin
|
||
(use-modules (guix build utils)
|
||
(gnu build vm))
|
||
@dots{})))
|
||
@end example
|
||
|
||
@cindex extensions, des gexps
|
||
@findex with-extensions
|
||
Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
|
||
modules en Scheme pur, mais aussi des « extensions » comme des liaisons
|
||
Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
|
||
voulez utiliser le paquet @code{guile-json} du côté de la construction,
|
||
voici comme procéder :
|
||
|
||
@example
|
||
(use-modules (gnu packages guile)) ;pour 'guile-json'
|
||
|
||
(with-extensions (list guile-json)
|
||
(gexp->derivation "something-with-json"
|
||
#~(begin
|
||
(use-modules (json))
|
||
@dots{})))
|
||
@end example
|
||
|
||
La forme syntaxique pour construire des gexps est résumée ci-dessous.
|
||
|
||
@deffn {Syntaxe Scheme} #~@var{exp}
|
||
@deffnx {Syntaxe Scheme} (gexp @var{exp})
|
||
Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
|
||
ou plusieurs de ces formes :
|
||
|
||
@table @code
|
||
@item #$@var{obj}
|
||
@itemx (ungexp @var{obj})
|
||
Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
|
||
supportés, par exemple un paquet ou une dérivation, auquel cas la forme
|
||
@code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
|
||
@code{"/gnu/store/@dots{}-coreutils-8.22}.
|
||
|
||
Si @var{boj} est une liste, elle est traversée et les références aux objets
|
||
supportés sont substitués de manière similaire.
|
||
|
||
Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
|
||
sont ajoutées à celle de la gexp qui l'entoure.
|
||
|
||
Si @var{obj} est un autre type d'objet, il est inséré tel quel.
|
||
|
||
@item #$@var{obj}:@var{output}
|
||
@itemx (ungexp @var{obj} @var{output})
|
||
Cette forme est similaire à la précédente, mais se réfère explicitement à la
|
||
sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
|
||
produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
|
||
|
||
@item #+@var{obj}
|
||
@itemx #+@var{obj}:output
|
||
@itemx (ungexp-native @var{obj})
|
||
@itemx (ungexp-native @var{obj} @var{output})
|
||
Comme @code{ungexp}, mais produit une référence à la construction
|
||
@emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
|
||
croisée.
|
||
|
||
@item #$output[:@var{output}]
|
||
@itemx (ungexp output [@var{output}])
|
||
Insère une référence à la sortie @var{output} de la dérivation, ou à la
|
||
sortie principale lorsque @var{output} est omis.
|
||
|
||
Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
|
||
|
||
@item #$@@@var{lst}
|
||
@itemx (ungexp-splicing @var{lst})
|
||
Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
|
||
liste qui la contient.
|
||
|
||
@item #+@@@var{lst}
|
||
@itemx (ungexp-native-splicing @var{lst})
|
||
Comme au dessus, mais se réfère à la construction native des objets listés
|
||
dans @var{lst}.
|
||
|
||
@end table
|
||
|
||
Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
|
||
l'exécution du type @code{gexp?} (voir plus bas).
|
||
@end deffn
|
||
|
||
@deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
|
||
Marque les gexps définies dans @var{body}@dots{} comme requérant
|
||
@var{modules} dans leur environnement d'exécution.
|
||
|
||
Chaque élément dans @var{module} peut être le nom d'un module, comme
|
||
@code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
|
||
d'un objet simili-fichier :
|
||
|
||
@example
|
||
`((guix build utils)
|
||
(guix gcrypt)
|
||
((guix config) => ,(scheme-file "config.scm"
|
||
#~(define-module @dots{}))))
|
||
@end example
|
||
|
||
@noindent
|
||
Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
|
||
chemin de recherche, et le dernier est créé à partir d'un objet
|
||
simili-fichier.
|
||
|
||
Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
|
||
directement définies dans @var{body}@dots{}, mais pas sur celles définies
|
||
dans des procédures appelées par @var{body}@dots{}.
|
||
@end deffn
|
||
|
||
@deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
|
||
Marque les gexps définies dans @var{body}@dots{} comme requérant
|
||
@var{extensions} dans leur environnement de construction et d'exécution.
|
||
@var{extensions} est typiquement une liste d'objets paquets comme définis
|
||
dans le module @code{(gnu packages guile)}.
|
||
|
||
Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
|
||
chemin de chargement lors de la compilation des modules importés dans
|
||
@var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
|
||
gexp renvoyée par @var{body}@dots{}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} gexp? @var{obj}
|
||
Renvoie @code{#t} si @var{obj} est une G-expression.
|
||
@end deffn
|
||
|
||
Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
|
||
que code pour construire une dérivation, soit en tant que fichier normal
|
||
dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
|
||
cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
|
||
|
||
@deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
|
||
[#:system (%current-system)] [#:target #f] [#:graft? #t] @
|
||
[#:hash #f] [#:hash-algo #f] @
|
||
[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
|
||
[#:module-path @var{%load-path}] @
|
||
[#:effective-version "2.2"] @
|
||
[#:references-graphs #f] [#:allowed-references #f] @
|
||
[#:disallowed-references #f] @ [#:leaked-env-vars #f] @
|
||
[#:script-name (string-append @var{name} "-builder")] @
|
||
[#:deprecation-warnings #f] @
|
||
[#:local-build? #f] [#:substitutable? #t] @
|
||
[#:properties '()] [#:guile-for-build #f]
|
||
Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
|
||
@var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
|
||
stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
|
||
vraie, elle est utilisée comme triplet de cible de compilation croisée pour
|
||
les paquets référencés par @var{exp}.
|
||
|
||
@var{modules} est devenu obsolète en faveur de
|
||
@code{with-imported-modules}. Sa signification est de rendre @var{modules}
|
||
disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
|
||
une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
|
||
pour les copier dans le dépôt, les compiler et les rendre disponibles dans
|
||
le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
|
||
@code{((guix build utils) (guix build gnu-build-system))}.
|
||
|
||
@var{effective-version} détermine la chaîne à utiliser lors d'ajout
|
||
d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
|
||
recherche — p.@: ex.@: @code{"2.2"}.
|
||
|
||
@var{graft?} détermine si les paquets référencés par @var{exp} devraient
|
||
être greffés si possible.
|
||
|
||
Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
|
||
tuples de la forme suivante :
|
||
|
||
@example
|
||
(@var{file-name} @var{package})
|
||
(@var{file-name} @var{package} @var{output})
|
||
(@var{file-name} @var{derivation})
|
||
(@var{file-name} @var{derivation} @var{output})
|
||
(@var{file-name} @var{store-item})
|
||
@end example
|
||
|
||
La partie droite des éléments de @var{references-graphs} est automatiquement
|
||
transformée en une entrée du processus de construction @var{exp}. Dans
|
||
l'environnement de construction, chaque @var{file-name} contient le graphe
|
||
des références de l'élément correspondant, dans un format texte simple.
|
||
|
||
@var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
|
||
sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
|
||
dépôt auxquels le résultat a le droit de faire référence. Toute référence à
|
||
un autre élément du dépôt conduira à une erreur à la construction. Comme
|
||
pour @var{disallowed-references}, qui peut lister des éléments qui ne
|
||
doivent pas être référencés par les sorties.
|
||
|
||
@var{deprecation-warnings} détermine s'il faut afficher les avertissement
|
||
d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
|
||
@code{t} ou @code{'detailed}.
|
||
|
||
Les autres arguments sont les mêmes que pour @code{derivation}
|
||
(@pxref{Dérivations}).
|
||
@end deffn
|
||
|
||
@cindex objets simili-fichiers
|
||
Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
|
||
@code{program-file} et @code{scheme-file} ci-dessous renvoient des
|
||
@dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
|
||
une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
|
||
cette G-expression :
|
||
|
||
@example
|
||
#~(system* #$(file-append glibc "/sbin/nscd") "-f"
|
||
#$(local-file "/tmp/my-nscd.conf"))
|
||
@end example
|
||
|
||
Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
|
||
dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
|
||
G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
|
||
modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
|
||
fait la G-expression. @code{plain-file} peut être utilisé de la même
|
||
manière ; elle est seulement différente par le fait que le contenu du
|
||
fichier est passé directement par une chaîne de caractères.
|
||
|
||
@deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
|
||
[#:recursive? #f] [#:select? (const #t)]
|
||
Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
|
||
; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
|
||
fichier relatif, il est récupéré à partir de la position du fichier source
|
||
dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
|
||
@var{name} — par défaut le nom de base de @var{file}.
|
||
|
||
Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
|
||
récursivement ; si @var{file} désigne un fichier simple et que
|
||
@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
|
||
sont préservés.
|
||
|
||
Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
|
||
@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
|
||
absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
|
||
l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
|
||
|
||
C'est la version déclarative de la procédure monadique @code{interned-file}
|
||
(@pxref{La monad du dépôt, @code{interned-file}}).
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} plain-file @var{name} @var{content}
|
||
Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
|
||
contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
|
||
ajouter un dépôt.
|
||
|
||
C'est la version déclarative de @code{text-file}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
|
||
[#:options '(#:local-build? #t)]
|
||
Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
|
||
un répertoire calculé par @var{gexp}. @var{options} est une liste
|
||
d'arguments supplémentaires à passer à @code{gexp->derivation}.
|
||
|
||
C'est la version déclarative de @code{gexp->derivation}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
|
||
[#:guile (default-guile)] [#:module-path %load-path]
|
||
Renvoie un script exécutable @var{name} qui lance @var{exp} avec
|
||
@var{guile}, avec les modules importés de @var{exp} dans son chemin de
|
||
recherche. Cherche les modules de @var{exp} dans @var{module-path}.
|
||
|
||
L'exemple ci-dessous construit un script qui invoque simplement la commande
|
||
@command{ls} :
|
||
|
||
@example
|
||
(use-modules (guix gexp) (gnu packages base))
|
||
|
||
(gexp->script "list-files"
|
||
#~(execl #$(file-append coreutils "/bin/ls")
|
||
"ls"))
|
||
@end example
|
||
|
||
Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
|
||
@code{run-with-store}}), on obtient une dérivation qui produit une fichier
|
||
exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
|
||
|
||
@example
|
||
#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
|
||
!#
|
||
(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
|
||
@end example
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} program-file @var{name} @var{exp} @
|
||
[#:guile #f] [#:module-path %load-path]
|
||
Renvoie un objet représentant un élément du dépôt @var{name} qui lance
|
||
@var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
|
||
script. Les modules importés par @var{gexp} sont recherchés dans
|
||
@var{module-path}.
|
||
|
||
C'est la version déclarative de @code{gexp->script}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
|
||
[#:set-load-path? #t] [#:module-path %load-path] @
|
||
[#:splice? #f] @
|
||
[#:guile (default-guile)]
|
||
Renvoie une dérivation qui construit un fichier @var{name} contenant
|
||
@var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
|
||
une liste d'expressions qui seront splicée dans le fichier qui en résulte.
|
||
|
||
Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
|
||
résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
|
||
pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
|
||
sont trouvés dans @var{module-path}.
|
||
|
||
Le fichier qui en résulte retient les références à toutes les dépendances de
|
||
@var{exp} ou un sous-ensemble.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
|
||
Renvoie un objet représentant le fichier Scheme @var{name} qui contient
|
||
@var{exp}.
|
||
|
||
C'est la version déclarative de @code{gexp->file}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
|
||
Renvoie une valeur monadique qui construit un ficher texte contenant
|
||
@var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
|
||
objet de n'importe quel type qui peut être utilisé dans une gexp : des
|
||
paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
|
||
dépôt qui en résulte en retient toutes les références.
|
||
|
||
Cette variante devrait être préférée à @code{text-file} lorsque vous
|
||
souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
|
||
typiquement lorsque vous construisez un fichier de configuration qui
|
||
contient des noms de fichiers du dépôt, comme ceci :
|
||
|
||
@example
|
||
(define (profile.sh)
|
||
;; Renvoie le nom d'un script shell dans le dépôt qui initialise
|
||
;; la variable d'environnement « PATH ».
|
||
(text-file* "profile.sh"
|
||
"export PATH=" coreutils "/bin:"
|
||
grep "/bin:" sed "/bin\n"))
|
||
@end example
|
||
|
||
Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
|
||
résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
|
||
empêche d'être glanés tant que le script est accessible.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
|
||
Renvoie un objet représentant le fichier du dépôt @var{name} contenant
|
||
@var{text}. @var{text} est une séquence de chaînes de caractères et de
|
||
fichiers simili-objets, comme dans :
|
||
|
||
@example
|
||
(mixed-text-file "profile"
|
||
"export PATH=" coreutils "/bin:" grep "/bin")
|
||
@end example
|
||
|
||
C'est la version déclarative de @code{text-file*}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} file-union @var{name} @var{files}
|
||
Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
|
||
tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
|
||
une paire où le premier élément est le nom de fichier à utiliser dans le
|
||
nouveau répertoire et le second élément est une gexp dénotant le fichier
|
||
cible. Voici un exemple :
|
||
|
||
@example
|
||
(file-union "etc"
|
||
`(("hosts" ,(plain-file "hosts"
|
||
"127.0.0.1 localhost"))
|
||
("bashrc" ,(plain-file "bashrc"
|
||
"alias ls='ls --color=auto'"))))
|
||
@end example
|
||
|
||
Cela crée un répertoire @code{etc} contenant ces deux fichiers.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} directory-union @var{name} @var{things}
|
||
Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
|
||
une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
|
||
:
|
||
|
||
@example
|
||
(directory-union "guile+emacs" (list guile emacs))
|
||
@end example
|
||
|
||
crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
|
||
Renvoie un objet simili-fichier qui correspond à la concaténation de
|
||
@var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
|
||
@var{suffix} est une chaîne de caractères.
|
||
|
||
Par exemple, considérez cette gexp :
|
||
|
||
@example
|
||
(gexp->script "run-uname"
|
||
#~(system* #$(file-append coreutils
|
||
"/bin/uname")))
|
||
@end example
|
||
|
||
On peut obtenir le même effet avec :
|
||
|
||
@example
|
||
(gexp->script "run-uname"
|
||
#~(system* (string-append #$coreutils
|
||
"/bin/uname")))
|
||
@end example
|
||
|
||
Il y a une différence cependant : dans le cas @code{file-append}, le script
|
||
qui en résulte contient le nom de fichier absolu comme une chaîne de
|
||
caractère alors que dans le deuxième cas, le script contient une expression
|
||
@code{(string-append @dots{})} pour construire le nom de fichier @emph{à
|
||
l'exécution}.
|
||
@end deffn
|
||
|
||
|
||
Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
|
||
contiennent des outils de construction. Pour savoir facilement qu'ils sont
|
||
à utiliser dans la strate de construction, ces modules sont gardés dans
|
||
l'espace de nom @code{(guix build @dots{})}.
|
||
|
||
@cindex abaissement, des objets haut-niveau dans les gepxs
|
||
En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
|
||
compilateur, soit en des dérivations, soit en des objets du dépôt. Par
|
||
exemple, abaisser un paquet crée une dérivation, et abaisser un
|
||
@code{plain-file} crée un élément du dépôt. Cela est effectué par la
|
||
procédure monadique @code{lower-object}.
|
||
|
||
@deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
|
||
[#:target #f]
|
||
Renvoie la dérivation ou l'élément du dépôt comme une valeur de
|
||
@var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
|
||
compilant de manière croisée pour @var{target} si @var{target} est vrai.
|
||
@var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
|
||
@code{<package>}.
|
||
@end deffn
|
||
|
||
@node Invoquer guix repl
|
||
@section Invoquer @command{guix repl}
|
||
|
||
@cindex REPL, read-eval-print loop
|
||
La commande @command{guix repl} démarre un @dfn{boucle
|
||
lecture-évaluation-affichage} Guile pour la programmation interactive
|
||
(@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
|
||
Comparé au lancement de la commande @command{guile}, @command{guix repl}
|
||
garanti que tous les modules Guix et toutes ses dépendances sont disponibles
|
||
dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
|
||
|
||
@example
|
||
$ guix repl
|
||
scheme@@(guile-user)> ,use (gnu packages base)
|
||
scheme@@(guile-user)> coreutils
|
||
$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
|
||
@end example
|
||
|
||
@cindex inférieurs
|
||
En plus, @command{guix repl} implémente un protocole REPL simple lisible par
|
||
une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
|
||
interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
|
||
une version potentiellement différente de Guix.
|
||
|
||
Les options disponibles sont les suivante :
|
||
|
||
@table @code
|
||
@item --type=@var{type}
|
||
@itemx -t @var{type}
|
||
Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
|
||
|
||
@table @code
|
||
@item guile
|
||
C'est la valeur par défaut. Elle démarre un REPL Guile standard
|
||
fonctionnel.
|
||
@item machine
|
||
Démarre un REPL qui utilise le protocole lisible par machine. C'est le
|
||
protocole que parle le module @code{(guix inferior)}.
|
||
@end table
|
||
|
||
@item --listen=@var{extrémité}
|
||
Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
|
||
sortie standard. Lorsque cette option est passée, il écoutera plutôt les
|
||
connexions sur @var{endpoint}. Voici un exemple d'options valides :
|
||
|
||
@table @code
|
||
@item --listen=tcp:37146
|
||
Accepte les connexions sur localhost, sur le port 31.
|
||
|
||
@item --listen=unix:/tmp/socket
|
||
Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
|
||
@end table
|
||
@end table
|
||
|
||
@c *********************************************************************
|
||
@node Utilitaires
|
||
@chapter Utilitaires
|
||
|
||
cette section décrit les utilitaires en ligne de commande de Guix. certains
|
||
sont surtout faits pour les développeurs qui écrivent de nouvelles
|
||
définitions de paquets tandis que d'autres sont plus utiles pour une
|
||
utilisation générale. Ils complètent l'interface de programmation Scheme de
|
||
Guix d'une manière pratique.
|
||
|
||
@menu
|
||
* Invoquer guix build:: Construire des paquets depuis la ligne de
|
||
commande.
|
||
* Invoquer guix edit:: Modifier les définitions de paquets.
|
||
* Invoquer guix download:: Télécharger un fichier et afficher son hash.
|
||
* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
|
||
* Invoquer guix import:: Importer des définitions de paquets.
|
||
* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
|
||
* Invoquer guix lint:: Trouver des erreurs dans les définitions de
|
||
paquets.
|
||
* Invoquer guix size:: Profiler l'utilisation du disque.
|
||
* Invoquer guix graph:: Visualiser le graphe des paquets.
|
||
* Invoquer guix 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.
|
||
* Invoquer guix container:: Isolation de processus.
|
||
* Invoquer guix weather:: Mesurer la disponibilité des substituts.
|
||
* Invoquer guix processes:: Lister les processus clients.
|
||
@end menu
|
||
|
||
@node Invoquer guix build
|
||
@section Invoquer @command{guix build}
|
||
|
||
@cindex construction de paquets
|
||
@cindex @command{guix build}
|
||
La commande @command{guix build} construit des paquets ou des dérivations et
|
||
leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
|
||
qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
|
||
commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
|
||
elle est surtout utile pour les développeurs de la distribution.
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix build @var{options} @var{package-or-derivation}@dots{}
|
||
@end example
|
||
|
||
Par exemple, la commande suivante construit la dernière version d'Emacs et
|
||
de Guile, affiche leur journaux de construction et enfin affiche les
|
||
répertoires des résultats :
|
||
|
||
@example
|
||
guix build emacs guile
|
||
@end example
|
||
|
||
De même, la commande suivante construit tous les paquets disponibles :
|
||
|
||
@example
|
||
guix build --quiet --keep-going \
|
||
`guix package -A | cut -f1,2 --output-delimiter=@@`
|
||
@end example
|
||
|
||
@var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
|
||
distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
|
||
soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
|
||
Dans le premier cas, la commande cherchera un paquet avec le nom
|
||
correspondant (et éventuellement la version) dans les modules de la
|
||
distribution GNU (@pxref{Modules de paquets}).
|
||
|
||
Autrement, l'option @code{--expression} peut être utilisée pour spécifier
|
||
une expression Scheme qui s'évalue en un paquet ; c'est utile pour
|
||
différencier des paquets avec le même nom ou des variantes de paquets.
|
||
|
||
Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
|
||
disponibles sont décrites dans les sous-sections ci-dessous.
|
||
|
||
@menu
|
||
* Options de construction communes:: Options de construction pour la
|
||
plupart des commandes.
|
||
* Options de transformation de paquets:: Créer des variantes de paquets.
|
||
* Options de construction supplémentaires:: Options spécifiques à «
|
||
guix build ».
|
||
* Débogage des échecs de construction:: La vie d'un empaqueteur.
|
||
@end menu
|
||
|
||
@node Options de construction communes
|
||
@subsection Options de construction communes
|
||
|
||
Un certain nombre d'options qui contrôlent le processus de construction sont
|
||
communes avec @command{guix build} et les autres commandes qui peuvent
|
||
générer des constructions, comme @command{guix package} ou @command{guix
|
||
archive}. Voici ces options :
|
||
|
||
@table @code
|
||
|
||
@item --load-path=@var{répertoire}
|
||
@itemx -L @var{répertoire}
|
||
Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
|
||
(@pxref{Modules de paquets}).
|
||
|
||
Cela permet à des utilisateurs de définir leur propres paquets et les rendre
|
||
disponibles aux outils en ligne de commande.
|
||
|
||
@item --keep-failed
|
||
@itemx -K
|
||
Garde l'arborescence de construction des constructions en échec. Ainsi, si
|
||
une construction échoue, son arborescence de construction est préservée dans
|
||
@file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
|
||
de construction. Cela est utile pour déboguer des échecs de construction.
|
||
@xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
|
||
des problèmes de construction.
|
||
|
||
Cette option n'a pas d'effet lors de la connexion à un démon distant avec
|
||
l'URI @code{guix://} (@pxref{Le dépôt, la variable
|
||
@code{GUIX_DAEMON_SOCKET}}).
|
||
|
||
@item --keep-going
|
||
@itemx -k
|
||
Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
|
||
toutes les constructions ont soit réussies, soit échouées.
|
||
|
||
Le comportement par défaut est de s'arrêter dès qu'une des dérivations
|
||
spécifiées échoue.
|
||
|
||
@item --dry-run
|
||
@itemx -n
|
||
Ne pas construire les dérivations.
|
||
|
||
@anchor{option de repli}
|
||
@item --fallback
|
||
Lorsque la substitution d'un binaire pré-compilé échoue, construit les
|
||
paquets localement à la place (@pxref{Échec de substitution}).
|
||
|
||
@item --substitute-urls=@var{urls}
|
||
@anchor{client-substitute-urls}
|
||
Considère @var{urls} comme une liste d'URL de sources de substituts séparés
|
||
par des espaces, et remplace la liste par défaut d'URL de
|
||
@command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
|
||
URLs}).
|
||
|
||
Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
|
||
tant qu'ils sont signés par une clef autorisée par l'administrateur système
|
||
(@pxref{Substituts}).
|
||
|
||
Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
|
||
substitution.
|
||
|
||
@item --no-substitutes
|
||
Ne pas utiliser de substitut pour les résultats de la construction.
|
||
C'est-à-dire, toujours construire localement plutôt que de permettre le
|
||
téléchargement de binaires pré-construits (@pxref{Substituts}).
|
||
|
||
@item --no-grafts
|
||
Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
|
||
jour des paquets disponibles comme des greffes ne sont pas appliquées.
|
||
@xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
|
||
|
||
@item --rounds=@var{n}
|
||
Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
|
||
les constructions consécutives ne sont pas identiques bit-à-bit.
|
||
|
||
Cela est une manière utile pour détecter des processus de construction non
|
||
déterministes. Les processus de construction non déterministes sont
|
||
problématiques car ils rendent pratiquement impossible la
|
||
@emph{vérification} par les utilisateurs de l'authenticité de binaires
|
||
tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
|
||
|
||
Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
|
||
devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
|
||
résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
|
||
puis en reconstruisant, et enfin en comparant les deux résultats.
|
||
|
||
@item --no-build-hook
|
||
N'essaye pas de décharger les constructions via le « crochet de construction
|
||
» du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
|
||
construit localement plutôt que de décharger les constructions à une machine
|
||
distante.
|
||
|
||
@item --max-silent-time=@var{secondes}
|
||
Lorsque le processus de construction ou de substitution restent silencieux
|
||
pendant plus de @var{secondes}, le terminer et rapporter une erreur de
|
||
construction.
|
||
|
||
Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
|
||
|
||
@item --timeout=@var{secondes}
|
||
De même, lorsque le processus de construction ou de substitution dure plus
|
||
de @var{secondes}, le terminer et rapporter une erreur de construction.
|
||
|
||
Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
|
||
|
||
@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.
|
||
|
||
@item --cores=@var{n}
|
||
@itemx -c @var{n}
|
||
Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
|
||
valeur spéciale @code{0} signifie autant de cœurs que possible.
|
||
|
||
@item --max-jobs=@var{n}
|
||
@itemx -M @var{n}
|
||
Permet au plus @var{n} travaux de construction en parallèle. @xref{Invoquer guix-daemon, @code{--max-jobs}}, pour plus de détails sur cette option et
|
||
l'option équivalente pour @command{guix-daemon}.
|
||
|
||
@end table
|
||
|
||
Sous le capot, @command{guix build} est surtout un interface à la procédure
|
||
@code{package-derivation} du module @code{(guix packages)}, et à la
|
||
procédure @code{build-derivations} du module @code{(guix derivations)}.
|
||
|
||
En plus des options passées explicitement par la ligne de commande,
|
||
@command{guix build} et les autres commande @command{guix} qui peuvent
|
||
effectuer des construction honorent la variable d'environnement
|
||
@code{GUIX_BUILD_OPTIONS}.
|
||
|
||
@defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
|
||
Les utilisateurs peuvent définir cette variable à une liste d'options de la
|
||
ligne de commande qui seront automatiquement utilisées par @command{guix
|
||
build} et les autres commandes @command{guix} qui peuvent effectuer des
|
||
constructions, comme dans l'exemple suivant :
|
||
|
||
@example
|
||
$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
|
||
@end example
|
||
|
||
Ces options sont analysées indépendamment, et le résultat est ajouté aux
|
||
options de la ligne de commande analysées.
|
||
@end defvr
|
||
|
||
|
||
@node Options de transformation de paquets
|
||
@subsection Options de transformation de paquets
|
||
|
||
@cindex variantes de paquets
|
||
Un autre ensemble d'options de la ligne de commande supportés par
|
||
@command{guix build} et aussi @command{guix package} sont les @dfn{options
|
||
de transformation de paquets}. Ce sont des options qui rendent possible la
|
||
définition de @dfn{variantes de paquets} — par exemple, des paquets
|
||
construit à partir de sources différentes. C'est une manière simple de
|
||
créer des paquets personnalisés à la volée sans avoir à taper les
|
||
définitions de variantes de paquets (@pxref{Définition des paquets}).
|
||
|
||
@table @code
|
||
|
||
@item --with-source=@var{source}
|
||
@itemx --with-source=@var{paquet}=@var{source}
|
||
@itemx --with-source=@var{paquet}@@@var{version}=@var{source}
|
||
Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
|
||
son numéro de version. @var{source} doit être un nom de fichier ou une URL,
|
||
comme pour @command{guix download} (@pxref{Invoquer guix download}).
|
||
|
||
Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
|
||
spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
|
||
@code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
|
||
|
||
De même, lorsque @var{version} est omis, la chaîne de version est inférée à
|
||
partir de @var{source} ; dans l'exemple précédent, il s'agit de
|
||
@code{2.0.10}.
|
||
|
||
Cette option permet aux utilisateurs d'essayer des version des paquets
|
||
différentes de celles fournies par la distribution. L'exemple ci-dessous
|
||
télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
|
||
source pour le paquet @code{ed} :
|
||
|
||
@example
|
||
guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
|
||
@end example
|
||
|
||
En tant que développeur, @code{--with-source} permet de tester facilement
|
||
des version bêta :
|
||
|
||
@example
|
||
guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
|
||
@end example
|
||
|
||
@dots{} ou pour construire un dépôt de gestion de version dans un
|
||
environnement vierge :
|
||
|
||
@example
|
||
$ git clone git://git.sv.gnu.org/guix.git
|
||
$ guix build guix --with-source=guix@@1.0=./guix
|
||
@end example
|
||
|
||
@item --with-input=@var{paquet}=@var{remplaçant}
|
||
Remplace la dépendance sur @var{paquet} par une dépendance à
|
||
@var{remplaçant}. @var{paquet} doit être un nom de paquet et
|
||
@var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
|
||
@code{guile@@1.8}.
|
||
|
||
Par exemple, la commande suivante construit Guix, mais remplace sa
|
||
dépendance à la version stable actuelle de Guile par une dépendance à une
|
||
ancienne version de Guile, @code{guile@@2.0} :
|
||
|
||
@example
|
||
guix build --with-input=guile=guile@@2.0 guix
|
||
@end example
|
||
|
||
C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
|
||
@code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
|
||
@code{guile}) sont reconstruits avec @code{guile@@2.0}.
|
||
|
||
Cette option est implémentée avec la procédure Scheme
|
||
@code{package-input-rewriting} (@pxref{Définition des paquets,
|
||
@code{package-input-rewriting}}).
|
||
|
||
@item --with-graft=@var{paquet}=@var{remplaçant}
|
||
Cette option est similaire à @code{--with-input} mais avec une différence
|
||
importante : plutôt que de reconstruire la chaîne de dépendance complète,
|
||
@var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
|
||
référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
|
||
d'information sur les greffes.
|
||
|
||
Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
|
||
Wget et toutes ses dépendances, en remplaçant les références à la version
|
||
actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
|
||
|
||
@example
|
||
guix build --with-graft=gnutls=gnutls@@3.5.4 wget
|
||
@end example
|
||
|
||
Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
|
||
y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
|
||
sont strictement compatibles — par exemple, s'ils fournissent une
|
||
bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
|
||
doivent être compatibles. Si @var{remplaçant} est incompatible avec
|
||
@var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
|
||
utilisez avec précaution !
|
||
|
||
@item --with-branch=@var{package}=@var{branch}
|
||
@cindex Git, using the latest commit
|
||
@cindex latest commit, building
|
||
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}.
|
||
|
||
For instance, the following command builds @code{guile-sqlite3} from the
|
||
latest commit of its @code{master} branch, and then builds @code{guix}
|
||
(which depends on it) and @code{cuirass} (which depends on @code{guix})
|
||
against this specific @code{guile-sqlite3} build:
|
||
|
||
@example
|
||
guix build --with-branch=guile-sqlite3=master cuirass
|
||
@end example
|
||
|
||
@cindex intégration continue
|
||
Obviously, since it uses the latest commit of the given branch, the result
|
||
of such a command varies over time. Nevertheless it is a convenient way to
|
||
rebuild entire software stacks against the latest commit of one or more
|
||
packages. This is particularly useful in the context of continuous
|
||
integration (CI).
|
||
|
||
Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
|
||
up consecutive accesses to the same repository. You may want to clean it up
|
||
once in a while to save disk space.
|
||
|
||
@item --with-commit=@var{package}=@var{commit}
|
||
This is similar to @code{--with-branch}, except that it builds from
|
||
@var{commit} rather than the tip of a branch. @var{commit} must be a valid
|
||
Git commit SHA1 identifier.
|
||
@end table
|
||
|
||
@node Options de construction supplémentaires
|
||
@subsection Options de construction supplémentaires
|
||
|
||
Les options de la ligne de commande ci-dessous sont spécifiques à
|
||
@command{guix build}.
|
||
|
||
@table @code
|
||
|
||
@item --quiet
|
||
@itemx -q
|
||
Construire en silence, sans afficher les journaux de construction. À la
|
||
fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
|
||
on peut toujours l'y trouver avec l'option @option{--log-file}.
|
||
|
||
@item --file=@var{fichier}
|
||
@itemx -f @var{fichier}
|
||
Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
|
||
code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
|
||
|
||
Par exemple, @var{file} peut contenir une définition de paquet comme ceci
|
||
(@pxref{Définition des paquets}) :
|
||
|
||
@example
|
||
@verbatiminclude package-hello.scm
|
||
@end example
|
||
|
||
@item --expression=@var{expr}
|
||
@itemx -e @var{expr}
|
||
Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
|
||
|
||
Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
|
||
guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
|
||
version 1.8 de Guile.
|
||
|
||
Autrement, @var{exp} peut être une G-expression, auquel cas elle est
|
||
utilisée comme un programme de construction passé à @code{gexp->derivation}
|
||
(@pxref{G-Expressions}).
|
||
|
||
Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
|
||
argument (@pxref{La monad 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.
|
||
|
||
Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
|
||
@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
|
||
de GCC.
|
||
|
||
L'archive des sources renvoyée est le résultat de l'application des
|
||
correctifs et des extraits de code éventuels spécifiés dans le champ
|
||
@code{origin} du paquet (@pxref{Définition des paquets}).
|
||
|
||
@item --sources
|
||
Récupère et renvoie la source de @var{package-or-derivation} et toute ses
|
||
dépendances, récursivement. C'est pratique pour obtenir une copie locale de
|
||
tous les codes sources requis pour construire @var{packages}, ce qui vous
|
||
permet de les construire plus tard même sans accès réseau. C'est une
|
||
extension de l'option @code{--source} et peut accepter l'un des arguments
|
||
facultatifs suivants :
|
||
|
||
@table @code
|
||
@item package
|
||
Cette valeur fait que l'option @code{--sources} se comporte comme l'option
|
||
@code{--source}.
|
||
|
||
@item all
|
||
Construit les dérivations des sources de tous les paquets, dont les sources
|
||
qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
|
||
|
||
@example
|
||
$ guix build --sources tzdata
|
||
The following derivations will be built:
|
||
/gnu/store/@dots{}-tzdata2015b.tar.gz.drv
|
||
/gnu/store/@dots{}-tzcode2015b.tar.gz.drv
|
||
@end example
|
||
|
||
@item transitive
|
||
Build the source derivations of all packages, as well of all transitive
|
||
inputs to the packages. This can be used e.g.@: to prefetch package source
|
||
for later offline building.
|
||
|
||
@example
|
||
$ guix build --sources=transitive tzdata
|
||
The following derivations will be built:
|
||
/gnu/store/@dots{}-tzcode2015b.tar.gz.drv
|
||
/gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
|
||
/gnu/store/@dots{}-grep-2.21.tar.xz.drv
|
||
/gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
|
||
/gnu/store/@dots{}-make-4.1.tar.xz.drv
|
||
/gnu/store/@dots{}-bash-4.3.tar.xz.drv
|
||
@dots{}
|
||
@end example
|
||
|
||
@end table
|
||
|
||
@item --system=@var{système}
|
||
@itemx -s @var{système}
|
||
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.
|
||
|
||
@quotation Remarque
|
||
Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
|
||
ne doit pas être confondu avec une compilation croisée. Voir
|
||
@code{--target} ci-dessous pour des informations sur la compilation croisée.
|
||
@end quotation
|
||
|
||
Par exemple, passer @code{--system=i686-linux} sur un système
|
||
@code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
|
||
@code{aarch64-linux} vous permet de construire des paquets dans un
|
||
environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
|
||
option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
|
||
|
||
@quotation Remarque
|
||
La possibilité de construire pour un système @code{armhf-linux} est activé
|
||
sans condition sur les machines @code{aarch64-linux}, bien que certaines
|
||
puces aarch64 n'en soient pas capables, comme les ThunderX.
|
||
@end quotation
|
||
|
||
De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
|
||
est activée (@pxref{Services de virtualisation,
|
||
@code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
|
||
quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
|
||
installé.
|
||
|
||
Les constructions pour un autre système que celui de la machine que vous
|
||
utilisez peuvent aussi être déchargées à une machine distante de la bonne
|
||
architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
|
||
déchargement.
|
||
|
||
@item --target=@var{triplet}
|
||
@cindex compilation croisée
|
||
Effectuer une compilation croisée pour @var{triplet} qui doit être un
|
||
triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
|
||
target triplets, GNU configuration triplets,, autoconf, Autoconf}).
|
||
|
||
@anchor{vérification de la construction}
|
||
@item --check
|
||
@cindex déterminisme, vérification
|
||
@cindex reproductibilité, vérification
|
||
Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
|
||
le dépôt et lève une erreur si les résultats des constructions ne sont pas
|
||
identiques bit-à-bit.
|
||
|
||
Ce mécanisme vous permet de vérifier si les substituts précédemment
|
||
installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
|
||
construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
|
||
pour plus d'informations et pour les outils.
|
||
|
||
Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
|
||
dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
|
||
l'étude des différences entre les deux résultats.
|
||
|
||
@item --repair
|
||
@cindex réparer les éléments du dépôt
|
||
@cindex corruption, récupérer de
|
||
Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
|
||
les téléchargeant ou en les construisant à nouveau.
|
||
|
||
Cette opération n'est pas atomique et donc restreinte à l'utilisateur
|
||
@code{root}
|
||
|
||
@item --derivations
|
||
@itemx -d
|
||
Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
|
||
donnés.
|
||
|
||
@item --root=@var{fichier}
|
||
@itemx -r @var{fichier}
|
||
@cindex racines du GC, ajout
|
||
@cindex ajout de racines au ramasse-miettes
|
||
Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
|
||
en tant que racine du ramasse-miettes.
|
||
|
||
En conséquence, les résultats de cette invocation de @command{guix build}
|
||
sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
|
||
supprimé. Lorsque cette option est omise, les constructions sont
|
||
susceptibles d'être glanées.
|
||
|
||
@item --log-file
|
||
@cindex journaux de construction, accès
|
||
Renvoie les noms des journaux de construction ou les URL des
|
||
@var{package-or-derivation} donnés ou lève une erreur si les journaux de
|
||
construction sont absents.
|
||
|
||
Cela fonctionne indépendamment de la manière dont les paquets ou les
|
||
dérivations sont spécifiées. Par exemple, les invocations suivantes sont
|
||
équivalentes :
|
||
|
||
@example
|
||
guix build --log-file `guix build -d guile`
|
||
guix build --log-file `guix build guile`
|
||
guix build --log-file guile
|
||
guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
|
||
@end example
|
||
|
||
Si un journal n'est pas disponible localement, à moins que
|
||
@code{--no-substitutes} ne soit passé, la commande cherche un journal
|
||
correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
|
||
@code{--substitute-urls}.)
|
||
|
||
Donc par exemple, imaginons que vous souhaitiez voir le journal de
|
||
construction de GDB sur MIPS, mais que vous n'avez qu'une machine
|
||
@code{x86_64} :
|
||
|
||
@example
|
||
$ guix build --log-file gdb -s mips64el-linux
|
||
https://hydra.gnu.org/log/@dots{}-gdb-7.10
|
||
@end example
|
||
|
||
Vous pouvez accéder librement à un vaste bibliothèque de journaux de
|
||
construction !
|
||
@end table
|
||
|
||
@node Débogage des échecs de construction
|
||
@subsection Débogage des échecs de construction
|
||
|
||
@cindex échecs de construction, débogage
|
||
Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
|
||
passerez probablement du temps à déboguer et modifier la construction
|
||
jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
|
||
construction vous-même dans un environnement le plus proche possible de
|
||
celui qu'utilise le démon de construction.
|
||
|
||
Pour cela, la première chose à faire est d'utiliser l'option
|
||
@option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
|
||
l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
|
||
par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
|
||
|
||
À partir de là, vous pouvez vous déplacer dans l'arborescence de
|
||
construction et sourcer le fichier @file{environment-variables}, qui
|
||
contient toutes les variables d'environnement qui étaient définies lorsque
|
||
la construction a échoué. Disons que vous déboguez un échec de construction
|
||
dans le paquet @code{foo} ; une session typique ressemblerait à cela :
|
||
|
||
@example
|
||
$ guix build foo -K
|
||
@dots{} @i{build fails}
|
||
$ cd /tmp/guix-build-foo.drv-0
|
||
$ source ./environment-variables
|
||
$ cd foo-1.2
|
||
@end example
|
||
|
||
Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
|
||
(presque) et corriger le processus de construction.
|
||
|
||
Parfois il arrive que, par exemple, les tests d'un paquet réussissent
|
||
lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
|
||
le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
|
||
contrairement à notre environnement au-dessus, l'accès réseau est
|
||
indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
|
||
|
||
Dans ce cas, vous pourriez avoir besoin de lancer le processus de
|
||
construction dans un conteneur similaire à celui que le démon crée :
|
||
|
||
@example
|
||
$ guix build -K foo
|
||
@dots{}
|
||
$ cd /tmp/guix-build-foo.drv-0
|
||
$ guix environment --no-grafts -C foo --ad-hoc strace gdb
|
||
[env]# source ./environment-variables
|
||
[env]# cd foo-1.2
|
||
@end example
|
||
|
||
Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
|
||
shell dedans (@pxref{Invoquer guix environment}). La partie
|
||
@command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
|
||
@command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
|
||
débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
|
||
environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
|
||
plus d'informations sur les greffes).
|
||
|
||
Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
|
||
de construction, on peut enlever @file{/bin/sh} :
|
||
|
||
@example
|
||
[env]# rm /bin/sh
|
||
@end example
|
||
|
||
Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
|
||
conteneur jetable créé par @command{guix environment}.
|
||
|
||
La commande @command{strace} n'est probablement pas dans le chemin de
|
||
recherche, mais on peut lancer :
|
||
|
||
@example
|
||
[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
|
||
@end example
|
||
|
||
De cette manière, non seulement vous aurez reproduit les variables
|
||
d'environnement utilisées par le démon, mais vous lancerez aussi le
|
||
processus de construction dans un conteneur similaire à celui utilisé par le
|
||
démon.
|
||
|
||
|
||
@node Invoquer guix edit
|
||
@section Invoquer @command{guix edit}
|
||
|
||
@cindex @command{guix edit}
|
||
@cindex définition de paquets, modification
|
||
Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
|
||
facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
|
||
sur le fichier source qui contient la définition des paquets spécifiés. Par
|
||
exemple :
|
||
|
||
@example
|
||
guix edit gcc@@4.9 vim
|
||
@end example
|
||
|
||
@noindent
|
||
lance le programme spécifié dans la variable d'environnement @code{VISUAL}
|
||
ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
|
||
|
||
Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
|
||
ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
|
||
(@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
|
||
Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
|
||
actuellement dans le dépôt.
|
||
|
||
|
||
@node Invoquer guix download
|
||
@section Invoquer @command{guix download}
|
||
|
||
@cindex @command{guix download}
|
||
@cindex télécharger les sources des paquets
|
||
En écrivant des définitions de paquets, les développeurs ont généralement
|
||
besoin de télécharger une archive des sources, calculer son hash SHA256 et
|
||
écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
|
||
L'outil @command{guix download} aide à cette tâche : il télécharge un
|
||
fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
|
||
le dépôt et son hash SHA56.
|
||
|
||
Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
|
||
passante : losque les développeurs finissent par construire le paquet
|
||
nouvellement défini avec @command{guix build}, l'archive des sources n'aura
|
||
pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
|
||
le dépôt. C'est aussi une manière pratique de garder des fichiers
|
||
temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
|
||
|
||
La commande @command{guix download} supporte les mêmes URI que celles
|
||
utilisées dans les définitions de paquets. En particulier, elle supporte
|
||
les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
|
||
supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
|
||
l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
|
||
erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
|
||
bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
|
||
|
||
@command{guix download} vérifie les certificats du serveur HTTPS en
|
||
chargeant les autorités de certification X.509 depuis le répertoire vers
|
||
lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
|
||
|
||
Les options suivantes sont disponibles :
|
||
|
||
@table @code
|
||
@item --format=@var{fmt}
|
||
@itemx -f @var{fmt}
|
||
Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
|
||
d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
|
||
|
||
@item --no-check-certificate
|
||
Ne pas valider les certificats HTTPS des serveurs.
|
||
|
||
Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
|
||
garanti} que vous communiquez avec le serveur authentique responsable de
|
||
l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
|
||
milieu ».
|
||
|
||
@item --output=@var{fichier}
|
||
@itemx -o @var{fichier}
|
||
Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
|
||
au dépôt.
|
||
@end table
|
||
|
||
@node Invoquer guix hash
|
||
@section Invoquer @command{guix hash}
|
||
|
||
@cindex @command{guix hash}
|
||
La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
|
||
surtout un outil pour simplifier la vie des contributeurs de la distribution
|
||
: il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
|
||
la définition d'un paquet (@pxref{Définition des paquets}).
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix hash @var{option} @var{fichier}
|
||
@end example
|
||
|
||
Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
|
||
hash des données lues depuis l'entrée standard. @command{guix hash} a les
|
||
options suivantes :
|
||
|
||
@table @code
|
||
|
||
@item --format=@var{fmt}
|
||
@itemx -f @var{fmt}
|
||
Écrit le hash dans le format spécifié par @var{fmt}.
|
||
|
||
Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
|
||
(@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
|
||
|
||
Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
|
||
affichera le hash en @code{nix-base32}. Cette représentation est utilisée
|
||
dans les définitions des paquets.
|
||
|
||
@item --recursive
|
||
@itemx -r
|
||
Calcule le hash sur @var{fichier} récursivement.
|
||
|
||
@c FIXME: Replace xref above with xref to an ``Archive'' section when
|
||
@c it exists.
|
||
Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
|
||
dont ses enfants si c'est un répertoire. Certaines métadonnées de
|
||
@var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
|
||
est un fichier normal, le hash est différent que le @var{fichier} soit
|
||
exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
|
||
sur le hash (@pxref{Invoquer guix archive}).
|
||
|
||
@item --exclude-vcs
|
||
@itemx -x
|
||
Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
|
||
système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
|
||
|
||
@vindex git-fetch
|
||
Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
|
||
avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
|
||
|
||
@example
|
||
$ git clone http://example.org/foo.git
|
||
$ cd foo
|
||
$ guix hash -rx .
|
||
@end example
|
||
@end table
|
||
|
||
@node Invoquer guix import
|
||
@section Invoquer @command{guix import}
|
||
|
||
@cindex importer des paquets
|
||
@cindex paquets importés
|
||
@cindex conversion de paquets
|
||
@cindex Invoquer @command{guix import}
|
||
La commande @command{guix import} est utile pour les gens qui voudraient
|
||
ajouter un paquet à la distribution avec aussi peu de travail que possible —
|
||
une demande légitime. La commande connaît quelques dépôts logiciels d'où
|
||
elle peut « importer » des métadonnées de paquets. Le résultat est une
|
||
définition de paquet, ou un modèle de définition, dans le format reconnu par
|
||
Guix (@pxref{Définition des paquets}).
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix import @var{importer} @var{options}@dots{}
|
||
@end example
|
||
|
||
@var{importer} spécifie la source depuis laquelle importer des métadonnées
|
||
de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
|
||
options spécifiques à @var{importer}. Actuellement les « importateurs »
|
||
disponibles sont :
|
||
|
||
@table @code
|
||
@item gnu
|
||
Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
|
||
la dernière version de ce paquet GNU, avec le hash de son archive, le
|
||
synopsis et la description canonique.
|
||
|
||
Les informations supplémentaires comme les dépendances du paquet et sa
|
||
licence doivent être renseignées manuellement.
|
||
|
||
Par exemple, la commande suivante renvoie une définition de paquets pour
|
||
GNU@tie{}Hello :
|
||
|
||
@example
|
||
guix import gnu hello
|
||
@end example
|
||
|
||
Les options spécifiques sont :
|
||
|
||
@table @code
|
||
@item --key-download=@var{politique}
|
||
Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
|
||
OpenPGP manquantes lors de la vérification de la signature d'un paquet.
|
||
@xref{Invoquer guix refresh, @code{--key-download}}.
|
||
@end table
|
||
|
||
@item pypi
|
||
@cindex pypi
|
||
Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
|
||
paquets Python}@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.
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet Python
|
||
@code{itsdangerous} :
|
||
|
||
@example
|
||
guix import pypi itsdangerous
|
||
@end example
|
||
|
||
@table @code
|
||
@item --recursive
|
||
@itemx -r
|
||
Traverse le graphe des dépendances du paquet amont donné et génère les
|
||
expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
|
||
@end table
|
||
|
||
@item gem
|
||
@cindex gem
|
||
Importe des métadonnées de @uref{https://rubygems.org/,
|
||
RubyGems}@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.
|
||
|
||
La commande ci-dessous importe les métadonnées pour le paquet Ruby
|
||
@code{rails} :
|
||
|
||
@example
|
||
guix import gem rails
|
||
@end example
|
||
|
||
@table @code
|
||
@item --recursive
|
||
@itemx -r
|
||
Traverse le graphe des dépendances du paquet amont donné et génère les
|
||
expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
|
||
@end table
|
||
|
||
@item cpan
|
||
@cindex CPAN
|
||
Importe des métadonnées de @uref{https://www.metacpan.org/,
|
||
MetaCPAN}@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.
|
||
|
||
La commande ci-dessous importe les métadonnées du module Perl
|
||
@code{Acme::Boolean} :
|
||
|
||
@example
|
||
guix import cpan Acme::Boolean
|
||
@end example
|
||
|
||
@item cran
|
||
@cindex CRAN
|
||
@cindex Bioconductor
|
||
Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
|
||
dépôt central de @uref{http://r-project.org, l'environnement statistique et
|
||
graphique GUN@tie{}R}.
|
||
|
||
Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
|
||
|
||
@example
|
||
guix import cran Cairo
|
||
@end example
|
||
|
||
Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
|
||
le graphe des dépendances du paquet amont récursivement et générera des
|
||
expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
|
||
|
||
Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
|
||
sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
|
||
répertoire de paquets R pour l'analyse et la compréhension de données
|
||
génomiques volumineuses en bioinformatique.
|
||
|
||
Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
|
||
publié sur l'interface web du dépôt SVN de Bioconductor.
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet R
|
||
@code{GenomicRanges} :
|
||
|
||
@example
|
||
guix import cran --archive=bioconductor GenomicRanges
|
||
@end example
|
||
|
||
@item texlive
|
||
@cindex TeX Live
|
||
@cindex CTAN
|
||
Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
|
||
réseau complète pour les paquets TeX qui font partie de la
|
||
@uref{https://www.tug.org/texlive/, distribution TeX Live}.
|
||
|
||
Les informations sur les paquets sont obtenues à travers l'API XML fournie
|
||
par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
|
||
projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
|
||
d'archives versionnées.
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
|
||
:
|
||
|
||
@example
|
||
guix import texlive fontspec
|
||
@end example
|
||
|
||
Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
|
||
n'est pas téléchargé depuis le sous-répertoire @file{latex} du
|
||
l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
|
||
depuis le répertoire voisin spécifié sous la même racine.
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
|
||
depuis CTAN en récupérant les sources depuis le répertoire
|
||
@file{texmf/source/generic} :
|
||
|
||
@example
|
||
guix import texlive --archive=generic ifxetex
|
||
@end example
|
||
|
||
@item json
|
||
@cindex JSON, import
|
||
Importe des métadonnées d'un fichier JSON local@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 :
|
||
|
||
@example
|
||
@{
|
||
"name": "hello",
|
||
"version": "2.10",
|
||
"source": "mirror://gnu/hello/hello-2.10.tar.gz",
|
||
"build-system": "gnu",
|
||
"home-page": "https://www.gnu.org/software/hello/",
|
||
"synopsis": "Hello, GNU world: An example GNU package",
|
||
"description": "GNU Hello prints a greeting.",
|
||
"license": "GPL-3.0+",
|
||
"native-inputs": ["gcc@@6"]
|
||
@}
|
||
@end example
|
||
|
||
Les noms des champs sont les mêmes que pour les enregistrements de
|
||
@code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
|
||
paquets sont fournies comme des listes JSON de chaînes de spécifications de
|
||
paquets comme @code{guile} ou @code{guile@@2.0}.
|
||
|
||
L'importateur supporte aussi une définition plus explicite des sources avec
|
||
les champs habituels pour les enregistrements @code{<origin>} :
|
||
|
||
@example
|
||
@{
|
||
@dots{}
|
||
"source": @{
|
||
"method": "url-fetch",
|
||
"uri": "mirror://gnu/hello/hello-2.10.tar.gz",
|
||
"sha256": @{
|
||
"base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
|
||
@}
|
||
@}
|
||
@dots{}
|
||
@}
|
||
@end example
|
||
|
||
La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
|
||
et renvoie une expression de paquet :
|
||
|
||
@example
|
||
guix import json hello.json
|
||
@end example
|
||
|
||
@item nix
|
||
Importe les métadonnées d'une copie locale des source de
|
||
@uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
|
||
repose sur la commande @command{nix-instantiate} de
|
||
@uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
|
||
Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
|
||
Bash. Cette commande n'importe que la structure de haut-niveau du paquet
|
||
qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
|
||
de base de la définition d'un paquet.
|
||
|
||
Lorsque vous importez un paquet GNU, le synopsis et la description sont
|
||
replacés par la version canonique en amont.
|
||
|
||
Normalement, vous devrez d'abord faire :
|
||
|
||
@example
|
||
export NIX_REMOTE=daemon
|
||
@end example
|
||
|
||
@noindent
|
||
pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
|
||
de Nix.
|
||
|
||
Par exemple, la commande ci-dessous importe la définition du paquet de
|
||
LibreOffice (plus précisément, elle importe la définition du paquet lié à
|
||
l'attribut de plus haut-niveau @code{libreoffice}) :
|
||
|
||
@example
|
||
guix import nix ~/path/to/nixpkgs libreoffice
|
||
@end example
|
||
|
||
@item hackage
|
||
@cindex hackage
|
||
Importe les métadonnées de l'archive de paquets centrale de la communauté
|
||
Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
|
||
sont récupérées depuis les fichiers Cabal et incluent toutes les
|
||
informations utiles, dont les dépendances des paquets.
|
||
|
||
Les options spécifiques sont :
|
||
|
||
@table @code
|
||
@item --stdin
|
||
@itemx -s
|
||
Lit un fichier Cabal depuis l'entrée standard.
|
||
@item --no-test-dependencies
|
||
@itemx -t
|
||
N'inclut pas les dépendances requises uniquement par les suites de tests.
|
||
@item --cabal-environment=@var{alist}
|
||
@itemx -e @var{alist}
|
||
@var{alist} est une alist Scheme qui définie l'environnement dans lequel les
|
||
conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
|
||
@code{arch}, @code{impl} et une représentation sous forme de chaîne de
|
||
caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
|
||
le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
|
||
doivent se conformer avec la définition du format de fichiers Cabal. La
|
||
valeur par défaut associée avec les clefs @code{os}, @code{arch} et
|
||
@code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
|
||
@item --recursive
|
||
@itemx -r
|
||
Traverse le graphe des dépendances du paquet amont donné et génère les
|
||
expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
|
||
@end table
|
||
|
||
La commande ci-dessous importe les métadonnées de la dernière version du
|
||
paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
|
||
spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
|
||
:
|
||
|
||
@example
|
||
guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
|
||
@end example
|
||
|
||
Une version spécifique du paquet peut éventuellement être spécifiée en
|
||
faisant suivre le nom du paquet par un arobase et un numéro de version comme
|
||
dans l'exemple suivant :
|
||
|
||
@example
|
||
guix import hackage mtl@@2.1.3.1
|
||
@end example
|
||
|
||
@item stackage
|
||
@cindex stackage
|
||
L'importateur @code{stackage} est une enveloppe autour de l'importateur
|
||
@code{hackage}. Il prend un nom de paquet, recherche la version incluse
|
||
dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
|
||
Stackage} et utilise l'importateur @code{hackage} pour récupérer les
|
||
métadonnées. Remarquez que c'est à vous de choisir une version LTS
|
||
compatible avec le compilateur GHC utilisé par Guix.
|
||
|
||
Les options spécifiques sont :
|
||
|
||
@table @code
|
||
@item --no-test-dependencies
|
||
@itemx -t
|
||
N'inclut pas les dépendances requises uniquement par les suites de tests.
|
||
@item --lts-version=@var{version}
|
||
@itemx -l @var{version}
|
||
@var{version} est la version LTS désirée. Si elle est omise, la dernière
|
||
version est utilisée.
|
||
@item --recursive
|
||
@itemx -r
|
||
Traverse le graphe des dépendances du paquet amont donné et génère les
|
||
expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
|
||
@end table
|
||
|
||
La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
|
||
inclus dans la version LTS 7.18 de Stackage :
|
||
|
||
@example
|
||
guix import stackage --lts-version=7.18 HTTP
|
||
@end example
|
||
|
||
@item elpa
|
||
@cindex elpa
|
||
Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
|
||
Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
|
||
|
||
Les options spécifiques sont :
|
||
|
||
@table @code
|
||
@item --archive=@var{repo}
|
||
@itemx -a @var{repo}
|
||
@var{repo} identifie le dépôt d'archive depuis lequel récupérer les
|
||
informations. Actuellement les dépôts supportés et leurs identifiants sont
|
||
:
|
||
@itemize -
|
||
@item
|
||
@uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
|
||
l'identifiant @code{gnu}. C'est la valeur par défaut.
|
||
|
||
Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
|
||
porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
|
||
similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
|
||
package signatures,, emacs, The GNU Emacs Manual}).
|
||
|
||
@item
|
||
@uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
|
||
sélectionner avec l'identifiant @code{melpa-stable}.
|
||
|
||
@item
|
||
@uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
|
||
l'identifiant @code{melpa}.
|
||
@end itemize
|
||
|
||
@item --recursive
|
||
@itemx -r
|
||
Traverse le graphe des dépendances du paquet amont donné et génère les
|
||
expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
|
||
@end table
|
||
|
||
@item crate
|
||
@cindex crate
|
||
Importe les métadonnées du répertoire des paquets Rust
|
||
@uref{https://crates.io, crates.io}.
|
||
|
||
@item opam
|
||
@cindex OPAM
|
||
@cindex OCaml
|
||
Importe les métadonnées du répertoire de paquets
|
||
@uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml
|
||
@end table
|
||
|
||
La structure du code de @command{guix import} est modulaire. Il serait
|
||
utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
|
||
aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
|
||
|
||
@node Invoquer guix refresh
|
||
@section Invoquer @command{guix refresh}
|
||
|
||
@cindex @command{guix refresh}
|
||
L'audience première de la commande @command{guix refresh} est l'ensemble des
|
||
développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
|
||
les paquets fournis par la distribution qui sont en retard par rapport aux
|
||
dernières versions disponibles en amont, comme ceci :
|
||
|
||
@example
|
||
$ guix refresh
|
||
gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
|
||
gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
|
||
@end example
|
||
|
||
Autrement, on peut spécifier les paquets à considérer, auquel cas un
|
||
avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
|
||
mise à jour associé :
|
||
|
||
@example
|
||
$ guix refresh coreutils guile guile-ssh
|
||
gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
|
||
gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
|
||
@end example
|
||
|
||
@command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
|
||
le numéro de version le plus élevé parmi les versions publiées. La commande
|
||
sait comment mettre à jour certains types de paquets : les paquets GNU, les
|
||
paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
|
||
Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
|
||
déterminer si une nouvelle version est disponible en amont. Cependant, le
|
||
mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
|
||
une nouvelle méthode !
|
||
|
||
Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
|
||
@command{guix refresh} a besoin d'un peu d'aide. La plupart des
|
||
gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
|
||
les définitions de paquets, ce qui peut être utilisé à cette fin :
|
||
|
||
@example
|
||
(define-public network-manager
|
||
(package
|
||
(name "network-manager")
|
||
;; @dots{}
|
||
(properties '((upstream-name . "NetworkManager")))))
|
||
@end example
|
||
|
||
Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
|
||
source de la distribution pour mettre à jour le numéro de version et le hash
|
||
de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
|
||
Cela est effectué en téléchargeant la dernière version de l'archive des
|
||
sources de chaque paquet et des signatures associées, en authentifiant
|
||
l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
|
||
calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
|
||
manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
|
||
récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
|
||
clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
|
||
refresh} rapporte une erreur.
|
||
|
||
Les options suivantes sont supportées :
|
||
|
||
@table @code
|
||
|
||
@item --expression=@var{expr}
|
||
@itemx -e @var{expr}
|
||
Considérer le paquet évalué par @var{expr}.
|
||
|
||
C'est utile pour précisément se référer à un paquet, comme dans cet exemple
|
||
:
|
||
|
||
@example
|
||
guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
|
||
@end example
|
||
|
||
Cette commande liste les paquets qui dépendent de la libc « finale » (en
|
||
gros tous les paquets).
|
||
|
||
@item --update
|
||
@itemx -u
|
||
Met à jour les fichiers source de la distribution (les recettes de paquets)
|
||
en place. Cette option est généralement utilisée depuis une copie du dépôt
|
||
git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
|
||
|
||
@example
|
||
$ ./pre-inst-env guix refresh -s non-core -u
|
||
@end example
|
||
|
||
@xref{Définition des paquets}, pour plus d'information sur les définitions des
|
||
paquets.
|
||
|
||
@item --select=[@var{subset}]
|
||
@itemx -s @var{subset}
|
||
Choisi tous les paquets dans @var{subset}, entre @code{core} et
|
||
@code{non-core}.
|
||
|
||
Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
|
||
distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
|
||
tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
|
||
Habituellement, changer l'un de ces paquets dans la distribution implique de
|
||
reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
|
||
pour les utilisateurs, en terme de temps de compilation et de bande passante
|
||
utilisés pour effectuer la mise à jour.
|
||
|
||
Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
|
||
habituellement utile dans les cas où une mise à jour des paquets du cœur
|
||
serait dérangeante.
|
||
|
||
@item --manifest=@var{fichier}
|
||
@itemx -m @var{fichier}
|
||
Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
|
||
vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
|
||
jour.
|
||
|
||
@item --type=@var{updater}
|
||
@itemx -t @var{updater}
|
||
Chois uniquement les paquets pris en charge par @var{updater}
|
||
(éventuellement une liste de gestionnaires de mise à jour séparés par des
|
||
virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
|
||
:
|
||
|
||
@table @code
|
||
@item gnu
|
||
le gestionnaire de mise à jour pour les paquets GNU ;
|
||
@item gnome
|
||
le gestionnaire de mise à jour pour les paquets GNOME ;
|
||
@item kde
|
||
le gestionnaire de mise à jour pour les paquets KDE ;
|
||
@item xorg
|
||
le gestionnaire de mise à jour pour les paquets X.org ;
|
||
@item kernel.org
|
||
le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
|
||
@item elpa
|
||
le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
|
||
ELPA} ;
|
||
@item cran
|
||
le gestionnaire de mise à jour pour les paquets
|
||
@uref{https://cran.r-project.org/, CRAN} ;
|
||
@item bioconductor
|
||
le gestionnaire de mise à jour pour les paquets
|
||
@uref{https://www.bioconductor.org/, Bioconductor} ;
|
||
@item cpan
|
||
le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
|
||
CPAN} ;
|
||
@item pypi
|
||
le gestionnaire de mise à jour pour les paquets
|
||
@uref{https://pypi.python.org, PyPI} ;
|
||
@item gem
|
||
le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
|
||
RubyGems} ;
|
||
@item github
|
||
le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
|
||
GitHub} ;
|
||
@item hackage
|
||
le gestionnaire de mise à jour pour les paquets
|
||
@uref{https://hackage.haskell.org, Hackage} ;
|
||
@item stackage
|
||
le gestionnaire de mise à jour pour les paquets
|
||
@uref{https://www.stackage.org, Stackage} ;
|
||
@item crate
|
||
le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
|
||
Crates} ;
|
||
@end table
|
||
|
||
Par exemple, la commande suivante ne vérifie que les mises à jour des
|
||
paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
|
||
|
||
@example
|
||
$ guix refresh --type=elpa,cran
|
||
gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
|
||
gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
|
||
@end example
|
||
|
||
@end table
|
||
|
||
En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
|
||
paquets, comme dans cet exemple :
|
||
|
||
@example
|
||
$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
|
||
@end example
|
||
|
||
@noindent
|
||
La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
|
||
@code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
|
||
|
||
Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
|
||
de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
|
||
vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
|
||
avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
|
||
|
||
@table @code
|
||
|
||
@item --list-updaters
|
||
@itemx -L
|
||
Liste les gestionnaires de mise à jour et quitte (voir l'option
|
||
@option{--type} plus haut).
|
||
|
||
Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
|
||
la fin, affiche le pourcentage de paquets couverts par tous les
|
||
gestionnaires.
|
||
|
||
@item --list-dependent
|
||
@itemx -l
|
||
Liste les paquets de plus haut-niveau qui devraient être reconstruits après
|
||
la mise à jour d'un ou plusieurs paquets.
|
||
|
||
@xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
|
||
graph}}, pour des informations sur la manière de visualiser la liste des
|
||
paquets dépendant d'un autre.
|
||
|
||
@end table
|
||
|
||
Soyez conscients que l'option @code{--list-dependent} ne fait
|
||
@emph{qu'approximer} les reconstructions qui seraient requises par une mise
|
||
à jour. Plus de reconstructions pourraient être requises dans certaines
|
||
circonstances.
|
||
|
||
@example
|
||
$ guix refresh --list-dependent flex
|
||
Building the following 120 packages would ensure 213 dependent packages are rebuilt:
|
||
hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
|
||
@end example
|
||
|
||
La commande ci-dessus liste un ensemble de paquets qui peuvent être
|
||
construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
|
||
|
||
Les options suivante peuvent être utilisées pour personnaliser les
|
||
opérations avec GnuPG :
|
||
|
||
@table @code
|
||
|
||
@item --gpg=@var{commande}
|
||
Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
|
||
recherchée dans @code{PATH}.
|
||
|
||
@item --keyring=@var{fichier}
|
||
Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
|
||
doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
|
||
un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
|
||
manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
|
||
Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
|
||
fichiers keybox).
|
||
|
||
Lorsque cette option est omise, @command{guix refresh} utilise
|
||
@file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
|
||
clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
|
||
clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
|
||
(voir @option{--key-download} plus bas).
|
||
|
||
Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
|
||
fichier keybox avec une commande telle que :
|
||
|
||
@example
|
||
gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
|
||
@end example
|
||
|
||
De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
|
||
comme ceci :
|
||
|
||
@example
|
||
gpg --no-default-keyring --keyring mykeyring.kbx \
|
||
--recv-keys @value{OPENPGP-SIGNING-KEY-ID}
|
||
@end example
|
||
|
||
@ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
|
||
Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
|
||
GPG.
|
||
|
||
@item --key-download=@var{politique}
|
||
Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
|
||
l'une des suivantes :
|
||
|
||
@table @code
|
||
@item always
|
||
Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
|
||
ajouter au porte-clefs de l'utilisateur.
|
||
|
||
@item never
|
||
Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
|
||
place.
|
||
|
||
@item interactive
|
||
Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
|
||
à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
|
||
par défaut.
|
||
@end table
|
||
|
||
@item --key-server=@var{host}
|
||
Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
|
||
clef publique.
|
||
|
||
@end table
|
||
|
||
The @code{github} updater uses the @uref{https://developer.github.com/v3/,
|
||
GitHub API} to query for new releases. When used repeatedly e.g.@: when
|
||
refreshing all packages, GitHub will eventually refuse to answer any further
|
||
API requests. By default 60 API requests per hour are allowed, and a full
|
||
refresh on all GitHub packages in Guix requires more than this.
|
||
Authentication with GitHub through the use of an API token alleviates these
|
||
limits. To use an API token, set the environment variable
|
||
@code{GUIX_GITHUB_TOKEN} to a token procured from
|
||
@uref{https://github.com/settings/tokens} or otherwise.
|
||
|
||
|
||
@node Invoquer guix lint
|
||
@section Invoquer @command{guix lint}
|
||
|
||
@cindex @command{guix lint}
|
||
@cindex paquets, chercher des erreurs
|
||
La commande @command{guix lint} est conçue pour aider les développeurs à
|
||
éviter des erreurs commune et à utiliser un style cohérent lors de
|
||
l'écriture de recettes de paquets. Elle lance des vérifications sur un
|
||
ensemble de paquets donnés pour trouver des erreurs communes dans leur
|
||
définition. Les @dfn{vérifieurs} disponibles comprennent (voir
|
||
@code{--list-checkers} pour une liste complète) :
|
||
|
||
@table @code
|
||
@item synopsis
|
||
@itemx description
|
||
Vérifie certaines règles typographiques et stylistiques dans les
|
||
descriptions et les synopsis.
|
||
|
||
@item inputs-should-be-native
|
||
Identifie les entrées qui devraient sans doute plutôt être des entrées
|
||
natives.
|
||
|
||
@item source
|
||
@itemx home-page
|
||
@itemx mirror-url
|
||
@itemx 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}).
|
||
|
||
@item cve
|
||
@cindex vulnérabilités
|
||
@cindex CVE, Common Vulnerabilities and Exposures
|
||
Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
|
||
(Common Vulnerabilities and Exposures) de l'année en cours et des années
|
||
précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
|
||
NIST américain}.
|
||
|
||
Pour voir les informations sur une vulnérabilité en particulier, visitez les
|
||
pages :
|
||
|
||
@itemize
|
||
@item
|
||
@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
|
||
@item
|
||
@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
|
||
@end itemize
|
||
|
||
@noindent
|
||
où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
|
||
@code{CVE-2015-7554}.
|
||
|
||
Les développeurs de paquets peuvent spécifier dans les recettes des paquets
|
||
le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
|
||
et la version du paquet s'ils diffèrent du nom et de la version que Guix
|
||
utilise, comme dans cet exemple :
|
||
|
||
@example
|
||
(package
|
||
(name "grub")
|
||
;; @dots{}
|
||
;; CPE calls this package "grub2".
|
||
(properties '((cpe-name . "grub2")
|
||
(cpe-version . "2.3")))
|
||
@end example
|
||
|
||
@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
|
||
Certaines entrées dans la base de données CVE ne spécifient pas la version
|
||
du paquet auquel elles s'appliquent et lui restera donc attachée pour
|
||
toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
|
||
qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
|
||
|
||
@example
|
||
(package
|
||
(name "t1lib")
|
||
;; @dots{}
|
||
;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
|
||
(properties `((lint-hidden-cve . ("CVE-2011-0433"
|
||
"CVE-2011-1553"
|
||
"CVE-2011-1554"
|
||
"CVE-2011-5244")))))
|
||
@end example
|
||
|
||
@item formatting
|
||
Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
|
||
source évident : des espaces en fin de ligne, des tabulations, etc.
|
||
@end table
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix lint @var{options} @var{package}@dots{}
|
||
@end example
|
||
|
||
Si aucun paquet n'est donné par la ligne de commande, tous les paquets
|
||
seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
|
||
options suivantes :
|
||
|
||
@table @code
|
||
@item --list-checkers
|
||
@itemx -l
|
||
Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
|
||
paquets puis quitte.
|
||
|
||
@item --checkers
|
||
@itemx -c
|
||
N'active que les vérificateurs spécifiés dans une liste de noms séparés par
|
||
des virgules parmi la liste renvoyée par @code{--list-checkers}.
|
||
|
||
@end table
|
||
|
||
@node Invoquer guix size
|
||
@section Invoquer @command{guix size}
|
||
|
||
@cindex taille
|
||
@cindex paquet, taille
|
||
@cindex closure
|
||
@cindex @command{guix size}
|
||
La commande @command{guix size} aide les développeurs à dresser un profil de
|
||
l'utilisation du disque que font les paquets. C'est facile de négliger
|
||
l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
|
||
l'utilisation d'une sortie unique pour un paquet qui pourrait être
|
||
facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
|
||
problèmes que @command{guix size} peut typiquement mettre en valeur.
|
||
|
||
On peut passer un ou plusieurs spécifications de paquets à la commande,
|
||
comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
|
||
dépôt. Regardez cet exemple :
|
||
|
||
@example
|
||
$ guix size coreutils
|
||
store item total self
|
||
/gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
|
||
/gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
|
||
/gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
|
||
/gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
|
||
/gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
|
||
/gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
|
||
/gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
|
||
/gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
|
||
total: 78.9 MiB
|
||
@end example
|
||
|
||
@cindex closure
|
||
Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
|
||
Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
|
||
comme ce qui serait renvoyé par :
|
||
|
||
@example
|
||
$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
|
||
@end example
|
||
|
||
Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
|
||
première colonne, nommée « total », montre la taille en mébioctet (Mio) de
|
||
la cloture 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
|
||
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
|
||
disponibles sur le système de toute façon).
|
||
|
||
Lorsque les paquets passés à @command{guix size} sont disponibles dans le
|
||
dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
|
||
@emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
|
||
@code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
|
||
informations sur les greffes}, @command{guix size} demande au démon de
|
||
déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
|
||
@command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
|
||
Coreutils}).
|
||
|
||
Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
|
||
size} rapporte les informations en se basant sur les substituts disponibles
|
||
(@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
|
||
éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
|
||
distance.
|
||
|
||
Vous pouvez aussi spécifier plusieurs noms de paquets :
|
||
|
||
@example
|
||
$ guix size coreutils grep sed bash
|
||
store item total self
|
||
/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
|
||
/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
|
||
/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
|
||
/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
|
||
@dots{}
|
||
total: 102.3 MiB
|
||
@end example
|
||
|
||
@noindent
|
||
Dans cet exemple on voit que la combinaison des quatre paquets prent
|
||
102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
|
||
puisqu'ils ont beaucoup de dépendances en commun.
|
||
|
||
Les options disponibles sont :
|
||
|
||
@table @option
|
||
|
||
@item --substitute-urls=@var{urls}
|
||
Utilise les informations de substituts de @var{urls}.
|
||
@xref{client-substitute-urls, the same option for @code{guix build}}.
|
||
|
||
@item --sort=@var{clef}
|
||
Trie les lignes en fonction de la @var{clef}, l'une des optinos 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.
|
||
@end table
|
||
|
||
@item --map-file=@var{fichier}
|
||
Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
|
||
|
||
Pour l'exemple au-dessus, le schéma ressemble à ceci :
|
||
|
||
@image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
|
||
Coreutils produit par @command{guix size}}
|
||
|
||
Cette option requiert l'installation de
|
||
@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
|
||
soit visible dans le chemin de recherche des modules Guile. Lorsque ce
|
||
n'est pas le cas, @command{guix size} plante en essayant de le charger.
|
||
|
||
@item --system=@var{système}
|
||
@itemx -s @var{système}
|
||
Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
|
||
|
||
@end table
|
||
|
||
@node Invoquer guix graph
|
||
@section Invoque @command{guix graph}
|
||
|
||
@cindex DAG
|
||
@cindex @command{guix graph}
|
||
@cindex dépendances des paquets
|
||
Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
|
||
un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
|
||
une représentation mentale du DAG d'un paquet, donc la commande
|
||
@command{guix graph} fournit une représentation visuelle du DAG. Par
|
||
défaut, @command{guix graph} émet un représentation du DAG dans le format
|
||
d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
|
||
puisse être passée directement à la commande @command{dot} de Graphviz.
|
||
Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
|
||
un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
|
||
@uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
|
||
construire un graphe dans une base de donnée de graphes supportant le
|
||
langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
|
||
syntaxe générale est :
|
||
|
||
@example
|
||
guix graph @var{options} @var{paquet}@dots{}
|
||
@end example
|
||
|
||
Par exemple, la commande suivante génère un fichier PDF représentant le DAG
|
||
du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
|
||
compilation :
|
||
|
||
@example
|
||
guix graph coreutils | dot -Tpdf > dag.pdf
|
||
@end example
|
||
|
||
La sortie ressemble à ceci :
|
||
|
||
@image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
|
||
|
||
Joli petit graphe, non ?
|
||
|
||
Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
|
||
graphe des objets paquets, en omettant les entrées implicites comme GCC,
|
||
libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
|
||
parfois on veut voir plus de détails. @command{guix graph} supporte
|
||
plusieurs types de graphes, qui vous permettent de choisir le niveau de
|
||
détails :
|
||
|
||
@table @code
|
||
@item package
|
||
C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
|
||
des objets paquets, sans les dépendances implicites. C'est concis, mais
|
||
omet pas mal de détails.
|
||
|
||
@item reverse-package
|
||
Cela montre le DAG @emph{inversé} des paquets. Par exemple :
|
||
|
||
@example
|
||
guix graph --type=reverse-package ocaml
|
||
@end example
|
||
|
||
...@: yields the graph of packages that depend on OCaml.
|
||
|
||
Remarquez que pour les paquets du cœur de la distribution, cela crée des
|
||
graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
|
||
dépendent d'un paquet donnés, utilisez @command{guix refresh
|
||
--list-dependent} (@pxref{Invoquer guix refresh,
|
||
@option{--list-dependent}}).
|
||
|
||
@item bag-emerged
|
||
C'est le DAG du paquet, @emph{avec} les entrées implicites.
|
||
|
||
Par exemple, la commande suivante :
|
||
|
||
@example
|
||
guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
|
||
@end example
|
||
|
||
...@: yields this bigger graph:
|
||
|
||
@image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
|
||
GNU Coreutils}
|
||
|
||
En bas du graphe, on voit toutes les entrées implicites de
|
||
@var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
|
||
|
||
Maintenant, remarquez que les dépendances de ces entrées implicites —
|
||
c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
|
||
sont pas affichées, pour rester concis.
|
||
|
||
@item bag
|
||
Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
|
||
bootstrap.
|
||
|
||
@item bag-with-origins
|
||
Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
|
||
|
||
@item dérivation
|
||
C'est la représentation lu plus détaillée : elle montre le DAG des
|
||
dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
|
||
représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
|
||
scripts de construction, les correctifs, les modules Guile, etc.
|
||
|
||
Pour ce type de graphe, il est aussi possible de passer un nom de fichier
|
||
@file{.drv} à la place d'un nom de paquet, comme dans :
|
||
|
||
@example
|
||
guix graph -t derivation `guix system build -d my-config.scm`
|
||
@end example
|
||
|
||
@item module
|
||
C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
|
||
exemple, la commande suivante montre le graphe des modules de paquets qui
|
||
définissent le paquet @code{guile} :
|
||
|
||
@example
|
||
guix graph -t module guile | dot -Tpdf > module-graph.pdf
|
||
@end example
|
||
@end table
|
||
|
||
Tous les types ci-dessus correspondent aux @emph{dépendances à la
|
||
construction}. Le type de graphe suivant représente les @emph{dépendances à
|
||
l'exécution} :
|
||
|
||
@table @code
|
||
@item references
|
||
C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
|
||
renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
|
||
|
||
Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
|
||
@command{guix graph} essayera d'obtenir les informations sur les dépendances
|
||
à travers les substituts.
|
||
|
||
Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
|
||
paquet. Par exemple, la commande ci-dessous produit le graphe des
|
||
références de votre profile (qui peut être gros !) :
|
||
|
||
@example
|
||
guix graph -t references `readlink -f ~/.guix-profile`
|
||
@end example
|
||
|
||
@item referrers
|
||
C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
|
||
par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
|
||
|
||
Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
|
||
supposons que Inkscape est actuellement disponible dans 10 profils sur votre
|
||
machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
|
||
la racine est Inkscape avec 10 profils qui y sont liés.
|
||
|
||
Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
|
||
glané.
|
||
|
||
@end table
|
||
|
||
Les options disponibles sont les suivante :
|
||
|
||
@table @option
|
||
@item --type=@var{type}
|
||
@itemx -t @var{type}
|
||
Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
|
||
des types au-dessus.
|
||
|
||
@item --list-types
|
||
Liste les types de graphes supportés.
|
||
|
||
@item --backend=@var{moteur}
|
||
@itemx -b @var{moteur}
|
||
Produit un graphe avec le @var{moteur} choisi.
|
||
|
||
@item --list-backends
|
||
Liste les moteurs de graphes supportés.
|
||
|
||
Actuellement les moteurs disponibles sont Graphviz et d3.js.
|
||
|
||
@item --expression=@var{expr}
|
||
@itemx -e @var{expr}
|
||
Considérer le paquet évalué par @var{expr}.
|
||
|
||
C'est utile pour précisément se référer à un paquet, comme dans cet exemple
|
||
:
|
||
|
||
@example
|
||
guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
|
||
@end example
|
||
|
||
@item --system=@var{système}
|
||
@itemx -s @var{système}
|
||
Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
|
||
|
||
Le graphe de dépendance des paquets est la plupart du temps indépendant de
|
||
l'architecture, mais il y a quelques parties qui dépendent de l'architecture
|
||
que cette option vous permet de visualiser.
|
||
@end table
|
||
|
||
|
||
@node Invoquer guix 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}
|
||
|
||
@cindex @command{guix publish}
|
||
Le but de @command{guix publish} est de vous permettre de partager
|
||
facilement votre dépôt avec d'autres personnes qui peuvent ensuite
|
||
l'utiliser comme serveur de substituts (@pxref{Substituts}).
|
||
|
||
Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
|
||
à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
|
||
signifie que toutes les machines qui font tourner Guix peuvent aussi agir
|
||
comme une ferme de construction, puisque l'interface HTTP est compatible
|
||
avec Hydra, le logiciel derrière la ferme de construction
|
||
@code{hydra.gnu.org}.
|
||
|
||
Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
|
||
destinataires de vérifier leur authenticité et leur intégrité
|
||
(@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
|
||
signature du système, qui n'est lisible que par l'administrateur système, il
|
||
doit être lancé en root ; l'option @code{--user} lui fait baisser ses
|
||
privilèges le plus tôt possible.
|
||
|
||
La pair de clefs pour les signatures doit être générée avant de lancer
|
||
@command{guix publish}, avec @command{guix archive --generate-key}
|
||
(@pxref{Invoquer guix archive}).
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix publish @var{options}@dots{}
|
||
@end example
|
||
|
||
Lancer @command{guix publish} sans arguments supplémentaires lancera un
|
||
serveur HTTP sur le port 8080 :
|
||
|
||
@example
|
||
guix publish
|
||
@end example
|
||
|
||
Une fois qu'un serveur de publication a été autorisé (@pxref{Invoquer guix archive}), le démon peut télécharger des substituts à partir de lui :
|
||
|
||
@example
|
||
guix-daemon --substitute-urls=http://example.org:8080
|
||
@end example
|
||
|
||
Par défaut, @command{guix publish} compresse les archives à la volée quand
|
||
il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
|
||
aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
|
||
s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
|
||
@option{--cache}, qui active le cache des archives avant de les envoyer aux
|
||
clients — voir les détails plus bas. La commande @command{guix weather}
|
||
fournit un manière pratique de vérifier ce qu'un serveur fournit
|
||
(@pxref{Invoquer guix weather}).
|
||
|
||
En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
|
||
des fichiers source référencées dans les enregistrements @code{origin}
|
||
(@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
|
||
publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
|
||
brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
|
||
format @code{nix-base32}, @pxref{Invoquer guix hash}) :
|
||
|
||
@example
|
||
http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
|
||
@end example
|
||
|
||
Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
|
||
dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
|
||
|
||
@cindex journaux de construction, publication
|
||
Les journaux de construction sont disponibles à partir des URL @code{/log}
|
||
comme ceci :
|
||
|
||
@example
|
||
http://example.org/log/gwspk@dots{}-guile-2.2.3
|
||
@end example
|
||
|
||
@noindent
|
||
Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
|
||
construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
|
||
avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
|
||
Nous recommandons de lancer @command{guix-daemon} avec
|
||
@code{--log-compression=gzip} pace que les navigateurs web les décompressent
|
||
automatiquement, ce qui n'est pas le cas avec la compression bzip2.
|
||
|
||
Les options suivantes sont disponibles :
|
||
|
||
@table @code
|
||
@item --port=@var{port}
|
||
@itemx -p @var{port}
|
||
Écoute les requêtes HTTP sur le @var{port}
|
||
|
||
@item --listen=@var{hôte}
|
||
Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
|
||
accepte les connexions de n'importe quelle interface.
|
||
|
||
@item --user=@var{utilisateur}
|
||
@itemx -u @var{utilisateur}
|
||
Charge les privilèges de @var{utilisateur} le plus vite possible —
|
||
c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
|
||
signature a été lue.
|
||
|
||
@item --compression[=@var{niveau}]
|
||
@itemx -C [@var{niveau}]
|
||
Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
|
||
zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
|
||
différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
|
||
meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
|
||
|
||
À moins que @option{--cache} ne soit utilisé, la compression se fait à la
|
||
volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
|
||
charge sur la machine qui fait tourner @command{guix publish}, c'est une
|
||
bonne idée de choisir un niveau de compression faible, de lancer
|
||
@command{guix publish} derrière un serveur de cache ou d'utiliser
|
||
@option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
|
||
@command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
|
||
réponse.
|
||
|
||
@item --cache=@var{répertoire}
|
||
@itemx -c @var{répertoire}
|
||
Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
|
||
@var{répertoire} et ne sert que les archives dans ce cache.
|
||
|
||
Lorsque cette option est omise, les archives et les métadonnées sont crées à
|
||
la volée. Cela réduit la bande passante disponible, surtout quand la
|
||
compression est activée puisqu'elle pourrait être limitée par le CPU. Un
|
||
autre inconvénient au mode par défaut est que la taille des archives n'est
|
||
pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
|
||
@code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
|
||
la quantité de données à télécharger.
|
||
|
||
À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
|
||
un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
|
||
déclenche la création de l'archive — en calculant son @code{.narinfo} et en
|
||
compressant l'archive au besoin. Une fois l'archive cachée dans
|
||
@var{répertoire}, les requêtes suivantes réussissent et sont servies
|
||
directement depuis le cache, ce qui garanti que les clients ont la meilleure
|
||
bande passante possible.
|
||
|
||
Le processus de création est effectué par des threads de travail. Par
|
||
défaut, un thread par cœur du CPU est créé, mais cela peut être
|
||
personnalisé. Voir @option{--workers} plus bas.
|
||
|
||
Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
|
||
automatiquement supprimées lorsqu'elles expirent.
|
||
|
||
@item --workers=@var{N}
|
||
Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
|
||
thread de travail pour créer les archives.
|
||
|
||
@item --ttl=@var{ttl}
|
||
Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
|
||
vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
|
||
signifie 5 jours, @code{1m} signifie un mois, etc.
|
||
|
||
Cela permet au Guix de l'utilisateur de garder les informations en cache
|
||
pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
|
||
pas lui-même que les éléments du dépôt qu'il fournit seront toujours
|
||
disponible pendant la durée @var{ttl}.
|
||
|
||
En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
|
||
n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
|
||
dans le dépôt peuvent être supprimées.
|
||
|
||
@item --nar-path=@var{chemin}
|
||
Utilise @var{chemin} comme préfixe des URL de fichier « nar »
|
||
(@pxref{Invoquer guix archive, normalized archives}).
|
||
|
||
Par défaut, les nars sont présents à l'URL comme
|
||
@code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
|
||
changer la partie @code{/nar} en @var{chemin}.
|
||
|
||
@item --public-key=@var{fichier}
|
||
@itemx --private-key=@var{fichier}
|
||
Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
|
||
signer les éléments avant de les publier.
|
||
|
||
Les fichiers doivent correspondre à la même pair de clefs (la clef privée
|
||
est utilisée pour signer et la clef publique est seulement ajouté aux
|
||
métadonnées de la signature). Ils doivent contenir les clefs dans le format
|
||
s-expression canonique produit par @command{guix archive --generate-key}
|
||
(@pxref{Invoquer guix archive}). Par défaut,
|
||
@file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
|
||
utilisés.
|
||
|
||
@item --repl[=@var{port}]
|
||
@itemx -r [@var{port}]
|
||
Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
|
||
Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
|
||
pour déboguer un serveur @command{guix publish} qui tourne.
|
||
@end table
|
||
|
||
Activer @command{guix publish} sur un système 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}
|
||
(@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
|
||
|
||
Si vous avez installé Guix sur une « distro extérieure », suivez ces
|
||
instructions :
|
||
|
||
@itemize
|
||
@item
|
||
Si votre distro hôte utilise le système d'init systemd :
|
||
|
||
@example
|
||
# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
|
||
/etc/systemd/system/
|
||
# systemctl start guix-publish && systemctl enable guix-publish
|
||
@end example
|
||
|
||
@item
|
||
Si votre distribution hôte utilise le système d'initialisation Upstart :
|
||
|
||
@example
|
||
# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
|
||
# start guix-publish
|
||
@end example
|
||
|
||
@item
|
||
Sinon, procédez de manière similaire avec votre système d'init de votre
|
||
distro.
|
||
@end itemize
|
||
|
||
@node Invoquer guix challenge
|
||
@section Invoquer @command{guix challenge}
|
||
|
||
@cindex constructions reproductibles
|
||
@cindex constructions vérifiables
|
||
@cindex @command{guix challenge}
|
||
@cindex défi
|
||
Est-ce que les binaires fournis par ce serveur correspondent réellement au
|
||
code source qu'il dit avoir construit ? Est-ce que le processus de
|
||
construction d'un paquet est déterministe ? Ce sont les question auxquelles
|
||
la commande @command{guix challenge} essaye de répondre.
|
||
|
||
La première question est évidemment importante : avant d'utiliser un serveur
|
||
de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
|
||
fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
|
||
permet la première : si les constructions des paquets sont déterministes
|
||
alors des constructions indépendantes du paquet devraient donner le même
|
||
résultat, bit à bit ; si un serveur fournit un binaire différent de celui
|
||
obtenu localement, il peut être soit corrompu, soit malveillant.
|
||
|
||
On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
|
||
toutes les entrées du processus qui construit le fichier ou le répertoire —
|
||
les compilateurs, les bibliothèques, les scripts de construction,
|
||
etc. (@pxref{Introduction}). En supposant que les processus de construction
|
||
sont déterministes, un nom de fichier dans le dépôt devrait correspondre
|
||
exactement à une sortie de construction. @command{guix challenge} vérifie
|
||
si il y a bien effectivement une seule correspondance en comparant les
|
||
sorties de plusieurs constructions indépendantes d'un élément du dépôt
|
||
donné.
|
||
|
||
La sortie de la commande ressemble à :
|
||
|
||
@smallexample
|
||
$ guix challenge --substitute-urls="https://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
|
||
|
||
@dots{}
|
||
|
||
6,406 éléments du dépôt ont été analysés :
|
||
- 4,749 (74.1%) étaient identiques
|
||
- 525 (8.2%) étaient différents
|
||
- 1,132 (17.7%) étaient impossibles à évaluer
|
||
@end smallexample
|
||
|
||
@noindent
|
||
Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
|
||
déterminer l'ensemble des dérivations construites localement — en opposition
|
||
aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
|
||
demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
|
||
les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
|
||
différent de la construction locale.
|
||
|
||
@cindex non-déterminisme, dans les constructions des paquets
|
||
Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
|
||
différente. Inversement, @code{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.
|
||
|
||
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 \
|
||
| 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.
|
||
|
||
Une fois que vous avez fait ce travail, vous pourrez dire si les différences
|
||
sont dues au non-déterminisme du processus de construction ou à la
|
||
malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
|
||
les sources de non-déterminisme dans les paquets pour rendre plus facile la
|
||
vérification des substituts, mais bien sûr, c'est un processus qui
|
||
n'implique pas que Guix, mais une grande partie de la communauté des
|
||
logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
|
||
pour aider à corriger le problème.
|
||
|
||
Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
|
||
@code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
|
||
résultat que vous avec :
|
||
|
||
@example
|
||
$ guix challenge @var{paquet}
|
||
@end example
|
||
|
||
@noindent
|
||
où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
|
||
@code{glibc:debug}.
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix challenge @var{options} [@var{paquets}@dots{}]
|
||
@end example
|
||
|
||
Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
|
||
localement et celle d'un substitut fournit par un serveur, ou parmi les
|
||
substituts fournis par différents serveurs, la commande l'affiche comme dans
|
||
l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
|
||
différentes de 0 indiquent d'autres sortes d'erreurs).
|
||
|
||
L'option qui compte est :
|
||
|
||
@table @code
|
||
|
||
@item --substitute-urls=@var{urls}
|
||
Considère @var{urls} comme la liste des URL des sources de substituts
|
||
séparés par des espaces avec lesquels comparer les paquets locaux.
|
||
|
||
@item --verbose
|
||
@itemx -v
|
||
Montre des détails sur les correspondances (contenu identique) en plus des
|
||
informations sur différences.
|
||
|
||
@end table
|
||
|
||
@node Invoquer guix copy
|
||
@section Invoquer @command{guix copy}
|
||
|
||
@cindex copier des éléments du dépôt par SSH
|
||
@cindex SSH, copie d'éléments du dépôt
|
||
@cindex partager des éléments du dépôt entre plusieurs machines
|
||
@cindex transférer des éléments du dépôt entre plusieurs machines
|
||
La commande @command{guix copy} copie des éléments du dépôt d'une machine
|
||
vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
|
||
commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
|
||
pour des détails}. Par exemple, la commande suivante copie le paquet
|
||
@code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
|
||
@var{hôte}, en tant qu'utilisateur @var{utilisateur} :
|
||
|
||
@example
|
||
guix copy --to=@var{utilisateur}@@@var{hôte} \
|
||
coreutils `readlink -f ~/.guix-profile`
|
||
@end example
|
||
|
||
Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
|
||
pas envoyés.
|
||
|
||
La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
|
||
@var{hôte}, en supposant qu'ils y sont présents :
|
||
|
||
@example
|
||
guix copy --from=@var{hôte} libreoffice gimp
|
||
@end example
|
||
|
||
La connexion SSH est établie avec le client Guile-SSH, qui set compatible
|
||
avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
|
||
et utilise l'agent SSH pour l'authentification.
|
||
|
||
La clef utilisée pour signer les éléments qui sont envoyés doit être
|
||
acceptée par la machine distante. De même, la clef utilisée pour la machine
|
||
distante depuis laquelle vous récupérez des éléments doit être dans
|
||
@file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
|
||
@xref{Invoquer guix archive}, pour plus d'informations sur
|
||
l'authentification des éléments du dépôt.
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
|
||
@end example
|
||
|
||
Vous devez toujours spécifier l'une des options suivantes :
|
||
|
||
@table @code
|
||
@item --to=@var{spec}
|
||
@itemx --from=@var{spec}
|
||
Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
|
||
être une spécification SSH comme @code{example.org},
|
||
@code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
|
||
@end table
|
||
|
||
L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
|
||
éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
|
||
|
||
Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
|
||
construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
|
||
options de construction communes sont supportées (@pxref{Options de construction communes}).
|
||
|
||
|
||
@node Invoquer guix container
|
||
@section Invoquer @command{guix container}
|
||
@cindex conteneur
|
||
@cindex @command{guix container}
|
||
@quotation Remarque
|
||
À la version @value{VERSION}, cet outil est toujours expérimental.
|
||
L'interface est sujette à changement radicaux dans le futur.
|
||
@end quotation
|
||
|
||
Le but de @command{guix container} est de manipuler des processus qui
|
||
tournent dans un environnement séparé, connus sous le nom de « conteneur »,
|
||
typiquement créés par les commandes @command{guix environment}
|
||
(@pxref{Invoquer guix environment}) et @command{guix system container}
|
||
(@pxref{Invoquer guix system}).
|
||
|
||
La syntaxe générale est :
|
||
|
||
@example
|
||
guix container @var{action} @var{options}@dots{}
|
||
@end example
|
||
|
||
@var{action} spécifie les opérations à effectuer avec un conteneur, et
|
||
@var{options} spécifie les arguments spécifiques au contexte pour l'action.
|
||
|
||
Les actions suivantes sont disponibles :
|
||
|
||
@table @code
|
||
@item exec
|
||
Exécute une commande dans le contexte d'un conteneur lancé.
|
||
|
||
La syntaxe est :
|
||
|
||
@example
|
||
guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
|
||
@end example
|
||
|
||
@var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
|
||
nom du fichier exécutable dans le système de fichiers racine du conteneur.
|
||
@var{arguments} sont les options supplémentairesà passer à @var{programme}.
|
||
|
||
La commande suivante lance un shell de connexion interactif dans un
|
||
conteneur GuixSD, démarré par @command{guix system container} et dont le PID
|
||
est 9001 :
|
||
|
||
@example
|
||
guix container exec 9001 /run/current-system/profile/bin/bash --login
|
||
@end example
|
||
|
||
Remarquez que @var{pid} ne peut pas être le processus parent d'un
|
||
conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
|
||
fils.
|
||
|
||
@end table
|
||
|
||
@node Invoquer guix weather
|
||
@section Invoquer @command{guix weather}
|
||
|
||
Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
|
||
et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
|
||
commande @command{guix weather} rapporte la disponibilité des substituts sur
|
||
les serveurs spécifiés pour que vous sachiez si vous allez raller
|
||
aujourd'hui. Cela peut parfois être une information utile pour les
|
||
utilisateurs, mais elle est surtout utile pour les personnes qui font
|
||
tourner @command{guix publish} (@pxref{Invoquer guix publish}).
|
||
|
||
@cindex statistiques sur les substituts
|
||
@cindex disponibilité des substituts
|
||
@cindex substuts, disponibilité
|
||
@cindex weather, disponibilité des substituts
|
||
Voici un exemple :
|
||
|
||
@example
|
||
$ guix weather --substitute-urls=https://guix.example.org
|
||
calcul de 5,872 dérivations de paquets pour x86_64-linux…
|
||
recherche de 6,128 éléments du dépôt sur https://guix.example.org…
|
||
mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
|
||
https://guix.example.org
|
||
43.4% substituts disponibles (2,658 sur 6,128)
|
||
7,032.5 Mo de fichiers nar (compressés)
|
||
19,824.2 Mo sur le disque (décompressés)
|
||
0.030 secondes par requêtes (182.9 secondes au total)
|
||
33.5 requêtes par seconde
|
||
|
||
9.8% (342 sur 3,470) des éléments manquants sont dans la queue
|
||
867 constructions dans la queue
|
||
x86_64-linux : 518 (59.7%)
|
||
i686-linux : 221 (25.5%)
|
||
aarch64-linux : 128 (14.8%)
|
||
vitesse de construction : 23.41 constructions par heure
|
||
x86_64-linux : 11.16 constructions par heure
|
||
i686-linux : 6.03 constructions par heure
|
||
aarch64-linux : 6.41 constructions par heure
|
||
@end example
|
||
|
||
@cindex intégration continue, statistiques
|
||
Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
|
||
lesquels des substituts sont disponibles sur le serveur — indépendamment du
|
||
fait que les substituts soient activés, et indépendamment du fait que la
|
||
clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
|
||
des archives compressées 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.
|
||
|
||
Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
|
||
(@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
|
||
@command{guix challenge}, il ignore les signatures de ces substituts, ce qui
|
||
n'est pas dangereux puisque la commande ne fait que récupérer des
|
||
statistiques et n'installe pas ces substituts.
|
||
|
||
Entre autres choses, il est possible de demander des types de système
|
||
particuliers et des ensembles de paquets particuliers. Les options
|
||
disponibles sont listées plus bas.
|
||
|
||
@table @code
|
||
@item --substitute-urls=@var{urls}
|
||
@var{urls} est la liste des URL des serveurs de substituts séparés par des
|
||
espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
|
||
de substituts par défaut est utilisé.
|
||
|
||
@item --system=@var{système}
|
||
@itemx -s @var{système}
|
||
Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
|
||
@code{aarch64-linux}. Cette option peut être répétée, auquel cas
|
||
@command{guix weather} demandera les substituts de plusieurs types de
|
||
systèmes.
|
||
|
||
@item --manifest=@var{fichier}
|
||
Plutôt que de demander des substituts pour tous les paquets, demande
|
||
uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
|
||
contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
|
||
package} (@pxref{Invoquer guix package}).
|
||
@end table
|
||
|
||
@node Invoquer guix processes
|
||
@section Invoquer @command{guix processes}
|
||
|
||
La commande @command{guix processes} peut être utile pour les développeurs
|
||
et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
|
||
et sur les fermes de construction : elle liste les sessions actuelles (les
|
||
connexions au démon), ainsi que des informations sur les processus en
|
||
question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
|
||
démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
|
||
@emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
|
||
|
||
@example
|
||
$ sudo guix processes
|
||
SessionPID: 19002
|
||
ClientPID: 19090
|
||
ClientCommand: guix environment --ad-hoc python
|
||
|
||
SessionPID: 19402
|
||
ClientPID: 19367
|
||
ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
|
||
|
||
SessionPID: 19444
|
||
ClientPID: 19419
|
||
ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
|
||
LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
|
||
LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
|
||
LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
|
||
ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
|
||
ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
|
||
ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
|
||
@end example
|
||
|
||
Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
|
||
: @command{guix environment}, @command{guix publish} et l'outil
|
||
d'intégration continue Cuirass ; leur identifiant de processus (PID) est
|
||
donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
|
||
PID du sous-processus @command{guix-daemon} de cette session particulière.
|
||
|
||
Les champs @code{LockHeld} montrent quels éléments du dépôt sont
|
||
actuellement verrouillés par cette session, ce qui correspond aux éléments
|
||
du dépôt qui sont en train d'être construits ou d'être substitués (le champ
|
||
@code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
|
||
en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
|
||
ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
|
||
|
||
La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
|
||
@command{recsel} pour sélectionner les sessions qui nous intéressent
|
||
(@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
|
||
exemple, la commande montre la ligne de commande et le PID du client qui
|
||
effectue la construction d'un paquet Perl :
|
||
|
||
@example
|
||
$ sudo guix processes | \
|
||
recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
|
||
ClientPID: 19419
|
||
ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
|
||
@end example
|
||
|
||
@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
|
||
|
||
@cindex configuration du système
|
||
La distribution système Guix utilise un mécanisme de configuration du
|
||
système cohérent. On veut dire par là que tous les aspects de la
|
||
configuration globale du système — comme la disponibilité des services
|
||
système, des fuseaux horaires, des paramètres linguistiques, des comptes
|
||
utilisateurs — sont déclarés à un seul endroit. Une telle
|
||
@dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
|
||
en vigueur.
|
||
|
||
@c Yes, we're talking of Puppet, Chef, & co. here. ↑
|
||
L'un des avantages de placer toute la configuration du système sous le
|
||
contrôle de Guix est de permettre les mises à jour transactionnelles du
|
||
système ce qui rend possible le fait de revenir en arrière à une
|
||
instanciation précédent du système, si quelque chose se passait mal avec le
|
||
nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
|
||
réplication de la même configuration sur plusieurs machines différentes ou à
|
||
différents moments dans le temps, sans avoir à recourir à des outils
|
||
d'administrations supplémentaires au-dessus des outils du système.
|
||
|
||
Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
|
||
le point de vue de l'administrateur système en expliquant comment le système
|
||
est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
|
||
être étendu, par exemple pour supporter de nouveaux services systèmes.
|
||
|
||
@menu
|
||
* Utiliser le système de configuration:: Personnaliser votre système
|
||
GNU@.
|
||
* Référence de système d'exploitation:: Détail sur la déclaration de
|
||
système d'exploitation.
|
||
* Systèmes de fichiers:: Configurer les montages de systèmes de
|
||
fichiers.
|
||
* Périphériques mappés:: Gestion des périphériques de bloc.
|
||
* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
|
||
* Régionalisation:: Paramétrer la langue et les conventions
|
||
culturelles.
|
||
* Services:: Spécifier les services du système.
|
||
* Programmes setuid:: Programmes tournant avec les privilèges root.
|
||
* Certificats X.509:: Authentifier les serveurs HTTPS@.
|
||
* Name Service Switch:: Configurer le « name service switch » de la
|
||
libc.
|
||
* Disque de RAM initial:: Démarrage de Linux-Libre.
|
||
* Configuration du chargeur d'amorçage:: Configurer le chargeur
|
||
d'amorçage.
|
||
* Invoquer guix system:: Instantier une configuration du système.
|
||
* Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
|
||
virtuelle.
|
||
* 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
|
||
|
||
Le système d'exploitation est configuré en fournissant une déclaration
|
||
@code{operating-system} dans un fichier qui peut être passé à la command
|
||
@command{guix system} (@pxref{Invoquer guix system}). Une configuration
|
||
simple, avec les services systèmes par défaut, le noyau Linux-Libre par
|
||
défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
|
||
:
|
||
|
||
@findex operating-system
|
||
@lisp
|
||
@include os-config-bare-bones.texi
|
||
@end lisp
|
||
|
||
Cet exemple devrait se comprendre de lui-même. Certains champs définis
|
||
ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
|
||
D'autres comme @code{packages} et @code{services} peuvent être omis auquel
|
||
cas ils ont une valeur par défaut.
|
||
|
||
Ci-dessous nous discutons des effets de certains des champs les plus
|
||
importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
|
||
les champs disponibles) et comment @dfn{instancier} le système
|
||
d'exploitation avec @command{guix system}.
|
||
|
||
@unnumberedsubsubsec Bootloader
|
||
|
||
@cindex ancien système de démarrage, sur les machines Intel
|
||
@cindex démarrage BIOS, sur les machines Intel
|
||
@cindex démarrage UEFI
|
||
@cindex démarrage EFI
|
||
Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
|
||
votre système. Les machines basées sur les processeurs Intel peuvent
|
||
démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
|
||
Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
|
||
Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
|
||
@code{bootloader} devrait contenir quelque chose comme cela :
|
||
|
||
@example
|
||
(bootloader-configuration
|
||
(bootloader grub-efi-bootloader)
|
||
(target "/boot/efi"))
|
||
@end example
|
||
|
||
@xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
|
||
configuration disponibles.
|
||
|
||
@unnumberedsubsubsec Paquets visibles sur tout le système
|
||
|
||
@vindex %base-packages
|
||
Le champ @code{packages} liste les paquets qui seront visibles sur tout le
|
||
système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
|
||
d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
|
||
utilisateurs (@pxref{Invoquer guix package}). La variable
|
||
@var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
|
||
les taches de base de l'administrateur et de l'utilisateur — dont les GNU
|
||
Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
|
||
Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
|
||
GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
|
||
screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
|
||
@code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
|
||
|
||
@lisp
|
||
(use-modules (gnu packages))
|
||
(use-modules (gnu packages dns))
|
||
|
||
(operating-system
|
||
;; ...
|
||
(packages (cons (list bind "utils")
|
||
%base-packages)))
|
||
@end lisp
|
||
|
||
@findex specification->package
|
||
Se référer aux paquets par le nom de leur variable, comme @code{bind}
|
||
ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
|
||
rendre rapidement compte de coquilles quand on a des « variables non liées
|
||
». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
|
||
le paquet, et de modifier la ligne @code{use-package-modules} en
|
||
conséquence. Pour éviter cela, on peut utiliser la procédure
|
||
@code{specification->package} du module @code{(gnu packages)}, qui renvoie
|
||
le meilleur paquet pour un nom donné ou un nom et une version :
|
||
|
||
@lisp
|
||
(use-modules (gnu packages))
|
||
|
||
(operating-system
|
||
;; ...
|
||
(packages (append (map specification->package
|
||
'("tcpdump" "htop" "gnupg@@2.0"))
|
||
%base-packages)))
|
||
@end lisp
|
||
|
||
@unnumberedsubsubsec 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}).
|
||
|
||
@cindex personnalisation des services
|
||
@findex modify-services
|
||
Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
|
||
vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
|
||
(@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
|
||
|
||
Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
|
||
Mingetty (l'écran de connexion en console) dans la liste
|
||
@var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
|
||
cela, vous pouvez écrire ce qui suit dans votre déclaration de système
|
||
d'exploitation :
|
||
|
||
@lisp
|
||
(define %my-services
|
||
;; Ma propre liste de services.
|
||
(modify-services %base-services
|
||
(guix-service-type config =>
|
||
(guix-configuration
|
||
(inherit config)
|
||
(use-substitutes? #f)
|
||
(extra-options '("--gc-keep-derivations"))))
|
||
(mingetty-service-type config =>
|
||
(mingetty-configuration
|
||
(inherit config)))))
|
||
(operating-system
|
||
;; @dots{}
|
||
(services %my-services))
|
||
@end lisp
|
||
|
||
Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
|
||
l'instance de @code{guix-service-type}, et de toutes les instances de
|
||
@code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
|
||
comment on fait cela : d'abord, on s'arrange pour que la configuration de
|
||
départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
|
||
@var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
|
||
remarquez comment on utilise @code{inherit} pour créer une nouvelle
|
||
configuration qui a les même valeurs que l'ancienne configuration, avec
|
||
seulement quelques modifications.
|
||
|
||
@cindex chiffrement du disque
|
||
La configuration pour une utilisation de « bureau » typique, avec une
|
||
partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
|
||
utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
|
||
connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
|
||
l'énergie, et bien plus, ressemblerait à ceci :
|
||
|
||
@lisp
|
||
@include os-config-desktop.texi
|
||
@end lisp
|
||
|
||
Un système graphique avec un choix de gestionnaires de fenêtres légers
|
||
plutôt que des environnement de bureaux complets ressemblerait à cela :
|
||
|
||
@lisp
|
||
@include os-config-lightweight-desktop.texi
|
||
@end lisp
|
||
|
||
Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
|
||
@code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
|
||
renvoyé par la commande @command{blkid}.
|
||
|
||
@xref{Services de bureaux}, pour la liste exacte des services fournis par
|
||
@var{%desktop-services}. @xref{Certificats X.509}, pour des informations
|
||
sur le paquet @code{nss-certs} utilisé ici.
|
||
|
||
Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
|
||
service. Si vous voulez en supprimer des services, vous pouvez le faire
|
||
avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
|
||
Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
|
||
l'expression suivante renvoie une liste qui contient tous les services dans
|
||
@var{%desktop-services} sauf le service Avahi :
|
||
|
||
@example
|
||
(remove (lambda (service)
|
||
(eq? (service-kind service) avahi-service-type))
|
||
%desktop-services)
|
||
@end example
|
||
|
||
@unnumberedsubsubsec Instancier le système
|
||
|
||
En supposant que la déclaration @code{operating-system} est stockée dans le
|
||
fichier @file{my-system-config.scm}, la commande @command{guix system
|
||
reconfigure my-system-config.scm} instancie cette configuration et en fait
|
||
l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
|
||
|
||
Pour changer la configuration du système, on met normalement à jour ce
|
||
fichier et on relance @command{guix system reconfigure}. On ne devrait
|
||
jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
|
||
commandes qui modifient l'état du système comme @command{useradd} ou
|
||
@command{grub-install}. En fait, vous devez les éviter parce que non
|
||
seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
|
||
à des versions précédents du système, si vous en avez besoin.
|
||
|
||
@cindex revenir en arrière dans la configuration du système
|
||
En parlant de revenir en arrière, à chaque fois que vous lancez
|
||
@command{guix system reconfigure}, une nouvelle @dfn{génération} du système
|
||
est crée — sans modifier ou supprimer les générations précédentes. Les
|
||
anciennes générations du système ont une entrée dans le menu du chargeur
|
||
d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
|
||
serait mal passé avec la dernière génération. C'est rassurant, non ? La
|
||
commande @command{guix system list-generations} liste les générations du
|
||
système disponibles sur le disque. Il est possible de revenir à une
|
||
ancienne génération via les commandes @command{guix system roll-back} et
|
||
@command{guix system switch-generation}.
|
||
|
||
Bien que la commande @command{guix system reconfigure} ne modifiera pas les
|
||
générations précédentes, vous devez faire attention lorsque votre génération
|
||
actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
|
||
system roll-back}), puisque l'opération pourrait remplacer une génération
|
||
suivante (@pxref{Invoquer guix system}).
|
||
|
||
@unnumberedsubsubsec 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}) :
|
||
|
||
@deffn {Procédure monadique} operating-system-derivation os
|
||
Renvoie une dérivation qui construit @var{os}, un objet
|
||
@code{operating-system} (@pxref{Dérivations}).
|
||
|
||
La sortie de la dérivation est un répertoire qui se réfère à tous les
|
||
paquets et d'autres fichiers supports requis pour instancier @var{os}.
|
||
@end deffn
|
||
|
||
Cette procédure est fournie par le module @code{(gnu system)}. Avec
|
||
@code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
|
||
de GuixSD. Ouvrez-le un jour !
|
||
|
||
|
||
@node Référence de système d'exploitation
|
||
@subsection Référence de @code{operating-system}
|
||
|
||
Cette section résume toutes les options disponibles dans les déclarations
|
||
@code{operating-system} (@pxref{Utiliser le système de configuration}).
|
||
|
||
@deftp {Type de données} operating-system
|
||
C'est le type de données représentant une configuration d'un système
|
||
d'exploitation. On veut dire par là toute la configuration globale du
|
||
système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
|
||
|
||
@table @asis
|
||
@item @code{kernel} (par défaut : @var{linux-libre})
|
||
L'objet paquet d'un noyau de système d'exploitation à
|
||
utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
|
||
le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
|
||
|
||
@item @code{kernel-arguments} (par défaut : @code{'()})
|
||
Liste de chaînes ou de gexps représentant des arguments supplémentaires à
|
||
passer sur la ligne de commande du noyau — p.@: ex.@:
|
||
@code{("console=ttyS0")}.
|
||
|
||
@item @code{bootloader}
|
||
L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
|
||
|
||
@item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
|
||
@cindex initrd
|
||
@cindex disque de RAM initial
|
||
La liste des modules du noyau linux requis dans l'image disque de RAM
|
||
initiale. @xref{Disque de RAM initial}.
|
||
|
||
@item @code{initrd} (par défaut : @code{base-initrd})
|
||
Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
|
||
champ est fournit pour pouvoir personnaliser son système à bas-niveau et
|
||
n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
|
||
|
||
@item @code{firmware} (par défaut : @var{%base-firmware})
|
||
@cindex firmware
|
||
Liste les paquets de microgiciels chargeables pour le noyau de système
|
||
d'exploitation.
|
||
|
||
La valeur par défaut contient les microgiciels requis pour les périphériques
|
||
WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
|
||
Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
|
||
d'info sur les périphériques supportés.
|
||
|
||
@item @code{host-name}
|
||
Le nom d'hôte.
|
||
|
||
@item @code{hosts-file}
|
||
@cindex fichier hosts
|
||
Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
|
||
utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
|
||
Library Reference Manual}). La valeur par défaut est un fichier avec des
|
||
entrées pour @code{localhost} et @var{host-name}.
|
||
|
||
@item @code{mapped-devices} (par défaut : @code{'()})
|
||
Une liste de périphériques mappés. @xref{Périphériques mappés}.
|
||
|
||
@item @code{file-systems}
|
||
Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
|
||
|
||
@item @code{swap-devices} (par défaut : @code{'()})
|
||
@cindex espaces d'échange
|
||
Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
|
||
pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
|
||
Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
|
||
@code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
|
||
sur un périphérique mappé, tant que le périphérique nécessaire et le système
|
||
de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
|
||
|
||
@item @code{users} (par défaut : @code{%base-user-accounts})
|
||
@itemx @code{groups} (par défaut : @var{%base-groups})
|
||
Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
|
||
|
||
Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
|
||
root » avec l'UID@tie{}0 est automatiquement ajouté.
|
||
|
||
@item @code{skeletons} (par défaut : @code{(default-skeletons)})
|
||
Une liste de couples composés d'un nom de fichier cible et d'un objet
|
||
simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
|
||
fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
|
||
utilisateurs nouvellement créés.
|
||
|
||
Par exemple, un valeur valide ressemblerait à cela :
|
||
|
||
@example
|
||
`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
|
||
(".guile" ,(plain-file "guile"
|
||
"(use-modules (ice-9 readline))
|
||
(activate-readline)")))
|
||
@end example
|
||
|
||
@item @code{issue} (par défaut : @var{%default-issue})
|
||
Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
|
||
affiché lorsqu'un utilisateur se connecte sur la console.
|
||
|
||
@item @code{packages} (par défaut : @var{%base-packages})
|
||
L'ensemble des paquets installés dans le profil global, qui est accessible à
|
||
partir de @file{/run/current-system/profile}.
|
||
|
||
L'ensemble par défaut contient les utilitaires de base et c'est une bonne
|
||
pratique d'installer les utilitaires non essentiels dans les profils
|
||
utilisateurs (@pxref{Invoquer guix package}).
|
||
|
||
@item @code{timezone}
|
||
Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
|
||
|
||
Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
|
||
horaire correspondant à votre région. Si vous choisissez un nom de fuseau
|
||
horaire invalide, @command{guix system} échouera.
|
||
|
||
@item @code{locale} (par défaut : @code{"en_US.utf8"})
|
||
Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
|
||
GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
|
||
|
||
@item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
|
||
La liste des définitions de locales à compiler et qui devraient être
|
||
utilisées à l'exécution. @xref{Régionalisation}.
|
||
|
||
@item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
|
||
La liste des paquets GNU@tie{}libc dont les données des paramètres
|
||
linguistiques sont utilisées pour construire les définitions des paramètres
|
||
linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
|
||
qui justifient cette option.
|
||
|
||
@item @code{name-service-switch} (par défaut : @var{%default-nss})
|
||
La configuration de NSS de la libc (name service switch) — un objet
|
||
@code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
|
||
|
||
@item @code{services} (par défaut : @var{%base-services})
|
||
Une liste d'objets services qui dénotent les services du système.
|
||
@xref{Services}.
|
||
|
||
@item @code{pam-services} (par défaut : @code{(base-pam-services)})
|
||
@cindex PAM
|
||
@cindex pluggable authentication modules
|
||
@c FIXME: Add xref to PAM services section.
|
||
Services PAM (@dfn{pluggable authentication module}) Linux.
|
||
|
||
@item @code{setuid-programs} (par défaut : @var{%setuid-programs})
|
||
Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
|
||
les programmes setuid. @xref{Programmes setuid}.
|
||
|
||
@item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
|
||
@cindex fichier sudoers
|
||
Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
|
||
(@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
|
||
|
||
Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
|
||
@command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
|
||
peuvent gagner. La valeur par défaut est que seul @code{root} et les
|
||
membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Systèmes de fichiers
|
||
@subsection Systèmes de fichiers
|
||
|
||
La liste des systèmes de fichiers à monter est spécifiée dans le champ
|
||
@code{file-systems} de la déclaration de système d'exploitation
|
||
(@pxref{Utiliser le système de configuration}). Chaque système de fichier est
|
||
déclaré avec la forme @code{file-system}, comme ceci :
|
||
|
||
@example
|
||
(file-system
|
||
(mount-point "/home")
|
||
(device "/dev/sda3")
|
||
(type "ext4"))
|
||
@end example
|
||
|
||
Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
|
||
l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
|
||
décrits plus bas.
|
||
|
||
@deftp {Type de données} file-system
|
||
Les objets de ce type représentent des systèmes de fichiers à monter. Ils
|
||
contiennent les membres suivants :
|
||
|
||
@table @asis
|
||
@item @code{type}
|
||
C'est une chaîne de caractères spécifiant le type du système de fichier —
|
||
p.@: ex.@: @code{"ext4"}.
|
||
|
||
@item @code{mount-point}
|
||
Désigne l'emplacement où le système de fichier sera monté.
|
||
|
||
@item @code{device}
|
||
Ce champ nomme le système de fichier « source ». il peut être l'une de ces
|
||
trois choses : une étiquette de système de fichiers, un UUID de système de
|
||
fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
|
||
offrent une manière de se référer à des systèmes de fichiers sans avoir à
|
||
coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
|
||
d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
|
||
obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
|
||
périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
|
||
disponibles au moment de monter le périphérique.}.
|
||
|
||
@findex file-system-label
|
||
Les étiquettes de systèmes de fichiers sont crées avec la procédure
|
||
@code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
|
||
@file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
|
||
système de fichiers référencé par son étiquette, donnée par la commande
|
||
@command{e2label} :
|
||
|
||
@example
|
||
(file-system
|
||
(mount-point "/home")
|
||
(type "ext4")
|
||
(device (file-system-label "my-home")))
|
||
@end example
|
||
|
||
@findex uuid
|
||
Les UUID sont convertis à partir de leur représentation en chaîne de
|
||
caractères (montrée par la command @command{tune2fs -l}) en utilisant la
|
||
forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
|
||
octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
|
||
RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
|
||
systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
|
||
que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
|
||
comme ceci :
|
||
|
||
@example
|
||
(file-system
|
||
(mount-point "/home")
|
||
(type "ext4")
|
||
(device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
|
||
@end example
|
||
|
||
Lorsque la source d'un système de fichiers est un périphérique mappé
|
||
(@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
|
||
nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
|
||
Cela est requis pour que le système sache que monter ce système de fichier
|
||
dépend de la présence du périphérique mappé correspondant.
|
||
|
||
@item @code{flags} (par défaut : @code{'()})
|
||
C'est une liste de symboles qui dénotent des drapeaux de montage. Les
|
||
drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
|
||
(interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
|
||
setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
|
||
|
||
@item @code{options} (par défaut : @code{#f})
|
||
C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
|
||
montage.
|
||
|
||
@item @code{mount?} (par défaut : @code{#t})
|
||
Cette valeur indique s'il faut monter automatiquement le système de fichier
|
||
au démarrage du système. Lorsque la valeur est @code{#f}, le système de
|
||
fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
|
||
@command{mount}) mais n'est pas monté automatiquement.
|
||
|
||
@item @code{needed-for-boot?} (par défaut : @code{#f})
|
||
Cette valeur booléenne indique si le système de fichier est nécessaire au
|
||
démarrage. Si c'est vrai alors le système de fichier est monté au
|
||
chargement du disque de RAM initial. C'est toujours le cas par exemple du
|
||
système de fichiers racine.
|
||
|
||
@item @code{check?} (par défaut : @code{#t})
|
||
Cette valeur booléenne indique si le système de fichier doit être vérifié
|
||
avant de le monter.
|
||
|
||
@item @code{create-mount-point?} (par défaut : @code{#f})
|
||
Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
|
||
pas déjà.
|
||
|
||
@item @code{dependencies} (par défaut : @code{'()})
|
||
C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
|
||
représentent les systèmes de fichiers qui doivent être montés ou les
|
||
périphériques mappés qui doivent être ouverts avant (et monté ou fermés
|
||
après) celui-ci.
|
||
|
||
Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
|
||
est une dépendance de @file{/sys/fs/cgroup/cpu} et
|
||
@file{/sys/fs/cgroup/memory}.
|
||
|
||
Un autre exemple est un système de fichier qui dépend d'un périphérique
|
||
mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
|
||
@end table
|
||
@end deftp
|
||
|
||
Le module @code{(gnu system file-systems)} exporte les variables utiles
|
||
suivantes.
|
||
|
||
@defvr {Variable Scheme} %base-file-systems
|
||
Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
|
||
normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
|
||
(voir plus bas). Les déclarations de systèmes d'exploitation devraient au
|
||
moins les contenir.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %pseudo-terminal-file-system
|
||
C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
|
||
@dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
|
||
(@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
|
||
pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
|
||
@command{xterm}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %shared-memory-file-system
|
||
Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
|
||
partage de mémoire entre processus (@pxref{Memory-mapped I/O,
|
||
@code{shm_open},, libc, The GNU C Library Reference Manual}).
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %immutable-store
|
||
Ce système de fichiers effectue un « montage lié » en lecture-seule de
|
||
@file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
|
||
les utilisateurs dont @code{root}. Cela évite que des logiciels qui
|
||
tournent en @code{root} ou des administrateurs systèmes ne modifient
|
||
accidentellement le dépôt.
|
||
|
||
Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
|
||
remonté en lecture-écriture dans son propre « espace de nom ».
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %binary-format-file-system
|
||
Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
|
||
quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
|
||
demande que le module du noyau @code{binfmt.ko} soit chargé.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %fuse-control-file-system
|
||
Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
|
||
privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
|
||
utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
|
||
chargé.
|
||
@end defvr
|
||
|
||
@node Périphériques mappés
|
||
@subsection Périphériques mappés
|
||
|
||
@cindex mappage de périphériques
|
||
@cindex périphériques mappés
|
||
Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
|
||
périphérique bloc, comme une partition sur un disque dur, peut être
|
||
@dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
|
||
avec des calculs supplémentaires sur les données qui naviguent entre les
|
||
deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
|
||
concept de « périphérique mappé » et celle d'un système de fichiers : les
|
||
deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
|
||
faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
|
||
Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
|
||
avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
|
||
hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
|
||
de périphériques chiffrés : toutes les écritures sont sur le périphérique
|
||
mappé sont chiffrées, toutes les lectures déchiffrées, de manière
|
||
transparente. Guix étend cette notion en considérant que tout périphérique
|
||
ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
|
||
manière créent un nouveau périphérique ; par exemple, les périphériques RAID
|
||
sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
|
||
disque ou des partitions, en un nouveau périphérique en tant qu'unique
|
||
partition. Un autre exemple, qui n'est pas encore disponible, sont les
|
||
volumes logiques LVM.
|
||
|
||
Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
|
||
définie comme suit ; par exemple, voir ci-dessous.
|
||
|
||
@deftp {Type de données} mapped-device
|
||
Les objets de ce type représentent des mappages de périphériques qui seront
|
||
effectués au démarrage du système.
|
||
|
||
@table @code
|
||
@item source
|
||
C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
|
||
comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
|
||
assembler pour en créer un nouveau.
|
||
|
||
@item target
|
||
Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
|
||
mappeurs noyaux comme les périphériques chiffrés de type
|
||
@code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
|
||
périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
|
||
de type @code{raid-device-mapping}, il faut donner le nom complet comme
|
||
@code{"/dev/md0"}.
|
||
|
||
@item type
|
||
Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
|
||
@var{source} est mappés sur @var{target}.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} luks-device-mapping
|
||
Cela définie les périphériques blocs chiffrés en LUKS avec
|
||
@command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
|
||
noyau Linux @code{dm-crypt}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} raid-device-mapping
|
||
Cela définie un périphérique RAID qui est assemblé avec la commande
|
||
@code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
|
||
approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
|
||
RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
|
||
@end defvr
|
||
|
||
@cindex chiffrement du disque
|
||
@cindex LUKS
|
||
L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
|
||
@file{/dev/mapper/home} avec LUKS —
|
||
@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
|
||
mécanisme standard pour chiffrer les disques. Le périphérique
|
||
@file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
|
||
déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
|
||
|
||
@example
|
||
(mapped-device
|
||
(source "/dev/sda3")
|
||
(target "home")
|
||
(type luks-device-mapping))
|
||
@end example
|
||
|
||
Autrement, pour devenir indépendant du numéro de périphérique, on peut
|
||
obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
|
||
une commande comme :
|
||
|
||
@example
|
||
cryptsetup luksUUID /dev/sda3
|
||
@end example
|
||
|
||
et l'utiliser ainsi :
|
||
|
||
@example
|
||
(mapped-device
|
||
(source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
|
||
(target "home")
|
||
(type luks-device-mapping))
|
||
@end example
|
||
|
||
@cindex chiffrement de l'espace d'échange
|
||
Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
|
||
d'échange peut contenir des données sensibles. Une manière de faire cela
|
||
est d'utiliser un fichier d'échange dans un système de fichiers sur un
|
||
périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
|
||
d'échange est chiffré parce que tout le périphérique est chiffré.
|
||
@xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
|
||
|
||
Un périphérique RAID formé des partitions @file{/dev/sda1} et
|
||
@file{/dev/sdb1} peut être déclaré ainsi :
|
||
|
||
@example
|
||
(mapped-device
|
||
(source (list "/dev/sda1" "/dev/sdb1"))
|
||
(target "/dev/md0")
|
||
(type raid-device-mapping))
|
||
@end example
|
||
|
||
Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
|
||
@code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
|
||
Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
|
||
pendant la création initiale du périphérique RAID et est ensuite déterminé
|
||
automatiquement.
|
||
|
||
|
||
@node Comptes utilisateurs
|
||
@subsection Comptes utilisateurs
|
||
|
||
@cindex utilisateurs
|
||
@cindex comptes
|
||
@cindex comptes utilisateurs
|
||
Les comptes utilisateurs et les groupes sont gérés entièrement par la
|
||
déclaration @code{operating-system}. Ils sont spécifiés avec les formes
|
||
@code{user-account} et @code{user-group} :
|
||
|
||
@example
|
||
(user-account
|
||
(name "alice")
|
||
(group "users")
|
||
(supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
|
||
"audio" ;carte son
|
||
"video" ;périphériques réseaux comme les webcams
|
||
"cdrom")) ;le bon vieux CD-ROM
|
||
(comment "Bob's sister")
|
||
(home-directory "/home/alice"))
|
||
@end example
|
||
|
||
Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
|
||
système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
|
||
dans la déclaration @code{operating-system} existent, et avec les propriétés
|
||
spécifiées. Ainsi, les modifications ou les créations de comptes ou de
|
||
groupes effectuées directement en invoquant des commandes comme
|
||
@command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
|
||
permet de s'assurer que le système reste exactement tel que déclaré.
|
||
|
||
@deftp {Type de données} user-account
|
||
Les objets de se type représentent les comptes utilisateurs. Les membres
|
||
suivants peuvent être spécifiés :
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Le nom du compte utilisateur.
|
||
|
||
@item @code{group}
|
||
@cindex groupes
|
||
C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
|
||
utilisateur auquel ce compte appartient.
|
||
|
||
@item @code{supplementary-groups} (par défaut : @code{'()})
|
||
Éventuellement, cela peut être définie comme une liste de noms de groupes
|
||
auxquels ce compte appartient.
|
||
|
||
@item @code{uid} (par défaut : @code{#f})
|
||
C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
|
||
dernier cas, le nombre est choisi automatiquement par le système à la
|
||
création du compte.
|
||
|
||
@item @code{comment} (par défaut : @code{""})
|
||
Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
|
||
|
||
@item @code{home-directory}
|
||
C'est le nom du répertoire personnel du compte.
|
||
|
||
@item @code{create-home-directory?} (par défaut : @code{#t})
|
||
Indique si le répertoire personnel du compte devrait être créé s'il n'existe
|
||
pas déjà.
|
||
|
||
@item @code{shell} (par défaut : Bash)
|
||
C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
|
||
comme shell (@pxref{G-Expressions}).
|
||
|
||
@item @code{system?} (par défaut : @code{#f})
|
||
C'est une valeur booléenne qui indique si le compte est un compte « système
|
||
». Les comptes systèmes sont parfois traités à part ; par exemple, les
|
||
gestionnaires de connexion graphiques ne les liste pas.
|
||
|
||
@anchor{user-account-password}
|
||
@item @code{password} (par défaut : @code{#f})
|
||
Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
|
||
de passe utilisateurs en tant que @code{root} avec la commande
|
||
@command{passwd}, puis laisseriez l'utilisateur le changer avec
|
||
@command{passwd}. Les mots de passes définis avec @command{passwd} sont
|
||
bien sûr préservés après redémarrage et reconfiguration.
|
||
|
||
Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
|
||
ce champ doit contenir le mot de passe chiffré, comme une chaîne de
|
||
caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
|
||
plus d'information sur le chiffrement des mots de passe et
|
||
@ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
|
||
sur la procédure @code{crypt} de Guile.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex groupes
|
||
Les déclarations de groupes sont encore plus simple :
|
||
|
||
@example
|
||
(user-group (name "students"))
|
||
@end example
|
||
|
||
@deftp {Type de données} user-group
|
||
C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
|
||
quelques champs :
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Le nom du groupe.
|
||
|
||
@item @code{id} (par défaut : @code{#f})
|
||
L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
|
||
est alloué automatiquement lorsque le groupe est créé.
|
||
|
||
@item @code{system?} (par défaut : @code{#f})
|
||
Cette valeur booléenne indique si le groupe est un groupe « système ». les
|
||
groupes systèmes ont un numéro d'ID bas.
|
||
|
||
@item @code{password} (par défaut : @code{#f})
|
||
Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
|
||
bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
|
||
passe du groupe.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
Par simplicité, une variable liste les groupes utilisateurs de base auxquels
|
||
on pourrait s'attendre :
|
||
|
||
@defvr {Variable Scheme} %base-groups
|
||
C'est la liste des groupes utilisateur de base que les utilisateurs et les
|
||
paquets s'attendent à trouver sur le système. Cela comprend des groupes
|
||
comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
|
||
contrôler l'accès à certains périphériques, comme « audio », « disk » et «
|
||
cdrom ».
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %base-user-accounts
|
||
C'est la liste des compte du système de base que les programmes peuvent
|
||
s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
|
||
|
||
Remarquez que le compte « root » n'est pas défini ici. C'est un cas
|
||
particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
|
||
@end defvr
|
||
|
||
@node Régionalisation
|
||
@subsection Régionalisation
|
||
|
||
@cindex paramètres linguistiques
|
||
Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
|
||
langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
|
||
Library Reference Manual}). Chaque paramètre linguistique a un nom de la
|
||
forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
|
||
ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
|
||
avec les conventions culturelles du Luxembourg, en utilisant l'encodage
|
||
UTF-8.
|
||
|
||
@cindex définition des paramètres linguistiques
|
||
Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
|
||
pour la machine en utilisant le champ @code{locale} de la déclaration
|
||
@code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
|
||
|
||
Les paramètres régionaux choisis sont automatiquement ajoutés aux
|
||
définitions des @dfn{paramètres régionaux} connues par le système au besoin,
|
||
avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
|
||
@code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
|
||
@code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
|
||
le champ @code{locale-definitions} de @code{operating-system} — c'est utile
|
||
par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
|
||
L'ensemble par défaut de définitions comprend certains paramètres
|
||
linguistiques parmi les plus utilisés, mais pas toutes les variantes
|
||
disponibles, pour gagner de la place.
|
||
|
||
Par exemple, pour ajouter les paramètres pour le frison septentrional en
|
||
Allemagne, la valeur de ce champ serait :
|
||
|
||
@example
|
||
(cons (locale-definition
|
||
(name "fy_DE.utf8") (source "fy_DE"))
|
||
%default-locale-definitions)
|
||
@end example
|
||
|
||
De me, pour gagner de la place, on peut vouloir lister dans
|
||
@code{locale-definitions} seulement les paramètres qui sont vraiment
|
||
utilisés, comme dans :
|
||
|
||
@example
|
||
(list (locale-definition
|
||
(name "ja_JP.eucjp") (source "ja_JP")
|
||
(charset "EUC-JP")))
|
||
@end example
|
||
|
||
@vindex LOCPATH
|
||
Les définitions des paramètres linguistiques compilées sont disponibles dans
|
||
@file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
|
||
libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
|
||
Guix cherche les données de régionalisation. Cet emplacement peut être
|
||
modifié avec la variable d'environnement @code{LOCPATH}
|
||
(@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
|
||
|
||
La forme @code{locale-definition} est fournie par le module @code{(gnu
|
||
system locale)}. Des détails sont disponibles plus bas.
|
||
|
||
@deftp {Type de données} locale-definition
|
||
C'est le type de données d'une définition de paramètres linguistiques.
|
||
|
||
@table @asis
|
||
|
||
@item @code{name}
|
||
Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
|
||
Library Reference Manual}, pour en savoir plus sur les noms de paramètres
|
||
linguistiques.
|
||
|
||
@item @code{source}
|
||
Le nom de la source pour ce paramètre linguistique. C'est typiquement la
|
||
partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
|
||
|
||
@item @code{charset} (par défaut : @code{"UTF-8"})
|
||
Le « jeu de caractères » d'un paramètre linguistique,
|
||
@uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %default-locale-definitions
|
||
Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
|
||
comme valeur par défaut pour le champ @code{locale-definitions} des
|
||
déclarations @code{operating-system}.
|
||
|
||
@cindex nom de paramètre linguistique
|
||
@cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
|
||
Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
|
||
caractère normalisé} pour la partie qui suit le point dans le nom
|
||
(@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
|
||
Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
|
||
@emph{pas}, disons, @code{uk_UA.UTF-8}.
|
||
@end defvr
|
||
|
||
@subsubsection Considérations sur la compatibilité des données linguistiques
|
||
|
||
@cindex incompatibilité, des données linguistiques
|
||
Les déclaration @code{operating-system} fournissent un champ
|
||
@code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
|
||
compiler les déclarations de paramètres linguistiques
|
||
(@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
|
||
», vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
|
||
des données linguistique est parfois incompatible d'une version de la libc à
|
||
une autre.
|
||
|
||
@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
|
||
@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
|
||
Par exemple, un programme lié à la libc version 2.21 est incapable de lire
|
||
les données linguistiques produites par la libc 2.22 ; pire, ce programme
|
||
@emph{plante} plutôt que d'ignorer les données linguistiques
|
||
incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
|
||
sauteront simplement les données linguistiques incompatibles, ce qui est
|
||
déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
|
||
mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
|
||
les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
|
||
@code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
|
||
|
||
Le « problème » avec 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.
|
||
|
||
Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
|
||
propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
|
||
(@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
|
||
|
||
Cependant, c'est encore mieux si les données linguistiques du système dans
|
||
@file{/run/current-system/locale} étaient construites avec les versions de
|
||
la libc utilisées sur le système, pour que tous les programmes puissent y
|
||
accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
|
||
cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
|
||
champ @code{locale-libcs} de @code{operating-system} :
|
||
|
||
@example
|
||
(use-package-modules base)
|
||
|
||
(operating-system
|
||
;; @dots{}
|
||
(locale-libcs (list glibc-2.21 (canonical-package glibc))))
|
||
@end example
|
||
|
||
cet exemple créera un système contenant les définitions des paramètres
|
||
linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
|
||
@file{/run/current-system/locale}.
|
||
|
||
|
||
@node Services
|
||
@subsection Services
|
||
|
||
@cindex services systèmes
|
||
Une part importante de la préparation d'une déclaration
|
||
@code{operating-system} est la liste des @dfn{services systèmes} et de leur
|
||
configuration (@pxref{Utiliser le système de configuration}). Les services
|
||
systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
|
||
requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
|
||
|
||
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 :
|
||
|
||
@example
|
||
# herd status
|
||
@end example
|
||
|
||
La commande ci-dessus, lancée en @code{root}, liste les services
|
||
actuellement définis. La commande @command{herd doc} montre un synopsis du
|
||
service donné et ses actions associées :
|
||
|
||
@example
|
||
# herd doc nscd
|
||
Run libc's name service cache daemon (nscd).
|
||
|
||
# herd doc nscd action invalidate
|
||
invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
|
||
@end example
|
||
|
||
Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
|
||
l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
|
||
service nscd et redémarrent le serveur d'affichage Xorg :
|
||
|
||
@example
|
||
# herd stop nscd
|
||
Service nscd has been stopped.
|
||
# herd restart xorg-server
|
||
Service xorg-server has been stopped.
|
||
Service xorg-server has been started.
|
||
@end example
|
||
|
||
Les sections suivantes documentent les services disponibles, en commençant
|
||
par les services de base qui peuvent être utilisés avec une déclaration
|
||
@code{operating-system}.
|
||
|
||
@menu
|
||
* Services de base:: Services systèmes essentiels.
|
||
* Exécution de tâches planifiées:: Le service mcron.
|
||
* Rotation des journaux:: Le service rottlog.
|
||
* Services réseau:: Paramétres réseau, démon SSH, etc.
|
||
* Système de fenêtrage X:: Affichage graphique.
|
||
* Services d'impression:: Support pour les imprimantes locales et
|
||
distantes.
|
||
* Services de bureaux:: D-Bus et les services de bureaux.
|
||
* Services de son:: Services ALSA et Pulseaudio.
|
||
* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
|
||
* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
|
||
* Services de messagerie:: Services de messagerie.
|
||
* Services de téléphonie:: Services de téléphonie.
|
||
* Services de surveillance:: Services de surveillance.
|
||
* Services Kerberos:: Services Kerberos.
|
||
* Services web:: Services web.
|
||
* Services de certificats:: Certificats TLS via Let's Encrypt.
|
||
* Services DNS:: Démons DNS@.
|
||
* Services VPN:: Démons VPN
|
||
* Système de fichiers en réseau:: Services liés à NFS@.
|
||
* Intégration continue:: Le service Cuirass.
|
||
* Services de gestion de l'énergie:: Augmenter la durée de vie de la
|
||
batterie.
|
||
* Services audio:: MPD@.
|
||
* Services de virtualisation:: Services de virtualisation.
|
||
* Services de contrôle de version:: Fournit des accès distants à des
|
||
dépôts Git.
|
||
* Services de jeu:: Serveurs de jeu.
|
||
* Services divers:: D'autres services.
|
||
@end menu
|
||
|
||
@node Services de base
|
||
@subsubsection 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
|
||
exportés par ce module sort listés ci-dessous.
|
||
|
||
@defvr {Variable Scheme} %base-services
|
||
Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
|
||
attendre du système : un service de connexion (mingetty) sur chaque tty,
|
||
syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
|
||
périphériques udev, et plus.
|
||
|
||
C'est la valeur par défaut du champ @code{services} des déclarations
|
||
@code{operating-system}. Habituellement, lors de la personnalisation d'un
|
||
système, vous voudrez ajouter des services à ceux de @var{%base-services},
|
||
comme ceci :
|
||
|
||
@example
|
||
(cons* (avahi-service) (lsh-service) %base-services)
|
||
@end example
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} special-files-service-type
|
||
C'est le service qui met en place des « fichiers spéciaux » comme
|
||
@file{/bin/sh} ; une instance de ce service fait partie de
|
||
@code{%base-services}.
|
||
|
||
La valeur associée avec les services @code{special-files-service-type} doit
|
||
être une liste de couples dont le premier élément est le « fichier spécial »
|
||
et le deuxième sa cible. Par défaut il s'agit de :
|
||
|
||
@cindex @file{/bin/sh}
|
||
@cindex @file{sh}, dans @file{/bin}
|
||
@example
|
||
`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
|
||
@end example
|
||
|
||
@cindex @file{/usr/bin/env}
|
||
@cindex @file{env}, dans @file{/usr/bin}
|
||
Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
|
||
pouvez changer cela en :
|
||
|
||
@example
|
||
`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
|
||
("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
|
||
@end example
|
||
|
||
Comme il fait parti de @code{%base-services}, vous pouvez utiliser
|
||
@code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
|
||
(@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
|
||
simple d'ajouter un fichier spécial est d'utiliser la procédure
|
||
@code{extra-special-file} (voir plus bas).
|
||
@end defvr
|
||
|
||
@deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
|
||
Utilise @var{target} comme « fichier spécial » @var{file}.
|
||
|
||
Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
|
||
votre déclaration de système d'exploitation crée un lien symbolique
|
||
@file{/usr/bin/env} :
|
||
|
||
@example
|
||
(extra-special-file "/usr/bin/env"
|
||
(file-append coreutils "/bin/env"))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} host-name-service @var{name}
|
||
Renvoie un service qui paramètre le nom d'hôte à @var{name}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} login-service @var{config}
|
||
Renvoie un service pour lancer login en suivant @var{config}, un objet
|
||
@code{<login-configuration>} qui spécifie le message du jour, entre autres
|
||
choses.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} login-configuration
|
||
Le type de données qui représente la configuration de login.
|
||
|
||
@table @asis
|
||
|
||
@item @code{motd}
|
||
@cindex message du jour
|
||
Un objet simili-fichier contenant le « message du jour ».
|
||
|
||
@item @code{allow-empty-passwords?} (par défaut : @code{#t})
|
||
Permet les mots de passes vides par défaut pour que les utilisateurs
|
||
puissent se connecter au compte « root » la première fois après sa création.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} mingetty-service @var{config}
|
||
Renvoie un service qui lance mingetty en suivant @var{config}, un objet
|
||
@code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
|
||
choses.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} mingetty-configuration
|
||
C'est le type de données représentant la configuration de Mingetty, qui
|
||
fournit l'implémentation par défaut de l'écran de connexion des consoles
|
||
virtuelles.
|
||
|
||
@table @asis
|
||
|
||
@item @code{tty}
|
||
Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
|
||
@code{"tty1"}.
|
||
|
||
@item @code{auto-login} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
|
||
dénotant le nom d'utilisateur pour lequel le système se connecte
|
||
automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
|
||
d'utilisateur et un mot de passe pour se connecter.
|
||
|
||
@item @code{login-program} (par défaut : @code{#f})
|
||
Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
|
||
est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
|
||
dénotant le nom d'un programme de connexion.
|
||
|
||
@item @code{login-pause?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
|
||
devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
|
||
|
||
@item @code{mingetty} (par défaut : @var{mingetty})
|
||
Le paquet Mingetty à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} agetty-service @var{config}
|
||
Renvoie un service pour lancer agetty en suivant @var{config}, un objet
|
||
@code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
|
||
choses.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} agetty-configuration
|
||
Ce type de données représente la configuration de agetty, qui implémente
|
||
l'écran de connexion des consoles virtuelles et series. Voir la page de
|
||
manuel de @code{agetty(8)} pour plus d'informations.
|
||
|
||
@table @asis
|
||
|
||
@item @code{tty}
|
||
Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
|
||
@code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
|
||
raisonnable d'un port série utilisé par le noyau Linux.
|
||
|
||
Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
|
||
ligne de commande du noyau, agetty extraira le nom du périphérique du port
|
||
série à partir de cette option.
|
||
|
||
Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
|
||
la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
|
||
du port série et l'utilisera.
|
||
|
||
In both cases, agetty will leave the other serial device settings (baud rate
|
||
etc.)@: alone---in the hope that Linux pinned them to the correct values.
|
||
|
||
@item @code{baud-rate} (par défaut : @code{#f})
|
||
Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
|
||
des virgules, en ordre décroissant.
|
||
|
||
@item @code{term} (par défaut : @code{#f})
|
||
Une chaîne contenant la valeur utilisée pour la variable d'environnement
|
||
@code{TERM}.
|
||
|
||
@item @code{eight-bits?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
|
||
caractères 8-bit et la détection de parité est désactivée.
|
||
|
||
@item @code{auto-login} (par défaut : @code{#f})
|
||
Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
|
||
l'utilisateur spécifié sera automatiquement connecté sans demande du nom
|
||
d'utilisateur ni du mot de passe.
|
||
|
||
@item @code{no-reset?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
|
||
de contrôle).
|
||
|
||
@item @code{host} (par défaut : @code{#f})
|
||
Cette option accepte une chaîne contenant le « login_host », qui sera écrit
|
||
dans le fichier @file{/var/run/utmpx}.
|
||
|
||
@item @code{remote?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
|
||
une option fakehost @code{-r} à la ligne de commande du programme de
|
||
connexion spécifié dans @var{login-program}.
|
||
|
||
@item @code{flow-control?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
|
||
(RTS/CTS).
|
||
|
||
@item @code{no-issue?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
|
||
sera pas affiché avant de présenter l'écran de connexion.
|
||
|
||
@item @code{init-string} (par défaut : @code{#f})
|
||
Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
|
||
modem avant toute autre chose. Elle peut être utilisée pour initialiser un
|
||
modem.
|
||
|
||
@item @code{no-clear?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
|
||
montrer l'écran de connexion.
|
||
|
||
@item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
|
||
Cette option doit être soit une gexp dénotant le nom d'un programme de
|
||
connexion, soit non définie, auquel cas la valeur par défaut est la commande
|
||
@command{login} de la suite d'outils Shadow.
|
||
|
||
@item @code{local-line} (par défaut : @code{#f})
|
||
Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
|
||
comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
|
||
est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
|
||
|
||
@item @code{extract-baud?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
|
||
de baud depuis les messages de statut produits par certains modems.
|
||
|
||
@item @code{skip-login?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
|
||
peut être utilisée avec le champ @var{login-program} pour utiliser des
|
||
systèmes de connexion non standards.
|
||
|
||
@item @code{no-newline?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
|
||
d'afficher le fichier @file{/etc/issue}.
|
||
|
||
@c Is this dangerous only when used with login-program, or always?
|
||
@item @code{login-options} (par défaut : @code{#f})
|
||
Cette option accepte une chaîne de caractères contenant des options passées
|
||
au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
|
||
conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
|
||
d'utilisateur contenant des options incluses qui pourraient être analysées
|
||
par le programme de connexion.
|
||
|
||
@item @code{login-pause} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
|
||
montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
|
||
pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
|
||
|
||
@item @code{chroot} (par défaut : @code{#f})
|
||
Change de racine dans le répertoire donné. Cette option accepte un chemin
|
||
en tant que chaîne de caractères.
|
||
|
||
@item @code{hangup?} (par défaut : @code{#f})
|
||
Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
|
||
le terminal spécifié.
|
||
|
||
@item @code{keep-baud?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
|
||
Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
|
||
caractères @key{BREAK}.
|
||
|
||
@item @code{timeout} (par défaut : @code{#f})
|
||
Lorsque la valeur est un nombre entier, termine la session si aucun nom
|
||
d'utilisateur n'a pu être lu après @var{timeout} secondes.
|
||
|
||
@item @code{detect-case?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, active le support pour la détection des
|
||
terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
|
||
d'utilisateur qui ne contient que des majuscules indique un terminal en
|
||
majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
|
||
que cela ne fonctionne pas avec les caractères unicode.
|
||
|
||
@item @code{wait-cr?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
|
||
un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
|
||
l'écran de connexion. Cela est typiquement utilisé avec l'option
|
||
@var{init-string}.
|
||
|
||
@item @code{no-hints?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
|
||
verrouillages numériques, majuscule et défilement.
|
||
|
||
@item @code{no-hostname?} (par défaut : @code{#f})
|
||
Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
|
||
aucun nom d'hôte ne sera affiché.
|
||
|
||
@item @code{long-hostname?} (par défaut : @code{#f})
|
||
Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
|
||
la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
|
||
@code{gethostname} ou @code{getaddrinfo} sera affiché.
|
||
|
||
@item @code{erase-characters} (par défaut : @code{#f})
|
||
Cette option accepte une chaîne de caractères de caractères supplémentaires
|
||
qui devraient être interprétés comme des effacements lorsque l'utilisateur
|
||
les tape dans leur nom d'utilisateur.
|
||
|
||
@item @code{kill-characters} (par défaut : @code{#f})
|
||
Cette option accepte une chaîne de caractères qui devrait être interprété
|
||
comme signifiant « ignore tous les caractères précédent » (aussi appelé un
|
||
caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
|
||
|
||
@item @code{chdir} (par défaut : @code{#f})
|
||
Cette option accepte, en tant que chaîne de caractères, un chemin vers un
|
||
répertoire dans lequel se trouvera la commande avant la connexion.
|
||
|
||
@item @code{delay} (par défaut : @code{#f})
|
||
Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
|
||
avant d'ouvrir le tty et afficher l'écran de connexion.
|
||
|
||
@item @code{nice} (par défaut : @code{#f})
|
||
Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
|
||
programme @command{login} tourne.
|
||
|
||
@item @code{extra-options} (par défaut : @code{'()})
|
||
Cette option fournie un « mécanisme de secours » pour que l'utilisateur
|
||
puisse ajouter des arguments de la ligne de commande arbitraires à
|
||
@command{agetty} comme une liste de chaînes de caractères.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} kmscon-service-type @var{config}
|
||
Renvoie un service qui lance
|
||
@uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
|
||
@var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
|
||
sur lequel tourner, entre autres choses.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} kmscon-configuration
|
||
C'est le type de données représentant la configuration de Kscon, qui
|
||
implémente l'écran de chargement de la console virtuelle.
|
||
|
||
@table @asis
|
||
|
||
@item @code{virtual-terminal}
|
||
Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
|
||
|
||
@item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
|
||
Une gexp qui dénote le nom d'un programme de connexion. le programme de
|
||
connexion par défaut est @command{login} de la suite d'outils Shadow.
|
||
|
||
@item @code{login-arguments} (par défaut : @code{'("-p")})
|
||
Une liste d'arguments à passer à @command{login}.
|
||
|
||
@item @code{auto-login} (par défaut : @code{#f})
|
||
Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
|
||
l'utilisateur spécifié sera automatiquement connecté sans demande du nom
|
||
d'utilisateur ni du mot de passe.
|
||
|
||
@item @code{hardware-acceleration?} (par défaut : #f)
|
||
S'il faut utiliser l'accélération matérielle.
|
||
|
||
@item @code{kmscon} (par défaut : @var{kmscon})
|
||
Le paquet Kmscon à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex name service cache daemon
|
||
@cindex nscd
|
||
@deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
|
||
[#:name-services '()]
|
||
Renvoie un service qui lance le démon de cache de services de noms de la
|
||
libc (nscd) avec la @var{config} donnée — un objet
|
||
@code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
|
||
|
||
Parce que c'est pratique, le service du Shepherd pour nscd fournit les
|
||
actions suivantes :
|
||
|
||
@table @code
|
||
@item invalidate
|
||
@cindex invalidation du cache, nscd
|
||
@cindex nscd, invalidation du cache
|
||
Cela invalide le cache dnné. Par exemple, en laçant :
|
||
|
||
@example
|
||
herd invalidate nscd hosts
|
||
@end example
|
||
|
||
@noindent
|
||
on invalide le cache de noms d'hôtes de nscd.
|
||
|
||
@item statistiques
|
||
Lancer @command{herd statistics nscd} affiche des informations sur
|
||
l'utilisation de nscd et des caches.
|
||
@end table
|
||
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} %nscd-default-configuration
|
||
C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
|
||
utilisée par @code{nscd-service}. Elle utilise les caches définis par
|
||
@var{%nscd-default-caches} ; voir plus bas.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} nscd-configuration
|
||
C'est le type de données qui représente la configuration du démon de cache
|
||
de services de noms (nscd).
|
||
|
||
@table @asis
|
||
|
||
@item @code{name-services} (par défaut : @code{'()})
|
||
Liste des paquets dénotant des @dfn{services de noms} qui doivent être
|
||
visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
|
||
|
||
@item @code{glibc} (par défaut : @var{glibc})
|
||
Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
|
||
@command{nscd}.
|
||
|
||
@item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
|
||
Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
|
||
envoyée lorsque @code{debug-level} est strictement positif.
|
||
|
||
@item @code{debug-level} (par défaut : @code{0})
|
||
Entier qui dénote le niveau de débogage. Les entiers les plus grands
|
||
signifient plus de sortie de débogage.
|
||
|
||
@item @code{caches} (par défaut : @var{%nscd-default-caches})
|
||
Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
|
||
; voir plus bas.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} nscd-cache
|
||
Type de données représentant une base de données de cache de nscd et ses
|
||
paramètres.
|
||
|
||
@table @asis
|
||
|
||
@item @code{database}
|
||
C'est un symbole qui représente le nom de la base de donnée à mettre en
|
||
cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
|
||
@code{services} qui désignent les bases de données NSS correspondantes
|
||
(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
|
||
|
||
@item @code{positive-time-to-live}
|
||
@itemx @code{negative-time-to-live} (par défaut : @code{20})
|
||
Un entier qui représente le nombre de secondes pendant lesquelles un
|
||
résultat positif ou négatif reste en cache.
|
||
|
||
@item @code{check-files?} (par défaut : @code{#t})
|
||
Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
|
||
à @var{database}.
|
||
|
||
Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
|
||
nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
|
||
prendre en compte.
|
||
|
||
@item @code{persistent?} (par défaut : @code{#t})
|
||
Indique si le cache devrait être stocké de manière persistante sur le
|
||
disque.
|
||
|
||
@item @code{shared?} (par défaut : @code{#t})
|
||
Indique si le cache devrait être partagé entre les utilisateurs.
|
||
|
||
@item @code{max-database-size} (par défaut : 32@tie{}MiB)
|
||
Taille maximale en octets de la base de données en cache.
|
||
|
||
@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
|
||
@c settings, so leave them out.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %nscd-default-caches
|
||
Liste d'objets @code{<nscd-cache>} utilisés par défaut par
|
||
@code{nscd-configuration} (voir plus haut).
|
||
|
||
Elle active la mise en cache persistante et agressive des recherches de
|
||
services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
|
||
d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
|
||
et une protection de votre vie privée plus efficace — souvent le résultat
|
||
des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
|
||
de nom externes n'ont même pas besoin d'être questionnés.
|
||
@end defvr
|
||
|
||
@anchor{syslog-configuration-type}
|
||
@cindex syslog
|
||
@cindex logging
|
||
@deftp {Type de données} syslog-configuration
|
||
Ce type de données représente la configuration du démon syslog.
|
||
|
||
@table @asis
|
||
@item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
|
||
Le démon syslog à utiliser.
|
||
|
||
@item @code{config-file} (par défaut : @code{%default-syslog.conf})
|
||
Le fichier de configuration de syslog à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@anchor{syslog-service}
|
||
@cindex syslog
|
||
@deffn {Procédure Scheme} syslog-service @var{config}
|
||
Renvoie un service qui lance un démon syslog en suivant @var{config}.
|
||
|
||
@xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
|
||
d'informations sur la syntaxe du fichier de configuration.
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} guix-service-type
|
||
C'est le type de service qui lance le démon de construction,
|
||
@command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
|
||
un enregistrement @code{guix-configuration} décrit plus bas.
|
||
@end defvr
|
||
|
||
@anchor{guix-configuration-type}
|
||
@deftp {Type de données} guix-configuration
|
||
Ce type de données représente la configuration du démon de construction de
|
||
Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
|
||
|
||
@table @asis
|
||
@item @code{guix} (par défaut : @var{guix})
|
||
Le paquet Guix à utiliser.
|
||
|
||
@item @code{build-group} (par défaut : @code{"guixbuild"})
|
||
Nom du groupe des comptes utilisateurs de construction.
|
||
|
||
@item @code{build-accounts} (par défaut : @code{10})
|
||
Nombre de comptes utilisateurs de construction à créer.
|
||
|
||
@item @code{authorize-key?} (par défaut : @code{#t})
|
||
@cindex substituts, autorisations
|
||
Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
|
||
— par défaut celle de @code{hydra.gny.org} (@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}).
|
||
|
||
@item @code{use-substitutes?} (par défaut : @code{#t})
|
||
S'il faut utiliser les substituts.
|
||
|
||
@item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
|
||
La liste des URL où trouver des substituts par défaut.
|
||
|
||
@item @code{max-silent-time} (par défaut : @code{0})
|
||
@itemx @code{timeout} (par défaut : @code{0})
|
||
Le nombre de secondes de silence et le nombre de secondes d'inactivité,
|
||
respectivement, après lesquelles un processus de construction son délai
|
||
d'attente. Une valeur de zéro désactive le délai d'attente.
|
||
|
||
@item @code{log-compression} (par défaut : @code{'bzip2})
|
||
Le type de compression utilisé par les journaux de construction — parmi
|
||
@code{gzip}, @code{bzip2} et @code{none}.
|
||
|
||
@item @code{extra-options} (par défaut : @code{'()})
|
||
Liste d'options supplémentaires de la ligne de commande pour
|
||
@command{guix-daemon}.
|
||
|
||
@item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
|
||
Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
|
||
écrites.
|
||
|
||
@item @code{http-proxy} (par défaut : @code{#f})
|
||
Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
|
||
sortie fixe et les substituts.
|
||
|
||
@item @code{tmpdir} (par défaut : @code{#f})
|
||
Un répertoire où @command{guix-daemon} effectuera ses constructions.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
|
||
Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
|
||
règles udev peuvent être fournies comme une liste de fichier via la variable
|
||
@var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
|
||
@code{(gnu services base)} simplifient la création de ces fichiers de règle.
|
||
|
||
@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}.
|
||
|
||
Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
|
||
sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
|
||
script à la détection du périphérique USB avec l'identifiant de produit
|
||
donné.
|
||
|
||
@example
|
||
(define %example-udev-rule
|
||
(udev-rule
|
||
"90-usb-thing.rules"
|
||
(string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
|
||
"ATTR@{product@}==\"Example\", "
|
||
"RUN+=\"/path/to/script\"")))
|
||
@end example
|
||
@end deffn
|
||
|
||
Ici on montre comment le service @var{udev-service} par défaut peut être
|
||
étendu avec cette règle.
|
||
|
||
@example
|
||
(operating-system
|
||
;; @dots{}
|
||
(services
|
||
(modify-services %desktop-services
|
||
(udev-service-type config =>
|
||
(udev-configuration (inherit config)
|
||
(rules (append (udev-configuration-rules config)
|
||
(list %example-udev-rule))))))))
|
||
@end example
|
||
|
||
@deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
|
||
Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
|
||
dans @var{file}, un objet simili-fichier.
|
||
|
||
L'exemple suivant montre comment utiliser un fichier de règles existant.
|
||
|
||
@example
|
||
(use-modules (guix download) ;pour url-fetch
|
||
(guix packages) ;pour origin
|
||
;; @dots{})
|
||
|
||
(define %android-udev-rules
|
||
(file->udev-rule
|
||
"51-android-udev.rules"
|
||
(let ((version "20170910"))
|
||
(origin
|
||
(method url-fetch)
|
||
(uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
|
||
"android-udev-rules/" version "/51-android.rules"))
|
||
(sha256
|
||
(base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
|
||
@end example
|
||
@end deffn
|
||
|
||
En plus, les définitions des paquets de Guix peuvent être inclus dans
|
||
@var{rules} pour étendre les règles avec les définitions trouvées dans leur
|
||
sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
|
||
@var{file->udev-rule} précédent, on aurait pu utiliser le paquet
|
||
@var{android-udev-rules} qui existe dans le module @code{(gnu packages
|
||
android)}.
|
||
|
||
L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
|
||
pour que l'outil Android @command{adb} puisse détecter les appareils sans
|
||
privilège root. Il détaille aussi comment créer le grope @code{adbusers},
|
||
requis pour le bon fonctionnement des règles définies dans le paquet
|
||
@var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
|
||
@var{supplementary-groups} de la déclaration @var{user-account} ainsi que
|
||
dans le champ @var{groups} de l'enregistrement @var{operating-system}.
|
||
|
||
@example
|
||
(use-modules (gnu packages android) ;for android-udev-rules
|
||
(gnu system shadow) ;for user-group
|
||
;; @dots{})
|
||
|
||
(operating-system
|
||
;; @dots{}
|
||
(users (cons (user-acount
|
||
;; @dots{}
|
||
(supplementary-groups
|
||
'("adbusers" ;for adb
|
||
"wheel" "netdev" "audio" "video"))
|
||
;; @dots{})))
|
||
|
||
(groups (cons (user-group (system? #t) (name "adbusers"))
|
||
%base-groups))
|
||
|
||
;; @dots{}
|
||
|
||
(services
|
||
(modify-services %desktop-services
|
||
(udev-service-type config =>
|
||
(udev-configuration (inherit config)
|
||
(rules (cons* android-udev-rules
|
||
(udev-configuration-rules config))))))))
|
||
@end example
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} urandom-seed-service-type
|
||
Garde de l'entropie dans @var{%random-seed-file} pour démarrer
|
||
@file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
|
||
@file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
|
||
@file{/dev/hwrng} existe et peut être lu.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %random-seed-file
|
||
C'est le nom du fichier où des octets aléatoires sont sauvegardés par
|
||
@var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
|
||
redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
|
||
@end defvr
|
||
|
||
@cindex disposition clavier
|
||
@cindex clavier
|
||
@deffn {Procédure Scheme} console-keymap-service @var{files} ...
|
||
@cindex disposition du clavier
|
||
Renvoie un service qui charge les dispositions claviers de @var{files} avec
|
||
la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
|
||
disposition par défaut, ce qui se fait ainsi :
|
||
|
||
@example
|
||
(console-keymap-service "dvorak")
|
||
@end example
|
||
|
||
Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
|
||
combiner les dispositions suivantes :
|
||
@example
|
||
(console-keymap-service "se-lat6" "se-fi-lat6")
|
||
@end example
|
||
|
||
Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
|
||
complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
|
||
|
||
@end deffn
|
||
|
||
@cindex souris
|
||
@cindex gpm
|
||
@defvr {Variable Scheme} gpm-service-type
|
||
C'est le type du service qui lance GPM, le @dfn{démon de souris à but
|
||
général}, qui fournit le support de la souris sur la console Linux. GPM
|
||
permet aux utilisateurs d'utiliser la souris dans la console, entre autres
|
||
pour sélectionner, copier et coller du texte.
|
||
|
||
La valeur pour les services de ce type doit être un @code{gpm-configuration}
|
||
(voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} gpm-configuration
|
||
Type de données représentant la configuration de GPM.
|
||
|
||
@table @asis
|
||
@item @code{options} (par défaut : @code{%default-gpm-options})
|
||
Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
|
||
des options par défaut dit à @command{gpm} d'écouter les événements de la
|
||
souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
|
||
pour plus d'informations.
|
||
|
||
@item @code{gpm} (par défaut : @code{gpm})
|
||
Le paquet GPM à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@anchor{guix-publish-service-type}
|
||
@deffn {Variable Scheme} guix-publish-service-type
|
||
C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
|
||
plus bas.
|
||
|
||
Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
|
||
créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} guix-publish-configuration
|
||
Le type de données représentant la configuration du service @code{guix
|
||
publish}.
|
||
|
||
@table @asis
|
||
@item @code{guix} (par défaut : @code{guix})
|
||
Le paquet Guix à utiliser.
|
||
|
||
@item @code{port} (par défaut : @code{80})
|
||
Le port TCP sur lequel écouter les connexions.
|
||
|
||
@item @code{host} (par défaut : @code{"localhost"})
|
||
L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
|
||
@code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
|
||
|
||
@item @code{compression-level} (par défaut : @code{3})
|
||
Le niveau de compression gzip auquel les substituts sont compressés.
|
||
Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
|
||
pour avoir le meilleur taux de compression contre une plus grande
|
||
utilisation du CPU.
|
||
|
||
@item @code{nar-path} (par défaut : @code{"nar"})
|
||
Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
|
||
@code{--nar-path}}, pour des détails.
|
||
|
||
@item @code{cache} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
|
||
la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
|
||
@code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
|
||
des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
|
||
impliqués.
|
||
|
||
@item @code{workers} (par défaut : @code{#f})
|
||
Lorsque la valeur est un entier, c'est le nombre de threads de travail
|
||
utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
|
||
processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
|
||
pour plus d'informations.
|
||
|
||
@item @code{ttl} (par défaut : @code{#f})
|
||
Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
|
||
des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
|
||
plus d'informations.
|
||
@end table
|
||
@end deftp
|
||
|
||
@anchor{rngd-service}
|
||
@deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
|
||
[#:device "/dev/hwrng"]
|
||
Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
|
||
pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
|
||
échouera si @var{device} n'existe pas.
|
||
@end deffn
|
||
|
||
@anchor{pam-limits-service}
|
||
@cindex limites de session
|
||
@cindex ulimit
|
||
@cindex priorités
|
||
@cindex temps réel
|
||
@cindex jackd
|
||
@deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
|
||
|
||
Renvoie un service qui installe un fichier de configuration pour le
|
||
@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
|
||
@code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
|
||
@code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
|
||
limites @code{ulimit} et les priorités des sessions utilisateurs.
|
||
|
||
La définition de limites suivante défini deux limites matérielles et
|
||
logicielles pour toutes les sessions connectées des utilisateurs du groupe
|
||
@code{realtime} :
|
||
|
||
@example
|
||
(pam-limits-service
|
||
(list
|
||
(pam-limits-entry "@@realtime" 'both 'rtprio 99)
|
||
(pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
|
||
@end example
|
||
|
||
La première entrée augment la priorité en temps réel maximale des processus
|
||
non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
|
||
d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
|
||
sont souvent utilisés sur les systèmes audio temps-réel.
|
||
@end deffn
|
||
|
||
@node Exécution de tâches planifiées
|
||
@subsubsection Exécution de tâches planifiées
|
||
|
||
@cindex cron
|
||
@cindex mcron
|
||
@cindex tâches planifiées
|
||
Le module @code{(gnu services mcron)} fournit une interface pour
|
||
GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
|
||
mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
|
||
traditionel @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
|
||
commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
|
||
Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
|
||
ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
|
||
(@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
|
||
gexps pour introduire des définitions de tâches qui sont passées à mcron
|
||
(@pxref{G-Expressions}).
|
||
|
||
@lisp
|
||
(use-modules (guix) (gnu) (gnu services mcron))
|
||
(use-package-modules base idutils)
|
||
|
||
(define updatedb-job
|
||
;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
|
||
;; l'action de la tâche comme une procédure Scheme.
|
||
#~(job '(next-hour '(3))
|
||
(lambda ()
|
||
(execl (string-append #$findutils "/bin/updatedb")
|
||
"updatedb"
|
||
"--prunepaths=/tmp /var/tmp /gnu/store"))))
|
||
|
||
(define garbage-collector-job
|
||
;; Lance le ramasse-miettes tous les jours à minuit cinq.
|
||
;; L'action de la tâche est une commande shell.
|
||
#~(job "5 0 * * *" ;Vixie cron syntax
|
||
"guix gc -F 1G"))
|
||
|
||
(define idutils-job
|
||
;; Met à jour la base de données d'index en tant que « charlie » à 12h15
|
||
;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
|
||
#~(job '(next-minute-from (next-hour '(12 19)) '(15))
|
||
(string-append #$idutils "/bin/mkid src")
|
||
#:user "charlie"))
|
||
|
||
(operating-system
|
||
;; @dots{}
|
||
(services (cons (mcron-service (list garbage-collector-job
|
||
updatedb-job
|
||
idutils-job))
|
||
%base-services)))
|
||
@end lisp
|
||
|
||
@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
|
||
plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
|
||
est la référence du service mcron.
|
||
|
||
Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
|
||
service pour visualiser les travaux mcron qui seront exécutés ensuite :
|
||
|
||
@example
|
||
# herd schedule mcron
|
||
@end example
|
||
|
||
@noindent
|
||
Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
|
||
pouvez spécifier le nombre de tâches à afficher :
|
||
|
||
@example
|
||
# herd schedule mcron 10
|
||
@end example
|
||
|
||
@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}
|
||
|
||
Ce type de service peut être la cible d'une extension de service qui lui
|
||
fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
|
||
qui fournissent des tâches mcron à lancer.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} mcron-configuration
|
||
Type données qui représente la configuration de mcron.
|
||
|
||
@table @asis
|
||
@item @code{mcron} (par défaut : @var{mcron})
|
||
Le paquet mcron à utiliser.
|
||
|
||
@item @code{jobs}
|
||
C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
|
||
à une spécification de tâche de mcron (@pxref{Syntax, mcron job
|
||
specifications,, mcron, GNU@tie{}mcron}).
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Rotation des journaux
|
||
@subsubsection Rotation des journaux
|
||
|
||
@cindex rottlog
|
||
@cindex journaux, rotation
|
||
@cindex logging
|
||
Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
|
||
tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
|
||
tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
|
||
fichiers séparés, potentiellement compressés. Le module @code{(gnu services
|
||
admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
|
||
de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
|
||
|
||
L'exemple ci-dessous définit un système d'exploitation qui fournit la
|
||
rotation des journaux avec les paramètres par défaut, pour les journaux les
|
||
plus courants.
|
||
|
||
@lisp
|
||
(use-modules (guix) (gnu))
|
||
(use-service-modules admin mcron)
|
||
(use-package-modules base idutils)
|
||
|
||
(operating-system
|
||
;; @dots{}
|
||
(services (cons (service rottlog-service-type)
|
||
%base-services)))
|
||
@end lisp
|
||
|
||
@defvr {Variable Scheme} rottlog-service-type
|
||
C'est le type du service Rotlog, dont la valeur est un objet
|
||
@code{rottlog-configuration}.
|
||
|
||
D'autres services peuvent étendre celui-ci avec de nouveaux objets
|
||
@code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
|
||
fichiers à faire tourner.
|
||
|
||
Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
|
||
pour lancer le service rottlog.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} rottlog-configuration
|
||
Type de données représentant la configuration de rottlog.
|
||
|
||
@table @asis
|
||
@item @code{rottlog} (par défaut : @code{rottlog})
|
||
Le paquet Rottlog à utiliser.
|
||
|
||
@item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
|
||
Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
|
||
Variables,,, rottlog, GNU Rot[t]log Manual}).
|
||
|
||
@item @code{rotations} (par défaut : @code{%default-rotations})
|
||
Une liste d'objets @code{log-rotation} définis plus bas.
|
||
|
||
@item @code{jobs}
|
||
C'est une liste de gexps où chaque gexp correspond à une spécification de
|
||
tache de mcron (@pxref{Exécution de tâches planifiées}).
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} log-rotation
|
||
Type de données représentant la rotation d'un groupe de fichiers journaux.
|
||
|
||
En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
|
||
Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
|
||
d'un journal de cette manière :
|
||
|
||
@example
|
||
(log-rotation
|
||
(frequency 'daily)
|
||
(files '("/var/log/apache/*"))
|
||
(options '("storedir apache-archives"
|
||
"rotate 6"
|
||
"notifempty"
|
||
"nocompress")))
|
||
@end example
|
||
|
||
La liste des champs est la suivante :
|
||
|
||
@table @asis
|
||
@item @code{frequency} (par défaut : @code{'weekly})
|
||
La fréquence de rotation, un symbole.
|
||
|
||
@item @code{files}
|
||
La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
|
||
|
||
@item @code{options} (par défaut : @code{'()})
|
||
La liste des options de rottlog pour cette rotation (@pxref{Configuration
|
||
parameters,,, rottlog, GNU Rot[t]lg Manual}).
|
||
|
||
@item @code{post-rotate} (par défaut : @code{#f})
|
||
Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %default-rotations
|
||
Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
|
||
autres fichiers.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %rotated-files
|
||
La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
|
||
s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
|
||
@end defvr
|
||
|
||
@node Services réseau
|
||
@subsubsection Services réseau
|
||
|
||
Le module @code{(gnu services networking)} fournit des services pour
|
||
configurer les interfaces réseaux.
|
||
|
||
@cindex DHCP, service réseau
|
||
@defvr {Variable Scheme} dhcp-client-service-type
|
||
C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
|
||
configuration d'hôte dynamique) sur toutes les interfaces réseau
|
||
non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
|
||
@code{isc-dhcp} par défaut.
|
||
@end defvr
|
||
|
||
@deffn {Procédure Scheme} dhcpd-service-type
|
||
Ce type définie un service qui lance un démon DHCP. Pour créer un service
|
||
de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
|
||
exemple :
|
||
|
||
@example
|
||
(service dhcpd-service-type
|
||
(dhcpd-configuration
|
||
(config-file (local-file "my-dhcpd.conf"))
|
||
(interfaces '("enp0s25"))))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} dhcpd-configuration
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{isc-dhcp})
|
||
Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
|
||
@file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
|
||
défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
|
||
@item @code{config-file} (par défaut : @code{#f})
|
||
Le fichier de configuration à utiliser. Il est requis. Il sera passé à
|
||
@code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
|
||
objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
|
||
@code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
|
||
configuration.
|
||
@item @code{version} (par défaut : @code{"4"})
|
||
La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
|
||
4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
|
||
et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
|
||
de détails.
|
||
@item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
|
||
Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
|
||
ce répertoire sera créé s'il n'existe pas.
|
||
@item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
|
||
Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
|
||
@code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
|
||
@item @code{interfaces} (par défaut : @code{'()})
|
||
Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
|
||
n'est pas vide, alors ses éléments (qui doivent être des chaînes de
|
||
caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
|
||
du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
|
||
; voir @code{man dhcpd} pour plus de détails.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} static-networking-service-type
|
||
@c TODO Document <static-networking> data structures.
|
||
C'est le type des interfaces réseaux configurés statiquement.
|
||
@end defvr
|
||
|
||
@deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
|
||
[#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
|
||
[#:requirement @code{'(udev)}]
|
||
Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
|
||
@var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
|
||
@var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
|
||
la passerelle par défaut du réseau. @var{requirement} peut être utilisé
|
||
pour déclarer une dépendance sur un autre service avant de configurer
|
||
l'interface.
|
||
|
||
On peut appeler cette procédure plusieurs fois, une fois par interface
|
||
réseau qui nous intéresse. Dans les coulisses, elle étend
|
||
@code{static-networking-service-type} avec les interfaces réseaux
|
||
supplémentaires à gérer.
|
||
|
||
Par exemple :
|
||
|
||
@example
|
||
(static-networking-service "eno1" "192.168.1.82"
|
||
#:gateway "192.168.1.2"
|
||
#:name-servers '("192.168.1.2"))
|
||
@end example
|
||
@end deffn
|
||
|
||
@cindex wicd
|
||
@cindex sans-fil
|
||
@cindex WiFi
|
||
@cindex gestion du réseau
|
||
@deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
|
||
Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
|
||
de gestion réseau qui cherche à simplifier la configuration des résaux
|
||
filaires et sans fil.
|
||
|
||
Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
|
||
commandes pour interagir avec le démon et configurer le réseau :
|
||
@command{wicd-client}, une interface graphique et les interfaces
|
||
utilisateurs @command{wicd-cli} et @command{wicd-curses}.
|
||
@end deffn
|
||
|
||
@cindex ModemManager
|
||
|
||
@defvr {Variable Scheme} modem-manager-service-type
|
||
C'est le type de service pour le service
|
||
@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
|
||
valeur de ce type de service est un enregistrement
|
||
@code{modem-manager-configuration}.
|
||
|
||
Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
|
||
@end defvr
|
||
|
||
@deftp {Type de données} modem-manager-configuration
|
||
Type de donnée représentant la configuration de ModemManager.
|
||
|
||
@table @asis
|
||
@item @code{modem-manager} (par défaut : @code{modem-manager})
|
||
Le paquet ModemManager à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex NetworkManager
|
||
|
||
@defvr {Variable Scheme} network-manager-service-type
|
||
C'est le type de service pour le service
|
||
@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
|
||
valeur pour ce type de service est un enregistrement
|
||
@code{network-manager-configuration}.
|
||
|
||
Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
|
||
@end defvr
|
||
|
||
@deftp {Type de données} network-manager-configuration
|
||
Type de données représentant la configuration de NetworkManager.
|
||
|
||
@table @asis
|
||
@item @code{network-manager} (par défaut : @code{network-manager})
|
||
Le paquet NetworkManager à utiliser.
|
||
|
||
@item @code{dns} (par défaut : @code{"default"})
|
||
Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
|
||
utilise le fichier de configuration @code{resolv.conf}
|
||
|
||
@table @samp
|
||
@item default
|
||
NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
|
||
de noms fournis par les connexions actives.
|
||
|
||
@item dnsmasq
|
||
NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
|
||
utilisant une configuration « DNS disjointe » si vous êtes connecté par un
|
||
VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
|
||
nom local.
|
||
|
||
@item none
|
||
NetworkManager ne modifiera pas @code{resolv.conf}.
|
||
@end table
|
||
|
||
@item @code{vpn-plugins} (par défaut : @code{'()})
|
||
C'est la liste des greffons disponibles pour les VPN (réseaux privés
|
||
virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
|
||
permet à NetworkManager de gérer des VPN via OpenVPN.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex Connman
|
||
@deffn {Variable Scheme} connman-service-type
|
||
C'est le type de service pour lancer @url{https://01.org/connman,Connman},
|
||
un gestionnaire de connexions réseaux.
|
||
|
||
Sa valeur doit être un enregistrement @code{connman-configuration} comme
|
||
dans cet exemple :
|
||
|
||
@example
|
||
(service connman-service-type
|
||
(connman-configuration
|
||
(disable-vpn? #t)))
|
||
@end example
|
||
|
||
Voir plus bas pour des détails sur @code{connman-configuration}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} connman-configuration
|
||
Type de données représentant la configuration de connman.
|
||
|
||
@table @asis
|
||
@item @code{connman} (par défaut : @var{connman})
|
||
Le paquet connman à utiliser.
|
||
|
||
@item @code{disable-vpn?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, désactive le greffon vpn de connman.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex WPA Supplicant
|
||
@defvr {Variable Scheme} wpa-supplicant-service-type
|
||
C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
|
||
supplicant}, un démon d'authentification requis pour s'authentifier sur des
|
||
WiFi chiffrés ou des réseaux ethernet.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} wpa-supplicant-configuration
|
||
Type données qui représente la configuration de WPA Supplicant.
|
||
|
||
Il prend les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
|
||
Le paquet WPA Supplicant à utiliser.
|
||
|
||
@item @code{dbus?} (par défaut : @code{#t})
|
||
Indique s'il faut écouter les requêtes sur D-Bus.
|
||
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
|
||
Où stocker votre fichier de PID.
|
||
|
||
@item @code{interface} (par défaut : @code{#f})
|
||
Si une valeur est indiquée, elle doit spécifier le nom d'une interface
|
||
réseau que WPA supplicant contrôlera.
|
||
|
||
@item @code{config-file} (par défaut : @code{#f})
|
||
Fichier de configuration facultatif à utiliser.
|
||
|
||
@item @code{extra-options} (par défaut : @code{'()})
|
||
Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex iptables
|
||
@defvr {Variable Scheme} iptables-service-type
|
||
This is the service type to set up an iptables configuration. iptables is a
|
||
packet filtering framework supported by the Linux kernel. This service
|
||
supports configuring iptables for both IPv4 and IPv6. A simple example
|
||
configuration rejecting all incoming connections except those to the ssh
|
||
port 22 is shown below.
|
||
|
||
@lisp
|
||
(service iptables-service-type
|
||
(iptables-configuration
|
||
(ipv4-rules (plain-file "iptables.rules" "*filter
|
||
:INPUT ACCEPT
|
||
:FORWARD ACCEPT
|
||
:OUTPUT ACCEPT
|
||
-A INPUT -p tcp --dport 22 -j ACCEPT
|
||
-A INPUT -j REJECT --reject-with icmp-port-unreachable
|
||
COMMIT
|
||
"))
|
||
(ipv6-rules (plain-file "ip6tables.rules" "*filter
|
||
:INPUT ACCEPT
|
||
:FORWARD ACCEPT
|
||
:OUTPUT ACCEPT
|
||
-A INPUT -p tcp --dport 22 -j ACCEPT
|
||
-A INPUT -j REJECT --reject-with icmp6-port-unreachable
|
||
COMMIT
|
||
"))))
|
||
@end lisp
|
||
@end defvr
|
||
|
||
@deftp {Type de données} iptables-configuration
|
||
Type de données représentant la configuration d'iptables.
|
||
|
||
@table @asis
|
||
@item @code{iptables} (par défaut : @code{iptables})
|
||
Le paquet iptables qui fournit @code{iptables-restore} et
|
||
@code{ip6tables-restore}.
|
||
@item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
|
||
Les règles iptables à utiliser. Elles seront passées à
|
||
@code{iptables-restore}. Cela peut être un objet « simili-fichier »
|
||
(@pxref{G-Expressions, file-like objects}).
|
||
@item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
|
||
Les règles iptables à utiliser. Elles seront passées à
|
||
@code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
|
||
(@pxref{G-Expressions, file-like objects}).
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex NTP (Network Time Protocol), service
|
||
@cindex horloge
|
||
@defvr {Variable Scheme} ntp-service-type
|
||
This is the type of the service running the @uref{http://www.ntp.org,
|
||
Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
|
||
the system clock synchronized with that of the specified NTP servers.
|
||
|
||
La valeur de ce service est un objet @code{ntpd-configuration}, décrit
|
||
ci-dessous.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} ntp-configuration
|
||
C'est le type de données représentant la configuration du service NTP.
|
||
|
||
@table @asis
|
||
@item @code{servers} (par défaut : @code{%ntp-servers})
|
||
C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
|
||
synchronisé.
|
||
|
||
@item @code{allow-large-adjustment?} (par défaut : @code{#f})
|
||
Détermine si @code{ntpd} peut faire un ajustement initial de plus de
|
||
1@tie{}000 secondes.
|
||
|
||
@item @code{ntp} (par défaut : @code{ntp})
|
||
Le paquet NTP à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %ntp-servers
|
||
Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
|
||
serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
|
||
@end defvr
|
||
|
||
@cindex OpenNTPD
|
||
@deffn {Procédure Scheme} openntpd-service-type
|
||
Lance le démon NTP @command{ntpd}, implémenté par
|
||
@uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
|
||
système synchronisée avec celle des serveurs donnés.
|
||
|
||
@example
|
||
(service
|
||
openntpd-service-type
|
||
(openntpd-configuration
|
||
(listen-on '("127.0.0.1" "::1"))
|
||
(sensor '("udcf0 correction 70000"))
|
||
(constraint-from '("www.gnu.org"))
|
||
(constraints-from '("https://www.google.com/"))
|
||
(allow-large-adjustment? #t)))
|
||
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} openntpd-configuration
|
||
@table @asis
|
||
@item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
|
||
L'exécutable openntpd à utiliser.
|
||
@item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
|
||
Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
|
||
démon ntpd.
|
||
@item @code{query-from} (par défaut : @code{'()})
|
||
Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
|
||
sortantes.
|
||
@item @code{sensor} (par défaut : @code{'()})
|
||
Spécifie une liste de senseurs de différences de temps que ntpd devrait
|
||
utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
|
||
qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
|
||
documentation en amont} pour plus d'informations.
|
||
@item @code{server} (par défaut : @var{%ntp-servers})
|
||
Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
|
||
lesquels se synchroniser.
|
||
@item @code{servers} (par défaut : @code{'()})
|
||
Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
|
||
NTP avec lesquelles se synchroniser.
|
||
@item @code{constraint-from} (par défaut : @code{'()})
|
||
@code{ntpd} peut être configuré pour demander la « Date » à des serveurs
|
||
HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
|
||
pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
|
||
l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
|
||
authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
|
||
serveurs HTTPS qui fournissent cette contrainte.
|
||
@item @code{constraints-from} (par défaut : @code{'()})
|
||
Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
|
||
ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
|
||
noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
|
||
contrainte médiane.
|
||
@item @code{allow-large-adjustment?} (par défaut : @code{#f})
|
||
Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
|
||
secondes.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex inetd
|
||
@deffn {Variable Scheme} inetd-service-type
|
||
Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
|
||
inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur 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
|
||
ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
|
||
:
|
||
|
||
@example
|
||
(service
|
||
inetd-service-type
|
||
(inetd-configuration
|
||
(entries (list
|
||
(inetd-entry
|
||
(name "echo")
|
||
(socket-type 'stream)
|
||
(protocol "tcp")
|
||
(wait? #f)
|
||
(user "root"))
|
||
(inetd-entry
|
||
(node "127.0.0.1")
|
||
(name "smtp")
|
||
(socket-type 'stream)
|
||
(protocol "tcp")
|
||
(wait? #f)
|
||
(user "root")
|
||
(program (file-append openssh "/bin/ssh"))
|
||
(arguments
|
||
'("ssh" "-qT" "-i" "/path/to/ssh_key"
|
||
"-W" "smtp-server:25" "user@@hostname")))))
|
||
@end example
|
||
|
||
Voir plus bas pour plus de détails sur @code{inetd-configuration}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} inetd-configuration
|
||
Type de données représentant la configuration de @command{inetd}.
|
||
|
||
@table @asis
|
||
@item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
|
||
L'exécutable @command{inetd} à utiliser.
|
||
|
||
@item @code{entries} (par défaut : @code{'()})
|
||
Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
|
||
crée avec le constructeur @code{inetd-entry}.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} inetd-entry
|
||
Type de données représentant une entrée dans la configuration
|
||
d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
|
||
@command{inetd} écoutera les requêtes.
|
||
|
||
@table @asis
|
||
@item @code{node} (par défaut : @code{#f})
|
||
Chaîne de caractères facultative, un liste d'adresses locales séparées par
|
||
des virgules que @command{inetd} devrait utiliser pour écouter ce service.
|
||
@xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
|
||
complète de toutes les options.
|
||
@item @code{name}
|
||
Une chaîne de caractères dont le nom doit correspondre à une entrée de
|
||
@code{/etc/services}.
|
||
@item @code{socket-type}
|
||
Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
|
||
@code{'seqpacket}.
|
||
@item @code{protocol}
|
||
Une chaîne de caractères qui doit correspondre à une entrée dans
|
||
@code{/etc/protocols}.
|
||
@item @code{wait?} (par défaut : @code{#t})
|
||
Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
|
||
d'écouter de nouvelles demandes de service.
|
||
@item @code{user}
|
||
A string containing the user (and, optionally, group) name of the user as
|
||
whom the server should run. The group name can be specified in a suffix,
|
||
separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
|
||
@code{"user.group"}.
|
||
@item @code{program} (par défaut : @code{"internal"})
|
||
Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
|
||
@command{inetd} devrait utiliser un service inclus.
|
||
@item @code{arguments} (par défaut : @code{'()})
|
||
A list strings or file-like objects, which are the server program's
|
||
arguments, starting with the zeroth argument, i.e.@: the name of the program
|
||
itself. For @command{inetd}'s internal services, this entry must be
|
||
@code{'()} or @code{'("internal")}.
|
||
@end table
|
||
|
||
@xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
|
||
discussion plus détaillée de chaque champ de configuration.
|
||
@end deftp
|
||
|
||
@cindex Tor
|
||
@defvr {Variable Scheme} tor-service-type
|
||
C'est le type pour un service qui lance le démon de navigation anonyme
|
||
@uref{https://torproject.org, Tor}. Le service est configuré avec un
|
||
enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
|
||
lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
|
||
@code{tor}.
|
||
|
||
@end defvr
|
||
|
||
@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})
|
||
Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
|
||
@file{bin/tor} relativement à son répertoire de sortie. Le paquet par
|
||
défaut est le l'implémentation du @uref{https://www.torproject.org, projet
|
||
Tor}.
|
||
|
||
@item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
|
||
Le fichier de configuration à utiliser. Il sera ajouté au fichier de
|
||
configuration par défaut, et le fichier de configuration final sera passé à
|
||
@code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
|
||
simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
|
||
tor} pour plus de détails sur la syntaxe du fichier de configuration.
|
||
|
||
@item @code{hidden-services} (par défaut : @code{'()})
|
||
La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
|
||
n'importe quel service cache que vous ajoutez à cette liste, la
|
||
configuration appropriée pour activer le service caché sera automatiquement
|
||
ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
|
||
enregistrements @code{<hidden-service>} avec la procédure
|
||
@code{tor-hidden-service} décrite plus bas.
|
||
|
||
@item @code{socks-socket-type} (par défaut : @code{'tcp})
|
||
Le type de socket par défaut que Tor devrait utiliser pour les socket
|
||
SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
|
||
@code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
|
||
l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
|
||
@code{'unix}, Tor écoutera sur le socket UNIX domain
|
||
@file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
|
||
groupe @code{tor}.
|
||
|
||
Si vous voulez personnaliser le socket SOCKS plus avant, laissez
|
||
@code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
|
||
@code{config-file} pour remplacer les valeurs par défaut avec votre propre
|
||
option @code{SocksPort}.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex service caché
|
||
@deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
|
||
Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
|
||
@var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
|
||
comme dans :
|
||
|
||
@example
|
||
'((22 "127.0.0.1:22")
|
||
(80 "127.0.0.1:8080"))
|
||
@end example
|
||
|
||
Dans cet exemple, le port 22 du service caché est relié au port local 22 et
|
||
le port 80 est relié au port local 8080.
|
||
|
||
Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
|
||
fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
|
||
caché.
|
||
|
||
Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
|
||
Tor project's documentation} pour trouver plus d'information.
|
||
@end deffn
|
||
|
||
Le module @code{(gnu services rsync)} fournit les services suivant :
|
||
|
||
Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
|
||
disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
|
||
fichiers existants ou en téléverser des nouveaux.
|
||
|
||
@deffn {Variable Scheme} rsync-service-type
|
||
C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
|
||
un enregistrement @command{rsync-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service rsync-service-type)
|
||
@end example
|
||
|
||
Voir plus pas pour trouver des détails à propos de
|
||
@code{rsync-configuration}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} rsync-configuration
|
||
Type de données représentant la configuration de @code{rsync-service}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{rsync})
|
||
Le paquet @code{rsync} à utiliser.
|
||
|
||
@item @code{port-number} (par défaut : @code{873})
|
||
Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
|
||
le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
|
||
tant qu'utilisateur et groupe @code{root}.
|
||
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
|
||
Nom du fichier où @command{rsync} écrit son PID.
|
||
|
||
@item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
|
||
Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
|
||
|
||
@item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
|
||
Nom du fichier où @command{rsync} écrit son fichier de journal.
|
||
|
||
@item @code{use-chroot?} (par défaut : @var{#t})
|
||
S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
|
||
|
||
@item @code{share-path} (par défaut : @file{/srv/rsync})
|
||
Emplacement du répertoire partagé de @command{rsync}.
|
||
|
||
@item @code{share-comment} (par défaut : @code{"Rsync share"})
|
||
Commentaire du répertoire partagé de @command{rsync}.
|
||
|
||
@item @code{read-only?} (par défaut : @var{#f})
|
||
Permission en écriture sur le répertoire partagé.
|
||
|
||
@item @code{timeout} (par défaut : @code{300})
|
||
Délai d'attente d'entrée-sortie en secondes.
|
||
|
||
@item @code{user} (par défaut : @var{"root"})
|
||
Propriétaire du processus @code{rsync}.
|
||
|
||
@item @code{group} (par défaut : @var{"root"})
|
||
Groupe du processus @code{rsync}.
|
||
|
||
@item @code{uid} (par défaut : @var{"rsyncd"})
|
||
Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
|
||
fichiers ont lieu si le démon a été lancé en @code{root}.
|
||
|
||
@item @code{gid} (par défaut : @var{"rsyncd"})
|
||
Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
En plus, @code{(gnu services ssh)} fournit les services suivant.
|
||
@cindex SSH
|
||
@cindex serveur SSH
|
||
|
||
@deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
|
||
[#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
|
||
[#:allow-empty-passwords? #f] [#:root-login? #f] @
|
||
[#:syslog-output? #t] [#:x11-forwarding? #t] @
|
||
[#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
|
||
[#:public-key-authentication? #t] [#:initialize? #t]
|
||
Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
|
||
@var{port-number}. @var{host-key} doit désigner un fichier contenant la
|
||
clef d'hôte et ne doit être lisible que par root.
|
||
|
||
Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
|
||
qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
|
||
@var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
|
||
dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
|
||
vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
|
||
|
||
Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
|
||
lors de l'activation du service s'ils n'existent pas encore. Cela peut
|
||
prendre du temps et demande une interaction.
|
||
|
||
Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
|
||
générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
|
||
une paire de clefs dont la clef privée sera stockée dans le fichier
|
||
@var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
|
||
|
||
Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
|
||
interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
|
||
d'hôtes et d'adresses.
|
||
|
||
@var{allow-empty-passwords?} spécifie si les connexions avec des mots de
|
||
passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
|
||
root est acceptée.
|
||
|
||
Les autres options devraient être évidentes.
|
||
@end deffn
|
||
|
||
@cindex SSH
|
||
@cindex serveur SSH
|
||
@deffn {Variable Scheme} openssh-service-type
|
||
C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
|
||
@command{sshd}. Sa valeur doit être un enregistrement
|
||
@code{openssh-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service openssh-service-type
|
||
(openssh-configuration
|
||
(x11-forwarding? #t)
|
||
(permit-root-login 'without-password)
|
||
(authorized-keys
|
||
`(("alice" ,(local-file "alice.pub"))
|
||
("bob" ,(local-file "bob.pub"))))))
|
||
@end example
|
||
|
||
Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
|
||
|
||
Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
|
||
dans cet exemple :
|
||
|
||
@example
|
||
(service-extension openssh-service-type
|
||
(const `(("charlie"
|
||
,(local-file "charlie.pub")))))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} openssh-configuration
|
||
C'est l'enregistrement de la configuration de la commande @command{sshd}
|
||
d'OpenSSH.
|
||
|
||
@table @asis
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
|
||
Nom du fichier où @command{sshd} écrit son PID.
|
||
|
||
@item @code{port-number} (par défaut : @code{22})
|
||
Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
|
||
|
||
@item @code{permit-root-login} (par défaut : @code{#f})
|
||
Ce champ détermine si et quand autoriser les connexions en root. Si la
|
||
valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
|
||
est @code{#t}, elles sont autorisées. S'il s'agit du symbole
|
||
@code{'without-password}, alors les connexions root sont autorisées mais pas
|
||
par une authentification par mot de passe.
|
||
|
||
@item @code{allow-empty-passwords?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
|
||
peuvent se connecter. Sinon, ils ne peuvent pas.
|
||
|
||
@item @code{password-authentication?} (par défaut : @code{#t})
|
||
Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
|
||
mot de passe. Sinon, ils doivent utiliser une autre méthode
|
||
d'authentification.
|
||
|
||
@item @code{public-key-authentication?} (par défaut : @code{#t})
|
||
Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
|
||
clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
|
||
d'authentification.
|
||
|
||
Les clefs publiques autorisées sont stockées dans
|
||
@file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
|
||
version 2.
|
||
|
||
@item @code{x11-forwarding?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, le transfert de connexion du client graphique
|
||
X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
|
||
de @command{ssh} fonctionneront.
|
||
|
||
@item @code{allow-agent-forwarding?} (par défaut : @code{#t})
|
||
Indique s'il faut autoriser la redirection d'agent.
|
||
|
||
@item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
|
||
Indique s'il faut autoriser la redirection TCP.
|
||
|
||
@item @code{gateway-ports?} (par défaut : @code{#f})
|
||
Indique s'il faut autoriser les ports de passerelle.
|
||
|
||
@item @code{challenge-response-authentication?} (par défaut : @code{#f})
|
||
Specifies whether challenge response authentication is allowed (e.g.@: via
|
||
PAM).
|
||
|
||
@item @code{use-pam?} (par défaut : @code{#t})
|
||
Active l'interface avec le module d'authentification greffable, PAM. Si la
|
||
valeur est @code{#t}, cela activera l'authentification PAM avec
|
||
@code{challenge-response-authentication?} et
|
||
@code{password-authentication?}, en plus des modules de compte et de session
|
||
de PAM pour tous les types d'authentification.
|
||
|
||
Comme l'authentification par défi de PAM sert généralement un rôle
|
||
équivalent à l'authentification par mot de passe, vous devriez désactiver
|
||
soit @code{challenge-response-authentication?}, soit
|
||
@code{password-authentication?}.
|
||
|
||
@item @code{print-last-log?} (par défaut : @code{#t})
|
||
Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
|
||
connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
|
||
interactive.
|
||
|
||
@item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
|
||
Configures external subsystems (e.g.@: file transfer daemon).
|
||
|
||
C'est une liste de paires, composées chacune du nom du sous-système et d'une
|
||
commande (avec éventuellement des arguments) à exécuter à la demande du
|
||
sous-système.
|
||
|
||
La commande @command{internal-sftp} implémente un serveur SFTP dans le
|
||
processus. Autrement, on peut spécifier la commande @command{sftp-server} :
|
||
@example
|
||
(service openssh-service-type
|
||
(openssh-configuration
|
||
(subsystems
|
||
`(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
|
||
@end example
|
||
|
||
@item @code{accepted-environment} (par défaut : @code{'()})
|
||
Liste de chaînes de caractères qui décrivent les variables d'environnement
|
||
qui peuvent être exportées.
|
||
|
||
Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
|
||
@code{man sshd_config}.
|
||
|
||
Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
|
||
Elle est initialisée par les émulateurs de terminaux qui supportent les
|
||
couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
|
||
shell pour activer les couleurs sur la ligne de commande si cette variable
|
||
est initialisée.
|
||
|
||
@example
|
||
(service openssh-service-type
|
||
(openssh-configuration
|
||
(accepted-environment '("COLORTERM"))))
|
||
@end example
|
||
|
||
@item @code{authorized-keys} (par défaut : @code{'()})
|
||
@cindex clefs autorisées, SSH
|
||
@cindex SSH, clefs autorisées
|
||
C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
|
||
d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
|
||
représentent les clefs publiques SSH. Par exemple :
|
||
|
||
@example
|
||
(openssh-configuration
|
||
(authorized-keys
|
||
`(("rekado" ,(local-file "rekado.pub"))
|
||
("chris" ,(local-file "chris.pub"))
|
||
("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
|
||
@end example
|
||
|
||
@noindent
|
||
enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
|
||
@code{chris} et @code{root}.
|
||
|
||
Des clefs autorisées supplémentaires peuvent être spécifiées via
|
||
@code{service-extension}.
|
||
|
||
Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
|
||
@file{~/.ssh/authorized_keys}.
|
||
|
||
@item @code{log-level} (par défaut : @code{'info})
|
||
C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
|
||
@code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
|
||
Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
|
||
des noms de niveaux.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} dropbear-service [@var{config}]
|
||
Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
|
||
Dropbear} avec la configuration @var{config} donnée, un objet
|
||
@code{<dropbear-configuration>}.
|
||
|
||
Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
|
||
ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
|
||
|
||
@example
|
||
(dropbear-service (dropbear-configuration
|
||
(port-number 1234)))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} dropbear-configuration
|
||
Ce type de données représente la configuration d'un démon SSH Dropbear.
|
||
|
||
@table @asis
|
||
@item @code{dropbear} (par défaut : @var{dropbear})
|
||
Le paquet Dropbear à utiliser.
|
||
|
||
@item @code{port-number} (par défaut : 22)
|
||
Le port TCP sur lequel le démon attend des connexions entrantes.
|
||
|
||
@item @code{syslog-output?} (par défaut : @code{#t})
|
||
Indique s'il faut activer la sortie vers syslog.
|
||
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
|
||
Nom du fichier de PID du démon.
|
||
|
||
@item @code{root-login?} (par défaut : @code{#f})
|
||
Indique s'il faut autoriser les connexions en @code{root}.
|
||
|
||
@item @code{allow-empty-passwords?} (par défaut : @code{#f})
|
||
Indique s'il faut autoriser les mots de passes vides.
|
||
|
||
@item @code{password-authentication?} (par défaut : @code{#t})
|
||
Indique s'il faut autoriser l'authentification par mot de passe.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %facebook-host-aliases
|
||
Cette variable contient une chaîne de caractères à utiliser dans
|
||
@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
|
||
Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
|
||
des serveurs connus du service en ligne Facebook — p.@: ex.@:
|
||
@code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
|
||
équivalent en IPv6, @code{::1}.
|
||
|
||
Cette variable est typiquement utilisée dans le champ @code{hosts-file}
|
||
d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
|
||
|
||
@example
|
||
(use-modules (gnu) (guix))
|
||
|
||
(operating-system
|
||
(host-name "mamachine")
|
||
;; ...
|
||
(hosts-file
|
||
;; Crée un fichier /etc/hosts avec des alias pour « localhost »
|
||
;; et « mamachine », ainsi que pour les serveurs de Facebook.
|
||
(plain-file "hosts"
|
||
(string-append (local-host-aliases host-name)
|
||
%facebook-host-aliases))))
|
||
@end example
|
||
|
||
Ce mécanisme peut éviter que des programmes qui tournent localement, comme
|
||
des navigateurs Web, ne se connectent à Facebook.
|
||
@end defvr
|
||
|
||
Le module @code{(gnu services avahi)} fourni la définition suivante.
|
||
|
||
@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
|
||
|
||
@deffn {Variable Scheme} openvswitch-service-type
|
||
C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
|
||
dont la valeur devrait être un objet @code{openvswitch-configuration}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} openvswitch-configuration
|
||
Type de données représentant la configuration de Open vSwitch, un
|
||
commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
|
||
massive des réseaux avec des extensions programmables.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{openvswitch})
|
||
Objet de paquet de Open vSwitch.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Système de fenêtrage X
|
||
@subsubsection Système de fenêtrage X
|
||
|
||
@cindex X11
|
||
@cindex Système de fenêtrage X
|
||
@cindex gestionnaire de connexion
|
||
Le support pour le système d'affichage graphique X Window — en particulier
|
||
Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
|
||
qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
|
||
est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
|
||
|
||
@cindex gestionnaire de fenêtre
|
||
Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
|
||
fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
|
||
préférence en l'ajoutant au champ @code{packages} de votre définition de
|
||
système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
|
||
packages}).
|
||
|
||
@defvr {Variable Scheme} slim-service-type
|
||
C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
|
||
|
||
@cindex types de sessions (X11)
|
||
@cindex X11, types de sessions
|
||
SLiM cherche des @dfn{types de sessions} définies par les fichiers
|
||
@file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
|
||
permet aux utilisateurs de choisir une session depuis l'écran de connexion
|
||
avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
|
||
@code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
|
||
l'ensemble des paquets du système les rendra automatiquement disponibles sur
|
||
l'écran de connexion.
|
||
|
||
En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
|
||
disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
|
||
un gestionnaire de fenêtre au un autre client X.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} slim-configuration
|
||
Type de données représentant la configuration de @code{slim-service-type}.
|
||
|
||
@table @asis
|
||
@item @code{allow-empty-passwords?} (par défaut : @code{#t})
|
||
S'il faut autoriser les connexions avec un mot de passe vide.
|
||
|
||
@item @code{auto-login?} (par défaut : @code{#f})
|
||
@itemx @code{default-user} (par défaut : @code{""})
|
||
Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
|
||
|
||
Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
|
||
que @code{default-user}.
|
||
|
||
@item @code{theme} (par défaut : @code{%default-slim-theme})
|
||
@itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
|
||
Le thème graphique à utiliser et son nom.
|
||
|
||
@item @code{auto-login-session} (par défaut : @code{#f})
|
||
Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
|
||
comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
|
||
"/bin/windowmaker")}.
|
||
|
||
Si la valeur est fausse, une session décrite par l'un des fichiers
|
||
@file{.desktop} disponibles dans @code{/run/current-system/profile} et
|
||
@code{~/.guix-profile} sera utilisée.
|
||
|
||
@quotation Remarque
|
||
Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
|
||
système ou dans votre profil utilisateur. Sinon, si
|
||
@code{auto-login-session} est faux, vous ne serez jamais capable de vous
|
||
connecter.
|
||
@end quotation
|
||
|
||
@item @code{startx} (par défaut : @code{(xorg-start-command)})
|
||
La commande utilisée pour démarrer le serveur graphique X11.
|
||
|
||
@item @code{xauth} (par défaut : @code{xauth})
|
||
Le paquet XAuth à utiliser.
|
||
|
||
@item @code{shepherd} (par défaut : @code{shepherd})
|
||
Le paquet Shepherd à utiliser pour invoquer @command{halt} et
|
||
@command{reboot}.
|
||
|
||
@item @code{sessreg} (par défaut : @code{sessreg})
|
||
Le paquet sessreg à utiliser pour enregistrer la session.
|
||
|
||
@item @code{slim} (par défaut : @code{slim})
|
||
Le paquet SLiM à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} %default-theme
|
||
@defvrx {Variable Scheme} %default-theme-name
|
||
Le thème SLiM par défaut et son nom.
|
||
@end defvr
|
||
|
||
|
||
@deftp {Type de données} sddm-configuration
|
||
C'est le type de données représentant la configuration du service sddm.
|
||
|
||
@table @asis
|
||
@item @code{display-server} (par défaut : "x11")
|
||
Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
|
||
valeurs valides sont « x11 » et « wayland ».
|
||
|
||
@item @code{numlock} (par défaut : "on")
|
||
Les valeurs valides sont « on », « off » ou « none ».
|
||
|
||
@item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
|
||
La commande à lancer à l'arrêt du système.
|
||
|
||
@item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
|
||
La commande à lancer lors du redémarrage du système.
|
||
|
||
@item @code{theme} (par défaut : "maldives")
|
||
Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
|
||
et « maldives ».
|
||
|
||
@item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
|
||
Le répertoire où se trouvent les thèmes.
|
||
|
||
@item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
|
||
Répertoire où se trouvent les avatars.
|
||
|
||
@item @code{default-path} (par défaut : "/run/current-system/profile/bin")
|
||
Le PATH par défaut à utiliser.
|
||
|
||
@item @code{minimum-uid} (par défaut : 1000)
|
||
UID minimum pour être affiché dans SDDM.
|
||
|
||
@item @code{maximum-uid} (par défaut : 2000)
|
||
UID maximum pour être affiché dans SDDM.
|
||
|
||
@item @code{remember-last-user?} (par défaut : #t)
|
||
S'il faut se rappeler le dernier utilisateur connecté.
|
||
|
||
@item @code{remember-last-session?} (par défaut : #t)
|
||
S'il faut se rappeler la dernière session.
|
||
|
||
@item @code{hide-users} (par défaut : "")
|
||
Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
|
||
|
||
@item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
|
||
Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
|
||
de SDDM.
|
||
|
||
@item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
|
||
Le script à lancer avant de démarrer une session wayland.
|
||
|
||
@item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
|
||
Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
|
||
wayland.
|
||
|
||
@item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
|
||
Chemin vers xorg-server.
|
||
|
||
@item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
|
||
Chemin vers xauth.
|
||
|
||
@item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
|
||
Chemin vers Xephyr.
|
||
|
||
@item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
|
||
Le script à lancer après avoir démarré xorg-server.
|
||
|
||
@item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
|
||
Le script à lancer avant d'arrêter xorg-server.
|
||
|
||
@item @code{xsession-command} (par défaut : @code{xinitrc})
|
||
Le script à lancer avant de démarrer une session X.
|
||
|
||
@item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
|
||
Répertoire où trouver les fichiers .desktop pour les sessions X.
|
||
|
||
@item @code{minimum-vt} (par défaut : 7)
|
||
VT minimal à utiliser.
|
||
|
||
@item @code{xserver-arguments} (par défaut : "-nolisten tcp")
|
||
Arguments à passer à xorg-server.
|
||
|
||
@item @code{auto-login-user} (par défaut : "")
|
||
Utilisateur à utiliser pour la connexion automatique.
|
||
|
||
@item @code{auto-login-session} (par défaut : "")
|
||
Le fichier desktop à utiliser pour la connexion automatique.
|
||
|
||
@item @code{relogin?} (par défaut : #f)
|
||
S'il faut se reconnecter après la déconnexion.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex gestionnaire de connexion
|
||
@cindex connexion X11
|
||
@deffn {Procédure Scheme} sddm-service config
|
||
Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
|
||
avec une configuration de type @code{<sddm-configuration>}.
|
||
|
||
@example
|
||
(sddm-service (sddm-configuration
|
||
(auto-login-user "Alice")
|
||
(auto-login-session "xfce.desktop")))
|
||
@end example
|
||
@end deffn
|
||
|
||
@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}.
|
||
|
||
Habituellement le serveur X est démarré par un gestionnaire de connexion.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} xorg-configuration-file @
|
||
[#:modules %default-xorg-modules] @
|
||
[#:fonts %default-xorg-fonts] @
|
||
[#:drivers '()] [#:resolutions '()] [#:extra-config '()]
|
||
Renvoie un fichier de configuration pour le serveur Xorg qui contient des
|
||
chemins de recherche pour tous les pilotes communs.
|
||
|
||
@var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
|
||
serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
|
||
etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
|
||
@dfn{chemin de polices} du serveur.
|
||
|
||
@var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
|
||
pilote graphique automatiquement, soit une liste de noms de pilotes qui
|
||
seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
|
||
|
||
De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
|
||
résolution d'écran appropriée ; autrement, ce doit être une liste de
|
||
résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
|
||
|
||
Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
|
||
ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
|
||
supplémentaire à être ajouté directement au fichier de configuration.
|
||
|
||
@cindex disposition clavier
|
||
@cindex disposition du clavier
|
||
Cette procédure est particulièrement utile pour configurer une disposition
|
||
de clavier différente de la disposition US par défaut. Par exemple, pour
|
||
utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
|
||
:
|
||
|
||
@example
|
||
(define bepo-evdev
|
||
"Section \"InputClass\"
|
||
Identifier \"evdev keyboard catchall\"
|
||
Driver \"evdev\"
|
||
MatchIsKeyboard \"on\"
|
||
Option \"xkb_layout\" \"fr\"
|
||
Option \"xkb_variant\" \"bepo\"
|
||
EndSection")
|
||
|
||
(operating-system
|
||
...
|
||
(services
|
||
(modify-services %desktop-services
|
||
(slim-service-type config =>
|
||
(slim-configuration
|
||
(inherit config)
|
||
(startx (xorg-start-command
|
||
#:configuration-file
|
||
(xorg-configuration-file
|
||
#:extra-config
|
||
(list bepo-evdev)))))))))
|
||
@end example
|
||
|
||
La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
|
||
configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
|
||
comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
|
||
seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
|
||
utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
|
||
disposition de clavier préférée une fois connecté. Le premier argument
|
||
correspond à la disposition, tandis que le second argument correspond à la
|
||
variante. La ligne @code{xkb_variant} peut être omise pour choisir la
|
||
variante par défaut.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
|
||
Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
|
||
économiseur d'écran dont la commande est @var{program}, à l'ensemble des
|
||
programmes setuid et lui ajoute une entrée PAM. Par exemple :
|
||
|
||
@lisp
|
||
(screen-locker-service xlockmore "xlock")
|
||
@end lisp
|
||
|
||
rend utilisable le bon vieux XlockMore.
|
||
@end deffn
|
||
|
||
|
||
@node Services d'impression
|
||
@subsubsection 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 :
|
||
|
||
@deffn {Variable Scheme} cups-service-type
|
||
Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
|
||
être une configuration CUPS valide (voir plus bas). Pour utiliser les
|
||
paramètres par défaut, écrivez simplement :
|
||
@example
|
||
(service cups-service-type)
|
||
@end example
|
||
@end deffn
|
||
|
||
La configuration de CUPS contrôle les paramètres de base de votre
|
||
installation CUPS : sur quelles interfaces il doit écouter, que faire si un
|
||
travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
|
||
une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
|
||
utiliser un outil comme les services de configuration d'imprimante de
|
||
GNOME. Par défaut, la configuration du service CUPS générera un certificat
|
||
auto-signé si besoin, pour les connexions sécurisée avec le serveur
|
||
d'impression.
|
||
|
||
Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
|
||
support pour les imprimantes Epson via le paquet @code{escpr} et our les
|
||
imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
|
||
directement, comme ceci (vous devez utiliser le module @code{(gnu packages
|
||
cups)}) :
|
||
|
||
@example
|
||
(service cups-service-type
|
||
(cups-configuration
|
||
(web-interface? #t)
|
||
(extensions
|
||
(list cups-filters escpr hplip-minimal))))
|
||
@end example
|
||
|
||
Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
|
||
paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
|
||
dans votre configuration d'OS, soit en tant qu'utilisateur.
|
||
|
||
Les paramètres de configuration disponibles sont les suivants. Chaque
|
||
définition des paramètres est précédé par son type ; par exemple,
|
||
@samp{string-list foo} indique que le paramètre @code{foo} devrait être
|
||
spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
|
||
de spécifier la configuration comme une chaîne de caractères, si vous avez
|
||
un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
|
||
système ; voir la fin pour plus de détails.
|
||
|
||
@c The following documentation was initially generated by
|
||
@c (generate-documentation) in (gnu services cups). Manually maintained
|
||
@c documentation is better, so we shouldn't hesitate to edit below as
|
||
@c needed. However if the change you want to make to this documentation
|
||
@c can be done in an automated way, it's probably easier to change
|
||
@c (generate-documentation) than to make it below and have to deal with
|
||
@c the churn as CUPS updates.
|
||
|
||
|
||
Les champs de @code{cups-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} package cups
|
||
Le paquet CUPS.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} package-list extensions
|
||
Pilotes et autres extensions du paquet CUPS.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
|
||
Configuration de l'emplacement où écrire les journaux, quels répertoires
|
||
utiliser pour les travaux d'impression et les paramètres de configuration
|
||
privilégiés liés.
|
||
|
||
Les champs @code{files-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} log-location access-log
|
||
Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
|
||
désactive la génération de journaux d'accès. La valeur @code{stderr} fait
|
||
que les entrées du journal seront envoyés sur l'erreur standard lorsque
|
||
l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
|
||
lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
|
||
entrées du journal sont envoyées au démon de journalisation du système. Le
|
||
nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
|
||
@code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
|
||
|
||
La valeur par défaut est @samp{"/var/log/cups/access_log"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
|
||
L'emplacement où CUPS devrait mettre les données en cache.
|
||
|
||
La valeur par défaut est @samp{"/var/cache/cups"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string config-file-perm
|
||
Spécifie les permissions pour tous les fichiers de configuration que
|
||
l'ordonnanceur écrit.
|
||
|
||
Remarquez que les permissions pour le fichier printers.conf sont
|
||
actuellement masqués pour ne permettre que l'accès par l'utilisateur de
|
||
l'ordonnanceur (typiquement root). La raison est que les URI des
|
||
imprimantes contiennent des informations d'authentification sensibles qui ne
|
||
devraient pas être connues sur le système. Il n'est pas possible de
|
||
désactiver cette fonctionnalité de sécurité.
|
||
|
||
La valeur par défaut est @samp{"0640"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} log-location error-log
|
||
Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
|
||
désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
|
||
que les entrées du journal seront envoyés sur l'erreur standard lorsque
|
||
l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
|
||
lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
|
||
entrées du journal sont envoyées au démon de journalisation du système. Le
|
||
nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
|
||
@code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
|
||
|
||
La valeur par défaut est @samp{"/var/log/cups/error_log"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string fatal-errors
|
||
Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
|
||
Les types de chaînes sont :
|
||
|
||
@table @code
|
||
@item none
|
||
Aucune erreur n'est fatale.
|
||
|
||
@item all
|
||
Toutes les erreurs ci-dessous sont fatales.
|
||
|
||
@item browse
|
||
Les erreurs d'initialisation de la navigation sont fatales, par exemple les
|
||
connexion échouées au démon DNS-SD.
|
||
|
||
@item config
|
||
Les erreurs de syntaxe du fichier de configuration sont fatale.
|
||
|
||
@item listen
|
||
Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
|
||
sur la boucle locale ou les adresses @code{any}.
|
||
|
||
@item log
|
||
Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
|
||
|
||
@item permissions
|
||
Les mauvaises permissions des fichiers de démarrage sont fatales, par
|
||
exemple un certificat TLS et des fichiers de clefs avec des permissions
|
||
permettant la lecture à tout le monde.
|
||
@end table
|
||
|
||
La valeur par défaut est @samp{"all -browse"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} boolean file-device?
|
||
Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
|
||
nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
|
||
permise.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string group
|
||
Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
|
||
programmes externes.
|
||
|
||
La valeur par défaut est @samp{"lp"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string log-file-perm
|
||
Spécifie les permissions pour tous les fichiers de journal que
|
||
l'ordonnanceur écrit.
|
||
|
||
La valeur par défaut est @samp{"0644"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} log-location page-log
|
||
Définit le fichier de journal de page. Spécifier un nom de fichier vide
|
||
désactive la génération de journaux de pages. La valeur @code{stderr} fait
|
||
que les entrées du journal seront envoyés sur l'erreur standard lorsque
|
||
l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
|
||
lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
|
||
entrées du journal sont envoyées au démon de journalisation du système. Le
|
||
nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
|
||
@code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
|
||
|
||
La valeur par défaut est @samp{"/var/log/cups/page_log"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string remote-root
|
||
Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
|
||
clients qui se disent être l'utilisateur root. La valeur par défaut est
|
||
@code{remroot}.
|
||
|
||
La valeur par défaut est @samp{"remroot"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} file-name request-root
|
||
Spécifie le répertoire qui contient les travaux d'impression et d'autres
|
||
données des requêtes HTTP.
|
||
|
||
La valeur par défaut est @samp{"/var/spool/cups"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
|
||
Spécifie le niveau d'isolation de sécurité appliqué aux filtres
|
||
d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
|
||
soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
|
||
utilisée et supportée que sur macOS.
|
||
|
||
La valeur par défaut est @samp{strict}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
|
||
Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
|
||
cherchera les clefs publiques et privées dans ce répertoire : un fichier
|
||
@code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
|
||
correspondant pour la clef privée encodée en PEM.
|
||
|
||
La valeur par défaut est @samp{"/etc/cups/ssl"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} file-name server-root
|
||
Spécifie le répertoire contenant les fichiers de configuration du serveur.
|
||
|
||
La valeur par défaut est @samp{"/etc/cups"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
|
||
Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
|
||
configuration ou les fichiers d'état.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
|
||
Spécifie le groupe ou les groupes à utiliser pour l'authentification du
|
||
groupe @code{@@SYSTEM}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
|
||
Spécifie le répertoire où les fichiers temporaires sont stockés.
|
||
|
||
La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{files-configuration}} string user
|
||
Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
|
||
externes.
|
||
|
||
La valeur par défaut est @samp{"lp"}.
|
||
@end deftypevr
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
|
||
Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
|
||
@code{config} enregistre les ajouts, suppressions et modifications
|
||
d'imprimantes et de classes et lorsque les fichiers de configuration sont
|
||
accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
|
||
la suspension, la libération, la modification et l'annulation des travaux et
|
||
toutes les conditions de @code{config}. Le niveau @code{all} enregistre
|
||
toutes les requêtes.
|
||
|
||
La valeur par défaut est @samp{actions}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
|
||
Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
|
||
n'est plus nécessaire pour les quotas.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
|
||
Spécifie les protocoles à utiliser pour partager les imprimantes sur le
|
||
réseau local.
|
||
|
||
La valeur par défaut est @samp{dnssd}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
|
||
Spécifie si l'interface web de CUPS est publiée.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
|
||
Spécifie si les imprimantes partagées sont publiées.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string classification
|
||
Spécifie la classification de sécurité du serveur. N'importe quel nom de
|
||
bannière peut être utilisé, comme « classifié », « confidentiel », « secret
|
||
», « top secret » et « déclassifié » ou la bannière peut être omise pour
|
||
désactiver les fonctions d'impression sécurisées.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
|
||
Spécifie si les utilisateurs peuvent remplacer la classification (page de
|
||
couverture) des travaux d'impression individuels avec l'option
|
||
@code{job-sheets}.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
|
||
Spécifie le type d'authentification par défaut à utiliser.
|
||
|
||
La valeur par défaut est @samp{Basic}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
|
||
Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
|
||
|
||
La valeur par défaut est @samp{Required}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string default-language
|
||
Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
|
||
|
||
La valeur par défaut est @samp{"en"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
|
||
Spécifie la taille de papier par défaut pour les nouvelles queues
|
||
d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
|
||
régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
|
||
par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
|
||
et @samp{"A4"}.
|
||
|
||
La valeur par défaut est @samp{"Auto"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string default-policy
|
||
Spécifie la politique d'accès par défaut à utiliser.
|
||
|
||
La valeur par défaut est @samp{"default"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
|
||
Spécifie si les imprimantes locales sont partagées par défaut.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
|
||
Spécifie le délai pour mettre à jour les fichiers de configuration et
|
||
d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
|
||
possible, typiquement en quelques millisecondes.
|
||
|
||
La valeur par défaut est @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
|
||
Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
|
||
sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
|
||
@code{retry-job}, qui tentera de nouveau l'impression plus tard ;
|
||
@code{retry-this-job}, qui retentera l'impression immédiatement ; et
|
||
@code{stop-printer} qui arrête l'imprimante.
|
||
|
||
La valeur par défaut est @samp{stop-printer}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
|
||
Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
|
||
minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
|
||
limite de 0 désactive la limite de filtrage. Une impression standard vers
|
||
une imprimante non-PostScript requirt une limite de filtre d'environ 200.
|
||
Une imprimante PostScript requiert environ la moitié (100). Mettre en place
|
||
la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
|
||
travail d'impression à la fois.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
|
||
Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
|
||
imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
|
||
plus basse priorité.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
|
||
Spécifie s'il faut faire des résolutions inverses sur les clients qui se
|
||
connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
|
||
nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
|
||
par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
|
||
avec des adresses non enregistrées ne s'adressent à votre serveur.
|
||
N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
|
||
absolument nécessaire.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
|
||
Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
|
||
moteurs associés avec un travail annulé ou suspendu.
|
||
|
||
La valeur par défaut est @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
|
||
Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
|
||
typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
|
||
des queues d'impressions normales dont la politique d'erreur est
|
||
@code{retry-job} ou @code{retry-current-job}.
|
||
|
||
La valeur par défaut est @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
|
||
Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
|
||
typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
|
||
les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
|
||
@code{retry-current-job}.
|
||
|
||
La valeur par défaut est @samp{5}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
|
||
Spécifie s'il faut supporter les connexion HTTP keep-alive.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
|
||
Spécifie combien de temps les connexions inactives avec les clients restent
|
||
ouvertes, en secondes.
|
||
|
||
La valeur par défaut est @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
|
||
Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
|
||
données de formulaires HTML. Une limite de 0 désactive la vérification de
|
||
la limite.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
|
||
Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
|
||
@var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
|
||
des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
|
||
adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
|
||
UNIX domain. La directive Listen est similaire à la directive Port mais
|
||
vous permet de restreindre l'accès à des interfaces ou des réseaux
|
||
spécifiques.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
|
||
Spécifie le nombre de connexions en attente qui seront permises. Ça
|
||
n'affecte normalement que les serveurs très actifs qui ont atteint la limite
|
||
MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
|
||
simultanées. Lorsque la limite est atteinte, le système d'exploitation
|
||
refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
|
||
accepte les connexions en attente.
|
||
|
||
La valeur par défaut est @samp{128}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
|
||
Spécifie un ensemble de contrôles d'accès supplémentaires.
|
||
|
||
Les champs de @code{location-access-controls} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{location-access-controls}} file-name path
|
||
Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
|
||
Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
|
||
que le champ @code{access-controls} de @code{operation-access-control}.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
|
||
Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
Les champs de @code{method-access-controls} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
|
||
Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
|
||
méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
|
||
aux méthodes listées.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{method-access-controls}} method-list methods
|
||
Les méthodes auxquelles ce contrôle d'accès s'applique.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
|
||
Directives de contrôle d'accès, comme une liste de chaînes de caractères.
|
||
Chaque chaîne devrait être une directive, comme « Order allow, deny ».
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
@end deftypevr
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
|
||
Spécifie le nombre de messages de débogage qui sont retenu pour la
|
||
journalisation si une erreur arrive dans un travail d'impression. Les
|
||
messages de débogage sont journalisés indépendamment du paramètre LogLevel.
|
||
|
||
La valeur par défaut est @samp{100}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} log-level log-level
|
||
Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
|
||
@code{none} arrête toute journalisation alors que que @code{debug2}
|
||
enregistre tout.
|
||
|
||
La valeur par défaut est @samp{info}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
|
||
Spécifie le format de la date et de l'heure dans les fichiers de journaux.
|
||
La valeur @code{standard} enregistre les secondes entières alors que
|
||
@code{usecs} enregistre les microsecondes.
|
||
|
||
La valeur par défaut est @samp{standard}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
|
||
Spécifie le nombre maximum de clients simultanés qui sont autorisés par
|
||
l'ordonnanceur.
|
||
|
||
La valeur par défaut est @samp{100}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
|
||
Spécifie le nombre maximum de clients simultanés permis depuis une même
|
||
adresse.
|
||
|
||
La valeur par défaut est @samp{100}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
|
||
Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
|
||
chaque travail.
|
||
|
||
La valeur par défaut est @samp{9999}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
|
||
Spécifie la durée maximum qu'un travail peut rester dans l'état de
|
||
suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
|
||
désactive l'annulation des travaux suspendus.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
|
||
Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
|
||
permet un nombre illimité de travaux.
|
||
|
||
La valeur par défaut est @samp{500}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
|
||
Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
|
||
La valeur 0 permet au plus MaxJobs travaux par imprimante.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
|
||
Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
|
||
valeur 0 permet au plus MaxJobs travaux par utilisateur.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
|
||
Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
|
||
annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
|
||
coincés ».
|
||
|
||
La valeur par défaut est @samp{10800}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
|
||
Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
|
||
fasse tourner, en octets. La valeur 0 désactive la rotation.
|
||
|
||
La valeur par défaut est @samp{1048576}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
|
||
Spécifie la durée maximale à permettre entre les fichiers d'un travail en
|
||
contenant plusieurs, en secondes.
|
||
|
||
La valeur par défaut est @samp{300}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string page-log-format
|
||
Spécifie le format des lignes PageLog. Les séquences qui commencent par un
|
||
pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
|
||
que les autres caractères sont copiés littéralement. Les séquences pourcent
|
||
suivantes sont reconnues :
|
||
|
||
@table @samp
|
||
@item %%
|
||
insère un seul caractères pourcent
|
||
|
||
@item %@{name@}
|
||
insère la valeur de l'attribut IPP spécifié
|
||
|
||
@item %C
|
||
insère le nombre de copies pour la page actuelle
|
||
|
||
@item %P
|
||
insère le numéro de page actuelle
|
||
|
||
@item %T
|
||
insère la date et l'heure actuelle dans un format de journal commun
|
||
|
||
@item %j
|
||
insère l'ID du travail
|
||
|
||
@item %p
|
||
insère le nom de l'imprimante
|
||
|
||
@item %u
|
||
insère le nom d'utilisateur
|
||
@end table
|
||
|
||
Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
|
||
@code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
|
||
%@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
|
||
standards.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
|
||
Passe les variables d'environnement spécifiées aux processus fils ; une
|
||
liste de chaînes de caractères.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
|
||
Spécifie des politiques de contrôle d'accès nommées.
|
||
|
||
Les champs de @code{policy-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} string name
|
||
Nom de la politique.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} string job-private-access
|
||
Spécifie une liste d'accès pour les valeurs privées du travail.
|
||
@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
|
||
requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
|
||
propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
|
||
le champ @code{system-group} de la configuration @code{files-config}, qui
|
||
est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
|
||
possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
|
||
@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
|
||
liste d'accès peut aussi être simplement @code{all} ou @code{default}.
|
||
|
||
La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} string job-private-values
|
||
Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
|
||
@code{default}, ou @code{none}.
|
||
|
||
La valeur par défaut est @samp{"job-name job-originating-host-name
|
||
job-originating-user-name phone"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
|
||
Spécifie un liste d'accès pour les valeurs privées de la souscription.
|
||
@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
|
||
requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
|
||
propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
|
||
le champ @code{system-group} de la configuration @code{files-config}, qui
|
||
est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
|
||
possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
|
||
@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
|
||
liste d'accès peut aussi être simplement @code{all} ou @code{default}.
|
||
|
||
La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
|
||
Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
|
||
@code{default}, ou @code{none}.
|
||
|
||
La valeur par défaut est @samp{"notify-events notify-pull-method
|
||
notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
|
||
Contrôle d'accès par les actions IPP.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
|
||
Spécifie si les fichiers de travaux (les documents) sont préservés après
|
||
qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
|
||
fichiers de travaux sont préservés pour le nombre de secondes indiquées
|
||
après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
|
||
|
||
La valeur par défaut est @samp{86400}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
|
||
Spécifie si l'historique des travaux est préservé après qu'un travail est
|
||
imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
|
||
est préservé pour le nombre de secondes indiquées après l'impression. Si la
|
||
valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
|
||
atteindre la limite MaxJobs.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
|
||
Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
|
||
l'ordonnanceur.
|
||
|
||
La valeur par défaut est @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string rip-cache
|
||
Spécifie la quantité de mémoire maximale à utiliser pour convertir des
|
||
documents en bitmaps pour l'imprimante.
|
||
|
||
La valeur par défaut est @samp{"128m"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string server-admin
|
||
Spécifie l'adresse de courriel de l'administrateur système.
|
||
|
||
La valeur par défaut est @samp{"root@@localhost.localdomain"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
|
||
La directive ServerAlias est utilisée pour la validation des en-tête HTTP
|
||
Host lorsque les clients se connectent à l'ordonnanceur depuis des
|
||
interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
|
||
système à des attaques connues de recombinaison DNS dans le navigateur, même
|
||
lorsque vous accédez au site à travers un pare-feu. Si la découverte
|
||
automatique des autres noms ne fonctionne pas, nous vous recommandons de
|
||
lister chaque nom alternatif avec une directive SeverAlias plutôt que
|
||
d'utiliser @code{*}.
|
||
|
||
La valeur par défaut est @samp{*}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string server-name
|
||
Spécifie le nom d'hôte pleinement qualifié du serveur.
|
||
|
||
La valeur par défaut est @samp{"localhost"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
|
||
Spécifie les informations incluses dans les en-têtes Server des réponses
|
||
HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
|
||
@code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
|
||
@code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
|
||
rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
|
||
commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
|
||
IPP/2.0}.
|
||
|
||
La valeur par défaut est @samp{Minimal}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} string set-env
|
||
Indique que la variable d'environnement spécifiée doit être passée aux
|
||
processus fils.
|
||
|
||
La valeur par défaut est @samp{"variable value"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
|
||
Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
|
||
valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
|
||
une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
|
||
pour indiquer toutes les interfaces.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
|
||
Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
|
||
chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
|
||
être sures. L'option @code{AllowRC4} active les suites de chiffrement
|
||
128-bits RC4, qui sont requises pour certains vieux clients qui
|
||
n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
|
||
v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
|
||
v1.0.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
|
||
Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
|
||
IPP.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
|
||
Spécifie le délai d'attente des requêtes HTTP, en secondes.
|
||
|
||
La valeur par défaut est @samp{300}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
|
||
Spécifie si l'interface web est activée.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
|
||
t'aime bien mais arrête maintenant avec ces options de configuration
|
||
»@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
|
||
traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
|
||
effet. cependant, encore un point supplémentaire : vous pouvez avoir un
|
||
fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
|
||
ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
|
||
configuration d'un @code{cups-service-type}.
|
||
|
||
Les champs de @code{opaque-cups-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
|
||
Le paquet CUPS.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
|
||
Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
|
||
Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
|
||
caractères.
|
||
@end deftypevr
|
||
|
||
Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
|
||
sont dans des chaînes du même nom, pouvez instancier un service CUPS de
|
||
cette manière :
|
||
|
||
@example
|
||
(service cups-service-type
|
||
(opaque-cups-configuration
|
||
(cupsd.conf cupsd.conf)
|
||
(cups-files.conf cups-files.conf)))
|
||
@end example
|
||
|
||
|
||
@node Services de bureaux
|
||
@subsubsection Services de bureaux
|
||
|
||
Le module @code{(gnu services desktop)} fournit des services qui sont
|
||
habituellement utiles dans le contexte d'une installation « de bureau » —
|
||
c'est-à-dire sur une machine qui fait tourner un service d'affichage
|
||
graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
|
||
Il définit aussi des services qui fournissent des environnements de bureau
|
||
spécifiques comme GNOME, XFCE et MATE.
|
||
|
||
Pour simplifier les choses, le module définit une variable contenant
|
||
l'ensemble des services que les utilisateurs s'attendent en général à avoir
|
||
sur une machine avec un environnement graphique et le réseau :
|
||
|
||
@defvr {Variable Scheme} %desktop-services
|
||
C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
|
||
ajustant des services pour une configuration « de bureau » typique.
|
||
|
||
En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{slim-service}}), des verrouilleurs d'écran, un outil de
|
||
gestion réseau (@pxref{Services réseau,
|
||
@code{network-manager-service-type}}), des services de gestion de l'énergie
|
||
et des couleurs, le gestionnaire de connexion et de session @code{elogind},
|
||
le service de privilèges Polkit, le service de géolocalisation GeoClue, le
|
||
démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
|
||
mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
|
||
et le service name service switch est configuré pour pouvoir utiliser
|
||
@code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
|
||
@end defvr
|
||
|
||
La variable @var{%desktop-services} peut être utilisée comme champ
|
||
@code{services} d'une déclaration @code{operating-system}
|
||
(@pxref{Référence de système d'exploitation, @code{services}}).
|
||
|
||
En plus, les procédures @code{gnome-desktop-service},
|
||
@code{xfce-desktop-service}, @code{mate-desktop-service} et
|
||
@code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
|
||
ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
|
||
du système comme les utilitaires d'ajustement de la luminosité et de gestion
|
||
de l'énergie sont ajoutés au système, en étendant @code{polkit} et
|
||
@code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
|
||
privilèges plus élevés sur un nombre limité d'interfaces systèmes
|
||
spécialisées. En plus, ajouter un service construit par
|
||
@code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
|
||
système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
|
||
au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
|
||
d'ouvrir une fenêtre de gestion des fichier « en mode root », si
|
||
l'utilisateur s'authentifie avec le mot de passe administrateur via
|
||
l'interface graphique polkit standard. « Ajouter MATE » signifie que
|
||
@code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
|
||
à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
|
||
d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
|
||
@code{dbus} est étendu comme il faut et que plusieurs binaires
|
||
d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
|
||
d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
|
||
correctement.
|
||
|
||
Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
|
||
par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
|
||
récent Wayland, vous devez utiliser @code{sddm-service} à la place de
|
||
@code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
|
||
ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
|
||
vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
|
||
avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
|
||
gnome-session}. Actuellement seul GNOME support Wayland.
|
||
|
||
@deffn {Procédure Scheme} gnome-desktop-service
|
||
Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
|
||
étend polkit avec des actions de @code{gnome-settings-daemon}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} xfce-desktop-service
|
||
Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
|
||
étend polkit avec la capacité pour @code{thunar} de manipuler le système de
|
||
fichier en tant que root depuis une session utilisateur, après que
|
||
l'utilisateur s'est authentifié avec le mot de passe administrateur.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} mate-desktop-service
|
||
Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
|
||
étend polkit avec les actions de @code{mate-settings-daemon}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} enlightenment-desktop-service-type
|
||
Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
|
||
avec les actions de @code{efl}
|
||
@end deffn
|
||
|
||
@deftp {Type de données} enlightenment-desktop-service-configuration
|
||
@table @asis
|
||
@item @code{enlightenment} (par défaut : @code{enlightenment})
|
||
Le paquet enlightenment à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
|
||
la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
|
||
Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
|
||
@code{%desktop-services} dans le champ @code{services} de votre
|
||
@code{operating-system}.
|
||
|
||
@example
|
||
(use-modules (gnu))
|
||
(use-service-modules desktop)
|
||
(operating-system
|
||
...
|
||
;; cons* ajoute les élément à la liste donnée en dernier argument
|
||
(services (cons* (gnome-desktop-service)
|
||
(xfce-desktop-service)
|
||
%desktop-services))
|
||
...)
|
||
@end example
|
||
|
||
Ces environnements de bureau seront alors disponibles comme une option dans
|
||
la fenêtre de connexion graphique.
|
||
|
||
Les définitions de service qui sont vraiment incluses dans
|
||
@code{%desktop-services} et fournies par @code{(gnu services dbus)} et
|
||
@code{(gnu services desktop)} sont décrites plus bas.
|
||
|
||
@deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
|
||
Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
|
||
de @var{services}.
|
||
|
||
@uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
|
||
communication inter-processus. Son bus système est utilisé pour permettre à
|
||
des services systèmes de communiquer et d'être notifiés d'événements
|
||
systèmes.
|
||
|
||
@var{services} doit être une liste de paquets qui fournissent un répertoire
|
||
@file{etc/dbus-1/system.d} contenant de la configuration D-Bus
|
||
supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
|
||
avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
|
||
@code{(list avahi)}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} elogind-service [#:config @var{config}]
|
||
Renvoie un service qui lance le démon de gestion de connexion et de session
|
||
@code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
|
||
une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
|
||
sont connectés, le type de session qu'ils sont ouverte, suspendre le
|
||
système, désactiver la veille système, redémarrer le système et d'autre
|
||
taches.
|
||
|
||
Elogind gère la plupart des événements liés à l'énergie du système, par
|
||
exemple mettre en veille le système quand l'écran est rabattu ou en
|
||
l'éteignant quand le bouton de démarrage est appuyé.
|
||
|
||
L'argument @var{config} spécifie la configuration d'elogind et devrait être
|
||
le résultat d'une invocation de @code{(elogind-configuration
|
||
(@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
|
||
valeur par défaut sont :
|
||
|
||
@table @code
|
||
@item kill-user-processes?
|
||
@code{#f}
|
||
@item kill-only-users
|
||
@code{()}
|
||
@item kill-exclude-users
|
||
@code{("root")}
|
||
@item inhibit-delay-max-seconds
|
||
@code{5}
|
||
@item handle-power-key
|
||
@code{poweroff}
|
||
@item handle-suspend-key
|
||
@code{suspend}
|
||
@item handle-hibernate-key
|
||
@code{hibernate}
|
||
@item handle-lid-switch
|
||
@code{suspend}
|
||
@item handle-lid-switch-docked
|
||
@code{ignore}
|
||
@item power-key-ignore-inhibited?
|
||
@code{#f}
|
||
@item suspend-key-ignore-inhibited?
|
||
@code{#f}
|
||
@item hibernate-key-ignore-inhibited?
|
||
@code{#f}
|
||
@item lid-switch-ignore-inhibited?
|
||
@code{#t}
|
||
@item holdoff-timeout-seconds
|
||
@code{30}
|
||
@item idle-action
|
||
@code{ignore}
|
||
@item idle-action-seconds
|
||
@code{(* 30 60)}
|
||
@item runtime-directory-size-percent
|
||
@code{10}
|
||
@item runtime-directory-size
|
||
@code{#f}
|
||
@item remove-ipc?
|
||
@code{#t}
|
||
@item suspend-state
|
||
@code{("mem" "standby" "freeze")}
|
||
@item suspend-mode
|
||
@code{()}
|
||
@item hibernate-state
|
||
@code{("disk")}
|
||
@item hibernate-mode
|
||
@code{("platform" "shutdown")}
|
||
@item hybrid-sleep-state
|
||
@code{("disk")}
|
||
@item hybrid-sleep-mode
|
||
@code{("suspend" "platform" "shutdown")}
|
||
@end table
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} accountsservice-service @
|
||
[#:accountsservice @var{accountsservice}]
|
||
Renvoie un service qui lance AccountsService, un service système qui peut
|
||
lister les comptes disponibles, changer leur mot de passe, etc.
|
||
AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
|
||
privilégiés de pouvoir modifier la configuration de leur système.
|
||
@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
|
||
accountsservice} pour trouver plus d'informations.
|
||
|
||
L'argument @var{accountsservice} est le paquet @code{accountsservice} à
|
||
exposer comme un service.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} polkit-service @
|
||
[#:polkit @var{polkit}]
|
||
Renvoie un service qui lance le
|
||
@uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
|
||
des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
|
||
l'accès à des opération privilégiées d'une manière structurée. En demandant
|
||
au service Polkit, un composant système privilégié peut savoir lorsqu'il
|
||
peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
|
||
exemple, un utilisateur normal peut obtenir le droit de mettre le système en
|
||
veille si l'utilisateur est connecté localement.
|
||
@end deffn
|
||
|
||
@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
|
||
|
||
@deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
|
||
Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
|
||
UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
|
||
et la capacité de monter et démonter des disques à des interfaces
|
||
utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
|
||
commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
|
||
Renvoie un service qui lance @command{colord}, un service système avec une
|
||
interface D-Bus pour gérer les profils de couleur des périphériques
|
||
d'entrées et de sorties comme les écrans et les scanners. Il est notamment
|
||
utilisé par l'outil graphique GNOME Color Manager. Voir
|
||
@uref{http://www.freedesktop.org/software/colord/, le site web de colord}
|
||
pour plus d'informations.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
|
||
Renvoie une configuration qui permet d'accéder aux données de localisation
|
||
de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
|
||
@code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
|
||
d'accéder aux informations de localisation par défaut. Le booléen
|
||
@var{system?} indique si une application est un composant système ou non.
|
||
Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
|
||
application a le droit d'accéder aux informations de géolocalisation. Une
|
||
liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} %standard-geoclue-applications
|
||
la liste standard de configuration des application GeoClue connues, qui
|
||
permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
|
||
actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
|
||
Epiphany de demander les informations de localisation. IceCat et Epiphany
|
||
demandent tous deux à l'utilisateur avant de permettre à une page web de
|
||
connaître l'emplacement de l'utilisateur.
|
||
@end defvr
|
||
|
||
@deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
|
||
[#:whitelist '()] @
|
||
[#:wifi-geolocation-url
|
||
"https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
|
||
[#:submit-data? #f] [#:wifi-submission-url
|
||
"https://location.services.mozilla.com/v1/submit?key=geoclue"] @
|
||
[#:submission-nick "geoclue"] @
|
||
[#:applications %standard-geoclue-applications]
|
||
Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
|
||
service fournit une interface D-Bus pour permettre aux applications de
|
||
demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
|
||
des informations à des bases de données de géolocalisation en ligne. Voir
|
||
@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
|
||
GeoClue} pour plus d'informations.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
|
||
[@w{#:auto-enable? #f}]
|
||
Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
|
||
appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
|
||
Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
|
||
automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
|
||
utilisez un clavier ou une souris bluetooth.
|
||
|
||
Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
|
||
service D-Bus.
|
||
@end deffn
|
||
|
||
@node Services de son
|
||
@subsubsection Services de son
|
||
|
||
@cindex support du son
|
||
@cindex ALSA
|
||
@cindex PulseAudio, support du son
|
||
|
||
Le module @code{(gnu services sound)} fournit un service pour configurer le
|
||
système ALSA (architecture son linux avancée), qui fait de PulseAudio le
|
||
pilote de sortie préféré d'ALSA.
|
||
|
||
@deffn {Variable Scheme} alsa-service-type
|
||
C'est le type pour le système @uref{https://alsa-project.org/, Advanced
|
||
Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
|
||
@file{/etc/asound.conf}. La valer de ce type est un enregistrement
|
||
@command{alsa-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service alsa-service-type)
|
||
@end example
|
||
|
||
Voir plus bas pour des détails sur @code{alsa-configuration}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} alsa-configuration
|
||
Type de données représentant la configuration pour @code{alsa-service}.
|
||
|
||
@table @asis
|
||
@item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
|
||
Le paquet @code{alsa-plugins} à utiliser.
|
||
|
||
@item @code{pulseaudio?} (par défaut : @var{#t})
|
||
Indique si les applications ALSA devraient utiliser le serveur de son
|
||
@uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
|
||
elles.
|
||
|
||
Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
|
||
produisent du son en même temps et de les contrôler individuellement via
|
||
@command{pavucontrol} entre autres choses.
|
||
|
||
@item @code{extra-options} (par défaut : @var{""})
|
||
Chaîne à ajouter au fichier @file{/etc/asound.conf}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
Les utilisateurs individuels qui veulent modifier la configuration système
|
||
d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
|
||
|
||
@example
|
||
# Dans guix, il faut spécifier le chemin absolu des greffons.
|
||
pcm_type.jack @{
|
||
lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
|
||
@}
|
||
|
||
# Faire passer ALSA par Jack :
|
||
# <http://jackaudio.org/faq/routing_alsa.html>.
|
||
pcm.rawjack @{
|
||
type jack
|
||
playback_ports @{
|
||
0 system:playback_1
|
||
1 system:playback_2
|
||
@}
|
||
|
||
capture_ports @{
|
||
0 system:capture_1
|
||
1 system:capture_2
|
||
@}
|
||
@}
|
||
|
||
pcm.!default @{
|
||
type plug
|
||
slave @{
|
||
pcm "rawjack"
|
||
@}
|
||
@}
|
||
@end example
|
||
|
||
Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
|
||
détails.
|
||
|
||
|
||
@node Services de bases de données
|
||
@subsubsection 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.
|
||
|
||
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}.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
|
||
Renvoie un service qui lance @command{mysqld}, le service de bases de
|
||
données MySQL ou MariaDB.
|
||
|
||
L'argument @var{config} facultatif spécifie la configuration de
|
||
@command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
|
||
@end deffn
|
||
|
||
@deftp {Type de données} mysql-configuration
|
||
Type de données représentant la configuration de @var{mysql-service}.
|
||
|
||
@table @asis
|
||
@item @code{mysql} (par défaut : @var{mariadb})
|
||
Objet paquet du serveur de base de données MySQL, qui peut être soit
|
||
@var{mariadb}, soit @var{mysql}.
|
||
|
||
Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
|
||
Pour MariaDB, le mot de passe root est vide.
|
||
|
||
@item @code{port} (par défaut : @code{3306})
|
||
Port TCP sur lequel le serveur de base de données écoute les connexions
|
||
entrantes.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} memcached-service-type
|
||
C'est le type de service pour le service @uref{https://memcached.org/,
|
||
Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
|
||
type de service est un objet @code{memcached-configuration}.
|
||
@end defvr
|
||
|
||
@example
|
||
(service memcached-service-type)
|
||
@end example
|
||
|
||
@deftp {Type de données} memcached-configuration
|
||
Type de données représentant la configuration de memcached.
|
||
|
||
@table @asis
|
||
@item @code{memcached} (par défaut : @code{memcached})
|
||
Le paquet Memcached à utiliser.
|
||
|
||
@item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
|
||
Les interfaces réseaux sur lesquelles écouter.
|
||
|
||
@item @code{tcp-port} (par défaut : @code{11211})
|
||
Port sur lequel accepter les connexions.
|
||
|
||
@item @code{udp-port} (par défaut : @code{11211})
|
||
Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
|
||
l'écoute en UDP.
|
||
|
||
@item @code{additional-options} (par défaut : @code{'()})
|
||
Options de la ligne de commande supplémentaires à passer à @code{memcached}.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} mongodb-service-type
|
||
C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
|
||
valeur de ce service est un objet @code{mongodb-configuration}.
|
||
@end defvr
|
||
|
||
@example
|
||
(service mongodb-service-type)
|
||
@end example
|
||
|
||
@deftp {Type de données} mongodb-configuration
|
||
Type de données représentant la configuration de mongodb.
|
||
|
||
@table @asis
|
||
@item @code{mongodb} (par défaut : @code{mongodb})
|
||
Le paquet MongoDB à utiliser.
|
||
|
||
@item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
|
||
Le fichier de configuration pour MongoDB.
|
||
|
||
@item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
|
||
Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
|
||
appartienne à l'utilisateur mongodb. Il devrait correspondre au
|
||
data-directory que MongoDB est configuré pour utiliser dans son fichier de
|
||
configuration.
|
||
@end table
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} redis-service-type
|
||
C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
|
||
Redis} dont la valeur est un objet @code{redis-configuration}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} redis-configuration
|
||
Type de données représentant la configuration de redis.
|
||
|
||
@table @asis
|
||
@item @code{redis} (par défaut : @code{redis})
|
||
Le paquet Redis à utiliser.
|
||
|
||
@item @code{bind} (par défaut : @code{"127.0.0.1"})
|
||
Interface réseau sur laquelle écouter.
|
||
|
||
@item @code{port} (par défaut : @code{6379})
|
||
Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
|
||
sur un socket TCP.
|
||
|
||
@item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
|
||
Répertoire dans lequel stocker la base de données et les fichiers liés.
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services de courriels
|
||
@subsubsection Services de courriels
|
||
|
||
@cindex courriel
|
||
@cindex email
|
||
Le module @code{(gnu services mail)} fournit des définitions de services
|
||
Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
|
||
que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
|
||
détaillés dans les sous-sections ci-dessous.
|
||
|
||
@subsubheading Service Dovecot
|
||
|
||
@deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
|
||
Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
|
||
@end deffn
|
||
|
||
Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
|
||
configuration par défaut créé par @code{(dovecot-configuration)} suffira si
|
||
votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
|
||
sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
|
||
ports non chiffrés par défaut. Il y a quelques options cependant, que les
|
||
administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
|
||
d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
|
||
paramètres via une interface Scheme unifiée.
|
||
|
||
Par exemple, pour spécifier que les courriels se trouvent dans
|
||
@code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
|
||
|
||
@example
|
||
(dovecot-service #:config
|
||
(dovecot-configuration
|
||
(mail-location "maildir:~/.mail")))
|
||
@end example
|
||
|
||
Les paramètres de configuration disponibles sont les suivants. Chaque
|
||
définition des paramètres est précédé par son type ; par exemple,
|
||
@samp{string-list foo} indique que le paramètre @code{foo} devrait être
|
||
spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
|
||
de spécifier la configuration comme une chaîne de caractères, si vous avez
|
||
un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
|
||
système ; voir la fin pour plus de détails.
|
||
|
||
@c The following documentation was initially generated by
|
||
@c (generate-documentation) in (gnu services mail). Manually maintained
|
||
@c documentation is better, so we shouldn't hesitate to edit below as
|
||
@c needed. However if the change you want to make to this documentation
|
||
@c can be done in an automated way, it's probably easier to change
|
||
@c (generate-documentation) than to make it below and have to deal with
|
||
@c the churn as dovecot updates.
|
||
|
||
Les champs de @code{dovecot-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
|
||
Le paquet dovecot
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
|
||
Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
|
||
sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
|
||
IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
|
||
ou quelque chose de plus complexe, complétez les champs d'adresse et de port
|
||
de @samp{inet-listener} des services spécifiques qui vous intéressent.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
|
||
Liste des protocoles que vous voulez servir. Les protocoles disponibles
|
||
comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
|
||
|
||
Les champs @code{protocol-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{protocol-configuration}} string name
|
||
Le nom du protocole.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
|
||
Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
|
||
trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
|
||
partagés) et lda. Sa valeur par défaut est
|
||
@samp{"/var/run/dovecot/auth-userdb"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
|
||
Liste de greffons à charger séparés par des espaces.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
|
||
Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
|
||
adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
|
||
la casse. Par défaut @samp{10}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
|
||
Liste des services à activer. Les services disponibles comprennent
|
||
@samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
|
||
et @samp{lmtp}.
|
||
|
||
Les champs de @code{service-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} string kind
|
||
Le type de service. Les valeurs valides comprennent @code{director},
|
||
@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
|
||
@code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
|
||
@code{quota-warning} ou n'importe quoi d'autre.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
|
||
Les auditeurs du service. Un auditeur est soit un
|
||
@code{unix-listener-configuration}, soit un
|
||
@code{fifo-listener-configuration}, soit un
|
||
@code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
|
||
|
||
Les champs de @code{unix-listener-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{unix-listener-configuration}} string path
|
||
Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
|
||
utilisé comme nom de section.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{unix-listener-configuration}} string mode
|
||
Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{unix-listener-configuration}} string user
|
||
L'utilisateur à qui appartient le socket. La valeur par défaut est
|
||
@samp{""}
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{unix-listener-configuration}} string group
|
||
Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
|
||
Les champs de @code{fifo-listener-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{fifo-listener-configuration}} string path
|
||
Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
|
||
utilisé comme nom de section.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
|
||
Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{fifo-listener-configuration}} string user
|
||
L'utilisateur à qui appartient le socket. La valeur par défaut est
|
||
@samp{""}
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{fifo-listener-configuration}} string group
|
||
Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
|
||
Les champs de @code{inet-listener-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
|
||
Le protocole à écouter.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{inet-listener-configuration}} string address
|
||
L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
|
||
La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
|
||
Le port sur lequel écouter.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
|
||
S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
|
||
@samp{required}. La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
|
||
Connexions de clients simultanées maximum par processus. Une fois ce nombre
|
||
de connections atteint, la connexion suivante fera en sorte que Dovecot
|
||
démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
|
||
est utilisé à la place.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
|
||
Nombre de connexions à gérer avant de démarrer un nouveau processus.
|
||
Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
|
||
mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
|
||
est @samp{1}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
|
||
Nombre de processus maximum qui peut exister pour ce service. Si la valeur
|
||
est 0, @code{default-process-limit} est utilisé à la place.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
|
||
Nombre de processus à toujours garder en attente de connexions. La valeur
|
||
par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
|
||
Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
|
||
d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
|
||
Configuration du dictionnaire, créé par le constructeur
|
||
@code{dict-configuration}.
|
||
|
||
Les champs de @code{dict-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
|
||
Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
|
||
valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
|
||
Une liste de configurations passdb, chacune créée par le constructeur
|
||
@code{passdb-configuration}.
|
||
|
||
Les champs de @code{passdb-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{passdb-configuration}} string driver
|
||
Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
|
||
@samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
|
||
par défaut est @samp{"pam"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
|
||
Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
|
||
par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
|
||
Liste des configurations userdb, chacune créée par le constructeur
|
||
@code{userdb-configuration}.
|
||
|
||
Les champs de @code{userdb-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{userdb-configuration}} string driver
|
||
Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
|
||
@samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
|
||
Liste des arguments du pilote userdb séparés par des espaces. La valeur par
|
||
défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
|
||
Remplace des champs de passwd. La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
|
||
Configuration du greffon, créé par le constructeur
|
||
@code{plugin-configuration}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
|
||
Liste d'espaces de noms. Chaque élément de la liste est créé par le
|
||
constructeur @code{namespace-configuration}.
|
||
|
||
Les champs de @code{namespace-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} string name
|
||
Nom de cet espace de nom.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} string type
|
||
Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
|
||
valeur par défaut est @samp{"private"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} string separator
|
||
Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
|
||
séparateur pour tous les espaces de noms ou certains clients seront confus.
|
||
@samp{/} est généralement une bonne valeur. La valeur par défaut dépend
|
||
cependant du format de stockage sous-jacent. La valeur par défaut est
|
||
@samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} string prefix
|
||
Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
|
||
différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
|
||
valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} string location
|
||
Emplacement physique de la boîte aux lettres. C'est le même format que
|
||
mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
|
||
@samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
|
||
Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
|
||
le possède. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
|
||
Si l'espace de nom est caché, il n'est pas publié auprès des clients par
|
||
l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
|
||
#f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
|
||
des espaces de noms différents que vous voulez rendre obsolètes sans les
|
||
casser. Par exemple vous pouvez cacher les espaces de noms avec les
|
||
préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} boolean list?
|
||
Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
|
||
Cela rend l'espace de nom visible pour les clients qui ne supportent pas
|
||
l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
|
||
aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
|
||
défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
|
||
Les espaces de noms gèrent leur propre souscription. Si la valeur est
|
||
@code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
|
||
toujours avoir cette valeur à @code{#t}. La valeur par défaut est
|
||
@samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
|
||
Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
|
||
par défaut est @samp{()}.
|
||
|
||
Les champs de @code{mailbox-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{mailbox-configuration}} string name
|
||
Nom de cette boîte aux lettres.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{mailbox-configuration}} string auto
|
||
@samp{create} créera automatiquement cette boîte aux lettres.
|
||
@samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
|
||
défaut est @samp{"no"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
|
||
Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
|
||
valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
|
||
@code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
|
||
défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
|
||
Répertoire de base où stocker les données d'exécution. La valeur par défaut
|
||
est @samp{"/var/run/dovecot/"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
|
||
Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
|
||
ready."}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
|
||
Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
|
||
sont autorisées à modifier leurs adresses IP et leurs ports (pour la
|
||
connexion et la vérification d'authentification).
|
||
@samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
|
||
Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
|
||
défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
|
||
List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
|
||
Show more verbose process titles (in ps). Currently shows user name and IP
|
||
address. Useful for seeing who is actually using the IMAP processes (e.g.@:
|
||
shared mailboxes or if the same uid is used for multiple accounts).
|
||
Defaults to @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
|
||
Should all processes be killed when Dovecot master process shuts down.
|
||
Setting this to @code{#f} means that Dovecot can be upgraded without forcing
|
||
existing client connections to close (although that could also be a problem
|
||
if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
|
||
Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
|
||
de connexions au serveur doveadm au lieu de les lancer dans le même
|
||
processus. La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
|
||
Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
|
||
valeur par défaut est @samp{"doveadm-server"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
|
||
Liste des variables d'environnement qui sont préservées au démarrage de
|
||
Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
|
||
paires clef=valeur pour toujours spécifier ce paramètre.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
|
||
Disable LOGIN command and all other plaintext authentications unless SSL/TLS
|
||
is used (LOGINDISABLED capability). Note that if the remote IP matches the
|
||
local IP (i.e.@: you're connecting from the same computer), the connection
|
||
is considered secure and plaintext authentication is allowed. See also
|
||
ssl=required setting. Defaults to @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
|
||
Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
|
||
Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
|
||
caching to be used. Defaults to @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
|
||
Durée de vie des données en cache. Après l'expiration du TTL
|
||
l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
|
||
de données principale revoie une erreur interne. Nous essayons aussi de
|
||
gérer les changements de mot de passe automatiquement : si
|
||
l'authentification précédente de l'utilisateur était réussie mais pas
|
||
celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
|
||
l'authentification en texte clair uniquement. La valeur par défaut est
|
||
@samp{"1 hour"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
|
||
TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
|
||
passe ne correspond pas). 0 désactive la mise en cache complètement. La
|
||
valeur par défaut est @samp{"1 hour"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
|
||
Liste des domaines pour les mécanismes d'authentification SASL qui en ont
|
||
besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
|
||
utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
|
||
domaine listé ici, donc gardez celui par défaut en premier. La valeur par
|
||
défaut est @samp{()}
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
|
||
Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
|
||
les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
|
||
authentification en texte clair. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
|
||
Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
|
||
d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
|
||
listé ici, la connexion échoue automatiquement. C'est juste une
|
||
vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
|
||
exploiter des vulnérabilités potentielles d'échappement de guillemets avec
|
||
les bases de données SQL/LDAP. Si vous voulez autoriser tous les
|
||
caractères, indiquez la liste vide.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
|
||
Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
|
||
cherchés en base. La valeur contient une série de caractère de -> à. Par
|
||
exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
|
||
@samp{@@}. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
|
||
Username formatting before it's looked up from databases. You can use the
|
||
standard variables here, e.g.@: %Lu would lowercase the username, %n would
|
||
drop away the domain if it was given, or @samp{%n-AT-%d} would change the
|
||
@samp{@@} into @samp{-AT-}. This translation is done after
|
||
@samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
|
||
If you want to allow master users to log in by specifying the master
|
||
username within the normal username string (i.e.@: not using SASL
|
||
mechanism's support for it), you can specify the separator character here.
|
||
The format is then <username><separator><master username>. UW-IMAP uses
|
||
@samp{*} as the separator, so that could be a good choice. Defaults to
|
||
@samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
|
||
Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
|
||
mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
|
||
Maximum number of dovecot-auth worker processes. They're used to execute
|
||
blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
|
||
automatically created and destroyed as needed. Defaults to @samp{30}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
|
||
Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
|
||
est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
|
||
des guillemets) pour permettre toutes les entrées keytab. La valeur par
|
||
défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
|
||
Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
|
||
par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
|
||
spécifié. Vous pourriez avoir besoin de faire en sorte que le service
|
||
d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
|
||
par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
|
||
Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
|
||
Samba et l'utilitaire @samp{ntlm-auth}.
|
||
<doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
|
||
@samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
|
||
Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
|
||
@samp{"/usr/bin/ntlm_auth"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
|
||
Durée d'attente avant de répondre à des authentifications échouées. La
|
||
valeur par défaut est @samp{"2 secs"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
|
||
Requiert un certification client SSL valide ou l'authentification échoue.
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
|
||
Prend le nom d'utilisateur du certificat SSL client, avec
|
||
@code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
|
||
sujet. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
|
||
Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
|
||
sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
|
||
@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
|
||
@samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
|
||
paramètre @samp{disable-plaintext-auth}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
|
||
Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
|
||
Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
|
||
même que le @samp{inet-listener} du service directeur. La valeur par défaut
|
||
est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
|
||
Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
|
||
grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
|
||
valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
|
||
Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
|
||
après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
|
||
min"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
|
||
La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
|
||
utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
|
||
@@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
|
||
valeur par défaut est @samp{"%Lu"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string log-path
|
||
Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
|
||
journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
|
||
valeur par défaut est @samp{"syslog"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
|
||
Fichier de journal à utiliser pour les messages d'information. La valeur
|
||
par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
|
||
Fichier de journal à utiliser pour les messages de débogage. La valeur par
|
||
défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
|
||
Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
|
||
si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
|
||
local0..local7. D'autres dispositifs standard sont supportés. La valeur
|
||
par défaut est @samp{"mail"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
|
||
Indique s'il faut enregistrer les tentatives de connexion échouées et la
|
||
raison de leur échec. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
|
||
In case of password mismatches, log the attempted password. Valid values
|
||
are no, plain and sha1. sha1 can be useful for detecting brute force
|
||
password attempts vs. user simply trying the same password over and over
|
||
again. You can also truncate the value to n chars by appending ":n" (e.g.@:
|
||
sha1:6). Defaults to @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
|
||
Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
|
||
requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
|
||
Dans le cas où le mot de passe était incorrect, indique s'il faut
|
||
enregistrer les mots de passe et les schémas utilisés pour que le problème
|
||
puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
|
||
Indique s'il faut activer le débogage du traitement des courriels. Cela
|
||
peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
|
||
Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
|
||
est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
|
||
Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
|
||
codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
|
||
%H:%M:%S \""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
|
||
Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
|
||
variable non vide sont agrégés pour former une chaîne de mots séparés par
|
||
des virgules.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
|
||
Format du journal de connexion. %s contient la chaîne
|
||
@samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
|
||
valeur par défaut est @samp{"%$: %s"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
|
||
Préfixe à utiliser devant chaque ligne du fichier de journal pour les
|
||
processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
|
||
la liste des variables que vous pouvez utiliser. La valeur par défaut est
|
||
@samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
|
||
Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
|
||
utiliser ces variables :
|
||
@table @code
|
||
@item %$
|
||
Delivery status message (e.g.@: @samp{saved to INBOX})
|
||
@item %m
|
||
Message-ID
|
||
@item %s
|
||
Objet
|
||
@item %f
|
||
Adresse « de »
|
||
@item %p
|
||
Taille physique
|
||
@item %w
|
||
Taille virtuelle.
|
||
@end table
|
||
La valeur par défaut est @samp{"msgid=%m: %$"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
|
||
Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
|
||
vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
|
||
automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
|
||
courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
|
||
Dovecot.
|
||
|
||
If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
|
||
isn't enough. You'll also need to tell Dovecot where the other mailboxes
|
||
are kept. This is called the "root mail directory", and it must be the
|
||
first path given in the @samp{mail-location} setting.
|
||
|
||
Il y a quelques variables spéciales que vous pouvez utiliser :
|
||
|
||
@table @samp
|
||
@item %u
|
||
nom d'utilisateur
|
||
@item %n
|
||
la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
|
||
pas de domaine.
|
||
@item %d
|
||
la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
|
||
domaine
|
||
@item %h
|
||
répertoire personnel
|
||
@end table
|
||
|
||
Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
|
||
@table @samp
|
||
@item maildir:~/Maildir
|
||
@item mbox:~/mail:INBOX=/var/mail/%u
|
||
@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
|
||
@end table
|
||
La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
|
||
Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
|
||
utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
|
||
uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
|
||
<doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
|
||
Groupe à activer temporairement pour les opérations privilégiées.
|
||
Actuellement cela est utilisé uniquement avec INBOX lors de sa création
|
||
initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
|
||
« mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
|
||
Grant access to these supplementary groups for mail processes. Typically
|
||
these are used to set up access to shared mailboxes. Note that it may be
|
||
dangerous to set these if users can create symlinks (e.g.@: if "mail" group
|
||
is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
|
||
mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
|
||
it). Defaults to @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
|
||
Allow full file system access to clients. There's no access checks other
|
||
than what the operating system does for the active UID/GID. It works with
|
||
both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
|
||
/path/ or ~user/. Defaults to @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
|
||
Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
|
||
dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
|
||
S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
|
||
verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
|
||
option est sûre de nos jours. La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
|
||
Quand utiliser les appels à fsync() ou fdatasync() :
|
||
@table @code
|
||
@item optimized
|
||
Lorsque cela est nécessaire pour éviter de perdre des données importantes
|
||
@item always
|
||
Useful with e.g.@: NFS when write()s are delayed
|
||
@item never
|
||
Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
|
||
perdre toutes les données).
|
||
@end table
|
||
La valeur par défaut est @samp{"optimized"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
|
||
Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
|
||
Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
|
||
seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
|
||
par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
|
||
Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
|
||
utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
|
||
@samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
|
||
Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
|
||
flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
|
||
qui peuvent créer plus d'utilisation du disque que les autres méthodes de
|
||
verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
|
||
rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
|
||
@samp{"fcntl"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
|
||
Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
|
||
plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
|
||
L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
|
||
utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
|
||
tant que démon ou qu'un autre utilisateur système. Remarquez que la
|
||
connexion en root est interdite en dur dans le binaire de dovecot et qu'on
|
||
ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
|
||
par défaut est @samp{500}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
|
||
Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
|
||
un GID non-valide comme numéro de groupe primaire ne peuvent pas se
|
||
connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
|
||
ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
|
||
Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
|
||
lors de la création de nouveaux mots-clefs. La valeur par défaut est
|
||
@samp{50}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
|
||
List of directories under which chrooting is allowed for mail processes
|
||
(i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
|
||
setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
|
||
settings. If this setting is empty, "/./" in home dirs are ignored.
|
||
WARNING: Never add directories here which local users can modify, that may
|
||
lead to root exploit. Usually this should be done only if you don't allow
|
||
shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
|
||
Default chroot directory for mail processes. This can be overridden for
|
||
specific users in user database by giving /./ in user's home directory
|
||
(e.g.@: /home/./user chroots into /home). Note that usually there is no
|
||
real need to do chrooting, Dovecot doesn't allow users to access files
|
||
outside their mail directory anyway. If your home directories are prefixed
|
||
with the chroot directory, append "/."@: to @samp{mail-chroot}.
|
||
<doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
|
||
Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
|
||
les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
|
||
et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
|
||
Répertoire où trouver les greffons. La valeur par défaut est
|
||
@samp{"/usr/lib/dovecot"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
|
||
List of plugins to load for all services. Plugins specific to IMAP, LDA,
|
||
etc.@: are added to this list in their own .conf files. Defaults to
|
||
@samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
|
||
Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
|
||
jour le fichier de cache. Cela permet d'optimiser le comportement de
|
||
Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
|
||
disque. La valeur par défaut est @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
|
||
Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
|
||
temps en temps pour voir s'il y a de nouveaux messages ou d'autres
|
||
changements. Ce paramètre défini le temps d'attente minimum entre deux
|
||
vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
|
||
trouver immédiatement les changements. La valeur par défaut est @samp{"30
|
||
secs"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
|
||
Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
|
||
de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
|
||
système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
|
||
d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
|
||
si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
|
||
leur traitement de ces CR supplémentaires et causer des problèmes. La
|
||
valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
|
||
Par défaut la commande LIST renvoie toutes les entrées du maildir qui
|
||
commencent par un point. Activer cette option permet à Dovecot de renvoyer
|
||
uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
|
||
sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
|
||
setting struct @samp{dirent->d_type} this check is free and it's done always
|
||
regardless of this setting). La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
|
||
Lors de la copie d'un message, le faire avec des liens en dur si possible.
|
||
Cela améliore un peu la performance et n'a que peu de chance d'avoir des
|
||
effets secondaires.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
|
||
Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
|
||
répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
|
||
lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
|
||
est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
|
||
La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
|
||
mbox. Il y en a quatre :
|
||
|
||
@table @code
|
||
@item dotlock
|
||
Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
|
||
plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
|
||
auront besoin de l'accès en écriture à ce répertoire.
|
||
@item dotlock-try
|
||
Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
|
||
ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
|
||
@item fcntl
|
||
Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
|
||
utilisez lockd.
|
||
@item flock
|
||
Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
|
||
@item lockf
|
||
Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
|
||
@end table
|
||
|
||
Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
|
||
l'ordre dans lequel elles sont déclarées est important pour éviter des
|
||
interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
|
||
Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
|
||
méthodes en même temps.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
|
||
Temps d'attente maximal pour un verrou (tous les verrous) avant
|
||
d'abandonner. La valeur par défaut est @samp{"5 mins"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
|
||
Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
|
||
modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
|
||
valeur par défaut est @samp{"2 mins"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
|
||
Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
|
||
savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
|
||
beaucoup de temps. Comme le changement est habituellement un simple
|
||
courriel supplémentaire, il serait plus rapide de lire le nouveaux
|
||
courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
|
||
toujours à relire le fichier mbox complet si le fichier n'est pas comme
|
||
attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
|
||
changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
|
||
immédiatement compte. Remarquez qu'une synchronisation complète est
|
||
effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
|
||
par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
|
||
Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
|
||
avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
|
||
actifée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
|
||
@samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
|
||
Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
|
||
synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
|
||
ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
|
||
suppriment souvent tous les courriels. L'inconvénient c'est que vos
|
||
changements ne sont pas immédiatement visibles pour les autres MUA. La
|
||
valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
|
||
If mbox size is smaller than this (e.g.@: 100k), don't write index files.
|
||
If an index file already exists it's still read, just not updated. Defaults
|
||
to @samp{0}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
|
||
Taille du fichier dbox maximale avant rotation. La valeur par défaut est
|
||
@samp{10000000}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
|
||
Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
|
||
jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
|
||
0 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
|
||
Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
|
||
à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
|
||
dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
|
||
Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
|
||
des fichiers externes, ce qui permet de les stocker une seule fois. Les
|
||
autres moteurs ne le supportent pas pour le moment.
|
||
|
||
ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
|
||
vos risques et périls.
|
||
|
||
Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
|
||
valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
|
||
Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
|
||
Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
|
||
externe de certaines pièces-jointes spécifiques. La valeur par défaut est
|
||
@samp{128000}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
|
||
Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
|
||
:
|
||
@table @code
|
||
@item posix
|
||
Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
|
||
déduplication du système de fichier)
|
||
@item sis posix
|
||
SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
|
||
@item sis-queue posix
|
||
SiS avec déduplication et comparaison différées
|
||
@end table
|
||
La valeur par défaut est @samp{"sis posix"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
|
||
Hash format to use in attachment filenames. You can add any text and
|
||
variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
|
||
@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
|
||
truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
|
||
Defaults to @samp{"%@{sha1@}"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
|
||
|
||
La valeur par défaut est @samp{100}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
|
||
|
||
La valeur par défaut est @samp{1000}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
|
||
Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
|
||
service. C'est surtout pour attraper et tuer les processus qui font fuiter
|
||
la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
|
||
@samp{256000000}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
|
||
Utilisateur de connexion utilisé en interne par les processus de connexion.
|
||
C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
|
||
avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
|
||
Utilisateur utilisé en interne par les processus non privilégiés. Il
|
||
devrait être différent de l'utilisateur de connexion, pour que les processus
|
||
de connexion ne puissent pas perturber les autres processus. La valeur par
|
||
défaut est @samp{"dovecot"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
|
||
Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
|
||
défaut est @samp{"required"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
|
||
Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
|
||
défaut est @samp{"</etc/dovecot/default.pem"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
|
||
Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
|
||
privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
|
||
valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
|
||
Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
|
||
Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
|
||
fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
|
||
ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
|
||
PEM encoded trusted certificate authority. Set this only if you intend to
|
||
use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
|
||
certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
|
||
</etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
|
||
Indique si les certificats clients doivent réussir la vérification du CRL.
|
||
La valeur par défaut est @samp{#t}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
|
||
Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
|
||
requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
|
||
auth. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
|
||
Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
|
||
habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
|
||
indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
|
||
@samp{"commonName"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
|
||
Version minimale de SSL à accepter. La valeur par défaut est
|
||
@samp{"TLSv1"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
|
||
Méthodes de chiffrement à utiliser. La valeur par défaut est
|
||
@samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
|
||
Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
|
||
openssl engine ». La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
|
||
Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
|
||
domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string hostname
|
||
Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
|
||
in LMTP replies. Default is the system's real hostname@@domain. Defaults
|
||
to @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
|
||
Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
|
||
rejeter le courriel. La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
|
||
Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
|
||
@samp{"/usr/sbin/sendmail"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
|
||
Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
|
||
hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
|
||
En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
|
||
utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
|
||
La valeur par défaut est @samp{"Rejected: %s"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
|
||
Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
|
||
utiliser ces variables :
|
||
|
||
@table @code
|
||
@item %n
|
||
CRLF
|
||
@item %r
|
||
raison
|
||
@item %s
|
||
objet du courriel de départ
|
||
@item %t
|
||
destinataire
|
||
@end table
|
||
La valeur par défaut est @samp{"Your message to <%t> was automatically
|
||
rejected:%n%r"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
|
||
Caractère de délimitation entre la partie locale et le détail des adresses
|
||
de courriel. La valeur par défaut est @samp{"+"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
|
||
En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
|
||
est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
|
||
dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
|
||
X-Original-To. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
|
||
Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
|
||
? La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
|
||
Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
|
||
La valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
|
||
Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
|
||
des lignes de commandes très longues avec des boîtes aux lettres énormes,
|
||
donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
|
||
erreurs « Too long argument » ou « IMAP command line too large ». La valeur
|
||
par défaut est @samp{64000}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
|
||
Format de la chaîne de déconnexion IMAP :
|
||
@table @code
|
||
@item %i
|
||
nombre d'octets lus par le client
|
||
@item %o
|
||
nombre total d'octets envoyés au client.
|
||
@end table
|
||
Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
|
||
utilisables. La valeur par défaut est @samp{"in=%i out=%o
|
||
deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
|
||
hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
|
||
body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
|
||
Override the IMAP CAPABILITY response. If the value begins with '+', add
|
||
the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
|
||
to @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
|
||
Temps d'attente entre les notifications « OK Still here » lorsque le client
|
||
est en IDLE. La valeur par défaut est @samp{"2 mins"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
|
||
Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
|
||
la valeur par défaut. Les champs suivants ont actuellement des valeurs par
|
||
défaut : name, version, os, os-version, support-url, support-email. La
|
||
valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
|
||
Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
|
||
valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
|
||
Contournements pour divers bogues de certains client :
|
||
|
||
@table @code
|
||
@item delay-newmail
|
||
Envoie des notifications de nouveau message EXISTS/RECENT seulement en
|
||
réponse aux commandes NOOP et CHECK. Certains clients les ignorent
|
||
autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
|
||
cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
|
||
sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
|
||
contournement si la synchronisation est à « En-têtes seulement ».
|
||
|
||
@item tb-extra-mailbox-sep
|
||
Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
|
||
un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
|
||
Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
|
||
le traiter comme un nom de boîte aux lettres invalide.
|
||
|
||
@item tb-lsub-flags
|
||
Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
|
||
makes Thunderbird realize they aren't selectable and show them greyed out,
|
||
instead of only later giving "not selectable" popup error.
|
||
@end table
|
||
La valeur par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
|
||
Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
|
||
autorise tous. La valeur par défaut est @samp{""}.
|
||
@end deftypevr
|
||
|
||
|
||
Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que 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.
|
||
|
||
Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
|
||
prêt. Dans ce cas, vous pouvez passer un objet
|
||
@code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
|
||
@code{dovecot-service}. Comme son nom l'indique, une configuration opaque
|
||
n'a pas les capacités de réflexions.
|
||
|
||
Les champs de @code{opaque-dovecot-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
|
||
Le paquet dovecot
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
|
||
Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
|
||
@end deftypevr
|
||
|
||
Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
|
||
vous pouvez instancier un service dovecot comme cela :
|
||
|
||
@example
|
||
(dovecot-service #:config
|
||
(opaque-dovecot-configuration
|
||
(string "")))
|
||
@end example
|
||
|
||
@subsubheading Service OpenSMTPD
|
||
|
||
@deffn {Variable Scheme} opensmtpd-service-type
|
||
C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
|
||
dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
|
||
dans cet exemple :
|
||
|
||
@example
|
||
(service opensmtpd-service-type
|
||
(opensmtpd-configuration
|
||
(config-file (local-file "./my-smtpd.conf"))))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} opensmtpd-configuration
|
||
Type de données représentant la configuration de opensmtpd.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{opensmtpd})
|
||
Objet de paquet du serveur SMTP OpenSMTPD.
|
||
|
||
@item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
|
||
Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
|
||
Par défaut il écoute sur l'interface de boucle locale et accepte les
|
||
courriels des utilisateurs et des démons de la machine locale, et autorise
|
||
l'envoie de courriels à des serveurs distants. Lancez @command{man
|
||
smtpd.conf} pour plus d'information.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Service Exim
|
||
|
||
@cindex agent de transfert de courriel (MTA)
|
||
@cindex MTA (agent de transfert de courriel)
|
||
@cindex SMTP
|
||
|
||
@deffn {Variable Scheme} exim-service-type
|
||
C'est le type de l'agent de transfert de courriel (MTA)
|
||
@uref{https://exim.org, Exim}, dont la valeur devrait être un objet
|
||
@code{exim-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service exim-service-type
|
||
(exim-configuration
|
||
(config-file (local-file "./my-exim.conf"))))
|
||
@end example
|
||
@end deffn
|
||
|
||
Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
|
||
service @code{mail-aliases-service-type} dans votre @code{operating-system}
|
||
(même sans alias).
|
||
|
||
@deftp {Type de données} exim-configuration
|
||
Type de données représentant la configuration d'exim.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{exim})
|
||
Objet de paquet du serveur Exim.
|
||
|
||
@item @code{config-file} (par défaut : @code{#f})
|
||
Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
|
||
valeur est @code{#f} alors le service utilisera la configuration par défaut
|
||
du paquet fournit dans @code{package}. Le fichier de configuration qui en
|
||
résulte est chargé après avoir mis en place les variables de configuration
|
||
@code{exim_user} et @code{exim_group}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Service d'alias de courriel
|
||
|
||
@cindex alias de courriel
|
||
@cindex alias, pour les adresses de courriel
|
||
|
||
@deffn {Variable Scheme} mail-aliases-service-type
|
||
C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
|
||
comment délivrer les courriels aux utilisateurs du système.
|
||
|
||
@example
|
||
(service mail-aliases-service-type
|
||
'(("postmaster" "bob")
|
||
("bob" "bob@@example.com" "bob@@example2.com")))
|
||
@end example
|
||
@end deffn
|
||
|
||
La configuration pour un service @code{mail-aliases-service-type} est une
|
||
liste associative qui dénote comment délivrer les courriels qui arrivent au
|
||
système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
|
||
@code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
|
||
délivrer les courriels de cet utilisateur.
|
||
|
||
Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
|
||
système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
|
||
@code{postmaster} dans la liste @code{user-accounts} du
|
||
@code{operating-system} pour délivrer les courriels à destination de
|
||
@code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
|
||
@code{bob@@example.com} et @code{bob@@example2.com}).
|
||
|
||
@node Services de messagerie
|
||
@subsubsection Services de messagerie
|
||
|
||
@cindex messagerie intantanée
|
||
@cindex jabber
|
||
@cindex XMPP
|
||
Le module @code{(gnu services messaging)} fournit des définitions de
|
||
services Guix pour les services de messageries instantanées : actuellement
|
||
seul Prosody est supporté.
|
||
|
||
@subsubheading Service Prosody
|
||
|
||
@deffn {Variable Scheme} prosody-service-type
|
||
C'est le type pour le @uref{https://prosody.im, le serveur de communication
|
||
XMPP Prosody}. Sa valeur doit être un enregistrement
|
||
@code{prosody-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service prosody-service-type
|
||
(prosody-configuration
|
||
(modules-enabled (cons "groups" "mam" %default-modules-enabled))
|
||
(int-components
|
||
(list
|
||
(int-component-configuration
|
||
(hostname "conference.example.net")
|
||
(plugin "muc")
|
||
(mod-muc (mod-muc-configuration)))))
|
||
(virtualhosts
|
||
(list
|
||
(virtualhost-configuration
|
||
(domain "example.net"))))))
|
||
@end example
|
||
|
||
Voir plus bas pour des détails sur @code{prosody-configuration}.
|
||
|
||
@end deffn
|
||
|
||
Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
|
||
champ @code{virtualhosts} est requis : il spécifie le domaine que vous
|
||
voulez voir Prosody servir.
|
||
|
||
Vous pouvez effectuer plusieurs vérifications de la configuration générée
|
||
avec la commande @code{prosodyctl check}.
|
||
|
||
Prosodyctl vous aidera aussi à importer des certificats du répertoire
|
||
@code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
|
||
Voir @url{https://prosody.im/doc/letsencrypt}.
|
||
|
||
@example
|
||
prosodyctl --root cert import /etc/letsencrypt/live
|
||
@end example
|
||
|
||
Les paramètres de configuration disponibles sont les suivants. Chaque
|
||
définition des paramètres est précédé par son type ; par exemple,
|
||
@samp{string-list foo} indique que le paramètre @code{foo} devrait être
|
||
spécifié comme une liste de chaînes de caractères. Les types précédés de
|
||
@code{maybe-} signifient que le paramètre n'apparaîtra pas dans
|
||
@code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
|
||
|
||
Il y a aussi une manière de spécifier la configuration en tant que chaîne de
|
||
caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
|
||
voulez porter depuis un autre système ; voir la fin pour plus de détails.
|
||
|
||
Le type @code{file-object} désigne soit un objet simili-fichier
|
||
(@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
|
||
|
||
@c The following documentation was initially generated by
|
||
@c (generate-documentation) in (gnu services messaging). Manually maintained
|
||
@c documentation is better, so we shouldn't hesitate to edit below as
|
||
@c needed. However if the change you want to make to this documentation
|
||
@c can be done in an automated way, it's probably easier to change
|
||
@c (generate-documentation) than to make it below and have to deal with
|
||
@c the churn as Prosody updates.
|
||
|
||
Les champs de @code{prosody-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} package prosody
|
||
Le paquet Prosody.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
|
||
Emplacement du répertoire de stockage des données de Prosody. Voir
|
||
@url{https://prosody.im/doc/configure}. La valeur par défaut est
|
||
@samp{"/var/lib/prosody"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
|
||
Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
|
||
spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
|
||
par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
|
||
Chaque hôte virtuel et composant a besoin d'un certificat pour que les
|
||
clients et les serveurs puissent vérifier son identité. Prosody chargera
|
||
automatiquement les clefs et les certificats dans le répertoire spécifié
|
||
ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string-list admins
|
||
C'est une liste des comptes administrateurs de ce serveur. Remarquez que
|
||
vous devez créer les comptes séparément. Voir
|
||
@url{https://prosody.im/doc/admins} et
|
||
@url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
|
||
'("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
|
||
@samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
|
||
Active l'utilisation de libevent pour de meilleures performances sous une
|
||
forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
|
||
C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
|
||
@code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
|
||
qu'il existe aussi. La documentation des modules se trouve sur
|
||
@url{https://prosody.im/doc/modules}. La valeur par défaut est
|
||
@samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
|
||
"blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
|
||
"admin_adhoc")}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
|
||
@samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
|
||
mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
|
||
par défaut est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
|
||
Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
|
||
chemin est vide alors @samp{mod_groups} ne fait rien. Voir
|
||
@url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
|
||
@samp{"/var/lib/prosody/sharedgroups.txt"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
|
||
Désactive la création de compte par défaut, pour la sécurité. Voir
|
||
@url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
|
||
@samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
|
||
Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
|
||
pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
|
||
pas complètement ces options, ne les ajoutez pas à votre configuration, il
|
||
est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
|
||
@url{https://prosody.im/doc/advanced_ssl_config}.
|
||
|
||
Les champs de @code{ssl-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
|
||
Cela détermine la poignée de main à utiliser.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
|
||
Chemin vers votre fichier de clef privée.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
|
||
Chemin vers votre fichier de certificat.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} file-object capath
|
||
Chemin vers le répertoire contenant les certificats racines que vous voulez
|
||
voir Prosody utiliser lors de la vérification des certificats des serveurs
|
||
distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
|
||
Chemin vers un fichier contenant les certificats racines auxquels Prosody
|
||
devra faire confiance. Comme @code{capath} mais avec les certificats
|
||
concaténés ensemble.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
|
||
Une liste d'options de vérification (qui correspondent globalement aux
|
||
drapeaux @code{set_verify()} d'OpenSSL).
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
|
||
Une liste d'options générales liées à SSL/TLS. Elles correspondent
|
||
globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
|
||
options disponibles dans LuaSec, voir les sources de LuaSec.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
|
||
Longueur maximale d'une chaîne d'autorités de certifications avant la
|
||
racine.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
|
||
Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
|
||
chiffrement que Prosody offrira aux clients, et dans quel ordre de
|
||
préférence.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
|
||
Un chemin vers un fichier contenant les paramètres pour l'échange de clef
|
||
Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
|
||
dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
|
||
Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
|
||
Prosody est @samp{"secp384r1"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
|
||
Une liste d'options de vérification « supplémentaires ».
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
|
||
Mot de passe pour les clefs privées chiffrées.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
|
||
S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
|
||
non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
|
||
Ensemble de mécanismes qui ne seront jamais offerts. Voir
|
||
@url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
|
||
@samp{("DIGEST-MD5")}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
|
||
S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
|
||
non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
|
||
défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
|
||
S'il faut requérir le chiffrement et l'authentification du certificat. Cela
|
||
fournit une sécurité idéale, mais demande que les serveurs avec lesquels
|
||
vous communiquez supportent le chiffrement ET présentent un certificat
|
||
valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
|
||
valeur par défaut est @samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
|
||
Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
|
||
invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
|
||
besoin de s'authentifier avec des certificats. Ils seront authentifiés par
|
||
DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
|
||
est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
|
||
Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
|
||
demander un certificat valide pour certains domaine en spécifiant la liste
|
||
ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
|
||
est @samp{()}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string authentication
|
||
Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
|
||
les mots de passes en texte clair et utilise la configuration de stockage
|
||
des données de Prosody pour stocker les données authentifiées. Si vous
|
||
n'avez pas confiance dans le serveur, lisez
|
||
@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
|
||
d'information sur l'utilisation du moteur hashed. Voir aussi
|
||
@url{https://prosody.im/doc/authentication}. La valeur par défaut est
|
||
@samp{"internal_plain"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
|
||
Indique les options de journalisation. La configuration avancée des
|
||
journaux n'est pas encore supportée par le service Prosody dans GuixSD.
|
||
Voir @url{https://prosody.im/doc/logging}. La valeur par défaut est
|
||
@samp{"*syslog"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
|
||
Fichier où écrire le PID. Voir
|
||
@url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
|
||
@samp{"/var/run/prosody/prosody.pid"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
|
||
Taille maximum autorisée pour le corps HTTP (en octets).
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
|
||
Certains modules exposent leur propre URL de diverses manières. Cette URL
|
||
est construite à partir du protocole, de l'hôte et du port utilisé. Si
|
||
Prosody se trouve derrière un proxy, l'URL publique sera
|
||
@code{http-external-url} à la place. Voir
|
||
@url{https://prosody.im/doc/http#external_url}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
|
||
Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
|
||
créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
|
||
comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
|
||
@samp{"example.com"}. Toutes les options de cette liste seront appliquées
|
||
uniquement à cet hôte.
|
||
|
||
Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
|
||
éviter de le confondre avec le nom d'hôte physique réel de la machine qui
|
||
héberge Prosody. Une seule instance de Prosody peut servir plusieurs
|
||
domaines, chacun défini comme une entrée VirtualHost dans la configuration
|
||
de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
|
||
qu'une entrée VirtualHost.
|
||
|
||
Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
|
||
|
||
Les champs de @code{virtualhost-configuration} disponibles sont :
|
||
|
||
tous ces champs de @code{prosody-configuration} : @code{admins},
|
||
@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
|
||
@code{groups-file}, @code{allow-registration?}, @code{ssl},
|
||
@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
|
||
@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
|
||
@code{s2s-insecure-domains}, @code{s2s-secure-domains},
|
||
@code{authentication}, @code{log}, @code{http-max-content-size},
|
||
@code{http-external-url}, @code{raw-content}, plus :
|
||
@deftypevr {paramètre de @code{virtualhost-configuration}} string domain
|
||
Domaine que vous souhaitez que Prosody serve.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
|
||
Les composant sont des services supplémentaires qui sont disponibles pour
|
||
les clients, habituellement sur un sous-domaine du serveur principal (comme
|
||
@samp{"mycomponent.example.com"}). Des exemples de composants sont des
|
||
serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
|
||
d'autres protocoles.
|
||
|
||
Les composants internes sont implémentés dans des greffons spécifiques à
|
||
Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
|
||
champ de nom d'hôte et le greffon que vous voulez utiliser pour le
|
||
composant.
|
||
|
||
Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
|
||
@samp{()}.
|
||
|
||
Les champs de @code{int-component-configuration} disponibles sont :
|
||
|
||
tous ces champs de @code{prosody-configuration} : @code{admins},
|
||
@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
|
||
@code{groups-file}, @code{allow-registration?}, @code{ssl},
|
||
@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
|
||
@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
|
||
@code{s2s-insecure-domains}, @code{s2s-secure-domains},
|
||
@code{authentication}, @code{log}, @code{http-max-content-size},
|
||
@code{http-external-url}, @code{raw-content}, plus :
|
||
@deftypevr {paramètre de @code{int-component-configuration}} string hostname
|
||
Nom d'hôte du composant.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{int-component-configuration}} string plugin
|
||
Greffon que vous voulez utiliser pour ce composant.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
|
||
Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
|
||
créer des chatrooms/conférences pour les utilisateurs XMPP.
|
||
|
||
Des informations générales sur la configuration des chatrooms
|
||
multi-utilisateurs se trouvent dans la documentation sur les chatrooms
|
||
(@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
|
||
découvrez.
|
||
|
||
Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
|
||
|
||
Les champs de @code{mod-muc-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{mod-muc-configuration}} string name
|
||
Le nom à renvoyer dans les réponses de découverte de services. La valeur
|
||
par défaut est @samp{"Prosody Chatrooms"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
|
||
If @samp{#t}, this will only allow admins to create new chatrooms.
|
||
Otherwise anyone can create a room. The value @samp{"local"} restricts room
|
||
creation to users on the service's parent domain. E.g.@:
|
||
@samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
|
||
value @samp{"admin"} restricts to service administrators only. Defaults to
|
||
@samp{#f}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
|
||
Nombre maximum de messages d'historique qui seront envoyés aux membres qui
|
||
viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
|
||
Les composants externes utilisent XEP-0114, que la plupart des composants
|
||
supportent. Pour ajouter un composant externe, vous remplissez simplement
|
||
le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
|
||
valeur par défaut est @samp{()}.
|
||
|
||
Les champs de @code{ext-component-configuration} disponibles sont :
|
||
|
||
tous ces champs de @code{prosody-configuration} : @code{admins},
|
||
@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
|
||
@code{groups-file}, @code{allow-registration?}, @code{ssl},
|
||
@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
|
||
@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
|
||
@code{s2s-insecure-domains}, @code{s2s-secure-domains},
|
||
@code{authentication}, @code{log}, @code{http-max-content-size},
|
||
@code{http-external-url}, @code{raw-content}, plus :
|
||
@deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
|
||
Mot de passe que le composant utilisera pour s'authentifier.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ext-component-configuration}} string hostname
|
||
Nom d'hôte du composant.
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
|
||
Ports sur lesquels Prosody écoutera les connexions des composants. La
|
||
valeur par défaut est @samp{(5347)}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} string component-interface
|
||
Interface sur laquelle Prosody écoutera les connexions des composants. La
|
||
valeur par défaut est @samp{"127.0.0.1"}.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
|
||
Contenu brut qui sera ajouté au fichier de configuration.
|
||
@end deftypevr
|
||
|
||
Il se peut que vous ayez juste envie de lancer un fichier
|
||
@code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
|
||
enregistrement @code{opaque-prosody-configuration} comme valeur à
|
||
@code{prosody-service-type}. Comme son nom l'indique, une configuration
|
||
opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
|
||
@code{opaque-prosody-configuration} sont :
|
||
|
||
@deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
|
||
Le paquet prosody.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
|
||
Le contenu de @code{prosody.cfg.lua} à utiliser.
|
||
@end deftypevr
|
||
|
||
Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
|
||
pouvez instancier un service prosody comme ceci :
|
||
|
||
@example
|
||
(service prosody-service-type
|
||
(opaque-prosody-configuration
|
||
(prosody.cfg.lua "")))
|
||
@end example
|
||
|
||
@c end of Prosody auto-generated documentation
|
||
|
||
@subsubheading Service BitlBee
|
||
|
||
@cindex IRC (Internet Relay Chat)
|
||
@cindex passerelle IRC
|
||
@url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
|
||
interface IRC vers une variété de protocoles de messagerie instantanée comme
|
||
XMPP.
|
||
|
||
@defvr {Variable Scheme} bitlbee-service-type
|
||
C'est le type de service pour le démon de passerelle IRC
|
||
@url{http://bitlbee.org,BitlBee}. Sa valeur est un
|
||
@code{bitlbee-configuration} (voir plus bas).
|
||
|
||
Pour que BitlBee écoute sur le pourt 6667 sur localhost, ajoutez cette ligne
|
||
à vos services :
|
||
|
||
@example
|
||
(service bitlbee-service-type)
|
||
@end example
|
||
@end defvr
|
||
|
||
@deftp {Type de données} bitlbee-configuration
|
||
C'est la configuration de BitlBee, avec les champs suivants :
|
||
|
||
@table @asis
|
||
@item @code{interface} (par défaut : @code{"127.0.0.1"})
|
||
@itemx @code{port} (par défaut : @code{6667})
|
||
Écoute sur l'interface réseau correspondant à l'adresse IP dans
|
||
@var{interface}, sur @var{port}.
|
||
|
||
Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
|
||
peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
|
||
peuvent venir de n'importe quelle interface réseau.
|
||
|
||
@item @code{package} (par défaut : @code{bitlbee})
|
||
Le paquet BitlBee à utiliser.
|
||
|
||
@item @code{plugins} (par défaut : @code{'()})
|
||
Liste des paquets de greffons à utiliser — p.@: ex.@:
|
||
@code{bitlbee-discord}.
|
||
|
||
@item @code{extra-settings} (par défaut : @code{""})
|
||
Partie de configuration ajoutée telle-quelle au fichier de configuration de
|
||
BitlBee.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Services de téléphonie
|
||
@subsubsection Services de téléphonie
|
||
|
||
@cindex Murmur (serveur VoIP)
|
||
@cindex serveur VoIP
|
||
Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
|
||
est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
|
||
Mumble}.
|
||
|
||
@deftp {Type de données} murmur-configuration
|
||
Le type de service pour le serveur Murmur. Voici un exemple de
|
||
configuration :
|
||
|
||
@example
|
||
(service murmur-service-type
|
||
(murmur-configuration
|
||
(welcome-text
|
||
"Welcome to this Mumble server running on GuixSD!")
|
||
(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
|
||
pendant la phase d'activation.
|
||
|
||
Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
|
||
lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
|
||
@code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
|
||
vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
|
||
avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
|
||
que vous avez indiqué précédemment et accordez les droits administrateur ou
|
||
modérateur à vous utilisateur mumble nouvellement enregistré et créez
|
||
quelques salons.
|
||
|
||
Les champs de @code{murmur-configuration} disponibles sont :
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{mumble})
|
||
Paquet qui contient @code{bin/murmurd}.
|
||
|
||
@item @code{user} (par défaut : @code{"murmur"})
|
||
Utilisateur qui lancera le serveur Murmur.
|
||
|
||
@item @code{group} (par défaut : @code{"murmur"})
|
||
Groupe de l'utilisateur qui lancera le serveur Murmur.
|
||
|
||
@item @code{port} (par défaut : @code{64738})
|
||
Port sur lequel le serveur écoutera.
|
||
|
||
@item @code{welcome-text} (par défaut : @code{""})
|
||
Texte de bienvenue envoyé aux clients lors de leur connexion.
|
||
|
||
@item @code{server-password} (par défaut : @code{""})
|
||
Mot de passe que les clients devront entrer pour se connecter.
|
||
|
||
@item @code{max-users} (par défaut : @code{100})
|
||
Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
|
||
temps.
|
||
|
||
@item @code{max-user-bandwidth} (par défaut : @code{#f})
|
||
Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
|
||
|
||
@item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
|
||
Nom de fichier de la base de données sqlite. L'utilisateur du service
|
||
deviendra propriétaire du répertoire.
|
||
|
||
@item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
|
||
Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
|
||
du répertoire.
|
||
|
||
@item @code{autoban-attempts} (par défaut : @code{10})
|
||
Nombre maximum de connexions qu'un utilisateur peut faire pendant
|
||
@code{autoban-timeframe} sans être banni automatiquement pour
|
||
@code{autoban-time}.
|
||
|
||
@item @code{autoban-timeframe} (par défaut : @code{120})
|
||
Durée du temps pendant lequel le nombre de connexions est compté.
|
||
|
||
@item @code{autoban-time} (par défaut : @code{300})
|
||
Durée du bannissement automatique en secondes.
|
||
|
||
@item @code{opus-threshold} (par défaut : @code{100})
|
||
Pourcentage des clients qui doivent supporter opus avant de passer sur le
|
||
codec audio opus.
|
||
|
||
@item @code{channel-nesting-limit} (par défaut : @code{10})
|
||
Profondeur maximum des canaux.
|
||
|
||
@item @code{channelname-regex} (par défaut : @code{#f})
|
||
Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
|
||
doivent respecter.
|
||
|
||
@item @code{username-regex} (par défaut : @code{#f})
|
||
Une chaîne de la forme d'une expression régulière Qt que les noms
|
||
d'utilisateurs doivent respecter.
|
||
|
||
@item @code{text-message-length} (par défaut : @code{5000})
|
||
Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
|
||
textuel.
|
||
|
||
@item @code{image-message-length} (par défaut : @code{(* 128 1024)})
|
||
Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
|
||
|
||
@item @code{cert-required?} (par défaut : @code{#f})
|
||
Si la valeur est @code{#t} les clients utilisant une authentification par
|
||
mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
|
||
compléter l'assistant de configuration des certificats pour rejoindre le
|
||
serveur.
|
||
|
||
@item @code{remember-channel?} (paramètre de : @code{#f})
|
||
Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
|
||
les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
|
||
se reconnectent.
|
||
|
||
@item @code{allow-html?} (par défaut : @code{#f})
|
||
Indique si le html est autorisé dans les messages textuels, les commentaires
|
||
utilisateurs et les descriptions des canaux.
|
||
|
||
@item @code{allow-ping?} (par défaut : @code{#f})
|
||
Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
|
||
maximum et la bande passante maximale du serveur par client aux utilisateurs
|
||
non connectés. Dans le client Mumble, cette information est affichée dans
|
||
la boîte de dialogue de connexion.
|
||
|
||
Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
|
||
|
||
@item @code{bonjour?} (par défaut : @code{#f})
|
||
Indique si le serveur se présente sur le réseau local à travers le protocole
|
||
bonjour.
|
||
|
||
@item @code{send-version?} (par défaut : @code{#f})
|
||
Indique si la version du serveur murmur doit être exposée dans les requêtes
|
||
ping.
|
||
|
||
@item @code{log-days} (par défaut : @code{31})
|
||
Murmur stocke aussi les journaux en base de données, qui sont accessible via
|
||
RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
|
||
les garder pour toujours ou à -1 pour désactiver la journalisation dans la
|
||
base de données.
|
||
|
||
@item @code{obfuscate-ips?} (par défaut : @code{#t})
|
||
Indique si les IP enregistrées doivent être cachées pour protéger la vie
|
||
privée des utilisateurs.
|
||
|
||
@item @code{ssl-cert} (par défaut : @code{#f})
|
||
Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
|
||
|
||
@example
|
||
(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
|
||
@end example
|
||
@item @code{ssl-key} (par défaut : @code{#f})
|
||
Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
|
||
@example
|
||
(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
|
||
@end example
|
||
|
||
@item @code{ssl-dh-params} (par défaut : @code{#f})
|
||
Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
|
||
pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
|
||
@code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
|
||
@code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
|
||
inclus de la RFC 7919.
|
||
|
||
@item @code{ssl-ciphers} (par défaut : @code{#f})
|
||
L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
|
||
disponibles pour SSL/TLS.
|
||
|
||
Cette option est spécifiée en utilisant
|
||
l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
|
||
OpenSSL cipher list notation}
|
||
|
||
Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
|
||
« openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
|
||
des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
|
||
nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
|
||
que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
|
||
|
||
Remarque : modifier cette option peut impacter la rétrocompatibilité de
|
||
votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
|
||
connectent.
|
||
|
||
@item @code{public-registration} (par défaut : @code{#f})
|
||
Doit être un enregistrement
|
||
@code{<murmur-public-registration-configuration>} ou @code{#f}.
|
||
|
||
Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
|
||
publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
|
||
pas enregistrer votre serveur si vous avez un @code{server-password} ou
|
||
@code{allow-ping} à @code{#f}.
|
||
|
||
Cela peut prendre quelques heures avant d'arriver sur la liste publique.
|
||
|
||
@item @code{file} (par défaut : @code{#f})
|
||
Version alternative de cette configuration : si vous indiquez quelque chose,
|
||
le reste est ignoré.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} murmur-public-registration-configuration
|
||
Configuration pour l'enregistrement public du service murmur.
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
|
||
d'hôte.
|
||
|
||
@item @code{password}
|
||
Un mot de passe pour identifier votre enregistrement. Les mises à jours
|
||
suivantes devront utiliser le même mot de passe. Ne le perdez pas.
|
||
|
||
@item @code{url}
|
||
Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
|
||
web.
|
||
|
||
@item @code{hostname} (par défaut : @code{#f})
|
||
Par défaut votre serveur sera listé par son adresse IP. Si cette option est
|
||
indiquée votre serveur sera listé par son nom d'hôte.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
|
||
@node Services de surveillance
|
||
@subsubsection Services de surveillance
|
||
|
||
@subsubheading Service Tailon
|
||
|
||
@uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
|
||
visualiser et chercher des fichiers de journaux.
|
||
|
||
L'exemple suivant configurera le service avec les valeurs par défaut. Par
|
||
défaut, on peut accéder à Tailon sur le pour 8080
|
||
(@code{http://localhost:8080}).
|
||
|
||
@example
|
||
(service tailon-service-type)
|
||
@end example
|
||
|
||
L'exemple suivant personnalise un peu plus la configuration de Tailon, en
|
||
ajoutant @command{sed} à la liste des commandes autorisées.
|
||
|
||
@example
|
||
(service tailon-service-type
|
||
(tailon-configuration
|
||
(config-file
|
||
(tailon-configuration-file
|
||
(allowed-commands '("tail" "grep" "awk" "sed"))))))
|
||
@end example
|
||
|
||
|
||
@deftp {Type de données} tailon-configuration
|
||
Type de données représentant la configuration de Tailon. Ce type a les
|
||
paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
|
||
Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
|
||
un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
|
||
(@pxref{G-Expressions}).
|
||
|
||
Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
|
||
fonction @code{local-file} :
|
||
|
||
@example
|
||
(service tailon-service-type
|
||
(tailon-configuration
|
||
(config-file (local-file "./my-tailon.conf"))))
|
||
@end example
|
||
|
||
@item @code{package} (par défaut : @code{tailon})
|
||
Le paquet tailon à utiliser.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} tailon-configuration-file
|
||
Type de données représentant les options de configuration de Tailon. Ce
|
||
type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{files} (par défaut : @code{(list "/var/log")})
|
||
Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
|
||
fichiers simple ou des répertoires, ou une liste, où le premier élément est
|
||
le nom d'un sous-section et le reste des fichiers ou des répertoires de
|
||
cette sous-section.
|
||
|
||
@item @code{bind} (par défaut : @code{"localhost:8080"})
|
||
Adresse et port sur lesquels Tailon écoute.
|
||
|
||
@item @code{relative-root} (par défaut : @code{#f})
|
||
Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
|
||
chemin.
|
||
|
||
@item @code{allow-transfers?} (par défaut : @code{#t})
|
||
Permet de télécharger les journaux dans l'interface web.
|
||
|
||
@item @code{follow-names?} (par défaut : @code{#t})
|
||
Permet de surveiller des fichiers qui n'existent pas encore.
|
||
|
||
@item @code{tail-lines} (par défaut : @code{200})
|
||
Nombre de lignes à lire initialement dans chaque fichier.
|
||
|
||
@item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
|
||
Commandes autorisées. Par défaut, @code{sed} est désactivé.
|
||
|
||
@item @code{debug?} (par défaut : @code{#f})
|
||
Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
|
||
|
||
@item @code{wrap-lines} (par défaut : @code{#t})
|
||
État initial du retour à la ligne dans l'interface web. Configurez l'option
|
||
à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
|
||
pas retourner à la ligne au début.
|
||
|
||
@item @code{http-auth} (par défaut : @code{#f})
|
||
Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
|
||
l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
|
||
et @code{"basic"}.
|
||
|
||
@item @code{users} (par défaut : @code{#f})
|
||
Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
|
||
restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
|
||
utilisez une liste de paires, où le premier élément de la paire est le nom
|
||
d'utilisateur et le second élément est le mot de passe.
|
||
|
||
@example
|
||
(tailon-configuration-file
|
||
(http-auth "basic")
|
||
(users '(("user1" . "password1")
|
||
("user2" . "password2"))))
|
||
@end example
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@subsubheading Service Darkstat
|
||
@cindex darkstat
|
||
Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
|
||
calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
|
||
|
||
@defvar {Variable Scheme} darkstat-service-type
|
||
C'est le type de service pour le service
|
||
@uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
|
||
enregistrement @code{darkstat-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service darkstat-service-type
|
||
(darkstat-configuration
|
||
(interface "eno1")))
|
||
@end example
|
||
@end defvar
|
||
|
||
@deftp {Type de données} darkstat-configuration
|
||
Type de données représentant la configuration de @command{darkstat}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{darkstat})
|
||
Le paquet darkstat à utiliser.
|
||
|
||
@item @code{interface}
|
||
Capture le trafic sur l'interface réseau spécifiée.
|
||
|
||
@item @code{port} (par défaut : @code{"667"})
|
||
Lie l'interface web sur le port spécifié.
|
||
|
||
@item @code{bind-address} (par défaut : @code{"127.0.0.1"})
|
||
Lie l'interface web sur l'adresse spécifiée.
|
||
|
||
@item @code{base} (par défaut : @code{"/"})
|
||
Spécifie le chemin de base des URL. C'est utile si on accède à
|
||
@command{darkstat} à travers un proxy inverse.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Service d'export de nœud de Prometheus
|
||
|
||
@cindex prometheus-node-exporter
|
||
L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
|
||
matériel et le système d'exploitation fournies par le noyau Linux pour le
|
||
système de surveillance Prometheus. Ce service devrait être déployé sur
|
||
tous les nœuds physiques et les machines virtuelles, où vous voulez
|
||
surveiller ces statistiques.
|
||
|
||
@defvar {Variable Scheme} prometheus-node-exporter-service-type
|
||
C'est le type de service pour le service
|
||
@uref{https://github.com/prometheus/node_exporter/,
|
||
prometheus-node-exporter}, sa valeur doit être un enregistrement
|
||
@code{prometheus-node-exporter-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service prometheus-node-exporter-service-type
|
||
(prometheus-node-exporter-configuration
|
||
(web-listen-address ":9100")))
|
||
@end example
|
||
@end defvar
|
||
|
||
@deftp {Type de données} prometheus-node-exporter-configuration
|
||
Type de données représentant la configuration de @command{node_exporter}
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
|
||
Le paquet prometheus-node-exporter à utiliser.
|
||
|
||
@item @code{web-listen-address} (par défaut : @code{":9100"})
|
||
Lie l'interface web sur l'adresse spécifiée.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services Kerberos
|
||
@subsubsection Services Kerberos
|
||
@cindex Kerberos
|
||
|
||
Le module @code{(gnu services kerberos)} fournit des services liés au
|
||
protocole d'authentification @dfn{Kerberos}.
|
||
|
||
@subsubheading Service Krb5
|
||
|
||
Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
|
||
trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
|
||
génère un tel fichier à partir d'une définition fournie par la déclaration
|
||
de système d'exploitation. Il ne démarre aucun démon.
|
||
|
||
Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
|
||
explicitement. Ce service est connu pour fonctionner avec la bibliothèque
|
||
cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
|
||
testées.
|
||
|
||
@defvr {Variable Scheme} krb5-service-type
|
||
Un type de service pour les clients Kerberos 5.
|
||
@end defvr
|
||
|
||
@noindent
|
||
Voici un exemple d'utilisation :
|
||
@lisp
|
||
(service krb5-service-type
|
||
(krb5-configuration
|
||
(default-realm "EXAMPLE.COM")
|
||
(allow-weak-crypto? #t)
|
||
(realms (list
|
||
(krb5-realm
|
||
(name "EXAMPLE.COM")
|
||
(admin-server "groucho.example.com")
|
||
(kdc "karl.example.com"))
|
||
(krb5-realm
|
||
(name "ARGRX.EDU")
|
||
(admin-server "kerb-admin.argrx.edu")
|
||
(kdc "keys.argrx.edu"))))))
|
||
@end lisp
|
||
|
||
@noindent
|
||
Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
|
||
@itemize
|
||
@item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
|
||
aillant des serveurs d'administration et des centres de distribution de
|
||
clefs distincts ;
|
||
@item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
|
||
explicitement par les clients ;
|
||
@item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
|
||
@end itemize
|
||
|
||
Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
|
||
champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
|
||
et plus de détails sur chacun d'entre eux, voir la documentation de MIT
|
||
@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
|
||
|
||
|
||
@deftp {Type de données} krb5-realm
|
||
@cindex domaine, kerberos
|
||
@table @asis
|
||
@item @code{name}
|
||
Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
|
||
courante est d'utiliser le nom pleinement qualifié de votre organisation,
|
||
converti en majuscule.
|
||
|
||
@item @code{admin-server}
|
||
Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
|
||
tourne.
|
||
|
||
@item @code{kdc}
|
||
Ce champ est une chaîne identifiant le centre de distribution de clefs pour
|
||
ce domaine.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} krb5-configuration
|
||
|
||
@table @asis
|
||
@item @code{allow-weak-crypto?} (par défaut : @code{#f})
|
||
Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
|
||
de chiffrement faibles seront acceptés.
|
||
|
||
@item @code{default-realm} (par défaut : @code{#f})
|
||
Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
|
||
pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
|
||
ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
|
||
pour chaque principal Kerberos à l'invocation des programmes comme
|
||
@command{kinit}.
|
||
|
||
@item @code{realms}
|
||
Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
|
||
clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
|
||
@code{name} qui correspond au champ @code{default-realm}.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@subsubheading Service PAM krb5
|
||
@cindex pam-krb5
|
||
|
||
Le service @code{pam-krb5} permet la connexion et la gestion des mots de
|
||
passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
|
||
applications qui utilisent PAM puissent authentifier automatiquement les
|
||
utilisateurs avec Kerberos.
|
||
|
||
@defvr {Variable Scheme} pam-krb5-service-type
|
||
Un type de service pour le module PAM Kerberos 5.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} pam-krb5-configuration
|
||
Type de données représentant la configuration du module PAM Kerberos 5. Ce
|
||
type a les paramètres suivants :
|
||
@table @asis
|
||
@item @code{pam-krb5} (par défaut : @code{pam-krb5})
|
||
Le paquet pam-krb5 à utiliser.
|
||
|
||
@item @code{minimum-uid} (par défaut : @code{1000})
|
||
Le plus petite ID utilisateur pour lequel les authentifications Kerberos
|
||
devraient être tentées. Les comptes locaux avec une valeur plus petite
|
||
échoueront silencieusement leur authentification Kerberos.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Services web
|
||
@subsubsection Services web
|
||
|
||
@cindex web
|
||
@cindex www
|
||
@cindex HTTP
|
||
Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
|
||
serveur web nginx et aussi un démon fastcgi.
|
||
|
||
@subsubheading Serveur Apache HTTP
|
||
|
||
@deffn {Variable Scheme} httpd-service-type
|
||
Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
|
||
(@dfn{httpd}). La valeur de ce type de service est un enregistrement
|
||
@code{httpd-configuration}.
|
||
|
||
Un exemple de configuration simple est donné ci-dessous.
|
||
|
||
@example
|
||
(service httpd-service-type
|
||
(httpd-configuration
|
||
(config
|
||
(httpd-config-file
|
||
(server-name "www.example.com")
|
||
(document-root "/srv/http/www.example.com")))))
|
||
@end example
|
||
|
||
D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
|
||
ajouté à la configuration.
|
||
|
||
@example
|
||
(simple-service 'my-extra-server httpd-service-type
|
||
(list
|
||
(httpd-virtualhost
|
||
"*:80"
|
||
(list (string-append
|
||
"ServerName "www.example.com
|
||
DocumentRoot \"/srv/http/www.example.com\"")))))
|
||
@end example
|
||
@end deffn
|
||
|
||
Les détails des types d'enregistrement @code{httpd-configuration},
|
||
@code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
|
||
sont donnés plus bas.
|
||
|
||
@deffn {Type de données} httpd-configuration
|
||
Ce type de données représente la configuration du service httpd.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{httpd})
|
||
Le paquet httpd à utiliser.
|
||
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
|
||
Le fichier de pid utilisé par le service shepherd.
|
||
|
||
@item @code{config} (par défaut : @code{(httpd-config-file)})
|
||
Le fichier de configuration à utiliser avec le service httpd. La valeur par
|
||
défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
|
||
être un G-expression qui génère un fichier, par exemple un
|
||
@code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
|
||
avec une chaîne de caractères.
|
||
|
||
@end table
|
||
@end deffn
|
||
|
||
@deffn {Type de données} httpd-module
|
||
Ce type de données représente un module pour le service httpd.
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Le nom du module.
|
||
|
||
@item @code{file}
|
||
Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
|
||
l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
|
||
le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
|
||
|
||
@end table
|
||
@end deffn
|
||
|
||
@defvr {Variable Scheme} %default-httpd-modules
|
||
Une liste par défaut des objets @code{httpd-module}.
|
||
@end defvr
|
||
|
||
@deffn {Type de données} httpd-config-file
|
||
Ce type de données représente un fichier de configuration pour le service
|
||
httpd.
|
||
|
||
@table @asis
|
||
@item @code{modules} (par défaut : @code{%default-httpd-modules})
|
||
Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
|
||
ou chargés par des configuration supplémentaires.
|
||
|
||
Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
|
||
utiliser le module @code{mod_proxy_fcgi} d'Apache avec
|
||
@code{php-fpm-service-type} :
|
||
|
||
@example
|
||
(service httpd-service-type
|
||
(httpd-configuration
|
||
(config
|
||
(httpd-config-file
|
||
(modules (cons*
|
||
(httpd-module
|
||
(name "proxy_module")
|
||
(file "modules/mod_proxy.so"))
|
||
(httpd-module
|
||
(name "proxy_fcgi_module")
|
||
(file "modules/mod_proxy_fcgi.so"))
|
||
%default-httpd-modules))
|
||
(extra-config (list "\
|
||
<FilesMatch \\.php$>
|
||
SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
|
||
</FilesMatch>"))))))
|
||
(service php-fpm-service-type
|
||
(php-fpm-configuration
|
||
(socket "/var/run/php-fpm.sock")
|
||
(socket-group "httpd")))
|
||
@end example
|
||
|
||
@item @code{server-root} (par défaut : @code{httpd})
|
||
Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
|
||
httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
|
||
relativement à la racine du serveur.
|
||
|
||
@item @code{server-name} (par défaut : @code{#f})
|
||
Le @code{ServerName} dans le fichier de configuration, utilisé pour
|
||
spécifier le schéma de requête, le nom d'hôte et le port que le serveur
|
||
utilise pour s'identifier.
|
||
|
||
Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
|
||
spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
|
||
ne pas spécifier de @code{ServerName}.
|
||
|
||
@item @code{document-root} (par défaut : @code{"/srv/http"})
|
||
Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
|
||
|
||
@item @code{listen} (par défaut : @code{'("80")})
|
||
La liste des valeurs pour les directives @code{Listen} dans le fichier de
|
||
configuration. La valeur devrait être une liste de chaînes, où chacune
|
||
spécifie le port sur lequel écouter et éventuellement une adresse IP et un
|
||
protocole à utiliser.
|
||
|
||
@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
|
||
Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
|
||
indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
|
||
correctement configuré.
|
||
|
||
@item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
|
||
Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
|
||
|
||
@item @code{user} (par défaut : @code{"httpd"})
|
||
Le @code{User} en tant que lequel le serveur répondra aux requêtes.
|
||
|
||
@item @code{group} (par défaut : @code{"httpd"})
|
||
Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
|
||
|
||
@item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
|
||
Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
|
||
du fichier de configuration.
|
||
|
||
N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
|
||
cette liste.
|
||
|
||
@end table
|
||
@end deffn
|
||
|
||
@deffn {Type de données} httpd-virtualhost
|
||
Ce type de données représente la configuration d'un hôte virtuel pour le
|
||
service httpd.
|
||
|
||
Ils devraient être ajoutés à extra-config dans httpd-service.
|
||
|
||
@example
|
||
(simple-service 'my-extra-server httpd-service-type
|
||
(list
|
||
(httpd-virtualhost
|
||
"*:80"
|
||
(list (string-append
|
||
"ServerName "www.example.com
|
||
DocumentRoot \"/srv/http/www.example.com\"")))))
|
||
@end example
|
||
|
||
@table @asis
|
||
@item @code{addresses-and-ports}
|
||
L'adresse et le port pour la directive @code{VirtualHost}.
|
||
|
||
@item @code{contents}
|
||
Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
|
||
de chaîne et de G-expressions.
|
||
|
||
@end table
|
||
@end deffn
|
||
|
||
@subsubheading NGINX
|
||
|
||
@deffn {Variable Scheme} nginx-service-type
|
||
Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
|
||
valeur de ce service est un enregistrement @code{<nginx-configuration>}.
|
||
|
||
Un exemple de configuration simple est donné ci-dessous.
|
||
|
||
@example
|
||
(service nginx-service-type
|
||
(nginx-configuration
|
||
(server-blocks
|
||
(list (nginx-server-configuration
|
||
(server-name '("www.example.com"))
|
||
(root "/srv/http/www.example.com"))))))
|
||
@end example
|
||
|
||
En plus d'ajouter des blocs de serveurs dans la configuration du service
|
||
directement, ce service peut être étendu par d'autres services pour ajouter
|
||
des blocs de serveurs, comme dans cet exemple :
|
||
|
||
@example
|
||
(simple-service 'my-extra-server nginx-service-type
|
||
(list (nginx-server-configuration
|
||
(root "/srv/http/extra-website")
|
||
(try-files (list "$uri" "$uri/index.html")))))
|
||
@end example
|
||
@end deffn
|
||
|
||
Au démarrage, @command{nginx} n'a pas encore lu son fichier de
|
||
configuration, donc il utilise les fichiers par défaut pour les messages
|
||
d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
|
||
seront enregistrés. Après la lecture du fichier de configuration, le
|
||
fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
|
||
notre cas, les messages d'erreur au démarage se trouvent dans
|
||
@file{/var/run/nginx/logs/error.log} et après la configuration dans
|
||
@file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
|
||
avec l'option de configuration @var{log-directory}.
|
||
|
||
@deffn {Type de données} nginx-configuration
|
||
Ce type de données représente la configuration de NGinx. Certaines
|
||
configurations peuvent se faire ici et d'autres fournissent des types
|
||
d'enregistrement ou éventuellement, on peut fournir un fichier de
|
||
configuration.
|
||
|
||
@table @asis
|
||
@item @code{nginx} (par défaut : @code{nginx})
|
||
Le paquet nginx à utiliser.
|
||
|
||
@item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
|
||
Le répertoire dans lequel NGinx écrira ses fichiers journaux.
|
||
|
||
@item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
|
||
Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
|
||
fichiers temporaires.
|
||
|
||
@item @code{server-blocks} (par défaut : @code{'()})
|
||
Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
|
||
généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
|
||
|
||
L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
|
||
le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
|
||
@example
|
||
(service nginx-service-type
|
||
(nginx-configuration
|
||
(server-blocks
|
||
(list (nginx-server-configuration
|
||
(server-name '("www.example.com"))
|
||
(root "/srv/http/www.example.com"))))))
|
||
@end example
|
||
|
||
@item @code{upstream-blocks} (par défaut : @code{'()})
|
||
Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
|
||
généré, dont les éléments sont de type
|
||
@code{<nginx-upstream-configuration>}.
|
||
|
||
Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
|
||
utile en combinaison avec @code{locations} dans les enregistrements
|
||
@code{<nginx-server-configuration>}. L'exemple suivant crée une
|
||
configuration de serveur avec une configuration « location » qui sera
|
||
mandataire pour une configuration amont, qui gérera les requêtes avec deux
|
||
serveurs.
|
||
|
||
@example
|
||
(service
|
||
nginx-service-type
|
||
(nginx-configuration
|
||
(server-blocks
|
||
(list (nginx-server-configuration
|
||
(server-name '("www.example.com"))
|
||
(root "/srv/http/www.example.com")
|
||
(locations
|
||
(list
|
||
(nginx-location-configuration
|
||
(uri "/path1")
|
||
(body '("proxy_pass http://server-proxy;"))))))))
|
||
(upstream-blocks
|
||
(list (nginx-upstream-configuration
|
||
(name "server-proxy")
|
||
(servers (list "server1.example.com"
|
||
"server2.example.com")))))))
|
||
@end example
|
||
|
||
@item @code{file} (par défaut : @code{#f})
|
||
Si un fichier de configuration @var{file} est fourni, il sera utilisé au
|
||
lieu de générer un fichier de configuration à partir des
|
||
@code{log-directory}, @code{run-directory}, @code{server-blocks} et
|
||
@code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
|
||
devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
|
||
les répertoires sont créé lorsque le service est activé.
|
||
|
||
Cela peut être utile si vous avez déjà un fichier de configuration existant
|
||
ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
|
||
parties de l'enregistrement nginx-configuration.
|
||
|
||
@item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
|
||
Taille du seau pour les tables de hashage des noms de serveurs, par dauft
|
||
@code{#f} pour utilise la taille des lignes de cache du processeur.
|
||
|
||
@item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
|
||
Taille maximum des seaux pour les tables de hashage des serveurs de noms.
|
||
|
||
@item @code{extra-content} (par défaut : @code{""})
|
||
Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
|
||
un G-expression.
|
||
|
||
@end table
|
||
@end deffn
|
||
|
||
@deftp {Type de données} nginx-server-configuration
|
||
Type de données représentant la configuration d'un bloc serveur de nginx.
|
||
Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{listen} (par défaut : @code{'("80" "443 ssl")})
|
||
Chaque directive @code{listen} indique l'adresse et le port pour le
|
||
protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
|
||
acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
|
||
l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
|
||
exemple :
|
||
|
||
@example
|
||
'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
|
||
@end example
|
||
|
||
@item @code{server-name} (par défaut : @code{(list 'default)})
|
||
Une liste de noms de serveurs que ce serveur représente. @code{'default}
|
||
représente le serveur par défaut pour les connexions qui ne correspondent à
|
||
aucun autre serveur.
|
||
|
||
@item @code{root} (par défaut : @code{"/srv/http"})
|
||
Racine du site web que sert nginx.
|
||
|
||
@item @code{locations} (par défaut : @code{'()})
|
||
Une liste d'enregistrements @dfn{nginx-location-configuration} ou
|
||
@dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
|
||
|
||
@item @code{index} (par défaut : @code{(list "index.html")})
|
||
Fichiers d'index à chercher lorsque les clients demandent un répertoire.
|
||
S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
|
||
répertoire.
|
||
|
||
@item @code{try-files} (par défaut : @code{'()})
|
||
Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
|
||
spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
|
||
la requête.
|
||
|
||
@item @code{ssl-certificate} (par défaut : @code{#f})
|
||
Où trouver les certificats pour les connexions sécurisées. Indiquez
|
||
@code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
|
||
utiliser HTTPS.
|
||
|
||
@item @code{ssl-certificate-key} (par défaut : @code{#f})
|
||
Où trouver la clef privée pour les connexions sécurisées. Indiquez
|
||
@code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
|
||
HTTPS.
|
||
|
||
@item @code{server-tokens?} (par défaut : @code{#f})
|
||
Indique si le serveur devrait ajouter sa configuration dans les réponses.
|
||
|
||
@item @code{raw-content} (par défaut : @code{'()})
|
||
Une liste de lignes brutes à ajouter dans le bloc serveur.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} nginx-upstream-configuration
|
||
Type de données représentant la configuration d'un bloc @code{upstream}
|
||
nginx. Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Nome de ces groupe de serveurs.
|
||
|
||
@item @code{serveurs}
|
||
Specify the addresses of the servers in the group. The address can be
|
||
specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
|
||
@samp{backend1.example.com}) or a path to a UNIX socket using the prefix
|
||
@samp{unix:}. For addresses using an IP address or domain name, the default
|
||
port is 80, and a different port can be specified explicitly.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} nginx-location-configuration
|
||
Type de données représentant la configuration d'un bloc @code{location}
|
||
nginx. Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{uri}
|
||
URI qui correspond à ce bloc.
|
||
|
||
@anchor{nginx-location-configuration body}
|
||
@item @code{body}
|
||
Corps du block location, spécifié comme une liste de chaînes de caractères.
|
||
Cela peut contenir de nombreuses directives de configuration. PAr exemple,
|
||
pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
|
||
@code{nginx-upstream-configuration}, la directive suivante peut être
|
||
spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} nginx-named-location-configuration
|
||
Type de données représentant la configuration d'un bloc location nginx
|
||
nommé. Les blocs location nommés sont utilisé les redirections de requêtes
|
||
et pas pour le traitement des requêtes normales. Ce type a les paramètres
|
||
suivants :
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Nom pour identifier ce bloc location.
|
||
|
||
@item @code{body}
|
||
@xref{nginx-location-configuration body}, comme le corps d'un bloc location
|
||
nommé peut être utilisé de la même manière que
|
||
@code{nginx-location-configuration body}. Une restriction est que le corps
|
||
d'un bloc location nommé ne peut pas contenir de bloc location.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Cache Varnish
|
||
@cindex Varnish
|
||
Varnish est un serveur de cache rapide qui se trouve entre les applications
|
||
web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
|
||
des clients et met les URL accédées en cache pour que plusieurs requêtes à
|
||
la même ressource ne crée qu'une requête au moteur.
|
||
|
||
@defvr {Variable Scheme} varnish-service-type
|
||
Type de service pour le démon Varnish.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} varnish-configuration
|
||
Type de données représentant la configuration du service @code{varnish}. Ce
|
||
type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{varnish})
|
||
Le paquet Varnish à utiliser.
|
||
|
||
@item @code{name} (par défaut : @code{"default"})
|
||
Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
|
||
@file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
|
||
endroit. Si le nom commence par une barre oblique, il est interprété comme
|
||
un nom de répertoire absolu.
|
||
|
||
Pass the @code{-n} argument to other Varnish programs to connect to the
|
||
named instance, e.g.@: @command{varnishncsa -n default}.
|
||
|
||
@item @code{backend} (par défaut : @code{"localhost:8080"})
|
||
Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
|
||
|
||
@item @code{vcl} (par défaut : #f)
|
||
Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
|
||
valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
|
||
la configuration par défaut. Sinon, ce doit être un objet simili-fichier
|
||
avec une syntaxe VCL valide.
|
||
|
||
@c Varnish does not support HTTPS, so keep this URL to avoid confusion.
|
||
Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
|
||
avec VCL vous pouvez faire quelque chose comme cela :
|
||
|
||
@example
|
||
(define %gnu-mirror
|
||
(plain-file
|
||
"gnu.vcl"
|
||
"vcl 4.1;
|
||
backend gnu @{ .host = "www.gnu.org"; @}"))
|
||
|
||
(operating-system
|
||
...
|
||
(services (cons (service varnish-service-type
|
||
(varnish-configuration
|
||
(listen '(":80"))
|
||
(vcl %gnu-mirror)))
|
||
%base-services)))
|
||
@end example
|
||
|
||
On peut inspecter la configuration d'une instance Varnish actuellement
|
||
lancée en utilisant le programme @command{varnishadm}.
|
||
|
||
Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
|
||
varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
|
||
pour une documentation complète sur Varnish et son langage de configuration.
|
||
|
||
@item @code{listen} (par défaut : @code{'("localhost:80")})
|
||
Liste des adresses sur lesquelles écoute Varnish.
|
||
|
||
@item @code{storage} (par défaut : @code{'("malloc,128m")})
|
||
Liste de moteurs de stockage qui seront disponibles en VCL.
|
||
|
||
@item @code{parameters} (par défaut : @code{'()})
|
||
Liste des paramètres à l'exécution de la forme @code{'(("parameter"
|
||
. "value"))}.
|
||
|
||
@item @code{extra-options} (par défaut : @code{'()})
|
||
Arguments supplémentaires à passer au processus @command{varnishd}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading FastCGI
|
||
@cindex fastcgi
|
||
@cindex fcgiwrap
|
||
FastCGI est une interface entre le frontal et le moteur d'un service web.
|
||
C'est un dispositif quelque peu désué ; les nouveaux services devraient
|
||
généralement juste parler HTTP entre le frontal et le moteur. Cependant il
|
||
y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
|
||
Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
|
||
Guix.
|
||
|
||
Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
|
||
nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
|
||
écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
|
||
intermédiaire qui se trouve entre le processus du moteur et le serveur web.
|
||
Le frontal indique quel moteur lancer, en passant cette information au
|
||
processus @code{fcgiwrap}.
|
||
|
||
@defvr {Variable Scheme} fcgiwrap-service-type
|
||
Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} fcgiwrap-configuration
|
||
Type de données représentant la configuration d'un service @code{fcgiwrap}.
|
||
Ce type a les paramètres suivants :
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{fcgiwrap})
|
||
Le paquet fcgiwrap à utiliser.
|
||
|
||
@item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
|
||
Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
|
||
de caractères. Les valeurs valides de @var{socket} sont
|
||
@code{unix:@var{/path/to/unix/socket}},
|
||
@code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
|
||
@code{tcp6:[@var{ipv6_addr}]:port}.
|
||
|
||
@item @code{user} (par défaut : @code{fcgiwrap})
|
||
@itemx @code{group} (par défaut : @code{fcgiwrap})
|
||
Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
|
||
sous lesquels lancer le processus @code{fcgiwrap}. Le service
|
||
@code{fastcgi} s'assurera que si l'utilisateur demande les noms
|
||
d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
|
||
correspondant seront présents sur le système.
|
||
|
||
Il est possible de configurer un service web soutenu par FastCGI pour passer
|
||
les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
|
||
et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
|
||
l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
|
||
moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
|
||
@code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
|
||
sur le frontal.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex php-fpm
|
||
PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
|
||
alternative avec quelques fonctionnalités supplémentaires utiles pour les
|
||
sites de toutes tailles.
|
||
|
||
Ces fonctionnalités comprennent :
|
||
@itemize @bullet
|
||
@item La création de processus adaptative
|
||
@item Des statistiques de base (comme le mod_status d'Apache)
|
||
@item La gestion des processus avancée avec arrêt et démarrage sans heurts
|
||
@item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
|
||
et différents php.ini (à la place de safe_mode)
|
||
@item L'enregistrement des journaux sur stdout et stderr
|
||
@item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
|
||
@item Le support des téléversements accélérés
|
||
@item Le support de « showlog »
|
||
@item Des améliorations à FastCGI, comme fastcgi_finish_request() -
|
||
une fonction spéciale pour terminer la requête et nettoyer toutes les
|
||
données tout en continuant à faire d'autres choses qui prennent du temps
|
||
(conversion vidéo, gestion des stats, etc…).
|
||
@end itemize
|
||
...@: and much more.
|
||
|
||
@defvr {Variable Scheme} php-fpm-service-type
|
||
Un type de service pour @code{php-fpm}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} php-fpm-configuration
|
||
Type de données pour la configuration du service php-fpm.
|
||
@table @asis
|
||
@item @code{php} (par défaut : @code{php})
|
||
Le paquet php à utiliser.
|
||
@item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
|
||
L'adresse sur laquelle accepter les requêts FastCGI. Les syntaxes valides
|
||
sont :
|
||
@table @asis
|
||
@item @code{"ip.add.re.ss:port"}
|
||
Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
|
||
@item @code{"port"}
|
||
Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
|
||
@item @code{"/path/to/unix/socket"}
|
||
Écoute sur un socket unix.
|
||
@end table
|
||
|
||
@item @code{user} (par défaut : @code{php-fpm})
|
||
Utilisateur à qui appartiendra le processus de travail de php.
|
||
@item @code{group} (par défaut : @code{php-fpm})
|
||
Groupe du processus de travail.
|
||
@item @code{socket-user} (par défaut : @code{php-fpm})
|
||
Utilisateur qui peut parler au socket php-fpm.
|
||
@item @code{socket-group} (par défaut : @code{php-fpm})
|
||
Groupe qui peut parler au socket php-fpm.
|
||
@item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
|
||
Le pid de php-fpm est écrit dans ce fichier une fois que le service a
|
||
démarré.
|
||
@item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
|
||
Fichier de journal pour le processus maître de php-fpm.
|
||
@item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
|
||
Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
|
||
doit s'agir soit de :
|
||
@table @asis
|
||
@item @code{<php-fpm-dynamic-process-manager-configuration>,}
|
||
@item @code{<php-fpm-static-process-manager-configuration> ou}
|
||
@item @code{<php-fpm-on-demand-process-manager-configuration>}
|
||
@end table
|
||
@item @code{display-errors} (par défaut : @code{#f})
|
||
Détermine si les erreurs et les avertissements php doivent être envoyés aux
|
||
clients et affichés dans leur navigateur. Cela est utile pour un
|
||
développement php local, mais un risque pour la sécurité pour les sites
|
||
publics, comme les messages d'erreur peuvent révéler des mots de passes et
|
||
des données personnelles.
|
||
@item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
|
||
Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
|
||
php. On peut indiquer @code{#f} pour désactiver la journalisation.
|
||
@item @code{file} (par défaut : @code{#f})
|
||
Une version alternative de la configuration complète. Vous pouvez utiliser
|
||
la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} php-fpm-dynamic-process-manager-configuration
|
||
Type de données pour le gestionnaire de processus @code{dynamic} de
|
||
php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
|
||
travail de secours sont gardés en fonction des limites configurées.
|
||
@table @asis
|
||
@item @code{max-children} (par défaut : @code{5})
|
||
Nombre maximum de processus de travail.
|
||
@item @code{start-servers} (par défaut : @code{2})
|
||
Nombre de processus de travail au démarrage.
|
||
@item @code{min-spare-servers} (par défaut : @code{1})
|
||
Nombre de processus de travail de secours minimum qui doivent rester à
|
||
disposition.
|
||
@item @code{max-spare-servers} (par défaut : @code{3})
|
||
Nombre maximum de processus de travail de secours qui peuvent rester à
|
||
disposition.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} php-fpm-static-process-manager-configuration
|
||
Type de données pour le gestionnaire de processus @code{static} de php-fpm.
|
||
Avec le gestionnaire de processus @code{static}, un nombre constant de
|
||
processus de travail est créé.
|
||
@table @asis
|
||
@item @code{max-children} (par défaut : @code{5})
|
||
Nombre maximum de processus de travail.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} php-fpm-on-demand-process-manager-configuration
|
||
Type de données pour le gestionnaire de processus @code{on-demand} de
|
||
php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
|
||
de travail ne sont créés que lorsque les requêtes arrivent.
|
||
@table @asis
|
||
@item @code{max-children} (par défaut : @code{5})
|
||
Nombre maximum de processus de travail.
|
||
@item @code{process-idle-timeout} (par défaut : @code{10})
|
||
La durée en secondes après laquelle un processus sans requête sera tué.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@deffn {Procédure Scheme} nginx-php-fpm-location @
|
||
[#:nginx-package nginx] @
|
||
[socket (string-append "/var/run/php" @
|
||
(version-major (package-version php)) @
|
||
"-fpm.sock")]
|
||
Une fonction d'aide pour ajouter rapidement php à un
|
||
@code{nginx-server-configuration}.
|
||
@end deffn
|
||
|
||
Une configuration simple de services pour php ressemble à ceci :
|
||
@example
|
||
(services (cons* (service dhcp-client-service-type)
|
||
(service php-fpm-service-type)
|
||
(service nginx-service-type
|
||
(nginx-server-configuration
|
||
(server-name '("example.com"))
|
||
(root "/srv/http/")
|
||
(locations
|
||
(list (nginx-php-location)))
|
||
(https-port #f)
|
||
(ssl-certificate #f)
|
||
(ssl-certificate-key #f)))
|
||
%base-services))
|
||
@end example
|
||
|
||
@cindex cat-avatar-generator
|
||
Le générateur d'avatar de chat est un simple service pour démontrer
|
||
l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
|
||
avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
|
||
courriel d'un utilisateur.
|
||
|
||
@deffn {Procédure Scheme} cat-avatar-generator-serice @
|
||
[#:cache-dir "/var/cache/cat-avatar-generator"] @
|
||
[#:package cat-avatar-generator] @
|
||
[#:configuration (nginx-server-configuration)]
|
||
Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
|
||
Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
|
||
@code{package}, une version de cat-avatar-generator. Pendant l'exécution,
|
||
cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
|
||
cache.
|
||
@end deffn
|
||
|
||
Une configuration simple de cat-avatar-generator ressemble à ceci :
|
||
@example
|
||
(services (cons* (cat-avatar-generator-service
|
||
#:configuration
|
||
(nginx-server-configuration
|
||
(server-name '("example.com"))))
|
||
...
|
||
%base-services))
|
||
@end example
|
||
|
||
@subsubheading Hpcguix-web
|
||
|
||
@cindex hpcguix-web
|
||
Le programme @uref{hpcguix-web,
|
||
https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
|
||
personnalisable pour naviguer dans les paquets Guix, initialement conçue
|
||
pour les utilisateurs des grappes de calcul de haute performance (HPC).
|
||
|
||
@defvr {Variable Scheme} hpcguix-web-service-type
|
||
Le type de service pour @code{hpcguix-web}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} hpcguix-web-configuration
|
||
Type de données pour la configuration du service hpcguix-web.
|
||
|
||
@table @asis
|
||
@item @code{specs}
|
||
Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
|
||
hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
|
||
|
||
@table @asis
|
||
@item @code{title-prefix} (par défaut : @code{"hpcguix | "})
|
||
Le préfixe du titre des pages.
|
||
|
||
@item @code{guix-command} (par défaut : @code{"guix"})
|
||
La commande @command{guix}
|
||
|
||
@item @code{package-filter-proc} (par défaut : @code{(const #t)})
|
||
Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
|
||
|
||
@item @code{package-page-extension-proc} (par défaut : @code{(const '())})
|
||
Paquet d'extensions pour @code{hpcguix-web}.
|
||
|
||
@item @code{menu} (par défaut : @code{'()})
|
||
Entrée supplémentaire dans la page @code{menu}.
|
||
|
||
@item @code{channels} (par défaut : @code{%default-channels})
|
||
Liste des canaux depuis lesquels la liste des paquets est construite
|
||
(@pxref{Canaux}).
|
||
|
||
@item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
|
||
Le temps d'expiration, en secondes, après lequel la liste des paquets est
|
||
reconstruite depuis les dernières instance des canaux donnés.
|
||
@end table
|
||
|
||
Voir le dépôt hpcguix-web pour un
|
||
@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
|
||
exemple complet}
|
||
|
||
@item @code{package} (par défaut : @code{hpcguix-web})
|
||
Le paquet hpcguix-web à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
Une déclaration de service hpcguix-web typique ressemble à cela :
|
||
|
||
@example
|
||
(service hpcguix-web-service-type
|
||
(hpcguix-web-configuration
|
||
(specs
|
||
#~(define site-config
|
||
(hpcweb-configuration
|
||
(title-prefix "Guix-HPC - ")
|
||
(menu '(("/about" "ABOUT"))))))))
|
||
@end example
|
||
|
||
@quotation Remarque
|
||
Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
|
||
publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
|
||
certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
|
||
communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
|
||
certificats.
|
||
|
||
Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
|
||
certificats dans le champ @code{packages} de votre configuration.
|
||
@ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
|
||
@end quotation
|
||
|
||
@node Services de certificats
|
||
@subsubsection Services de certificats
|
||
|
||
@cindex Web
|
||
@cindex HTTP, HTTPS
|
||
@cindex Let's Encrypt
|
||
@cindex certificats TLS
|
||
Le module @code{(gnu services certbot)} fournit un service qui récupère
|
||
automatiquement un certificat TLS valide de l'autorité de certification
|
||
Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
|
||
contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
|
||
en sachant que le client sera capable de vérifier l'authenticité du serveur.
|
||
|
||
@url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
|
||
pour automatiser le processus de certification. Cet outil génère d'abord un
|
||
clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
|
||
de certification Let's Encrypt de signer la clef. La CA vérifie que la
|
||
requête provient de l'hôte en question en utilisant un protocole de
|
||
défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
|
||
Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
|
||
certificat. Ce certificat est valide pour une durée limitée et donc, pour
|
||
continuer à fournir des services en TLS, le serveur doit régulièrement
|
||
demander à la CA de renouveler sa signature.
|
||
|
||
The certbot service automates this process: the initial key generation, the
|
||
initial certification request to the Let's Encrypt service, the web server
|
||
challenge/response integration, writing the certificate to disk, the
|
||
automated periodic renewals, and the deployment tasks associated with the
|
||
renewal (e.g.@: reloading services, copying keys with different
|
||
permissions).
|
||
|
||
Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
|
||
Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
|
||
révoqués, mais le lancer régulièrement permettra à vos services de rester en
|
||
ligne si Let's Encrypt décide de révoquer votre certificat.
|
||
|
||
En utilisant ce service, vous acceptez le document « ACME Subscriber
|
||
Agreement », qu'on peut trouver ici :
|
||
@url{https://acme-v01.api.letsencrypt.org/directory}.
|
||
|
||
@defvr {Variable Scheme} certbot-service-type
|
||
Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
|
||
doit être un enregistrement @code{certbot-configuration} comme dans cet
|
||
exemple :
|
||
|
||
@example
|
||
(define %nginx-deploy-hook
|
||
(program-file
|
||
"nginx-deploy-hook"
|
||
#~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
|
||
(kill pid SIGHUP))))
|
||
|
||
(service certbot-service-type
|
||
(certbot-configuration
|
||
(email "foo@@example.net")
|
||
(certificates
|
||
(list
|
||
(certificate-configuration
|
||
(domains '("example.net" "www.example.net"))
|
||
(deploy-hook %nginx-deploy-hook))
|
||
(certificate-configuration
|
||
(domains '("bar.example.net")))))))
|
||
@end example
|
||
|
||
Voir plus bas pour des détails sur @code{certbot-configuration}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} certbot-configuration
|
||
Type données représentant la configuration du service @code{certbot}. Ce
|
||
type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{certbot})
|
||
Le paquet certbot à utiliser.
|
||
|
||
@item @code{webroot} (par défaut : @code{/var/www})
|
||
Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
|
||
Encrypt.
|
||
|
||
@item @code{certificates} (par défaut : @code{()})
|
||
Une liste de @code{certificates-configuration} pour lesquels générer des
|
||
certificats et demander des signatures. Chaque certificat a un @code{name}
|
||
et plusieurs @code{domains}.
|
||
|
||
@item @code{email}
|
||
Courriel obligatoire utilisé pour la création de compte, le contact en cas
|
||
de problème et des notifications importantes sur le compte.
|
||
|
||
@item @code{rsa-key-size} (par défaut : @code{2048})
|
||
Taille de la clef RSA.
|
||
|
||
@item @code{default-location} (par défaut : @i{voir plus bas})
|
||
Le @code{nginx-location-configuration} par défaut. 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.
|
||
|
||
Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
|
||
s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
|
||
|
||
Par défaut, le @code{default-location} sera une redirection de
|
||
@code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
|
||
laissant définir ce que vous voulez servir sur votre site en @code{https}.
|
||
|
||
Passez @code{#f} pour ne pas utiliser de location par défaut.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} certificate-configuration
|
||
Type de données représentant la configuration d'un certificat. Ce type a
|
||
les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{name} (par défaut : @i{voir plus bas})
|
||
Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
|
||
chemins de fichiers ; il n'affecte pas le contenu des certificats
|
||
eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
|
||
certificates}.
|
||
|
||
Sa valeur par défaut est le premier domaine spécifié.
|
||
|
||
@item @code{domains} (par défaut : @code{()})
|
||
Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
|
||
domaines seront les noms alternatifs du sujet dans le certificat.
|
||
|
||
@item @code{deploy-hook} (par défaut : @code{#f})
|
||
Commande à lancer dans un shell une fois par certificat récupéré avec
|
||
succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
|
||
sur le sous-répertoire live (par exemple,
|
||
@samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
|
||
et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
|
||
domaines séparés par des espaces (par exemple @samp{"example.com
|
||
www.example.com"}).
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
|
||
dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
|
||
sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
|
||
@node Services DNS
|
||
@subsubsection Services DNS
|
||
@cindex DNS (domain name system)
|
||
@cindex domain name system (DNS)
|
||
|
||
Le module @code{(gnu services dns)} fournit des services liés au
|
||
@dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
|
||
pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
|
||
en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
|
||
Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
|
||
LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
|
||
dnsmasq}.
|
||
|
||
@subsubheading Service Knot
|
||
|
||
Voici un exemple de configuration pour un serveur faisant autorité sur deux
|
||
zone, un maître et un esclave :
|
||
|
||
@lisp
|
||
(define-zone-entries example.org.zone
|
||
;; Name TTL Class Type Data
|
||
("@@" "" "IN" "A" "127.0.0.1")
|
||
("@@" "" "IN" "NS" "ns")
|
||
("ns" "" "IN" "A" "127.0.0.1"))
|
||
|
||
(define master-zone
|
||
(knot-zone-configuration
|
||
(domain "example.org")
|
||
(zone (zone-file
|
||
(origin "example.org")
|
||
(entries example.org.zone)))))
|
||
|
||
(define slave-zone
|
||
(knot-zone-configuration
|
||
(domain "plop.org")
|
||
(dnssec-policy "default")
|
||
(master (list "plop-master"))))
|
||
|
||
(define plop-master
|
||
(knot-remote-configuration
|
||
(id "plop-master")
|
||
(address (list "208.76.58.171"))))
|
||
|
||
(operating-system
|
||
;; ...
|
||
(services (cons* (service knot-service-type
|
||
(knot-configuration
|
||
(remotes (list plop-master))
|
||
(zones (list master-zone slave-zone))))
|
||
;; ...
|
||
%base-services)))
|
||
@end lisp
|
||
|
||
@deffn {Variable Scheme} knot-service-type
|
||
C'est le type pour le serveur DNS Knot.
|
||
|
||
Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
|
||
servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
|
||
un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
|
||
peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
|
||
serveur peut être configuré pour servir des zones comme un serveur maître ou
|
||
comme un serveur esclave, en fonction des zones. Les zones esclaves
|
||
récupèrent leurs données des maîtres, et seront servies comme faisant
|
||
autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
|
||
un maître et un esclave@footnote{NdT : Voir la conférence en Français de
|
||
Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
|
||
@url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
|
||
|
||
Les types de données suivants sont utilisés pour configurer le serveur DNS
|
||
Knot :
|
||
@end deffn
|
||
|
||
@deftp {Type de données} knot-key-configuration
|
||
Type de données représentant une clef. Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{id} (par défaut : @code{""})
|
||
Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
|
||
clef. Les ID doivent être uniques et non vides.
|
||
|
||
@item @code{algorithm} (par défaut : @code{#f})
|
||
L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
|
||
@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
|
||
@code{'hmac-sha384} et @code{'hmac-sha512}.
|
||
|
||
@item @code{secret} (par défaut : @code{""})
|
||
La clef secrète elle-même.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-acl-configuration
|
||
Type de données représentant une configuration de liste de contrôle d'accès
|
||
(ACL). Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{id} (par défaut : @code{""})
|
||
Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
|
||
clef. Les ID doivent être uniques et non vides.
|
||
|
||
@item @code{address} (par défaut : @code{'()})
|
||
Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
|
||
réseaux représentés par des chaînes de caractères. La requête doit
|
||
correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
|
||
n'a pas besoin de correspondre.
|
||
|
||
@item @code{key} (par défaut : @code{'()})
|
||
Une liste ordonnées de références à des clefs représentés par des chaînes.
|
||
La chaîne doit correspondre à un ID définie dans un
|
||
@code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
|
||
nécessaire pour correspondre à l'ACL.
|
||
|
||
@item @code{action} (par défaut : @code{'()})
|
||
Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
|
||
valeurs possibles sont une liste de zéro ou plus d'éléments entre
|
||
@code{'transfer}, @code{'notify} et @code{'update}.
|
||
|
||
@item @code{deny?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
|
||
listées sont interdites. Lorsque la valeur est fausse, les actions listées
|
||
sont autorisées.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} zone-entry
|
||
Type de données représentant une entrée dans un fichier de zone. Ce type a
|
||
les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{name} (par défaut : @code{"@@"})
|
||
Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
|
||
Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
|
||
@code{example.org}, @code{"ns.example.org"} se réfère en fait à
|
||
@code{ns.example.org.example.org}. Les noms qui finissent par un point sont
|
||
absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
|
||
@code{ns.example.org}.
|
||
|
||
@item @code{ttl} (par défaut : @code{""})
|
||
La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
|
||
par défaut est utilisé.
|
||
|
||
@item @code{class} (par défaut : @code{"IN"})
|
||
La classe de l'enregistrement. Knot ne supporte actuellement que
|
||
@code{"IN"} et partiellement @code{"CH"}.
|
||
|
||
@item @code{type} (par défaut : @code{"A"})
|
||
Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
|
||
(serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
|
||
définis.
|
||
|
||
@item @code{data} (par défaut : @code{""})
|
||
Les données contenues dans l'enregistrement. Par exemple une adresse IP
|
||
associée à un enregistrement A, ou un nom de domaine associé à un
|
||
enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
|
||
l'origine à moins qu'ils ne finissent par un point.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} zone-file
|
||
Type données représentant le contenu d'un fichier de zone. Ce type a les
|
||
paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{entries} (par défaut : @code{'()})
|
||
La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
|
||
pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
|
||
contenir une entrée pour votre serveur DNS primaire faisant autorité. En
|
||
plus d'utiliser une liste des entrées directement, vous pouvez utiliser
|
||
@code{define-zone-entries} pour définir un objet contenant la liste des
|
||
entrées plus facilement, que vous pouvez ensuite passer au champ
|
||
@code{entries} de @code{zone-file}.
|
||
|
||
@item @code{origin} (par défaut : @code{""})
|
||
Le nom de votre zone. Ce paramètre ne peut pas être vide.
|
||
|
||
@item @code{ns} (par défaut : @code{"ns"})
|
||
Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
|
||
relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
|
||
que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
|
||
et qu'il soit associé à une adresse IP dans la liste des entrées.
|
||
|
||
@item @code{mail} (par défaut : @code{"hostmaster"})
|
||
Une adresse de courriel pour vous contacter en tant que propriétaire de la
|
||
zone. Cela se transforme en @code{<mail>@@<origin>}.
|
||
|
||
@item @code{serial} (par défaut : @code{1})
|
||
Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
|
||
changements à la fois par les esclaves et par les résolveurs, il est
|
||
nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
|
||
vous faites un changement sur votre zone.
|
||
|
||
@item @code{refresh} (par défaut : @code{(* 2 24 3600)})
|
||
La fréquence à laquelle les esclaves demanderont un transfert de zone.
|
||
Cette valeur est un nombre de secondes. On peut le calculer avec des
|
||
multiplications ou avec @code{(string->duration)}.
|
||
|
||
@item @code{retry} (par défaut : @code{(* 15 60)})
|
||
La période après laquelle un esclave essaiera de contacter son maître
|
||
lorsqu'il échoue à le faire la première fois.
|
||
|
||
@item @code{expiry} (par défaut : @code{(* 14 24 3600)})
|
||
TTL par défaut des enregistrements. Les enregistrements existants sont
|
||
considérés corrects pour au moins cette durée. Après cette période, les
|
||
résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
|
||
toujours.
|
||
|
||
@item @code{nx} (par défaut : @code{3600})
|
||
TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
|
||
court parce que vous voulez que vous nouveaux domaines soient disponibles
|
||
pour tout le monde le plus rapidement possible.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-remote-configuration
|
||
Type de données représentant une configuration de serveurs distants. Ce
|
||
type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{id} (par défaut : @code{""})
|
||
Un identifiant pour que les autres champs de configuration se réfèrent à ce
|
||
serveur distant. les ID doivent être uniques et non vides.
|
||
|
||
@item @code{address} (par défaut : @code{'()})
|
||
Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
|
||
en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
|
||
exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
|
||
53.
|
||
|
||
@item @code{via} (par défaut : @code{'()})
|
||
Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
|
||
IP source appropriée à Knot. Un port facultatif peut être donné avec le
|
||
séparateur @@. La valeur par défaut est de choisir aléatoirement.
|
||
|
||
@item @code{key} (par défaut : @code{#f})
|
||
Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
|
||
d'une clef définie dans un champ @code{knot-key-configuration}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-keystore-configuration
|
||
Type de données représentant une base de clefs pour garder les clefs
|
||
dnssec. Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{id} (par défaut : @code{""})
|
||
L'id de cette base de clefs. Il ne doit pas être vide.
|
||
|
||
@item @code{backend} (par défaut : @code{'pem})
|
||
Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
|
||
@code{'pkcs11}.
|
||
|
||
@item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
|
||
La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
|
||
@code{"pkcs11:token=knot;pin-value=1234
|
||
/gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
|
||
représente un chemin dans le système de fichiers.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-policy-configuration
|
||
Type de données représentant une politique dnssec. Knot DNS est capable de
|
||
signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
|
||
automatiquement ou utiliser des clefs que vous générez.
|
||
|
||
Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
|
||
key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
|
||
est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
|
||
doit être présente dans la zone parente (normalement un domaine de haut
|
||
niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
|
||
hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
|
||
zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
|
||
fois que vous changerez votre KSK.
|
||
|
||
La politique définie aussi la durée de vie des clefs. Habituellement, la
|
||
ZSK peut être changée facilement et utilise des fonctions cryptographiques
|
||
plus faibles (avec un paramètre plus faible) pour signer les enregistrements
|
||
rapidement, donc elles sont changées très régulièrement. La KSK en revanche
|
||
requiert une interaction manuelle avec le registrar, donc elle change moins
|
||
souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
|
||
seul enregistrement.
|
||
|
||
Ce type a les paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{id} (par défaut : @code{""})
|
||
L'id de la politique. Il ne doit pas être vide.
|
||
|
||
@item @code{keystore} (par défaut : @code{"default"})
|
||
Une référence à une base de clefs, c'est-à-dire une chaîne contenant
|
||
l'identifiant d'une base de clefs définie dans un champ
|
||
@code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
|
||
la base par défaut (une base de données kasp initialisée par ce service).
|
||
|
||
@item @code{manual?} (par défaut : @code{#f})
|
||
Indique si la clef est gérée manuellement ou automatiquement.
|
||
|
||
@item @code{single-type-signing?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type
|
||
|
||
@item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
|
||
Un algorithme de clef de signature et de signatures.
|
||
|
||
@item @code{ksk-size} (par défaut : @code{256})
|
||
La longueur de la KSK. Remarquez que cette valeur est correcte pour
|
||
l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
|
||
algorithmes.
|
||
|
||
@item @code{zsk-size} (par défaut : @code{256})
|
||
La longueur de la ZSK. Remarquez que cette valeur est correcte pour
|
||
l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
|
||
algorithmes.
|
||
|
||
@item @code{dnskey-ttl} (par défaut : @code{'default})
|
||
La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
|
||
zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
|
||
du SOA de la zone.
|
||
|
||
@item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
|
||
La période entre la publication d'une ZSK et l'initialisation d'un nouveau
|
||
changement.
|
||
|
||
@item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
|
||
Un délai supplémentaire pour chaque étape du changement. Cette valeur
|
||
devrait être assez grande pour couvrir le temps de propagation des données
|
||
entre le serveur primaire et tous les secondaires.
|
||
|
||
@item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
|
||
Une période de validité des nouvelles signatures.
|
||
|
||
@item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
|
||
Une période qui indique combien de temps avant l'expiration d'une signature
|
||
elle sera rafraîchie.
|
||
|
||
@item @code{nsec3?} (par défaut : @code{#f})
|
||
Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
|
||
|
||
@item @code{nsec3-iterations} (par défaut : @code{5})
|
||
Le nombre de fois supplémentaires que le hash est effectué.
|
||
|
||
@item @code{nsec3-salt-length} (par défaut : @code{8})
|
||
La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
|
||
de hasher.
|
||
|
||
@item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
|
||
La période de validité des nouveaux champs sel.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-zone-configuration
|
||
Type de données représentant la zone servie par Knot. ce type a les
|
||
paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{domain} (par défaut : @code{""})
|
||
Le domaine servi par cette configuration. Il ne doit pas être vide.
|
||
|
||
@item @code{file} (par défaut : @code{""})
|
||
Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
|
||
zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
|
||
du nom de domaine.
|
||
|
||
@item @code{zone} (par défaut : @code{(zone-file)})
|
||
Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
|
||
esclaves. Il doit contenir un enregistrement zone-file.
|
||
|
||
@item @code{master} (par défaut : @code{'()})
|
||
Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
|
||
zone est un maître. Lorsque la valeur est indiquée, cette zone est un
|
||
esclave. C'est al liste des identifiants des serveurs distants.
|
||
|
||
@item @code{ddns-master} (par défaut : @code{#f})
|
||
Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
|
||
le premier maître de la liste des maîtres.
|
||
|
||
@item @code{notify} (par défaut : @code{'()})
|
||
Une liste d'identifiants de groupe de serveurs esclaves.
|
||
|
||
@item @code{acl} (par défaut : @code{'()})
|
||
Une liste d'identifiants d'ACL.
|
||
|
||
@item @code{semantic-checks?} (par défaut : @code{#f})
|
||
Lorsque la valeur est indiquée, cela ajoute plus de vérifications
|
||
sémantiques à la zone.
|
||
|
||
@item @code{disable-any?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
|
||
|
||
@item @code{zonefile-sync} (par défaut : @code{0})
|
||
Le délai entre une modification en mémoire et sur le disque. 0 signifie une
|
||
synchronisation immédiate.
|
||
|
||
@item @code{serial-policy} (par défaut : @code{'increment})
|
||
Une politique entre @code{'increment} et @code{'unixtime}.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} knot-configuration
|
||
Type de donées représentant la configuration de Knot. Ce type a les
|
||
paramètres suivants :
|
||
|
||
@table @asis
|
||
@item @code{knot} (par défaut : @code{knot})
|
||
Le paquet Knot.
|
||
|
||
@item @code{run-directory} (par défaut : @code{"/var/run/knot"})
|
||
Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
|
||
les sockets.
|
||
|
||
@item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
|
||
Une adresse IP sur laquelle écouter.
|
||
|
||
@item @code{listen-v6} (par défaut : @code{"::"})
|
||
Une adresse IP sur laquelle écouter.
|
||
|
||
@item @code{listen-port} (par défaut : @code{53})
|
||
Un port sur lequel écouter.
|
||
|
||
@item @code{keys} (par défaut : @code{'()})
|
||
La liste des knot-key-configuration utilisés par cette configuration.
|
||
|
||
@item @code{acls} (par défaut : @code{'()})
|
||
La liste des knot-acl-configuration utilisés par cette configuration.
|
||
|
||
@item @code{remotes} (par défaut : @code{'()})
|
||
La liste des knot-remote-configuration utilisés par cette configuration.
|
||
|
||
@item @code{zones} (par défaut : @code{'()})
|
||
La liste des knot-zone-configuration utilisés par cette configuration.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Services Dnsmasq
|
||
|
||
@deffn {Variable Scheme} dnsmasq-service-type
|
||
C'est le type du service dnsmasq, dont la valeur devrait être un objet
|
||
@code{dnsmasq-configuration} comme dans cet exemple :
|
||
|
||
@example
|
||
(service dnsmasq-service-type
|
||
(dnsmasq-configuration
|
||
(no-resolv? #t)
|
||
(servers '("192.168.1.1"))))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftp {Type de données} dnsmasq-configuration
|
||
Type de données qui représente la configuration de dnsmasq.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{dnsmasq})
|
||
L'objet de paquet du serveur dnsmasq.
|
||
|
||
@item @code{no-hosts?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
|
||
|
||
@item @code{port} (par défaut : @code{53})
|
||
Le port sur lequel écouter. Le mettre à zéro désactive complètement les
|
||
réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
|
||
|
||
@item @code{local-service?} (par défaut : @code{#t})
|
||
Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
|
||
sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
|
||
existe sur le serveur.
|
||
|
||
@item @code{listen-addresses} (par défaut : @code{'()})
|
||
Écoute sur le adresses IP données.
|
||
|
||
@item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
|
||
Le fichier où lire l'adresse IP des serveurs de noms en amont.
|
||
|
||
@item @code{no-resolv?} (par défaut : @code{#f})
|
||
Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
|
||
|
||
@item @code{servers} (par défaut : @code{'()})
|
||
Spécifiez l'adresse IP des serveurs en amont directement.
|
||
|
||
@item @code{cache-size} (par défaut : @code{150})
|
||
Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
|
||
|
||
@item @code{negative-cache?} (par défaut : @code{#t})
|
||
Lorsque la valeur est fausse, désactive le cache des réponses négatives.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@subsubheading Service ddclient
|
||
|
||
@cindex ddclient
|
||
Le srevice ddclient décrit plus bas lance le démon ddclient, qui prend en
|
||
charge la mise à jour automatique des entrées DNS pour les fournisseurs de
|
||
service comme @uref{https://dyn.com/dns/, Dyn}.
|
||
|
||
L'exemple suivant montre comment instantier le service avec sa configuration
|
||
par défaut :
|
||
|
||
@example
|
||
(service ddclient-service-type)
|
||
@end example
|
||
|
||
Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
|
||
@dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
|
||
@code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
|
||
manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
|
||
fichier dans une partie de votre configuration, par exemple avec
|
||
@code{plain-file}, mais il serait lisible pour tout le monde via
|
||
@file{/gnu/store}). Vois les exemples dans le répertoire
|
||
@file{share/ddclient} du paquet @code{ddclient}.
|
||
|
||
@c %start of fragment
|
||
|
||
Les champs de @code{ddclient-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
|
||
Le paquet ddclient.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
|
||
La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
|
||
domaine.
|
||
|
||
La valeur par défaut est @samp{300}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
|
||
Utiliser syslog pour la sortie.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string mail
|
||
Courriel de l'utilisateur.
|
||
|
||
La valeur par défaut est @samp{"root"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
|
||
Courriel de l'utilisateur pour les échecs.
|
||
|
||
La valeur par défaut est @samp{"root"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string pid
|
||
Le fichier de PID de ddclient.
|
||
|
||
La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
|
||
Activer le support de SSL.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string user
|
||
Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
|
||
programme ddclient.
|
||
|
||
La valeur par défaut est @samp{"ddclient"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string group
|
||
Groupe de l'utilisateur qui lancera le programme ddclient.
|
||
|
||
La valeur par défaut est @samp{"ddclient"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
|
||
Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
|
||
fichier contient les paramètres d'authentification utilisés par ddclient.
|
||
On s'attend à ce que vous le créiez manuellement.
|
||
|
||
La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
|
||
Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
|
||
@c %end of fragment
|
||
|
||
|
||
@node Services VPN
|
||
@subsubsection Services VPN
|
||
@cindex VPN (réseau privé virtuel)
|
||
@cindex réseau privé virtuel (VPN)
|
||
|
||
Le module @code{(gnu services vpn)} fournit des services liés aux
|
||
@dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
|
||
pour que votre machine se connecte à un VPN et un service @emph{serveur}
|
||
pour que votre machine héberge un VPN. Les deux services utilisent
|
||
@uref{https://openvpn.net/, OpenVPN}.
|
||
|
||
@deffn {Procédure Scheme} openvpn-client-service @
|
||
[#:config (openvpn-client-configuration)]
|
||
|
||
Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
|
||
client.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} openvpn-server-service @
|
||
[#:config (openvpn-server-configuration)]
|
||
|
||
Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
|
||
serveur.
|
||
|
||
Les deux services peuvent être lancés en même temps.
|
||
@end deffn
|
||
|
||
@c %automatically generated documentation
|
||
|
||
Les champs de @code{openvpn-client-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
|
||
Le paquet OpenVPN.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
|
||
Le fichier de PID d'OpenVPN.
|
||
|
||
La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
|
||
Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
|
||
les serveurs.
|
||
|
||
La valeur par défaut est @samp{udp}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
|
||
Le périphérique utilisé pour représenter la connexion VPN.
|
||
|
||
La valeur par défaut est @samp{tun}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
|
||
L'autorité de certification qui sert à vérifier les connexions.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
|
||
Le certificat de la machine sur laquelle tourne le démon. Il devrait être
|
||
signé par l'autorité indiquée dans @code{ca}.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} string key
|
||
La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
|
||
dont le certificat est donné dans @code{cert}.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
|
||
Indique s'il faut utiliser l'algorithme de compression lzo.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
|
||
Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
|
||
Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
|
||
démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
|
||
Niveau de verbosité.
|
||
|
||
La valeur par défaut est @samp{3}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
|
||
Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
|
||
de contrôle TLS pour se protéger contre les attaques DoS.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
|
||
Indique s'il faut vérifier que le certificat du serveur a l'extension
|
||
d'utilisation.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
|
||
Se lier à un port spécifique.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
|
||
Réessayer de résoudre l'adresse du serveur.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
|
||
Une liste de serveurs distants sur lesquels se connecter.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
Les champs de @code{openvpn-remote-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
|
||
Nom du serveur.
|
||
|
||
La valeur par défaut est @samp{"my-server"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
|
||
Numéro de port sur lequel écoute le serveur.
|
||
|
||
La valeur par défaut est @samp{1194}.
|
||
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
@c %end of automatic openvpn-client documentation
|
||
|
||
@c %automatically generated documentation
|
||
|
||
Les champs de @code{openvpn-server-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
|
||
Le paquet OpenVPN.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
|
||
Le fichier de PID d'OpenVPN.
|
||
|
||
La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
|
||
Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
|
||
les serveurs.
|
||
|
||
La valeur par défaut est @samp{udp}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
|
||
Le périphérique utilisé pour représenter la connexion VPN.
|
||
|
||
La valeur par défaut est @samp{tun}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
|
||
L'autorité de certification qui sert à vérifier les connexions.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
|
||
Le certificat de la machine sur laquelle tourne le démon. Il devrait être
|
||
signé par l'autorité indiquée dans @code{ca}.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string key
|
||
La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
|
||
dont le certificat est donné dans @code{cert}.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
|
||
Indique s'il faut utiliser l'algorithme de compression lzo.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
|
||
Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
|
||
Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
|
||
démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
|
||
Niveau de verbosité.
|
||
|
||
La valeur par défaut est @samp{3}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
|
||
Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
|
||
de contrôle TLS pour se protéger contre les attaques DoS.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} number port
|
||
Spécifie le numéro de port sur lequel les serveurs écoutent.
|
||
|
||
La valeur par défaut est @samp{1194}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
|
||
Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
|
||
virtuel.
|
||
|
||
La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
|
||
Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
|
||
Le fichier de paramètres Diffie-Hellman.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
|
||
Le fichier qui enregistre les IP des clients.
|
||
|
||
La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
|
||
Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
|
||
clients.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
|
||
Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
|
||
eux dans le VPN.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
|
||
Fait que des messages de ping sont envoyés régulièrement dans les deux sens
|
||
pour que chaque côté sache quand l'autre n'est plus disponible.
|
||
@code{keepalive} a besoin d'une paire. Le premier élément est la période
|
||
d'envoie du ping, et le second élément est le délai d'attente avant de
|
||
considéré que l'autre côté n'est plus disponible.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
|
||
Le nombre maximum de clients.
|
||
|
||
La valeur par défaut est @samp{100}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} string status
|
||
Le fichier de statut. Ce fichier montre un court rapport sur les connexions
|
||
actuelles. Il est tronqué et réécrit toutes les minutes.
|
||
|
||
La valeur par défaut est @samp{"/var/run/openvpn/status"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
|
||
La liste des configuration pour certains clients.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
Les champs de @code{openvpn-ccd-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
|
||
Nom du client.
|
||
|
||
La valeur par défaut est @samp{"client"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
|
||
Le réseau du client.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
|
||
IP du client sur le VPN.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
|
||
@c %end of automatic openvpn-server documentation
|
||
|
||
|
||
@node Système de fichiers en réseau
|
||
@subsubsection Système de fichiers en réseau
|
||
@cindex NFS
|
||
|
||
Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
|
||
tous utilisés pour monter et exporter des arborescences de répertoires en
|
||
@dfn{network file systems} (NFS).
|
||
|
||
@subsubheading Service RPC Bind
|
||
@cindex rpcbind
|
||
|
||
Le service RPC Bind fournit un dispositif pour faire correspondre les
|
||
numéros de programmes à des adresses universelles. De nombreux services
|
||
liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
|
||
lorsqu'un service qui en dépend est démarré.
|
||
|
||
@defvr {Variable Scheme} rpcbind-service-type
|
||
Un type de service pour le démon RPC portmapper.
|
||
@end defvr
|
||
|
||
|
||
@deftp {Type de données} rpcbind-configuration
|
||
Type données représentant la configuration du service RPC Bind. Ce type a
|
||
les paramètres suivants :
|
||
@table @asis
|
||
@item @code{rpcbind} (par défaut : @code{rpcbind})
|
||
Le paquet rpcbind à utiliser.
|
||
|
||
@item @code{warm-start?} (par défaut : @code{#t})
|
||
Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
|
||
démarrage ce qui lui fait recharger les informations d'états sauvegardés par
|
||
une instance précédente.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@subsubheading Pseudo-système de fichiers Pipefs
|
||
@cindex pipefs
|
||
@cindex rpc_pipefs
|
||
|
||
Le système de fichiers pipefs est utilisé pour transférer des données liées
|
||
à NFS entre le noyau et les programmes en espace utilisateur.
|
||
|
||
@defvr {Variable Scheme} pipefs-service-type
|
||
Un type de service pour le pseudo-système de fichiers pipefs.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} pipefs-configuration
|
||
Type de données représentant la configuration du service du pseudo-système
|
||
de fichiers pipefs. Ce type a les paramètres suivants :
|
||
@table @asis
|
||
@item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
|
||
Le répertoire dans lequel le système de fichiers est attaché.
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@subsubheading Service de démon GSS
|
||
@cindex GSSD
|
||
@cindex GSS
|
||
@cindex système de sécurité global
|
||
|
||
Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
|
||
forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
|
||
RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
|
||
fait avec la commande Kerberos @command{kinit} ou automatiquement à la
|
||
connexion avec les services PAM (@pxref{Services Kerberos}).
|
||
|
||
@defvr {Variable Scheme} gss-service-type
|
||
Un type de service pour le démon du système de sécurité global (GSS).
|
||
@end defvr
|
||
|
||
@deftp {Type de données} gss-configuration
|
||
Type de données représentant la configuration du service du démon GSS. Ce
|
||
type a les paramètres suivants :
|
||
@table @asis
|
||
@item @code{nfs-utils} (par défaut : @code{nfs-utils})
|
||
Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
|
||
|
||
@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
|
||
Le répertoire où le système de fichier pipefs doit être monté.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@subsubheading Service de démon IDMAP
|
||
@cindex idmapd
|
||
@cindex correspondance de nom
|
||
|
||
Le service du démon idmap fournit une correspondance entre les ID
|
||
utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
|
||
accéder aux systèmes de fichiers montés via NFSv4.
|
||
|
||
@defvr {Variable Scheme} idmap-service-type
|
||
Un type de service pour le démon de correspondance d'identité (IDMAP).
|
||
@end defvr
|
||
|
||
@deftp {Type de données} idmap-configuration
|
||
Type de données représentant la configuration du service du démon IDMAP. Ce
|
||
type a les paramètres suivants :
|
||
@table @asis
|
||
@item @code{nfs-utils} (par défaut : @code{nfs-utils})
|
||
Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
|
||
|
||
@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
|
||
Le répertoire où le système de fichier pipefs doit être monté.
|
||
|
||
@item @code{domain} (par défaut : @code{#f})
|
||
Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
|
||
ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
|
||
domaine pleinement qualifié de l'hôte.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Intégration continue
|
||
@subsubsection Intégration continue
|
||
|
||
@cindex intégration continue
|
||
@uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
|
||
un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
|
||
pour le développement que pour fournir des substituts à d'autres
|
||
(@pxref{Substituts}).
|
||
|
||
Le module @code{(gnu services cuirass)} fournit le service suivant.
|
||
|
||
@defvr {Procédure Scheme} cuirass-service-type
|
||
Le type du service Cuirass. Sa valeur doit être un objet
|
||
@code{cuirass-configuration}, décrit ci-dessous.
|
||
@end defvr
|
||
|
||
Pour ajouter des travaux de construction, vous devez indiquer le champ
|
||
@code{specifications} de la configuration. Voici un exemple de service qui
|
||
récupère le dépôt Guix et construit les paquets depuis un manifeste.
|
||
Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
|
||
qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
|
||
|
||
@example
|
||
(define %cuirass-specs
|
||
#~(list
|
||
'((#:name . "my-manifest")
|
||
(#:load-path-inputs . ("guix"))
|
||
(#:package-path-inputs . ("custom-packages"))
|
||
(#:proc-input . "guix")
|
||
(#:proc-file . "build-aux/cuirass/gnu-system.scm")
|
||
(#:proc . cuirass-jobs)
|
||
(#:proc-args . ((subset . "manifests")
|
||
(systems . ("x86_64-linux"))
|
||
(manifests . (("config" . "guix/manifest.scm")))))
|
||
(#:inputs . (((#:name . "guix")
|
||
(#:url . "git://git.savannah.gnu.org/guix.git")
|
||
(#:load-path . ".")
|
||
(#:branch . "master")
|
||
(#:no-compile? . #t))
|
||
((#:name . "config")
|
||
(#:url . "git://git.example.org/config.git")
|
||
(#:load-path . ".")
|
||
(#:branch . "master")
|
||
(#:no-compile? . #t))
|
||
((#:name . "custom-packages")
|
||
(#:url . "git://git.example.org/custom-packages.git")
|
||
(#:load-path . ".")
|
||
(#:branch . "master")
|
||
(#:no-compile? . #t)))))))
|
||
|
||
(service cuirass-service-type
|
||
(cuirass-configuration
|
||
(specifications %cuirass-specs)))
|
||
@end example
|
||
|
||
Tandis que les informations liés aux travaux de construction sont
|
||
directement dans les spécifications, les paramètres globaux pour le
|
||
processus @command{cuirass} sont accessibles dans les autres champs de
|
||
@code{cuirass-configuration}.
|
||
|
||
@deftp {Type de données} cuirass-configuration
|
||
Type de données représentant la configuration de Cuirass.
|
||
|
||
@table @asis
|
||
@item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
|
||
Emplacement du fichier de journal.
|
||
|
||
@item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
|
||
Emplacement du cache du dépôt.
|
||
|
||
@item @code{user} (par défaut : @code{"cuirass"})
|
||
Propriétaire du processus @code{cuirass}.
|
||
|
||
@item @code{group} (par défaut : @code{"cuirass"})
|
||
Groupe du propriétaire du processus @code{cuirass}.
|
||
|
||
@item @code{interval} (par défaut : @code{60})
|
||
Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
|
||
Cuirass.
|
||
|
||
@item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
|
||
Emplacement de la base de données sqlite qui contient les résultats de
|
||
construction et les spécifications précédemment ajoutées.
|
||
|
||
@item @code{ttl} (par défaut : @code{(* 30 24 3600)})
|
||
Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
|
||
sont enregistrés comme des résultats de construction. Cela signifie que les
|
||
résultats de construction ne seront pas glanés pendant au moins @var{ttl}
|
||
secondes.
|
||
|
||
@item @code{port} (par défaut : @code{8081})
|
||
Numéro de port utilisé pour le serveur HTTP.
|
||
|
||
@item --listen=@var{hôte}
|
||
Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
|
||
d'accepter les connexions depuis localhost.
|
||
|
||
@item @code{specifications} (par défaut : @code{#~'()})
|
||
Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
|
||
spécifications, où une spécification est une liste d'association
|
||
(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
|
||
clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
|
||
l'exemple plus haut.
|
||
|
||
@item @code{use-substitutes?} (par défaut : @code{#f})
|
||
Cela permet d'utiliser des substituts pour éviter de construire toutes les
|
||
dépendance d'un travail depuis les sources.
|
||
|
||
@item @code{one-shot?} (par défaut : @code{#f})
|
||
N'évaluer les spécification et construire les dérivations qu'une seule fois.
|
||
|
||
@item @code{fallback?} (par défaut : @code{#f})
|
||
Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
|
||
construction locale du paquet.
|
||
|
||
@item @code{cuirass} (par défaut : @code{cuirass})
|
||
Le paquet Cuirass à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services de gestion de l'énergie
|
||
@subsubsection Services de gestion de l'énergie
|
||
|
||
@cindex tlp
|
||
@cindex gestion de l'énergie avec TLP
|
||
@subsubheading démon TLP
|
||
|
||
Le module @code{(gnu services pm)} fournit une définition de service Guix
|
||
pour l'outil de gestion d'énergie Linux TLP.
|
||
|
||
TLP active plusieurs modes un espace utilisateur et dans le noyau.
|
||
Contrairement à @code{upower-service}, ce n'est pas un outil passif de
|
||
surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
|
||
qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
|
||
d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
|
||
d'accueil de TLP}.
|
||
|
||
@deffn {Variable Scheme} tlp-service-type
|
||
Le type de service pour l'outil TLP. Sa valeur devrait être une
|
||
configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
|
||
par défaut, écrivez simplement :
|
||
@example
|
||
(service tlp-service-type)
|
||
@end example
|
||
@end deffn
|
||
|
||
Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
|
||
des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
|
||
|
||
Chaque définition de paramètre est précédée par son type ; par exemple,
|
||
@samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
|
||
comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
|
||
paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
|
||
valeur est @code{'disabled}.
|
||
|
||
@c The following documentation was initially generated by
|
||
@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
|
||
@c documentation is better, so we shouldn't hesitate to edit below as
|
||
@c needed. However if the change you want to make to this documentation
|
||
@c can be done in an automated way, it's probably easier to change
|
||
@c (generate-documentation) than to make it below and have to deal with
|
||
@c the churn as TLP updates.
|
||
|
||
Les champs de @code{tlp-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} package tlp
|
||
Le paquet TLP.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
|
||
Indiquez vrai si vous souhaitez activer TLP.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
|
||
Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
|
||
possibilités sont AC et BAT.
|
||
|
||
La valeur par défaut est @samp{"AC"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
|
||
Nombre de secondes que le noyau Linux doit attendre après que les disques
|
||
s'arrêtent pour se synchroniser quand il est sur secteur.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
|
||
Comme @code{disk-idle-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{2}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
|
||
Périodicité du nettoyage des pages invalidées, en secondes.
|
||
|
||
La valeur par défaut est @samp{15}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
|
||
Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{60}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
|
||
Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
|
||
les possibilités sont powersave et performance. Avec le pilote
|
||
acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
|
||
conservative.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
|
||
Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
|
||
Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
|
||
Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
|
||
Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
|
||
Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
|
||
Limite le P-état minimum pour contrôler la dissipation de puissance dans le
|
||
CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
|
||
performances disponibles.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
|
||
Limite le P-état maximum pour contrôler la dissipation de puissance dans le
|
||
CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
|
||
performances disponibles.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
|
||
Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
|
||
Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
|
||
Active la fonctionnalité turbo boost du CPU sur secteur.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
|
||
Comme @code{cpu-boost-on-ac?} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
|
||
Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
|
||
utilisés lorsque la charge est faible.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
|
||
Comme @code{sched-powersave-on-ac?} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
|
||
Active le chien de garde NMI du noyau Linux.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
|
||
Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
|
||
valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
|
||
Indique le niveau de performance du CPU par rapport à la politique de
|
||
gestion de l'énergie sur secteur. Les possibilités sont performance, normal
|
||
et powersave.
|
||
|
||
La valeur par défaut est @samp{"performance"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
|
||
Comme @code{energy-perf-policy-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"powersave"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
|
||
Périphériques de disque dur.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
|
||
Niveau de gestion de l'énergie avancé des disques durs.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
|
||
Comme @code{disk-apm-bat} mais en mode batterie.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
|
||
Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
|
||
être spécifiée pour chaque disque dur déclaré.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
|
||
Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
|
||
Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
|
||
doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
|
||
exemple cfq, deadline et noop.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
|
||
Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
|
||
possibilités sont min_power, medium_power et max_performance.
|
||
|
||
La valeur par défaut est @samp{"max_performance"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
|
||
Comme @code{sata-linkpwr-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"min_power"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
|
||
Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
|
||
Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
|
||
les disques, sur secteur
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
|
||
Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
|
||
Secondes d'inactivités avant de suspendre les disques.
|
||
|
||
La valeur par défaut est @samp{15}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
|
||
Niveau de gestion de l'énergie des états actifs de PCI Express. Les
|
||
possibilités sont default, performance et powersave.
|
||
|
||
La valeur par défaut est @samp{"performance"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
|
||
Comme @code{pcie-aspm-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"powersave"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
|
||
Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
|
||
possibilités sont low, mid, high, auto et default.
|
||
|
||
La valeur par défaut est @samp{"high"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
|
||
Comme @code{radeon-power-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"low"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
|
||
Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
|
||
sont battery et performance.
|
||
|
||
La valeur par défaut est @samp{"performance"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
|
||
Comme @code{radeon-dpm-state-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"battery"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
|
||
Niveau de performance de DPM. Les possibilités sont auto, low et high.
|
||
|
||
La valeur par défaut est @samp{"auto"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
|
||
Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"auto"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
|
||
Mode de gestion de l'énergie wifi.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
|
||
Comme @code{wifi-power-ac?} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
|
||
Désactive wake on LAN.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
|
||
Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
|
||
sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
|
||
de l'énergie.
|
||
|
||
La valeur par défaut est @samp{0}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
|
||
Comme @code{sound-powersave-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{1}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
|
||
Désactive le contrôleur en mode de gestion de l'énergie sur les
|
||
périphériques Intel HDA.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
|
||
Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
|
||
périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
|
||
levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
|
||
plus récents.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string bay-device
|
||
Nom du périphérique optique à éteindre.
|
||
|
||
La valeur par défaut est @samp{"sr0"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
|
||
Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
|
||
sont on et auto.
|
||
|
||
La valeur par défaut est @samp{"on"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
|
||
Comme @code{runtime-pm-ac} mais en mode batterie.
|
||
|
||
La valeur par défaut est @samp{"auto"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
|
||
Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
|
||
liste noire.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
|
||
Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
|
||
l'énergie à l'exécution.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
|
||
Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
|
||
de l'énergie à l'exécution.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
|
||
Active la fonctionnalité de mise en veille automatique de l'USB.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
|
||
Exclue les périphériques spécifiés de la mise en veille automatique de
|
||
l'USB.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
|
||
Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
|
||
Inclue les périphériques spécifiés dans la mise en veille automatique de
|
||
l'USB, même s'ils sont déjà exclus par le pilote ou via
|
||
@code{usb-blacklist-wwan?}.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
|
||
Active la mise en veille de l'USB avant l'arrêt.
|
||
|
||
La valeur par défaut est @samp{disabled}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
|
||
Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
|
||
arrêt au démarrage du système.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@cindex thermald
|
||
@cindex gestion de la fréquence du CPU avec thermald
|
||
@subsubheading démon Thermald
|
||
|
||
Le module @code{(gnu services pm)} fournit une interface pour thermald, un
|
||
service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
|
||
|
||
@defvr {Variable Scheme} thermald-service-type
|
||
C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
|
||
thermald}, le démon de température de Linux, responsable du contrôle de
|
||
l'état thermique des processeurs et d'éviter la surchauffe.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} thermald-configuration
|
||
Type de données représentant la configuration de
|
||
@code{thermald-service-type}.
|
||
|
||
@table @asis
|
||
@item @code{ignore-cpuid-check?} (par défaut : @code{#f})
|
||
Ignore la vérification des modèles CPU supportés avec cpuid.
|
||
|
||
@item @code{thermald} (par défaut : @var{thermald})
|
||
Objet du paquet de thermald.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services audio
|
||
@subsubsection Services audio
|
||
|
||
Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
|
||
démon de lecture de musique).
|
||
|
||
@cindex mpd
|
||
@subsubheading Music Player Daemon
|
||
|
||
Le démon de lecture de musique (MPD) est un service qui joue de la musique
|
||
tout en étant contrôlé depuis la machine locale ou à travers le réseau par
|
||
divers clients.
|
||
|
||
L'exemple suivant montre comment on peut lancer @code{mpd} en tant
|
||
qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
|
||
pour la sortie audio.
|
||
|
||
@example
|
||
(service mpd-service-type
|
||
(mpd-configuration
|
||
(user "bob")
|
||
(port "6666")))
|
||
@end example
|
||
|
||
@defvr {Variable Scheme} mpd-service-type
|
||
Le type de service pour @command{mpd}.
|
||
@end defvr
|
||
|
||
@deftp {Type de données} mpd-configuration
|
||
Type de données représentant la configuration de @command{mpd}.
|
||
|
||
@table @asis
|
||
@item @code{user} (par défaut : @code{"mpd"})
|
||
L'utilisateur qui lance mpd.
|
||
|
||
@item @code{music-dir} (par défaut : @code{"~/Music"})
|
||
Le répertoire à scanner pour trouver les fichiers de musique.
|
||
|
||
@item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
|
||
Le répertoire où stocker les playlists.
|
||
|
||
@item @code{port} (par défaut : @code{"6600"})
|
||
Le port sur lequel lancer mpd.
|
||
|
||
@item @code{address} (par défaut : @code{"any"})
|
||
L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
|
||
chemin absolu peut être spécifié ici.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services de virtualisation
|
||
@subsubsection services de virtualisation
|
||
|
||
Le module @code{(gnu services virtualization)} fournit des services pour les
|
||
démons libvirt et virtlog, ainsi que d'autres services liés à la
|
||
virtualisation.
|
||
|
||
@subsubheading démon libvirt
|
||
@code{libvirtd} est le démon côté serveur du système de gestion de
|
||
virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
|
||
les taches de gestion requises pour les clients virtualisés.
|
||
|
||
@deffn {Variable Scheme} libvirt-service-type
|
||
C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
|
||
être un @code{libvirt-configuration}.
|
||
|
||
@example
|
||
(service libvirt-service-type
|
||
(libvirt-configuration
|
||
(unix-sock-group "libvirt")
|
||
(tls-port "16555")))
|
||
@end example
|
||
@end deffn
|
||
|
||
@c Auto-generated with (generate-libvirt-documentation)
|
||
Les champs de @code{libvirt-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
|
||
Paquet libvirt.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
|
||
Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
|
||
public. Vous devez remplir le champ @code{listen} pour que cela ait un
|
||
effet.
|
||
|
||
Il est nécessaire de mettre en place une CA et de créer un certificat
|
||
serveur avant d'utiliser cette fonctionnalité.
|
||
|
||
La valeur par défaut est @samp{#t}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
|
||
Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
|
||
remplir le champ @code{listen} pour que cela ait un effet.
|
||
|
||
L'utilisation des sockets TCP requiert une authentification SASL par
|
||
défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
|
||
sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
|
||
Pour pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
|
||
numéro de port ou d'un nom de service.
|
||
|
||
La valeur par défaut est @samp{"16514"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
|
||
Pour sur lequel accepter les connexions TCP non sécurisées. Cela peut être
|
||
un numéro de port ou un nom de service.
|
||
|
||
La valeur par défaut est @samp{"16509"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
|
||
Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
|
||
|
||
La valeur par défaut est @samp{"0.0.0.0"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
|
||
Indique s'il faut publier le service libvirt en mDNS.
|
||
|
||
Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
|
||
démon Avahi.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
|
||
Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
|
||
|
||
La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
|
||
Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
|
||
permettre à un ensemble d'utilisateurs « de confiance » de gérer les
|
||
fonctionnalités sans devenir root.
|
||
|
||
La valeur par défaut est @samp{"root"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
|
||
Permission Unix pour le socket en lecture seule. Il est utilisé pour
|
||
surveiller le statut des VM uniquement.
|
||
|
||
La valeur par défaut est @samp{"0777"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
|
||
Permission Unix pour le socket en lecture-écriture. La valeur par défaut
|
||
n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
|
||
défaut change et permet tout le monde (c.-à-d.@: 0777).
|
||
|
||
La valeur par défaut est @samp{"0770"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
|
||
permissions Unix pour le socket d'administration. La valeur par défaut ne
|
||
permet que le propriétaire (root), ne la changez pas à moins que vous ne
|
||
soyez sûr de savoir à qui vous exposez cet accès.
|
||
|
||
La valeur par défaut est @samp{"0777"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
|
||
Le répertoire dans lequel les sockets sont créés.
|
||
|
||
La valeur par défaut est @samp{"/var/run/libvirt"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
|
||
Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
|
||
les permissions des socket permettent à n'importe qui de se connecter.
|
||
|
||
La valeur par défaut est @samp{"polkit"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
|
||
Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
|
||
défaut les permissions du socket ne permettent que root. Si le support de
|
||
PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
|
||
l'authentification « polkit ».
|
||
|
||
La valeur par défaut est @samp{"polkit"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
|
||
Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
|
||
SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
|
||
scénario de développement ou de test.
|
||
|
||
La valeur par défaut est @samp{"sasl"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
|
||
Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
|
||
chiffrés par la couche TLS, et une authentification limitée est effectuée
|
||
avec les certificats.
|
||
|
||
Il est possible d'utiliser de n'importe quel mécanisme d'authentification
|
||
SASL en utilisant « sasl » pour cette option.
|
||
|
||
La valeur par défaut est @samp{"none"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
|
||
Schéma de contrôle d'accès à l'API.
|
||
|
||
Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
|
||
pilotes d'accès peuvent placer des restrictions là-dessus.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string key-file
|
||
Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
|
||
aucune clef privée n'est chargée.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
|
||
Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
|
||
certificat n'est chargé.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
|
||
Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
|
||
certificat de CA n'est chargé.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
|
||
Chemin de la liste de révocation des certificats. Si la chaîne est vide,
|
||
aucun CRL n'est chargé.
|
||
|
||
La valeur par défaut est @samp{""}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
|
||
Désactive la vérification de nos propres certificats serveurs.
|
||
|
||
Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
|
||
propres certificats.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
|
||
Désactive la vérification des certificats clients.
|
||
|
||
La vérification des certificats clients est le mécanisme d'authentification
|
||
principal. Tout client qui ne présent pas de certificat signé par la CA
|
||
sera rejeté.
|
||
|
||
La valeur par défaut est @samp{#f}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
|
||
Liste blanche des Distinguished Name x509 autorisés.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
|
||
Liste blanche des noms d'utilisateur SASL permis. Le format des noms
|
||
d'utilisateurs dépend du mécanisme d'authentification SASL.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
|
||
Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
|
||
valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
|
||
modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
|
||
agisse différemment des paramètres par défaut globaux.
|
||
|
||
La valeur par défaut est @samp{"NORMAL"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
|
||
Nombre maximum de connexions clientes en même temps sur tous les sockets.
|
||
|
||
La valeur par défaut est @samp{5000}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
|
||
Longueur maximum de la queue de connexions en attente d'acceptation du
|
||
démon. Remarquez que certains protocoles supportant la retransmission
|
||
peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
|
||
|
||
La valeur par défaut est @samp{1000}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
|
||
Longueur maximum de la queue des clients acceptés mais pas authentifiés.
|
||
Indiquez zéro pour désactiver ce paramètre.
|
||
|
||
La valeur par défaut est @samp{20}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
|
||
Nombre de processus de travail démarrés initialement.
|
||
|
||
La valeur par défaut est @samp{5}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
|
||
Nombre maximum de threads de travail.
|
||
|
||
Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
|
||
seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
|
||
que max_workers soit égal au nombre maximum de clients permis.
|
||
|
||
La valeur par défaut est @samp{20}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
|
||
Nombre de travailleurs prioritaires. Si tous les threads de travail du
|
||
groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
|
||
(notamment domainDestroy) peuvent être exécutés par ce groupe.
|
||
|
||
La valeur par défaut est @samp{5}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
|
||
Limite globale totale sur les appels RPC concurrents.
|
||
|
||
La valeur par défaut est @samp{20}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{3}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
|
||
Logging filters.
|
||
|
||
A filter allows to select a different logging level for a given category of
|
||
logs The format for a filter is one of:
|
||
|
||
@itemize @bullet
|
||
@item
|
||
x:nom
|
||
|
||
@item
|
||
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:
|
||
|
||
@itemize @bullet
|
||
@item
|
||
1: DEBUG
|
||
|
||
@item
|
||
2: INFO
|
||
|
||
@item
|
||
3: WARNING
|
||
|
||
@item
|
||
4: ERROR
|
||
|
||
@end itemize
|
||
|
||
Multiple filters can be defined in a single filters statement, they just
|
||
need to be separated by spaces.
|
||
|
||
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.
|
||
|
||
An output is one of the places to save logging information The format for an
|
||
output can be:
|
||
|
||
@table @code
|
||
@item x:stderr
|
||
output goes to stderr
|
||
|
||
@item x:syslog:name
|
||
use syslog for the output and use the given name as the ident
|
||
|
||
@item x:file:file_path
|
||
output to a file, with the given filepath
|
||
|
||
@item x:journald
|
||
output to journald logging system
|
||
|
||
@end table
|
||
|
||
In all case the x prefix is the minimal level, acting as a filter
|
||
|
||
@itemize @bullet
|
||
@item
|
||
1: DEBUG
|
||
|
||
@item
|
||
2: INFO
|
||
|
||
@item
|
||
3: WARNING
|
||
|
||
@item
|
||
4: ERROR
|
||
|
||
@end itemize
|
||
|
||
Multiple outputs can be defined, they just need to be separated by spaces.
|
||
|
||
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
|
||
|
||
@itemize @bullet
|
||
@item
|
||
0: disable all auditing
|
||
|
||
@item
|
||
1: enable auditing, only if enabled on host
|
||
|
||
@item
|
||
2: enable auditing, and exit if disabled on host.
|
||
|
||
@end itemize
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
@itemize @bullet
|
||
@item
|
||
@code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
|
||
|
||
@item
|
||
@code{machine-id}: fetch the UUID from @code{/etc/machine-id}
|
||
|
||
@end itemize
|
||
|
||
If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
|
||
generated.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{5}.
|
||
|
||
@end deftypevr
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
@deffn {Variable Scheme} virtlog-service-type
|
||
This is the type of the virtlog daemon. Its value must be a
|
||
@code{virtlog-configuration}.
|
||
|
||
@example
|
||
(service virtlog-service-type
|
||
(virtlog-configuration
|
||
(max-clients 1000)))
|
||
@end example
|
||
@end deffn
|
||
|
||
@deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
|
||
Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
|
||
|
||
La valeur par défaut est @samp{3}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
|
||
Logging filters.
|
||
|
||
A filter allows to select a different logging level for a given category of
|
||
logs The format for a filter is one of:
|
||
|
||
@itemize @bullet
|
||
@item
|
||
x:nom
|
||
|
||
@item
|
||
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:
|
||
|
||
@itemize @bullet
|
||
@item
|
||
1: DEBUG
|
||
|
||
@item
|
||
2: INFO
|
||
|
||
@item
|
||
3: WARNING
|
||
|
||
@item
|
||
4: ERROR
|
||
|
||
@end itemize
|
||
|
||
Multiple filters can be defined in a single filters statement, they just
|
||
need to be separated by spaces.
|
||
|
||
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.
|
||
|
||
An output is one of the places to save logging information The format for an
|
||
output can be:
|
||
|
||
@table @code
|
||
@item x:stderr
|
||
output goes to stderr
|
||
|
||
@item x:syslog:name
|
||
use syslog for the output and use the given name as the ident
|
||
|
||
@item x:file:file_path
|
||
output to a file, with the given filepath
|
||
|
||
@item x:journald
|
||
output to journald logging system
|
||
|
||
@end table
|
||
|
||
In all case the x prefix is the minimal level, acting as a filter
|
||
|
||
@itemize @bullet
|
||
@item
|
||
1: DEBUG
|
||
|
||
@item
|
||
2: INFO
|
||
|
||
@item
|
||
3: WARNING
|
||
|
||
@item
|
||
4: ERROR
|
||
|
||
@end itemize
|
||
|
||
Multiple outputs can be defined, they just need to be separated by spaces.
|
||
|
||
La valeur par défaut est @samp{"3:stderr"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
|
||
Nombre maximum de connexions clientes en même temps sur tous les sockets.
|
||
|
||
La valeur par défaut est @samp{1024}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
|
||
Maximum file size before rolling over.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{3}.
|
||
|
||
@end deftypevr
|
||
|
||
@subsubheading Émulation transparente avec QEMU
|
||
|
||
@cindex émulation
|
||
@cindex @code{binfmt_misc}
|
||
@code{qemu-binfmt-service-type} 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.
|
||
|
||
@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:
|
||
|
||
@example
|
||
(service qemu-binfmt-service-type
|
||
(qemu-binfmt-configuration
|
||
(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
|
||
@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.
|
||
|
||
@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).
|
||
|
||
@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.
|
||
|
||
For example, let's suppose you're on an x86_64 machine and you have this
|
||
service:
|
||
|
||
@example
|
||
(service qemu-binfmt-service-type
|
||
(qemu-binfmt-configuration
|
||
(platforms (lookup-qemu-platforms "arm"))
|
||
(guix-support? #t)))
|
||
@end example
|
||
|
||
Vous pouvez lancer :
|
||
|
||
@example
|
||
guix build -s armhf-linux inkscape
|
||
@end example
|
||
|
||
@noindent
|
||
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!
|
||
|
||
@item @code{qemu} (par défaut : @code{qemu})
|
||
Le paquet QEMU à utiliser.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
|
||
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.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} qemu-platform? @var{obj}
|
||
Return true if @var{obj} is a platform object.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} qemu-platform-name @var{platform}
|
||
Return the name of @var{platform}---a string such as @code{"arm"}.
|
||
@end deffn
|
||
|
||
@node Services de contrôle de version
|
||
@subsubsection 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}.
|
||
|
||
@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.
|
||
|
||
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}.
|
||
|
||
@end deffn
|
||
|
||
@deftp {Type de données} git-daemon-configuration
|
||
Data type representing the configuration for @code{git-daemon-service}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{git})
|
||
Package object of the Git distributed version control system.
|
||
|
||
@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.
|
||
|
||
@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}.
|
||
|
||
@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}.
|
||
|
||
@item @code{listen} (par défaut : @var{'()})
|
||
Whether to listen on specific IP addresses or hostnames, defaults to all.
|
||
|
||
@item @code{port} (par défaut : @var{#f})
|
||
Whether to listen on an alternative port, which defaults to 9418.
|
||
|
||
@item @code{whitelist} (par défaut : @var{'()})
|
||
If not empty, only allow access to this list of directories.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@deftp {Type de données} git-http-configuration
|
||
Data type representing the configuration for @code{git-http-service}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{git})
|
||
Package object of the Git distributed version control system.
|
||
|
||
@item @code{git-root} (par défaut : @file{/srv/git})
|
||
Directory containing the Git repositories to expose to the world.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@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}.
|
||
@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.
|
||
|
||
@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:
|
||
|
||
@example
|
||
(service nginx-service-type
|
||
(nginx-configuration
|
||
(server-blocks
|
||
(list
|
||
(nginx-server-configuration
|
||
(listen '("443 ssl"))
|
||
(server-name "git.my-host.org")
|
||
(ssl-certificate
|
||
"/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
|
||
(ssl-certificate-key
|
||
"/etc/letsencrypt/live/git.my-host.org/privkey.pem")
|
||
(locations
|
||
(list
|
||
(git-http-nginx-location-configuration
|
||
(git-http-configuration (uri-path "/"))))))))))
|
||
@end example
|
||
|
||
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}.
|
||
@end deffn
|
||
|
||
@subsubheading Service Cgit
|
||
|
||
@cindex service cgit
|
||
@cindex git, interface web
|
||
@uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
|
||
dépôts Git écrite en C.
|
||
|
||
The following example will configure the service with default values. By
|
||
default, Cgit can be accessed on port 80 (@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.
|
||
|
||
@c %start of fragment
|
||
|
||
Les champs de @code{cgit-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} package package
|
||
Le paquet cgit.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
|
||
Configuration Nginx.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
|
||
Specifies a command which will be invoked to format the content of about
|
||
pages (both top-level and for each repository).
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{"/favicon.ico"}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} string footer
|
||
The content of the file specified with this option will be included verbatim
|
||
at the bottom of all pages (i.e.@: it replaces the standard "generated
|
||
by..."@: message).
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
|
||
"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
|
||
(svg "image/svg+xml"))}.
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
|
||
Specifies the file to use for automatic mimetype lookup.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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 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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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
|
||
@code{scan-path}).
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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 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 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}.
|
||
|
||
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?}.
|
||
|
||
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?}.
|
||
|
||
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?}.
|
||
|
||
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.
|
||
|
||
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?}.
|
||
|
||
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?}.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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 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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{cgit-configuration}} list extra-options
|
||
Extra options will be appended to cgitrc file.
|
||
|
||
La valeur par défaut est @samp{()}.
|
||
|
||
@end deftypevr
|
||
|
||
|
||
@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.
|
||
|
||
Les champs de @code{opaque-cgit-configuration} disponibles sont :
|
||
|
||
@deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
|
||
The cgit package.
|
||
@end deftypevr
|
||
|
||
@deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
|
||
The contents of the @code{cgitrc}, as a string.
|
||
@end deftypevr
|
||
|
||
For example, if your @code{cgitrc} is just the empty string, you could
|
||
instantiate a cgit service like this:
|
||
|
||
@example
|
||
(service cgit-service-type
|
||
(opaque-cgit-configuration
|
||
(cgitrc "")))
|
||
@end example
|
||
|
||
@subsubheading Service Gitolite
|
||
|
||
@cindex service Gitolite
|
||
@cindex Git, hébergement
|
||
@uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
|
||
repositories on a central server.
|
||
|
||
Gitolite can handle multiple repositories and users, and supports flexible
|
||
configuration of the permissions for the users on the repositories.
|
||
|
||
The following example will configure Gitolite using the default @code{git}
|
||
user, and the provided SSH public key.
|
||
|
||
@example
|
||
(service gitolite-service-type
|
||
(gitolite-configuration
|
||
(admin-pubkey (plain-file
|
||
"yourname.pub"
|
||
"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.
|
||
|
||
@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''.
|
||
|
||
@deftp {Type de données} gitolite-configuration
|
||
Type de données représentant la configuration de
|
||
@code{gitolite-service-type}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @var{gitolite})
|
||
Le paquet Gitolite à utiliser.
|
||
|
||
@item @code{user} (par défaut : @var{git})
|
||
User to use for Gitolite. This will be user that you use when accessing
|
||
Gitolite over SSH.
|
||
|
||
@item @code{group} (par défaut : @var{git})
|
||
Groupe à utiliser pour Gitolite.
|
||
|
||
@item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
|
||
Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
|
||
|
||
@item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
|
||
Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
|
||
représentant la configuration de Gitolite.
|
||
|
||
@item @code{admin-pubkey} (par défaut : @var{#f})
|
||
Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
|
||
utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
|
||
@file{keydir} dans le dépôt gitolite-admin.
|
||
|
||
To specify the SSH key as a string, use the @code{plain-file} function.
|
||
|
||
@example
|
||
(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
|
||
@end example
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} gitolite-rc-file
|
||
Type de données représentant le fichier RC de Gitolite.
|
||
|
||
@table @asis
|
||
@item @code{umask} (par défaut : @code{#o0077})
|
||
This controls the permissions Gitolite sets on the repositories and their
|
||
contents.
|
||
|
||
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.
|
||
|
||
@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.
|
||
|
||
@item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
|
||
Set the role names allowed to be used by users running the perms command.
|
||
|
||
@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.
|
||
|
||
@end table
|
||
@end deftp
|
||
|
||
|
||
@node Services de jeu
|
||
@subsubsection Services de jeu
|
||
|
||
@subsubheading The Battle for Wesnoth Service
|
||
@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).
|
||
|
||
@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:
|
||
|
||
@example
|
||
(service wesnothd-service-type)
|
||
@end example
|
||
@end defvar
|
||
|
||
@deftp {Type de données} wesnothd-configuration
|
||
Data type representing the configuration of @command{wesnothd}.
|
||
|
||
@table @asis
|
||
@item @code{package} (par défaut : @code{wesnoth-server})
|
||
The wesnoth server package to use.
|
||
|
||
@item @code{port} (par défaut : @code{15000})
|
||
The port to bind the server to.
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Services divers
|
||
@subsubsection Services divers
|
||
|
||
@cindex fingerprint
|
||
@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.
|
||
|
||
@example
|
||
(service fprintd-service-type)
|
||
@end example
|
||
@end defvr
|
||
|
||
@cindex sysctl
|
||
@subsubheading System Control Service
|
||
|
||
The @code{(gnu services sysctl)} provides a service to configure kernel
|
||
parameters at boot.
|
||
|
||
@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:
|
||
|
||
@example
|
||
(service sysctl-service-type
|
||
(sysctl-configuration
|
||
(settings '(("net.ipv4.ip_forward" . "1")))))
|
||
@end example
|
||
@end defvr
|
||
|
||
@deftp {Type de données} sysctl-configuration
|
||
The data type representing the configuration of @command{sysctl}.
|
||
|
||
@table @asis
|
||
@item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
|
||
The @command{sysctl} executable to use.
|
||
|
||
@item @code{settings} (par défaut : @code{'()})
|
||
An association list specifies kernel parameters and their values.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex pcscd
|
||
@subsubheading PC/SC Smart Card Daemon Service
|
||
|
||
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.
|
||
|
||
@defvr {Variable Scheme} pcscd-service-type
|
||
Le type de service pour le service @command{pcscd}. Sa valeur doit être un
|
||
objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
|
||
par défaut, instantiez-le avec :
|
||
|
||
@example
|
||
(service pcscd-service-type)
|
||
@end example
|
||
@end defvr
|
||
|
||
@deftp {Type de données} pcscd-configuration
|
||
Type de données représentant la configuration de @command{pcscd}.
|
||
|
||
@table @asis
|
||
@item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
|
||
Le paquet pcsc-lite qui fournit pcscd.
|
||
@item @code{usb-drivers} (par défaut : @code{(list ccid)})
|
||
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.
|
||
@end table
|
||
@end deftp
|
||
|
||
@cindex lirc
|
||
@subsubheading Lirc Service
|
||
|
||
The @code{(gnu services lirc)} module provides the following service.
|
||
|
||
@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.
|
||
|
||
Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
|
||
file name) may be specified. See @command{lircd} manual for details.
|
||
|
||
Finally, @var{extra-options} is a list of additional command-line options
|
||
passed to @command{lircd}.
|
||
@end deffn
|
||
|
||
@cindex spice
|
||
@subsubheading Spice Service
|
||
|
||
The @code{(gnu services spice)} module provides the following service.
|
||
|
||
@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.
|
||
@end deffn
|
||
|
||
@subsubsection Dictionary Services
|
||
@cindex dictionary
|
||
The @code{(gnu services dict)} module provides the following service:
|
||
|
||
@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}).
|
||
|
||
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.
|
||
|
||
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}).
|
||
@end deffn
|
||
|
||
@deftp {Type de données} dicod-configuration
|
||
Data type representing the configuration of dicod.
|
||
|
||
@table @asis
|
||
@item @code{dico} (par défaut : @var{dico})
|
||
Package object of the GNU Dico dictionary server.
|
||
|
||
@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}).
|
||
|
||
@item @code{handlers} (par défaut : @var{'()})
|
||
List of @code{<dicod-handler>} objects denoting handlers (module instances).
|
||
|
||
@item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
|
||
List of @code{<dicod-database>} objects denoting dictionaries to be served.
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} dicod-handler
|
||
Data type representing a dictionary handler (module instance).
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Name of the handler (module instance).
|
||
|
||
@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}).
|
||
|
||
@item @code{options}
|
||
List of strings or gexps representing the arguments for the module handler
|
||
@end table
|
||
@end deftp
|
||
|
||
@deftp {Type de données} dicod-database
|
||
Data type representing a dictionary database.
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
Name of the database, will be used in DICT commands.
|
||
|
||
@item @code{handler}
|
||
Name of the dicod handler (module instance) used by this database
|
||
(@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.
|
||
|
||
@item @code{options}
|
||
List of strings or gexps representing the arguments for the database
|
||
(@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.
|
||
@end defvr
|
||
|
||
The following is an example @code{dicod-service} configuration.
|
||
|
||
@example
|
||
(dicod-service #:config
|
||
(dicod-configuration
|
||
(handlers (list (dicod-handler
|
||
(name "wordnet")
|
||
(module "dictorg")
|
||
(options
|
||
(list #~(string-append "dbdir=" #$wordnet))))))
|
||
(databases (list (dicod-database
|
||
(name "wordnet")
|
||
(complex? #t)
|
||
(handler "wordnet")
|
||
(options '("database=wn")))
|
||
%dicod-database:gcide))))
|
||
@end example
|
||
|
||
@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}):
|
||
|
||
@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.
|
||
|
||
@defvr {Variable Scheme} %setuid-programs
|
||
A list of G-expressions denoting common programs that are setuid-root.
|
||
|
||
The list includes commands such as @command{passwd}, @command{ping},
|
||
@command{su}, and @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.
|
||
|
||
@node Certificats X.509
|
||
@subsection Certificats X.509
|
||
|
||
@cindex HTTPS, certificates
|
||
@cindex X.509 certificates
|
||
@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.
|
||
|
||
@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,
|
||
@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:
|
||
|
||
@example
|
||
$ guix package -i nss-certs
|
||
$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
|
||
$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
|
||
$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
|
||
@end example
|
||
|
||
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:
|
||
|
||
@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.
|
||
|
||
|
||
@node Name Service Switch
|
||
@subsection 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
|
||
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}}).
|
||
|
||
@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}:
|
||
|
||
@example
|
||
(name-service-switch
|
||
(hosts (list %files ;first, check /etc/hosts
|
||
|
||
;; If the above did not succeed, try
|
||
;; with '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.
|
||
(reaction (lookup-specification
|
||
(not-found => return))))
|
||
|
||
;; Then fall back to DNS.
|
||
(name-service
|
||
(name "dns"))
|
||
|
||
;; Finally, try with the "full" 'mdns'.
|
||
(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.
|
||
|
||
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
|
||
(@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.
|
||
|
||
@defvr {Variable Scheme} %default-nss
|
||
This is the default name service switch configuration, a
|
||
@code{name-service-switch} object.
|
||
@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}.
|
||
@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
|
||
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.
|
||
|
||
@table @code
|
||
@item aliases
|
||
@itemx ethers
|
||
@itemx group
|
||
@itemx gshadow
|
||
@itemx hosts
|
||
@itemx initgroups
|
||
@itemx netgroup
|
||
@itemx networks
|
||
@itemx password
|
||
@itemx public-key
|
||
@itemx rpc
|
||
@itemx services
|
||
@itemx shadow
|
||
The system databases handled by the NSS. Each of these fields must be a
|
||
list of @code{<name-service>} objects (see below).
|
||
@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.
|
||
|
||
@table @code
|
||
@item name
|
||
A string denoting the name service (@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
|
||
(@pxref{Services de base, @code{nscd-service}}).
|
||
|
||
@item reaction
|
||
An action specified using the @code{lookup-specification} macro
|
||
(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
|
||
Reference Manual}). For example:
|
||
|
||
@example
|
||
(lookup-specification (unavailable => continue)
|
||
(success => return))
|
||
@end example
|
||
@end table
|
||
@end deftp
|
||
|
||
@node Disque de RAM initial
|
||
@subsection 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:
|
||
|
||
@example
|
||
(operating-system
|
||
;; @dots{}
|
||
(initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
|
||
@end example
|
||
|
||
@defvr {Variable Scheme} %base-initrd-modules
|
||
This is the list of kernel modules included in the initrd by default.
|
||
@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.
|
||
|
||
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:
|
||
|
||
@example
|
||
(initrd (lambda (file-systems . rest)
|
||
;; Create a standard initrd but set up networking
|
||
;; with the parameters QEMU expects by default.
|
||
(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.
|
||
|
||
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.
|
||
|
||
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:
|
||
|
||
@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.
|
||
|
||
GuixSD 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.
|
||
|
||
@item --system=@var{système}
|
||
Have @file{/run/booted-system} and @file{/run/current-system} point to
|
||
@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}.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
@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
|
||
@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.
|
||
@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.
|
||
|
||
@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.
|
||
@end deffn
|
||
|
||
@node Configuration du chargeur d'amorçage
|
||
@subsection Configuration du chargeur d'amorçage
|
||
|
||
@cindex bootloader
|
||
@cindex boot loader
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
@deftp {Type de données} bootloader-configuration
|
||
The type of a bootloader configuration declaration.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@vindex grub-bootloader
|
||
@code{grub-bootloader} allows you to boot in particular Intel-based machines
|
||
in ``legacy'' BIOS mode.
|
||
|
||
@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}.
|
||
|
||
@item @code{target}
|
||
This is a string denoting the target onto which to install the bootloader.
|
||
|
||
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}.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
@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}).
|
||
|
||
@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}).
|
||
|
||
@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}).
|
||
|
||
@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}).
|
||
@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:
|
||
|
||
@example
|
||
(menu-entry
|
||
(label "The Other Distro")
|
||
(linux "/boot/old/vmlinux-2.6.32")
|
||
(linux-arguments '("root=/dev/sda2"))
|
||
(initrd "/boot/old/initrd"))
|
||
@end example
|
||
|
||
Details below.
|
||
|
||
@deftp {Type de données} menu-entry
|
||
The type of an entry in the bootloader menu.
|
||
|
||
@table @asis
|
||
|
||
@item @code{label}
|
||
The label to show in the menu---e.g., @code{"GNU"}.
|
||
|
||
@item @code{linux}
|
||
The Linux kernel image to boot, for example:
|
||
|
||
@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:
|
||
|
||
@example
|
||
"(hd0,msdos1)/boot/vmlinuz"
|
||
@end example
|
||
|
||
If the device is specified explicitly as above, then the @code{device} field
|
||
is ignored entirely.
|
||
|
||
@item @code{linux-arguments} (par défaut : @code{()})
|
||
The list of extra Linux kernel command-line arguments---e.g.,
|
||
@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}).
|
||
@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}).
|
||
|
||
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}.
|
||
|
||
@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.
|
||
|
||
@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.
|
||
|
||
It comes with a fancy background image displaying the GNU and Guix logos.
|
||
@end defvr
|
||
|
||
|
||
@node Invoquer guix system
|
||
@subsection 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:
|
||
|
||
@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:
|
||
|
||
@table @code
|
||
@item search
|
||
Display available service type definitions that match the given regular
|
||
expressions, sorted by relevance:
|
||
|
||
@example
|
||
$ guix system search console font
|
||
name: console-fonts
|
||
location: gnu/services/base.scm:729: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:
|
||
+
|
||
+ '(("tty1" . "LatGrkCyr-8x16"))
|
||
relevance: 20
|
||
|
||
name: mingetty
|
||
location: gnu/services/base.scm:1048:2
|
||
extends: shepherd-root
|
||
description: Provide console login using the `mingetty' program.
|
||
relevance: 2
|
||
|
||
name: login
|
||
location: gnu/services/base.scm:775:2
|
||
extends: pam
|
||
description: Provide a console log-in service as specified by its
|
||
+ configuration value, a `login-configuration' object.
|
||
relevance: 2
|
||
|
||
@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}).
|
||
|
||
@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.}.
|
||
|
||
This effects all the configuration specified in @var{file}: user accounts,
|
||
system services, global package list, setuid programs, etc. The command
|
||
starts system services specified in @var{file} that are not currently
|
||
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}).
|
||
|
||
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.
|
||
|
||
@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.
|
||
@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.
|
||
|
||
The bootloader itself is not being reinstalled when using this command.
|
||
Thus, the installed bootloader is used with an updated configuration file.
|
||
|
||
The target generation can be specified explicitly by its generation number.
|
||
For example, the following invocation would switch to system generation 7:
|
||
|
||
@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:
|
||
|
||
@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.
|
||
|
||
This action will fail if the specified generation does not exist.
|
||
|
||
@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}.
|
||
|
||
Currently, as with @command{switch-generation}, you must reboot after
|
||
running this action to actually start using the preceding system generation.
|
||
|
||
@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.
|
||
|
||
@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:
|
||
|
||
@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.
|
||
|
||
This command also installs bootloader on the target specified in
|
||
@file{my-os-config}, unless the @option{--no-bootloader} option was passed.
|
||
|
||
@item vm
|
||
@cindex virtual machine
|
||
@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:
|
||
|
||
@example
|
||
$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
|
||
@end example
|
||
|
||
The VM shares its store with the host system.
|
||
|
||
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.
|
||
|
||
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:
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
@cindex System images, creation in various formats
|
||
@cindex Creating system images in various 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}.
|
||
|
||
You can specify the root file system type by using the
|
||
@option{--file-system-type} option. It defaults to @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
|
||
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:
|
||
|
||
@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:
|
||
|
||
@example
|
||
image_id="$(docker load < guixsd-docker-image.tar.gz)"
|
||
docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
|
||
--entrypoint /var/guix/profiles/system/profile/bin/guile \\
|
||
$image_id /var/guix/profiles/system/boot
|
||
@end example
|
||
|
||
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}.
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
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:
|
||
|
||
@example
|
||
guix system container my-config.scm \
|
||
--expose=$HOME --share=$HOME/tmp=/exchange
|
||
@end example
|
||
|
||
@quotation Remarque
|
||
This option requires Linux-libre 3.19 or newer.
|
||
@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:
|
||
|
||
@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}).
|
||
|
||
@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}).
|
||
|
||
@item --derivation
|
||
@itemx -d
|
||
Return the derivation file name of the given operating system without
|
||
building anything.
|
||
|
||
@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.
|
||
|
||
When this option is omitted, @command{guix system} uses @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.
|
||
|
||
@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,,
|
||
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
|
||
@var{file}.
|
||
|
||
@item --root=@var{fichier}
|
||
@itemx -r @var{fichier}
|
||
Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
|
||
en tant que racine du ramasse-miettes.
|
||
|
||
@item --skip-checks
|
||
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.
|
||
|
||
@item --on-error=@var{strategy}
|
||
Apply @var{strategy} when an error occurs when reading @var{file}.
|
||
@var{strategy} may be one of the following:
|
||
|
||
@table @code
|
||
@item nothing-special
|
||
Report the error concisely and exit. This is the default strategy.
|
||
|
||
@item backtrace
|
||
Likewise, but also display a backtrace.
|
||
|
||
@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.
|
||
@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
|
||
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}).
|
||
|
||
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:
|
||
|
||
@example
|
||
$ guix system list-generations 10d
|
||
@end example
|
||
|
||
@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:
|
||
|
||
@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.)
|
||
|
||
The command:
|
||
|
||
@example
|
||
$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
|
||
@end example
|
||
|
||
produces a PDF file showing the extension relations among 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.
|
||
|
||
@end table
|
||
|
||
@node Lancer GuixSD dans une VM
|
||
@subsection Running GuixSD 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
|
||
@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
|
||
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:
|
||
|
||
@example
|
||
$ qemu-system-x86_64 \
|
||
-net user -net nic,model=virtio \
|
||
-enable-kvm -m 256 /tmp/qemu-image
|
||
@end example
|
||
|
||
Here is what each of these options means:
|
||
|
||
@table @code
|
||
@item qemu-system-x86_64
|
||
This specifies the hardware platform to emulate. This should match the
|
||
host.
|
||
|
||
@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.
|
||
|
||
@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}.
|
||
|
||
@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.
|
||
|
||
@item -m 256
|
||
RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
|
||
which may be insufficient for some operations.
|
||
|
||
@item /tmp/qemu-image
|
||
The file name of the qcow2 image.
|
||
@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
|
||
download}.
|
||
|
||
@subsubsection Connecting Through 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
|
||
|
||
@example
|
||
`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
|
||
@end example
|
||
|
||
To connect to the VM you can run
|
||
|
||
@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.
|
||
|
||
@subsubsection Using @command{virt-viewer} with 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.
|
||
|
||
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}:
|
||
|
||
@example
|
||
-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
|
||
-chardev spicevmc,name=vdagent,id=vdagent
|
||
-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
|
||
name=com.redhat.spice.0
|
||
@end example
|
||
|
||
You'll also need to add the @pxref{Services divers, Spice service}.
|
||
|
||
@node Définir des services
|
||
@subsection 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?
|
||
|
||
@menu
|
||
* Composition de services:: Le modèle de composition des services.
|
||
* Types service et services:: Types et services.
|
||
* Référence de service:: Référence de l'API@.
|
||
* Services Shepherd:: Un type de service particulier.
|
||
@end menu
|
||
|
||
@node Composition de services
|
||
@subsubsection 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
|
||
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{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:
|
||
|
||
@image{images/service-graph,,5in,Typical service extension graph.}
|
||
|
||
@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 types
|
||
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
|
||
different parameters.
|
||
|
||
The following section describes the programming interface for service types
|
||
and services.
|
||
|
||
@node Types service et services
|
||
@subsubsection 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}):
|
||
|
||
@example
|
||
(define guix-service-type
|
||
(service-type
|
||
(name 'guix)
|
||
(extensions
|
||
(list (service-extension shepherd-root-service-type guix-shepherd-service)
|
||
(service-extension account-service-type guix-accounts)
|
||
(service-extension activation-service-type guix-activation)))
|
||
(default-value (guix-configuration))))
|
||
@end example
|
||
|
||
@noindent
|
||
It defines three things:
|
||
|
||
@enumerate
|
||
@item
|
||
A name, whose sole purpose is to make inspection and debugging easier.
|
||
|
||
@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.
|
||
|
||
Every service type has at least one service extension. The only exception
|
||
is the @dfn{boot service type}, which is the ultimate service.
|
||
|
||
@item
|
||
Optionally, a default value for instances of this type.
|
||
@end enumerate
|
||
|
||
In this example, @var{guix-service-type} extends three 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}).
|
||
|
||
@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}).
|
||
|
||
@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.
|
||
@end table
|
||
|
||
A service of this type is instantiated like this:
|
||
|
||
@example
|
||
(service guix-service-type
|
||
(guix-configuration
|
||
(build-accounts 5)
|
||
(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:
|
||
|
||
@example
|
||
(service guix-service-type)
|
||
@end example
|
||
|
||
@var{guix-service-type} is quite simple because it extends other services
|
||
but is not extensible itself.
|
||
|
||
@c @subsubsubsection Extensible Service Types
|
||
|
||
The service type for an @emph{extensible} service looks like this:
|
||
|
||
@example
|
||
(define udev-service-type
|
||
(service-type (name 'udev)
|
||
(extensions
|
||
(list (service-extension shepherd-root-service-type
|
||
udev-shepherd-service)))
|
||
|
||
(compose concatenate) ;concatenate the list of rules
|
||
(extend (lambda (config rules)
|
||
(match config
|
||
(($ <udev-configuration> udev initial-rules)
|
||
(udev-configuration
|
||
(udev udev) ;the udev package to use
|
||
(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:
|
||
|
||
@table @code
|
||
@item compose
|
||
This is the procedure to @dfn{compose} the list of extensions to services of
|
||
this type.
|
||
|
||
Services can extend the udev service by passing it lists of rules; we
|
||
compose those extensions simply by concatenating them.
|
||
|
||
@item extend
|
||
This procedure defines how the value of the service is @dfn{extended} with
|
||
the composition of the 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.
|
||
|
||
@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}).
|
||
@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.
|
||
|
||
Still here? The next section provides a reference of the programming
|
||
interface for services.
|
||
|
||
@node Référence de service
|
||
@subsubsection 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.
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
For instance, this:
|
||
|
||
@example
|
||
(service openssh-service-type)
|
||
@end example
|
||
|
||
@noindent
|
||
is equivalent to this:
|
||
|
||
@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.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} service? @var{obj}
|
||
Return true if @var{obj} is a service.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} service-kind @var{service}
|
||
Return the type of @var{service}---i.e., a @code{<service-type>} object.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} service-value @var{service}
|
||
Return the value associated with @var{service}. It represents its
|
||
parameters.
|
||
@end deffn
|
||
|
||
Here is an example of how a service is created and manipulated:
|
||
|
||
@example
|
||
(define s
|
||
(service nginx-service-type
|
||
(nginx-configuration
|
||
(nginx nginx)
|
||
(log-directory log-directory)
|
||
(run-directory run-directory)
|
||
(file config-file))))
|
||
|
||
(service? s)
|
||
@result{} #t
|
||
|
||
(eq? (service-kind s) nginx-service-type)
|
||
@result{} #t
|
||
@end example
|
||
|
||
The @code{modify-services} form provides a handy way to change the
|
||
parameters of some of the services of a list such as @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.
|
||
|
||
@deffn {Scheme Syntax} 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:
|
||
|
||
@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}.
|
||
|
||
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.
|
||
|
||
@xref{Utiliser le système de configuration}, for example usage.
|
||
|
||
@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.
|
||
|
||
@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}).
|
||
|
||
@table @asis
|
||
@item @code{name}
|
||
This is a symbol, used only to simplify inspection and debugging.
|
||
|
||
@item @code{extensions}
|
||
A non-empty list of @code{<service-extension>} objects (see below).
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
@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.
|
||
@end table
|
||
|
||
@xref{Types service et services}, for examples.
|
||
@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.
|
||
@end deffn
|
||
|
||
@deffn {Procédure Scheme} service-extension? @var{obj}
|
||
Return true if @var{obj} is a service extension.
|
||
@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.
|
||
|
||
@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.
|
||
|
||
For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
|
||
additional job:
|
||
|
||
@example
|
||
(simple-service 'my-mcron-job mcron-service-type
|
||
#~(job '(next-hour (3)) "guix gc -F 2G"))
|
||
@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.
|
||
|
||
@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.
|
||
@end deffn
|
||
|
||
Lastly, the @code{(gnu services)} module also defines several essential
|
||
service types, some of which are listed below.
|
||
|
||
@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.
|
||
@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.
|
||
@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:
|
||
|
||
@example
|
||
(list `("issue" ,(plain-file "issue" "Welcome!\n")))
|
||
@end example
|
||
|
||
In this example, the effect would be to add an @file{/etc/issue} file
|
||
pointing to the given file.
|
||
@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}).
|
||
@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.
|
||
@end defvr
|
||
|
||
|
||
@node Services Shepherd
|
||
@subsubsection Services Shepherd
|
||
|
||
@cindex services shepherd
|
||
@cindex PID 1
|
||
@cindex init system
|
||
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}).
|
||
|
||
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:
|
||
|
||
@image{images/shepherd-graph,,5in,Typical shepherd service graph.}
|
||
|
||
You can actually generate such a graph for any operating system definition
|
||
using the @command{guix system shepherd-graph} command
|
||
(@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.
|
||
|
||
@deftp {Type de données} shepherd-service
|
||
The data type representing a service managed by the Shepherd.
|
||
|
||
@table @asis
|
||
@item @code{provision}
|
||
This is a list of symbols denoting what the service provides.
|
||
|
||
These are the names that may be passed to @command{herd start},
|
||
@command{herd status}, and similar commands (@pxref{Invoking herd,,,
|
||
shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
|
||
@code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
|
||
|
||
@item @code{requirements} (par défaut : @code{'()})
|
||
List of symbols denoting the Shepherd services this one depends on.
|
||
|
||
@item @code{respawn?} (par défaut : @code{#t})
|
||
Whether to restart the service when it stops, for instance when the
|
||
underlying process dies.
|
||
|
||
@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}).
|
||
|
||
@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:
|
||
|
||
@example
|
||
herd @var{action} @var{service} [@var{arguments}@dots{}]
|
||
@end example
|
||
|
||
@item @code{documentation}
|
||
A documentation string, as shown when running:
|
||
|
||
@example
|
||
herd doc @var{service-name}
|
||
@end example
|
||
|
||
where @var{service-name} is one of the symbols in @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.
|
||
|
||
@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).
|
||
|
||
@table @code
|
||
@item name
|
||
Symbole nommant l'action
|
||
|
||
@item documentation
|
||
This is a documentation string for the action. It can be viewed by running:
|
||
|
||
@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}).
|
||
@end table
|
||
|
||
The following example defines an action called @code{say-hello} that kindly
|
||
greets the user:
|
||
|
||
@example
|
||
(shepherd-action
|
||
(name 'say-hello)
|
||
(documentation "Say hi!")
|
||
(procedure #~(lambda (running . args)
|
||
(format #t "Hello, friend! arguments: ~s\n"
|
||
args)
|
||
#t)))
|
||
@end example
|
||
|
||
Assuming this action is added to the @code{example} service, then you can
|
||
do:
|
||
|
||
@example
|
||
# herd say-hello example
|
||
Hello, friend! arguments: ()
|
||
# herd say-hello example a b c
|
||
Hello, friend! 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.
|
||
@end deftp
|
||
|
||
@defvr {Variable Scheme} shepherd-root-service-type
|
||
The service type for the Shepherd ``root service''---i.e., 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>}.
|
||
@end defvr
|
||
|
||
@defvr {Variable Scheme} %shepherd-root-service
|
||
This service represents 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:
|
||
|
||
@example
|
||
$ info -k TLS
|
||
"(emacs)Network Security" -- STARTTLS
|
||
"(emacs)Network Security" -- TLS
|
||
"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
|
||
"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
|
||
@dots{}
|
||
@end example
|
||
|
||
@noindent
|
||
The command below searches for the same keyword in man pages:
|
||
|
||
@example
|
||
$ man -k TLS
|
||
SSL (7) - OpenSSL SSL/TLS library
|
||
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.
|
||
|
||
Once you have these results, you can view the relevant documentation by
|
||
running, say:
|
||
|
||
@example
|
||
$ info "(gnutls)Core TLS API"
|
||
@end example
|
||
|
||
@noindent
|
||
or:
|
||
|
||
@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.
|
||
|
||
@node Installer les fichiers de débogage
|
||
@section 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.
|
||
|
||
Le problème avec les informations de débogage est qu'elles prennent pas mal
|
||
de place sur le disque. Par exemple, les informations de débogage de la
|
||
bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
|
||
garder toutes les informations de débogage de tous les programmes installés
|
||
n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
|
||
pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
|
||
faciliter pour ses utilisateurs l'exercice de leurs libertés
|
||
(@pxref{Distribution GNU}).
|
||
|
||
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
|
||
(@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:
|
||
|
||
@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}):
|
||
|
||
@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}.
|
||
|
||
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}).
|
||
|
||
@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}).
|
||
|
||
|
||
@node Mises à jour de sécurité
|
||
@section Mises à jour de sécurité
|
||
|
||
@cindex security updates
|
||
@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:
|
||
|
||
@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
|
||
@dots{}
|
||
@end smallexample
|
||
|
||
@xref{Invoquer guix lint}, for more information.
|
||
|
||
@quotation Remarque
|
||
As of version @value{VERSION}, the feature described below is considered
|
||
``beta''.
|
||
@end quotation
|
||
|
||
Guix suit une discipline de gestion de paquets fonctionnelle
|
||
(@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
|
||
@emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
|
||
peut grandement ralentir le déploiement de corrections dans les paquets du
|
||
cœur comme libc ou bash comme presque toute la distribution aurait besoin
|
||
d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
|
||
(@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
|
||
temps de souhaité.
|
||
|
||
@cindex greffes
|
||
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:
|
||
|
||
@example
|
||
(define bash
|
||
(package
|
||
(name "bash")
|
||
;; @dots{}
|
||
(replacement bash-fixed)))
|
||
@end example
|
||
|
||
From there on, any package depending directly or indirectly on Bash---as
|
||
reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
|
||
is installed is automatically ``rewritten'' to refer to @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.
|
||
|
||
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.
|
||
|
||
The @option{--no-grafts} command-line option allows you to forcefully avoid
|
||
grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
|
||
command:
|
||
|
||
@example
|
||
guix build bash --no-grafts
|
||
@end example
|
||
|
||
@noindent
|
||
returns the store file name of the original Bash, whereas:
|
||
|
||
@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.
|
||
|
||
To verify which Bash your whole profile refers to, you can run
|
||
(@pxref{Invoquer guix gc}):
|
||
|
||
@example
|
||
guix gc -R `readlink -f ~/.guix-profile` | grep bash
|
||
@end example
|
||
|
||
@noindent
|
||
@dots{} and compare the store file names that you get with those above.
|
||
Likewise for a complete GuixSD 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:
|
||
|
||
@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
|
||
|
||
@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
|
||
|
||
@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}
|
||
|
||
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:
|
||
|
||
@example
|
||
guix graph -t derivation \
|
||
-e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
|
||
| 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:
|
||
|
||
@example
|
||
guix graph -t bag \
|
||
-e '(@@@@ (gnu packages commencement)
|
||
glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
|
||
@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.
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
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}}).
|
||
|
||
|
||
@unnumberedsubsec Building the Bootstrap Binaries
|
||
|
||
@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.
|
||
|
||
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):
|
||
|
||
@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.
|
||
|
||
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.
|
||
|
||
@unnumberedsubsec Reducing the Set of Bootstrap Binaries
|
||
|
||
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}.
|
||
|
||
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.
|
||
|
||
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!
|
||
|
||
|
||
@node Porter
|
||
@section 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.
|
||
|
||
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:
|
||
|
||
@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.
|
||
|
||
@c *********************************************************************
|
||
@include contributing.fr.texi
|
||
|
||
@c *********************************************************************
|
||
@node Remerciements
|
||
@chapter Remerciements
|
||
|
||
Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
|
||
Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
|
||
personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
|
||
gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
|
||
comme les mises à jour de paquets transactionnelles et les retours en
|
||
arrière, les profils par utilisateurs et les processus de constructions
|
||
transparents pour les références. Sans ce travail, Guix n'existerait pas.
|
||
|
||
Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
|
||
été une inspiration pour Guix.
|
||
|
||
GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
|
||
grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
|
||
plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
|
||
liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
|
||
de l'infrastructure, en fournissant des images et des thèmes, en faisant des
|
||
suggestions et bien plus. Merci !
|
||
|
||
|
||
@c *********************************************************************
|
||
@node La licence GNU Free Documentation
|
||
@appendix La licence GNU Free Documentation
|
||
@cindex license, GNU Free Documentation License
|
||
@include fdl-1.3.texi
|
||
|
||
@c *********************************************************************
|
||
@node Index des concepts
|
||
@unnumbered Index des concepts
|
||
@printindex cp
|
||
|
||
@node Index de programmation
|
||
@unnumbered Index de programmation
|
||
@syncodeindex tp fn
|
||
@syncodeindex vr fn
|
||
@printindex fn
|
||
|
||
@bye
|
||
|
||
@c Local Variables:
|
||
@c ispell-local-dictionary: "american";
|
||
@c End:
|