2 @c ===========================================================================
4 @c This file was generated with po4a. Translate the source file.
6 @c ===========================================================================
10 @setfilename guix.fr.info
11 @documentencoding UTF-8
14 @settitle Manuel de référence de GNU Guix
17 @include version-fr.texi
19 @c Identifier of the OpenPGP key used to sign tarballs and such.
20 @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
23 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic
24 Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* Copyright
25 @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, 2015,
26 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
27 Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
28 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
29 Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo
30 Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
31 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
32 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
33 @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017,
34 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
35 Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017,
36 2018 Clément Lassieur@* Copyright @copyright{} 2017 Mathieu Othacehe@*
37 Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017
38 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* Copyright
39 @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017 Christopher
40 Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@* Copyright
41 @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017 Maxim
42 Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
43 Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
44 Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
45 @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
46 Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
47 Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
48 @copyright{} 2018 Gábor Boskovits@*
50 Vous avez la permission de copier, distribuer ou modifier ce document sous
51 les termes de la Licence GNU Free Documentation, version 1.3 ou toute
52 version ultérieure publiée par la Free Software Foundation ; sans section
53 invariante, texte de couverture et sans texte de quatrième de couverture.
54 Une copie de la licence est incluse dans la section intitulée « GNU Free
55 Documentation License ».
58 @dircategory Administration système
60 * Guix: (guix.fr). Gérer les logiciels installés et la
61 configuration du système.
62 * guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
65 * guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
67 * guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
69 * guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
70 système d'exploitation.
73 @dircategory Développement logiciel
75 * guix environment : (guix.fr)Invoquer guix environment. Construire des
79 * guix build : (guix.fr)Invoquer guix build. Construire des paquets.
80 * guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
84 @title Manuel de référence de GNU Guix
85 @subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
86 @author Les développeurs de GNU Guix
89 @vskip 0pt plus 1filll
90 Édition @value{EDITION} @* @value{UPDATED} @*
97 @c *********************************************************************
101 Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
102 gestion de paquets fonctionnel écrit pour le système GNU@.
104 @c TRANSLATORS: You can replace the following paragraph with information on
105 @c how to join your own translation team and how to report issues with the
107 This manual is also available in French (@pxref{Top,,, guix.fr, Manuel de
108 référence de GNU Guix}). If you would like to translate it in your native
109 language, consider joining the
110 @uref{https://translationproject.org/domain/guix-manual.html, Translation
114 * Introduction:: Qu'est-ce que Guix ?
115 * Installation:: Installer Guix.
116 * Gestion de paquets:: Installation des paquets, mises à jour, etc.
117 * Interface de programmation:: Utiliser Guix en Scheme.
118 * Utilitaires:: Commandes de gestion de paquets.
119 * Distribution GNU:: Des logiciels pour un système GNU convivial.
120 * Contribuer:: Nous avons besoin de votre aide !
122 * Remerciements:: Merci !
123 * La licence GNU Free Documentation:: La licence de ce manuel.
124 * Index des concepts:: Les concepts.
125 * Index de programmation:: Types de données, fonctions et variables.
128 --- Liste détaillée des nœuds ---
136 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
138 * Prérequis:: Logiciels requis pour construire et lancer
140 * Lancer la suite de tests:: Tester Guix.
141 * Paramétrer le démon:: Préparer l'environnement du démon de
143 * Invoquer guix-daemon:: Lancer le démon de construction.
144 * Réglages applicatifs:: Réglages spécifiques pour les application.
150 * Réglages de l'environnement de construction:: Préparer l'environnement
151 de construction isolé.
152 * Réglages du délestage du démon:: Envoyer des constructions à des
154 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
160 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
161 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
162 * Substituts:: Télécharger des binaire déjà construits.
163 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
165 * Invoquer guix gc:: Lancer le ramasse-miettes.
166 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
168 * Invoquer guix pack:: Créer des lots de logiciels.
169 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
175 * Serveur de substituts officiel:: Une source particulière de substituts.
176 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
178 * Authentification des substituts:: Coment Guix vérifie les substituts.
179 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
180 travers un serveur mandataire.
181 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
182 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
185 Interface de programmation
189 * Définition des paquets:: Définir de nouveaux paquets.
190 * Systèmes de construction:: Spécifier comment construire les paquets.
191 * Le dépôt:: Manipuler le dépôt de paquets.
192 * Dérivations:: Interface de bas-niveau avec les dérivations
194 * La monad du dépôt:: Interface purement fonctionnelle avec le
196 * G-Expressions:: Manipuler les expressions de construction.
197 * Invoking guix repl:: Fiddling with Guix interactively.
199 Définition des paquets
203 * Référence de paquet:: Le type de donnée des paquets.
204 * Référence d'origine:: Le type de données d'origine.
210 * Invoquer guix build:: Construire des paquets depuis la ligne de
212 * Invoquer guix edit:: Modifier les définitions de paquets.
213 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
214 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
215 * Invoquer guix import:: Importer des définitions de paquets.
216 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
217 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
219 * Invoquer guix size:: Profiler l'utilisation du disque.
220 * Invoquer guix graph:: Visualiser le graphe des paquets.
221 * Invoquer guix environment:: Mettre en place des environnements de
223 * Invoquer guix publish:: Partager des substituts.
224 * Invoquer guix challenge:: Défier les serveurs de substituts.
225 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
226 * Invoquer guix container:: Isolation de processus.
227 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
229 Invoquer @command{guix build}
233 * Options de construction communes:: Options de construction pour la
234 plupart des commandes.
235 * Options de transformation de paquets:: Créer des variantes de paquets.
236 * Options de construction supplémentaires:: Options spécifiques à «
238 * Débogage des échecs de construction:: La vie d'un empaqueteur.
244 * Installation du système:: Installer le système d'exploitation complet.
245 * Configuration système:: Configurer le système d'exploitation.
246 * Documentation:: Visualiser les manuels d'utilisateur des
248 * Installer les fichiers de débogage:: Nourrir le débogueur.
249 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
251 * Modules de paquets:: Les paquets du point de vu du programmeur.
252 * Consignes d'empaquetage:: Faire grandir la distribution.
253 * Bootstrapping:: GNU/Linux depuis zéro.
254 * Porter:: Cibler une autre plateforme ou un autre noyau.
256 Installation du système
260 * Limitations:: Ce à quoi vous attendre.
261 * Considérations matérielles:: Matériel supporté.
262 * Installation depuis une clef USB ou un DVD:: Préparer le média
264 * Préparer l'installation:: Réseau, partitionnement, etc.
265 * Effectuer l'installation:: Pour de vrai.
266 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
267 * Construire l'image d'installation:: D'où vient tout cela.
269 Configuration système
273 * Utiliser le système de configuration:: Personnaliser votre système
275 * Référence de système d'exploitation:: Détail sur la déclaration de
276 système d'exploitation.
277 * Systèmes de fichiers:: Configurer les montages de systèmes de
279 * Périphériques mappés:: Gestion des périphériques de bloc.
280 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
281 * Régionalisation:: Paramétrer la langue et les conventions
283 * Services:: Spécifier les services du système.
284 * Programmes setuid:: Programmes tournant avec les privilèges root.
285 * Certificats X.509:: Authentifier les serveurs HTTPS@.
286 * Name Service Switch:: Configurer le « name service switch » de la
288 * Disque de RAM initial:: Démarrage de Linux-Libre.
289 * Configuration du chargeur d'amorçage:: Configurer le chargeur
291 * Invoquer guix system:: Instantier une configuration du système.
292 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
294 * Définir des services:: Ajouter de nouvelles définitions de services.
300 * Services de base:: Services systèmes essentiels.
301 * Exécution de tâches planifiées:: Le service mcron.
302 * Rotation des journaux:: Le service rottlog.
303 * Services réseau:: Paramétres réseau, démon SSH, etc.
304 * Système de fenêtrage X:: Affichage graphique.
305 * Services d'impression:: Support pour les imprimantes locales et
307 * Services de bureaux:: D-Bus et les services de bureaux.
308 * Services de son:: Services ALSA et Pulseaudio.
309 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
310 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
311 * Services de messagerie:: Services de messagerie.
312 * Services de téléphonie:: Services de téléphonie.
313 * Services de surveillance:: Services de surveillance.
314 * Services Kerberos:: Services Kerberos.
315 * Services web:: Services web.
316 * Services de certificats:: Certificats TLS via Let's Encrypt.
317 * Services DNS:: Démons DNS@.
318 * Services VPN:: Démons VPN
319 * Système de fichiers en réseau:: Services liés à NFS@.
320 * Intégration continue:: Le service Cuirass.
321 * Power Management Services:: Extending battery life.
322 * Services audio:: MPD@.
323 * Services de virtualisation:: Services de virtualisation.
324 * Services de contrôle de version:: Fournit des accès distants à des
326 * Services de jeu:: Serveurs de jeu.
327 * Services divers:: D'autres services.
333 * Composition de services:: Le modèle de composition des services.
334 * Types service et services:: Types et services.
335 * Référence de service:: Référence de l'API@.
336 * Services Shepherd:: Un type de service particulier.
338 Consignes d'empaquetage
342 * Liberté logiciel:: Ce que la distribution peut contenir.
343 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
344 * Numéros de version:: Lorsque le nom n'est pas suffisant.
345 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
347 * Modules python:: Un peu de comédie anglaise.
348 * Modules perl:: Petites perles.
349 * Paquets java:: Pause café.
350 * Polices de caractères:: À fond les fontes.
356 * Construire depuis Git:: toujours le plus récent.
357 * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
358 * La configuration parfaite:: Les bons outils.
359 * Style de code:: Hygiène du contributeur.
360 * Envoyer des correctifs:: Partager votre travail.
366 * Paradigme de programmation:: Comment composer vos éléments.
367 * Modules:: Où stocker votre code ?
368 * Types de données et reconnaissance de motif:: Implémenter des
369 structures de données.
370 * Formatage du code:: Conventions d'écriture.
375 @c *********************************************************************
377 @chapter Introduction
380 GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
381 « s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
382 outil de gestion de paquets pour le système GNU@. Guix facilite pour les
383 utilisateurs non privilégiés l'installation, la mise à jour et la
384 suppression de paquets, la restauration à un ensemble de paquets précédent,
385 la construction de paquets depuis les sources et plus généralement aide à la
386 création et à la maintenance d'environnements logiciels.
388 @cindex interfaces utilisateurs
389 Guix fournit une interface de gestion des paquets par la ligne de commande
390 (@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de
391 commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation
392 Scheme (@pxref{Interface de programmation}).
393 @cindex démon de construction
394 Son @dfn{démon de construction} est responsable de la construction des
395 paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
396 téléchargement des binaires pré-construits depuis les sources autorisées
397 (@pxref{Substituts}).
399 @cindex extensibilité de la distribution
400 @cindex personnalisation, des paquets
401 Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
402 respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
403 libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
404 peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
405 indépendants (@pxref{Modules de paquets}). Il est aussi
406 @emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
407 définitions de paquets spécialisées à partir de définitions existantes, même
408 depuis la ligne de commande (@pxref{Options de transformation de paquets}).
410 @cindex Distribution Système Guix
412 Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
413 compléter les outils disponibles sans interférence (@pxref{Installation}) ou
414 vous pouvez l'utiliser à travers la @dfn{Distribution Système Guix} ou
415 GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous
416 @emph{déclarez} tous les aspects de la configuration du système
417 d'exploitation et Guix s'occupe de créer la configuration d'une manière
418 transactionnelle, reproductible et sans état (@pxref{Configuration
421 @cindex gestion de paquet fonctionnelle
422 Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
423 fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
424 processus de construction et d'installation des paquets est vu comme une
425 @emph{fonction} dans le sens mathématique du terme. Cette fonction a des
426 entrées (comme des scripts de construction, un compilateur et des
427 bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
428 son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
429 faire référence à des logiciels ou des scripts qui n'ont pas été
430 explicitement passés en entrée. Une fonction de construction produit
431 toujours le même résultat quand on lui donne le même ensemble d'entrée.
432 Elle ne peut pas modifier l'environnement du système en cours d'exécution
433 d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
434 des fichiers en dehors de ses répertoires de construction et
435 d'installation. Ce résultat s'obtient en lançant les processus de
436 construction dans des environnements isolés (ou des @dfn{conteneurs}) où
437 seules les entrées explicites sont visibles.
440 Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
441 dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
442 (@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
443 dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
444 contient un hash de toutes les entrées utilisées pour construire le paquet ;
445 ainsi, changer une entrée donnera un nom de répertoire différent.
447 Cette approche est le fondement des fonctionnalités les plus importante de
448 Guix : le support des mises à jour des paquets et des retours en arrière
449 transactionnels, l'installation différenciée par utilisateur et le ramassage
450 de miettes pour les paquets (@pxref{Fonctionnalités}).
453 @c *********************************************************************
455 @chapter Installation
457 @cindex installer Guix
458 GNU Guix est disponible au téléchargement depuis son site web sur
459 @url{http://www.gnu.org/software/guix/}. Cette section décrit les
460 pré-requis logiciels de Guix ainsi que la manière de l'installer et de se
461 préparer à l'utiliser.
463 Remarquez que cette section concerne l'installation du gestionnaire de
464 paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si
465 vous souhaitez plutôt installer le système d'exploitation GNU complet,
466 @pxref{Installation du système}.
468 @cindex distro extérieure
469 Lorsqu'il est installé sur an système GNU/Linux existant — ci-après nommé
470 @dfn{distro extérieure} — GNU@tie{}Guix complète les outils disponibles sans
471 interférence. Ses données se trouvent exclusivement dans deux répertoires,
472 typiquement @file{/gnu/store} et @file{/var/guix} ; les autres fichiers de
473 votre système comme @file{/etc} sont laissés intacts.
475 Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
476 (@pxref{Invoquer guix pull}).
479 * Installation binaire:: Commencer à utiliser Guix en un rien de temps
481 * Prérequis:: Logiciels requis pour construire et lancer
483 * Lancer la suite de tests:: Tester Guix.
484 * Paramétrer le démon:: Préparer l'environnement du démon de
486 * Invoquer guix-daemon:: Lancer le démon de construction.
487 * Réglages applicatifs:: Réglages spécifiques pour les application.
490 @node Installation binaire
491 @section Installation binaire
493 @cindex installer Guix depuis les binaires
494 Cette section décrit comment intaller Guix sur un système quelconque depuis
495 un archive autonome qui fournit les binaires pour Guix et toutes ses
496 dépendances. C'est souvent plus rapide que d'installer depuis les sources,
497 ce qui est décrit dans les sections suivantes. Le seul pré-requis est
498 d'avoir GNU@tie{}tar et Xz.
500 Nous fournissons un script
501 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
502 script d'intallation shell} qui automatise le téléchargement, l'installation
503 et la configuration initiale de Guix. Il devrait être lancé en tant
506 L'installation se comme ceci :
510 @cindex téléchargement du Guix binaire
511 Download the binary tarball from
512 @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
513 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
514 already running the kernel Linux, and so on.
516 @c The following is somewhat duplicated in ``System Installation''.
517 Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
518 l'authenticité de l'archive avec, comme ceci :
521 $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
522 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
525 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
526 lancez cette commande pour l'importer :
529 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
533 @c end authentication part
534 et relancez la commande @code{gpg --verify}.
537 Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
538 votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
539 tant que @code{root}, lancez :
543 # tar --warning=no-timestamp -xf \
544 guix-binary-@value{VERSION}.@var{système}.tar.xz
545 # mv var/guix /var/ && mv gnu /
548 Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
549 deuxième dossier contient un profil pret à être utilisé pour @code{root}
550 (voir les étapes suivantes).
552 Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
553 écraserait ses propres fichiers essentiels.
555 L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
556 pas d'avertissement disant que « l'horodatage est trop vieux pour être
557 plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
558 précédents ; les versions récentes n'ont pas ce problème). Cela vient du
559 fait que les fichiers de l'archive ont pour date de modification zéro (ce
560 qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
561 contenu de l'archive ne dépende pas de la date de création, ce qui la rend
565 Rendez le profil de @code{root} disponible sous @file{~root/.guix-profile} :
568 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
572 Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
573 variables d'environnement nécessaires :
576 # GUIX_PROFILE="`echo ~root`/.guix-profile" ; \
577 source $GUIX_PROFILE/etc/profile
581 Créez le groupe et les comptes utilisateurs pour les utilisateurs de
582 construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
585 Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
587 Si votre distribution hôte utilise le système d'initialisation systemd, cela
588 peut se faire avec ces commandes :
590 @c Versions of systemd that supported symlinked service files are not
591 @c yet widely deployed, so we should suggest that users copy the service
594 @c See this thread for more information:
595 @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
598 # cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
600 # systemctl start guix-daemon && systemctl enable guix-daemon
603 Si votre distribution hôte utilise le système d'initialisation Upstart :
606 # initctl reload-configuration
607 # cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
611 Sinon, vous pouvez toujours démarrer le démon manuellement avec :
614 # ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
618 Rendez la commande @command{guix} disponible pour les autres utilisateurs
619 sur la machine, par exemple avec :
622 # mkdir -p /usr/local/bin
624 # ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
627 C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
631 # mkdir -p /usr/local/share/info
632 # cd /usr/local/share/info
633 # for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
637 Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
638 de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
639 Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
640 changer le chemin de recherche de Info).
643 @cindex substituts, autorisations
644 Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
645 (@pxref{Substituts}), autorisez-les :
648 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
652 Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
653 pour que leur environnement Guix soit prêt à être utilisé,
654 @pxref{Réglages applicatifs}.
657 Voilà, l'installation est terminée !
659 Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
660 dans le profil de root :
663 # guix package -i hello
666 Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
667 ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
668 retrouveriez gravement handicapé par l'absence de la commande
669 @command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
670 @code{guix package -r guix}.
672 L'archive d'installation binaire peut être (re)produite et vérifiée
673 simplement en lançaint la commande suivante dans l'arborescence des sources
677 make guix-binary.@var{system}.tar.xz
681 … ce qui à son tour lance :
684 guix pack -s @var{system} --localstatedir guix
687 @xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
692 Cette section dresse la liste des pré-requis pour la construction de Guix
693 depuis les sources. La procédure de construction pour Guix est la même que
694 pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
695 fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
696 Guix pour plus de détails.
698 GNU Guix dépend des paquets suivants :
701 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou
702 ultérieure, dont 2.2.x,
703 @item @url{http://gnupg.org/, GNU libgcrypt},
705 @uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
706 (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
707 gnutls-guile, GnuTLS-Guile}),
709 @uref{https://notabug.org/civodul/guile-sqlite3, Guile-SQLite3}, version
712 @c FIXME: Specify a version number once a release has been made.
713 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
715 @item @url{http://zlib.net, zlib},
716 @item @url{http://www.gnu.org/software/make/, GNU Make}.
719 Les dépendances suivantes sont facultatives :
723 Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
724 vous permettra d'utiliser la commande @command{guix import pypi}
725 (@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs
726 et pas pour les utilisateurs occasionnels.
729 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
730 Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
731 et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
732 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
733 0.10.2 ou ulltérieure.
736 Lorsque @url{http://www.bzip.org, libbz2} est disponible,
737 @command{guix-daemon} peut l'utiliser pour compresser les journaux de
741 À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
742 paquets suivants sont aussi requis :
745 @item @url{http://sqlite.org, SQLite 3},
746 @item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
750 @cindex répertoire d'état
751 Lorsque vous configurez Guix sur un système qui a déjà une installation de
752 Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
753 existante avec l'option @code{--localstatedir} du script @command{configure}
754 (@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
755 Standards}). Le script @command{configure} vous protège des mauvaises
756 configurations involontaires de @var{localstatedir} pour éviter que vous ne
757 corrompiez votre dépôt (@pxref{Le dépôt}).
759 @cindex Nix, compatibilité
760 Lorsque vous avez une installation fonctionnelle du
761 @url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
762 configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
763 trois dépendances au dessus.
765 Guix est compatible avec Nix, donc il est possible de partager le même dépôt
766 entre les deux. Pour cela, vous devez passer à @command{configure} non
767 seulement la même valeur de @code{--with-store-dir} mais aussi la même
768 valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
769 spécifie l'emplacement de la base de données qui stocke les métadonnées sur
770 le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
771 @code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
772 Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
773 partager le dépôt avec Nix.
775 @node Lancer la suite de tests
776 @section Lancer la suite de tests
778 @cindex suite de tests
779 Après avoir lancé @command{configure} et @code{make} correctement, c'est une
780 bonne idée de lancer la suite de tests. Elle peut aider à trouver des
781 erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
782 lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
783 d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
789 Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
790 l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
791 lancement peut prendre plusieurs minutes sur une machine récente ; les
792 lancements suivants seront plus rapides car le dépôt créé pour les tests
793 aura déjà plusieurs choses en cache.
795 Il est aussi possible de lancer un sous-ensemble des tests en définissant la
796 variable makefile @code{TESTS} comme dans cet exemple :
799 make check TESTS="tests/store.scm tests/cpio.scm"
802 Par défaut, les résultats des tests sont affichés au niveau du fichier.
803 Pour voir les détails de chaque cas de test individuel, il est possible de
804 définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
808 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
811 Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
812 le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
813 ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
816 Guix possède aussi une suite de tests de systèmes complets qui test des
817 instances complètes du système d'exploitation GuixSD@. Elle ne peut être
818 lancée qui sur un système où Guix est déjà installé, avec :
825 Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
829 make check-system TESTS="basic mcron"
832 Ces tests systèmes sont définis dans les modules @code{(gnu tests
833 @dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
834 avec une instrumentation légère dans une machine virtuelle (VM). Ils
835 peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
836 la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
837 Certains requièrent beaucoup d'espace disque pour contenir les images des
840 De nouveau, en cas d'échec, envoyez tous les détails à
841 @email{bug-guix@@gnu.org}.
843 @node Paramétrer le démon
844 @section Paramétrer le démon
847 Les opérations comme la construction d'un paquet ou le lancement du
848 ramasse-miettes sont toutes effectuées par un processus spécialisé, le
849 @dfn{démon de construction}, pour le compte des clients. Seul le démon peut
850 accéder au dépôt et à sa base de données associée. Ainsi, toute opération
851 manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
852 commande comme @command{guix package} et @command{guix build} communiquent
853 avec le démon (@i{via} des appels de procédures distantes) pour lui dire
856 Les sections suivantes expliquent comment préparer l'environnement du démon
857 de construction. Voir aussi @ref{Substituts} pour apprendre comment
858 permettre le téléchargement de binaires pré-construits.
861 * Réglages de l'environnement de construction:: Préparer l'environnement
862 de construction isolé.
863 * Réglages du délestage du démon:: Envoyer des constructions à des
865 * Support de SELinux:: Utiliser une politique SELinux pour le démon.
868 @node Réglages de l'environnement de construction
869 @subsection Réglages de l'environnement de construction
871 @cindex environnement de construction
872 Dans une installation standard multi-utilisateurs, Guix et son démon — le
873 programme @command{guix-daemon} — sont installé par l'administrateur système
874 ; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
875 lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
876 outils Guix pour construire des paquets ou accéder au dépôt et le démon le
877 fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
878 permet le partage des paquets déjà construits entre les utilisateurs.
880 @cindex utilisateurs de construction
881 Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
882 forcément envie que les processus de construction de paquets tournent aussi
883 en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
884 vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
885 que les processus de construction démarrés par le démon utiliseront. Ces
886 utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
887 personnel ; ils seront seulement utilisés quand le démon délaissera ses
888 privilèges @code{root} dans les processus de construction. En ayant
889 plusieurs de ces utilisateurs, vous permettez au démon de lancer des
890 processus de construction distincts sous des UID différent, ce qui garanti
891 qu'aucune interférence n'ait lieu entre les uns et les autres — une
892 fonctionnalité essentielle puisque les constructions sont supposées être des
893 fonctions pures (@pxref{Introduction}).
895 Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
896 construction comme ceci (avec la syntaxe Bash et les commandes
899 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
900 @c for why `-G' is needed.
902 # groupadd --system guixbuild
903 # for i in `seq -w 1 10`;
905 useradd -g guixbuild -G guixbuild \
906 -d /var/empty -s `which nologin` \
907 -c "Utilisateur de construction Guix $i" --system \
913 Le nombre d'utilisateurs de construction détermine le nombre de tâches de
914 constructions qui peuvent tourner en parallèle, tel que spécifié par
915 l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
916 @option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
917 commandes liées, vous devrez ajouter les utilisateurs de construction au
918 groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
919 @code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
921 Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
922 la commande suivante@footnote{Si votre machine utilise le système
923 d'initialisation systemd, copiez le fichier
924 @file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
925 @file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
926 démarré automatiquement. De même, si votre machine utilise le système
927 d'initialisation Upstart, copiez le fichier
928 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
932 # guix-daemon --build-users-group=guixbuild
937 De cette façon, le démon démarre les processus de construction dans un
938 chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
939 défaut, l'environnement chroot ne contient rien d'autre que :
941 @c Keep this list in sync with libstore/build.cc! -----------------------
944 un répertoire @code{/dev} minimal, créé presque indépendamment du
945 @code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
946 fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
947 l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
951 le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
952 on utilise une espace de nom séparé pour les PID ;
955 @file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
956 pour l'utilisateur @file{nobody} ;
959 @file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
962 @file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
966 un répertoire @file{/tmp} inscriptible.
969 Vous pouvez influencer le répertoire où le démon stocke les arbres de
970 construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
971 l'arbre de construction dans le chroot sera toujours appelé
972 @file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
973 dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
974 @code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
975 ce qui évite des différences lorsque le processus de construction retient le
976 nom de leur répertoire de construction.
979 Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
980 pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
981 fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
983 Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
984 toujours possible de lancer @command{guix-daemon} si vous passez
985 @code{--disable-chroot}. Cependant, les processus de construction ne seront
986 pas isolés les uns des autres ni du reste du système. Ainsi les processus
987 de construction peuvent interférer les uns avec les autres, et peuvent
988 accéder à des programmes, des bibliothèques et d'autres fichiers présents
989 sur le système — ce qui rend plus difficile de les voir comme des fonctions
993 @node Réglages du délestage du démon
994 @subsection Utiliser le dispositif de déchargement
997 @cindex crochet de construction
998 Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
999 constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
1000 de construction} @code{offload}@footnote{Cette fonctionnalité n'est
1001 disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
1002 Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
1003 lit une liste de machines de constructions spécifiée par l'utilisateur dans
1004 @file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
1005 demandée, par exemple par @code{guix build}, le démon essaie de la décharger
1006 sur une des machines qui satisfont les contraintes de la dérivation, en
1007 particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
1008 prérequis manquants pour la construction sont copiés par SSH sur la machine
1009 de construction qui procède ensuite à la construction ; si elle réussi, les
1010 sorties de la construction sont copiés vers la machine de départ.
1012 Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
1015 (list (build-machine
1016 (name "eightysix.example.org")
1017 (system "x86_64-linux")
1018 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1020 (speed 2.)) ;très rapide !
1023 (name "meeps.example.org")
1024 (system "mips64el-linux")
1025 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1028 (string-append (getenv "HOME")
1029 "/.ssh/identity-for-guix"))))
1033 Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
1034 construction, une pour l'architecture @code{x86_64} et une pour
1035 l'architecture @code{mips64el}.
1037 En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
1038 fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
1039 valeur de retour doit être une liste d'objets @code{build-machine}. Même si
1040 cet exemple montre une liste fixée de machines de construction, on pourrait
1041 imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
1042 constructions potentielles découvertes sur le réseau local
1043 (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
1044 Programs}). Le type de données @code{build-machine} est détaillé plus bas.
1046 @deftp {Type de données} build-machine
1047 Ce type de données représente les machines de construction sur lesquelles le
1048 démon peut décharger des constructions. Les champs importants sont :
1053 Le nom d'hôte de la machine distante.
1056 Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
1059 Le compte utilisateur à utiliser lors de la connexion à la machine distante
1060 par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
1061 protégée par mot de passe pour permettre des connexions non-interactives.
1064 Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
1065 OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
1066 connexion. C'est une longue chaîne qui ressemble à cela :
1069 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1072 Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
1073 trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1075 Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
1076 @file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
1077 convertie au format OpenSSH avec @command{lsh-export-key}
1078 (@pxref{Converting keys,,, lsh, LSH Manual}) :
1081 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1082 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1087 Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
1091 @item @code{port} (par défaut : @code{22})
1092 Numéro de port du serveur SSH sur la machine.
1094 @item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
1095 The SSH private key file to use when connecting to the machine, in OpenSSH
1096 format. This key must not be protected with a passphrase.
1098 Remarquez que la valeur par défaut est la clef privée @emph{du compte
1099 root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
1101 @item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
1102 @itemx @code{compression-level} (par défaut : @code{3})
1103 Les méthodes de compression au niveau SSH et le niveau de compression
1106 Remarquez que le déchargement utilise la compression SSH pour réduire la
1107 bande passante utilisée lors du transfert vers et depuis les machines de
1110 @item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
1111 Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
1112 écoute sur cette machine.
1114 @item @code{parallel-builds} (par défaut : @code{1})
1115 Le nombre de constructions qui peuvent tourner simultanément sur la machine.
1117 @item @code{speed} (par défaut : @code{1.0})
1118 Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
1119 à préférer les machines avec un plus grand facteur de vitesse.
1121 @item @code{features} (par défaut : @code{'()})
1122 Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
1123 par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
1124 module Linux KVM et le support matériel correspondant. Les dérivations
1125 peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
1126 les machines de construction correspondantes.
1131 La commande @code{guile} doit être dans le chemin de recherche des machines
1132 de construction. En plus, les modules Guix doivent se trouver dans
1133 @code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez
1134 vérifier si c'est le cas en lançant :
1137 ssh build-machine guile -c "'(use-modules (guix config))'"
1140 Il reste une dernière chose à faire maintenant que @file{machines.scm} est
1141 en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
1142 transférés entre les dépôts des machines. Pour que cela fonctionne, vous
1143 devez d'abord générer une paire de clef sur chaque machine pour permettre au
1144 démon d'exporter des archives signées des fichiers de son dépôt
1145 (@pxref{Invoquer guix archive}) :
1148 # guix archive --generate-key
1152 Chaque machine de construction doit autoriser la clef de la machine
1153 maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
1156 # guix archive --authorize < master-public-key.txt
1160 De même, la machine maîtresse doit autoriser les clefs de chaque machine de
1163 Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
1164 deux-à-deux entre le maître et les machines de construction. Concrètement,
1165 lorsque le maître reçoit des fichiers d'une machine de construction (et
1166 vice-versa), son démon de construction s'assure qu'ils sont authentiques,
1167 n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
1170 @cindex test du déchargement
1171 Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
1178 Cela essaiera de se connecter à toutes les machines de construction
1179 spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
1180 modules Guix sont disponibles sur toutes les machines et tentera d'exporter
1181 vers la machine et d'importer depuis elle, et rapportera toute erreur
1182 survenu pendant le processus.
1184 Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
1185 la ligne de commande :
1188 # guix offload test machines-qualif.scm
1191 Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
1192 correspond à une expression rationnelle comme ceci :
1195 # guix offload test machines.scm '\.gnu\.org$'
1198 @cindex statut du déchargement
1199 Pour afficher la charge actuelle de tous les hôtes de construction, lancez
1200 cette commande sur le nœud principal :
1203 # guix offload status
1207 @node Support de SELinux
1208 @subsection Support de SELinux
1210 @cindex SELinux, politique du démon
1211 @cindex contrôle d'accès obligatoire, SELinux
1212 @cindex sécurité, guix-daemon
1213 Guix inclus un fichier de politique SELniux dans @file{etc/guix-daemon.cil}
1214 qui peut être installé sur un système où SELinux est activé pour que les
1215 fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
1216 démon. Comme GuixSD ne fournit pas de politique SELniux de base, la
1217 politique du démon ne peut pas être utilisée sur GuixSD@.
1219 @subsubsection Installer la politique SELinux
1220 @cindex SELinux, installation de la politique
1221 Pour installer la politique, lancez cette commande en root :
1224 semodule -i etc/guix-daemon.cil
1227 Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
1228 mécanisme différent fournit par votre système.
1230 Une fois la politique installée, le système de fichier ré-étiqueté et le
1231 démon redémarré, il devrait être lancé dans le contexte
1232 @code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
1235 ps -Zax | grep guix-daemon
1238 Surveillez les fichiers journaux de SELinux pendant que vous lancez une
1239 commande comme @code{guix build hello} pour vous convaincre que SELniux
1240 permet toutes les opérations nécessaires.
1242 @subsubsection Limitations
1243 @cindex SELinux, limites
1245 La politique n'et pas parfaite. Voici une liste de limitations et de
1246 bizarreries qui vous devriez prendre en compte avant de déployer la
1247 politique SELinux fournie pour le démon Guix.
1251 @code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
1252 opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
1253 soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
1254 une étiquette inutilisée, mais il serait préférable de définir des règles
1255 sur les sockets uniquement pour cette étiquette.
1258 @code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
1259 Par conception, l'étiquette de fichier de la destination d'un lien
1260 symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
1261 les profils sous $localstatedir aient une étiquette, les liens vers ces
1262 profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
1263 Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
1264 Mais pour les liens du répertoire personnel de l'utilisateur root, ou
1265 @file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
1266 fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
1270 La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
1271 fonctionner. Cela demande des règles supplémentaires car SELinux traite les
1272 sockets réseau différemment des fichiers.
1275 Actuellement tous les fichiers qui correspondent à l'expression rationnelle
1276 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
1277 @code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
1278 nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
1279 @code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
1280 un paquet qui fournit cet exécutable et convaincre un utilisateur de
1281 l'installer et de le lancer, ce qui l'élève dans le domaine
1282 @code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
1283 d'accéder à des fichiers autorisés pour les processus de ce domaine.
1285 Nous pourrions générer une politique bien plus restrictive à l'installation,
1286 pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
1287 @code{guix-daemon} actuellement installé soit étiqueté avec
1288 @code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
1289 plus large. L'inconvénient c'est que root devrait installer ou mettre à
1290 jour la politique à l'installation à chaque fois que le paquet Guix qui
1291 fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
1295 @node Invoquer guix-daemon
1296 @section Invoquer @command{guix-daemon}
1298 Le programme @command{guix-daemon} implémente toutes les fonctionnalités
1299 d'accès au dépôt. Cela inclus le lancement des processus de construction,
1300 le lancement du ramasse-miettes, la demande de disponibilité des résultats
1301 de construction, etc. Il tourne normalement en @code{root} comme ceci :
1304 # guix-daemon --build-users-group=guixbuild
1308 Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
1311 @cindex conteneur, environnement de construction
1312 @cindex environnement de construction
1313 @cindex constructions reproductibles
1314 Par défaut, @command{guix-daemon} lance les processus de construction sous
1315 différents UID récupérés depuis le groupe de construction spécifié avec
1316 @code{--build-users-group}. En plus, chaque processus de construction est
1317 lancé dans un environnement chroot qui ne contient que le sous-ensemble du
1318 dépôt dont le processus de construction dépend, tel que spécifié par sa
1319 dérivation (@pxref{Interface de programmation, dérivation}), plus un
1320 ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
1321 contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
1322 l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
1323 propre arborescence du système de fichier, elle a un espace de montage
1324 séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
1325 obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
1327 Lorsque le démon effectue une construction pour le compte de l'utilisateur,
1328 il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
1329 variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
1330 conteneur pendant la durée de la construction. Soyez conscient qu'utiliser
1331 un répertoire différent de @file{/tmp} peut affecter les résultats de la
1332 construction — par exemple avec un nom de répertoire plus long, un processus
1333 de construction qui utiliserait des socket Unix-domain pourrait atteindre la
1334 limite de longueur de nom de fichier pour @code{sun_path}, qu'il n'aurait
1337 Le répertoire de construction est automatiquement supprimé à la fin, à moins
1338 que la construction n'ait échoué et que le client ait spécifié
1339 @option{--keep-failed} (@pxref{Invoquer guix build,
1340 @option{--keep-failed}}).
1342 Les options en ligne de commande suivantes sont disponibles :
1345 @item --build-users-group=@var{groupe}
1346 Prendre les utilisateurs de @var{group} pour lancer les processus de
1347 construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
1349 @item --no-substitutes
1351 Ne pas utiliser de substitut pour les résultats de la construction.
1352 C'est-à-dire, toujours construire localement plutôt que de permettre le
1353 téléchargement de binaires pré-construits (@pxref{Substituts}).
1355 Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
1356 toujours activer explicitement la substitution @i{via} l'appel de procédure
1357 distante @code{set-build-options} (@pxref{Le dépôt}).
1359 @item --substitute-urls=@var{urls}
1360 @anchor{daemon-substitute-urls}
1361 Considèrer @var{urls} comme la liste séparée par des espaces des URL des
1362 sources de substituts par défaut. Lorsque cette option est omise,
1363 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
1364 (@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
1366 Cela signifie que les substituts sont téléchargés depuis les @var{urls},
1367 tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
1369 @cindex crochet de construction
1370 @item --no-build-hook
1371 Ne pas utiliser le @dfn{crochet de construction}.
1373 Le crochet de construction est un programme d'aide qui le démon peut
1374 démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
1375 utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
1377 @item --cache-failures
1378 Mettre les échecs de construction en cache. Par défaut, seules les
1379 constructions réussies sont mises en cache.
1381 Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
1382 être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
1383 échoués ; @command{guix gc --clear-failures} vide la liste des éléments
1384 aillant échoué. @xref{Invoquer guix gc}.
1386 @item --cores=@var{n}
1388 Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
1389 signifie autant que possible.
1391 La valeur par défaut est @code{0}, mais elle peut être modifiée par les
1392 clients comme avec l'option @code{--cores} de @command{guix build}
1393 (@pxref{Invoquer guix build}).
1395 L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
1396 dans le processus de construction, qui peut ensuite l'utiliser pour
1397 exploiter le parallélisme en interne — par exemple en lançant @code{make
1398 -j$NIX_BUILD_CORES}.
1400 @item --max-jobs=@var{n}
1402 Permettre au plus @var{n} travaux de construction en parallèle. La valeur
1403 par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
1404 construction ne sera effectuée localement ; à la place, le démon déchargera
1405 les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
1407 @item --max-silent-time=@var{secondes}
1408 Lorsque le processus de construction ou de substitution restent silencieux
1409 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
1412 La valeur par défaut est @code{0}, ce qui désactive le délai.
1414 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
1416 @item --timeout=@var{secondes}
1417 De même, lorsque le processus de construction ou de substitution dure plus
1418 de @var{secondes}, le terminer et rapporter une erreur de construction.
1420 La valeur par défaut est @code{0}, ce qui désactive le délai.
1422 La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
1424 @item --rounds=@var{N}
1425 Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
1426 si les résultats de construction consécutifs ne sont pas identiques
1427 bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
1428 comme @command{guix build} (@pxref{Invoquer guix build}).
1430 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
1431 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
1432 l'étude des différences entre les deux résultats.
1435 Produire une sortie de débogage.
1437 Cela est utile pour déboguer des problèmes de démarrage du démon, mais
1438 ensuite elle peut être modifiée par les clients, par exemple par l'option
1439 @code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
1441 @item --chroot-directory=@var{rép}
1442 Ajouter @var{rép} au chroot de construction
1444 Cela peut changer le résultat d'un processus de construction — par exemple
1445 s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
1446 est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
1447 d'utiliser cette option. À la place, assurez-vous que chaque dérivation
1448 déclare toutes les entrées dont elle a besoin.
1450 @item --disable-chroot
1451 Désactive les constructions dans un chroot.
1453 Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
1454 processus de construction d'accéder à des dépendances non déclarées. Elle
1455 est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
1456 qu'utilisateur non privilégié.
1458 @item --log-compression=@var{type}
1459 Compresser les journaux de construction suivant le @var{type}, parmi
1460 @code{gzip}, @code{bzip2} ou @code{none}.
1462 À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
1463 construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
1464 le démon les compresse automatiquement avec bzip2 par défaut.
1466 @item --disable-deduplication
1467 @cindex déduplication
1468 Désactiver la « déduplication » automatique des fichiers dans le dépôt.
1470 Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
1471 » : si un nouveau fichier est identique à un autre fichier trouvé dans le
1472 dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
1473 considérablement l'utilisation de l'espace disque au prix d'une charge en
1474 entrée/sortie plus grande à la fin d'un processus de construction. Cette
1475 option désactive cette optimisation.
1477 @item --gc-keep-outputs[=yes|no]
1478 Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
1481 @cindex racines du GC
1482 @cindex racines du ramasse-miettes
1483 When set to ``yes'', the GC will keep the outputs of any live derivation
1484 available in the store---the @code{.drv} files. The default is ``no'',
1485 meaning that derivation outputs are kept only if they are reachable from a
1486 GC root. @xref{Invoquer guix gc}, for more on GC roots.
1488 @item --gc-keep-derivations[=yes|no]
1489 Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
1490 des sorties utilisées.
1492 Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
1493 dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
1494 leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
1495 trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
1496 peu d'espace disque.
1498 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1499 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1500 ``yes'' causes liveness to flow from derivations to outputs. When both are
1501 set to ``yes'', the effect is to keep all the build prerequisites (the
1502 sources, compiler, libraries, and other build-time tools) of live objects in
1503 the store, regardless of whether these prerequisites are reachable from a GC
1504 root. This is convenient for developers since it saves rebuilds or
1507 @item --impersonate-linux-2.6
1508 Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
1509 signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
1512 Cela peut être utile pour construire des programmes qui dépendent
1513 (généralement sans fondement) du numéro de version du noyau.
1516 Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
1517 @code{@var{localstatedir}/guix/log}.
1519 @item --system=@var{système}
1520 Supposer que @var{système} est le type de système actuel. Par défaut c'est
1521 la paire architecture-noyau trouvée à la configuration, comme
1522 @code{x86_64-linux}.
1524 @item --listen=@var{extrémité}
1525 Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
1526 comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
1527 (barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
1528 domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
1531 @item --listen=/gnu/var/daemon
1532 Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
1533 le créant si besoin.
1535 @item --listen=localhost
1536 @cindex démon, accès distant
1537 @cindex accès distant au démon
1538 @cindex démon, paramètres de grappes
1539 @cindex grappes, paramètres du démon
1540 Écouter les connexions TCP sur l'interface réseau correspondant à
1541 @code{localhost} sur le port 44146.
1543 @item --listen=128.0.0.42:1234
1544 Écouter les connexions TCP sur l'interface réseau correspondant à
1545 @code{128.0.0.42} sur le port 1234.
1548 Cette option peut être répétée plusieurs fois, auquel cas
1549 @command{guix-daemon} accepte des connexions sur toutes les extrémités
1550 spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
1551 extrémité se connecter en paramétrant la variable d'environnement
1552 @code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
1555 Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
1556 @code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
1557 grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
1558 démon de construction. Dans les autres cas où l'accès à distance au démon
1559 est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
1562 Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
1563 connexions sur le socket Unix-domain situé à
1564 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1568 @node Réglages applicatifs
1569 @section Réglages applicatifs
1571 @cindex distro extérieure
1572 Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente
1573 de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes
1574 supplémentaires sont requises pour que tout soit en place. En voici
1577 @subsection Régionalisation
1579 @anchor{locales-and-locpath}
1580 @cindex régionalisation, en dehors de GuixSD
1582 @vindex GUIX_LOCPATH
1583 Les paquets installés @i{via} Guix n'utiliseront pas les données de
1584 régionalisation du système hôte. À la place, vous devrez d'abord installer
1585 l'un des paquets linguistiques disponibles dans Guix puis définir la
1586 variable d'environnement @code{GUIX_LOCPATH} :
1589 $ guix package -i glibc-locales
1590 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1593 Remarquez que le paquet @code{glibc-locales} contient les données pour tous
1594 les environnement linguistiques supportés par la GNU@tie{}libc et pèse
1595 environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
1596 petit mais limité à quelques environnements UTF-8.
1598 La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
1599 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1600 Manual}). Il y a deux différences importantes cependant :
1604 @code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
1605 libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
1606 vous permet de vous assurer que les programmes de la distro externe ne
1607 chargeront pas de données linguistiques incompatibles.
1610 La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
1611 @code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
1612 @code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
1613 de programmes liés avec des versions différentes de la libc, chaque version
1614 de la libc essaiera de charger les environnements linguistiques dans le bon
1618 Cela est important car le format des données linguistiques utilisés par
1619 différentes version de la libc peuvent être incompatibles.
1621 @subsection Name Service Switch
1623 @cindex name service switch, glibc
1624 @cindex NSS (name service switch), glibc
1625 @cindex nscd (name service caching daemon)
1626 @cindex name service caching daemon (nscd)
1627 Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
1628 fortement} que ce système fasse tourner le @dfn{démon de cache de service de
1629 noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
1630 le socket @file{/var/run/nscd/socket}. Sans cela, les applications
1631 installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
1632 d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
1635 @cindex @file{nsswitch.conf}
1636 La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
1637 est un mécanisme d'extension pour les « résolutions de noms » en général :
1638 résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
1640 @cindex Network information service (NIS)
1641 @cindex NIS (Network information service)
1642 Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
1643 nouvelle implémentation de résolution de nom : par exemple le greffon
1644 @code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
1645 greffon @code{nis} permet la résolution de comptes utilisateurs avec le
1646 Network Information Service (NIS), etc. Ces « services de recherches »
1647 supplémentaires sont configurés au niveau du système dans
1648 @file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
1649 système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
1650 GNU C Reference Manual})
1652 Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
1653 appelant la fonction @code{getaddrinfo} en C — les applications essayent
1654 d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
1655 résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectue la
1656 résolution eux-même, en changeant les service de résolution dans leur propre
1657 espace d'adressage et en le lançant. Ce services de résolution de noms —
1658 les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils peuvent
1659 provenir de la bibliothèque C du système, plutôt que de la bibliothèque C à
1660 laquelle l'application est liée (la bibliothèque C de Guix).
1662 Et c'est là que se trouve le problème : si votre application est liée à la
1663 bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
1664 greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
1665 glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
1666 échoue de manière inattendue.
1668 Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
1669 problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
1670 chargés par le processus @command{nscd}, pas par l'application elle-même.
1672 @subsection Polices X11
1675 La majorité des applications graphiques utilisent fontconfig pour trouver et
1676 charger les police et effectuer le rendu côté client X11. Le paquet
1677 @code{fontconfig} dans Guix cherche les polices dans
1678 @file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
1679 applications graphiques installées avec Guix d'afficher des polices, vous
1680 devez aussi installer des polices avec Guix. Les paquets de polices
1681 essentiels sont @code{gs-fonts}, @code{font-dejavu} et
1682 @code{font-gnu-freefont-ttf}.
1684 Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
1685 les applications graphiques, installez @code{font-adobe-source-han-sans} ou
1686 @code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
1687 langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
1688 suivante installe les polices pour le chinois :
1691 guix package -i font-adobe-source-han-sans:cn
1694 @cindex @code{xterm}
1695 Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
1696 s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
1697 spécifier le nom complet de la police en utlisant XLFD (X Logical Font
1698 Description), comme ceci :
1701 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1704 Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
1705 dans votre profil Guix, vous devez étendre le chemin des polices du serveur
1708 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1709 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1711 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1714 @cindex @code{xlsfonts}
1715 Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
1716 vous assurer que vos polices TrueType y sont listées.
1718 @cindex @code{fc-cache}
1719 @cindex cache de polices
1720 Après l'installation des polices vous devrez peut-être rafraîchir le cache
1721 des polices pour pouvoir les utiliser dans les applications. Ça s'applique
1722 aussi lorsque les applications installées avec Guix n'ont pas l'air de
1723 trouver les polices. Pour forcer la reconstruction du cache de polices
1724 lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
1725 paquet @code{fontconfig}.
1727 @subsection Certificats X.509
1729 @cindex @code{nss-certs}
1730 Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
1731 programmes d'authentifier les serveurs web par HTTPS@.
1733 Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
1734 installer ce paquet et définir les variables d'environnement adéquates pour
1735 que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
1737 @subsection Paquets emacs
1739 @cindex @code{emacs}
1740 Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
1741 peuvent être placés soit dans
1742 @file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
1744 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
1745 car il existe potentiellement des milliers de paquets Emacs et stocker leurs
1746 fichiers dans un seul répertoire peut ne pas être fiable (à cause de
1747 conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
1748 bonne idée. C'est très similaire à la manière dont le système de paquet
1749 d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
1750 The GNU Emacs Manual}).
1752 Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
1753 donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
1754 ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
1755 installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
1756 @code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1758 @subsection La chaîne d'outils GCC
1763 Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
1764 vous avez besoin d'une chaîne de compilation complète pour compiler et lier
1765 du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
1766 paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
1767 lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
1768 symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
1769 pour l'éditeur de liens.
1771 @cindex tentative d'utiliser une bibliothèque impure, message d'erreur
1773 Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
1774 passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
1775 correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
1776 ensemble d'arguments. Par défaut, l'enveloppe refuse de lier des
1777 bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être
1778 embêtant lorsque vous utilisez la chaîne d'outils pour lier des
1779 bibliothèques locales. Pour permettre des références à des bibliothèques en
1780 dehors du dépôt, vous devrez définir la variable d'environnement
1781 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1785 @c *********************************************************************
1786 @node Gestion de paquets
1787 @chapter Gestion de paquets
1790 Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
1791 jour et supprimer facilement des paquets logiciels sans devoir connaître
1792 leur procédure de construction ou leurs dépendances. Guix va aussi plus
1793 loin que ces fonctionnalités évidentes.
1795 Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
1796 outils de gestion des paquets qu'il fournit. En plus de l'interface en
1797 ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
1798 @code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
1799 (@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
1800 avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
1801 guix-help} pour le démarrer) :
1804 guix package -i emacs-guix
1808 * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
1809 * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
1810 * Substituts:: Télécharger des binaire déjà construits.
1811 * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
1813 * Invoquer guix gc:: Lancer le ramasse-miettes.
1814 * Invoquer guix pull:: Récupérer la dernière version de Guix et de
1816 * Invoquer guix pack:: Créer des lots de logiciels.
1817 * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
1820 @node Fonctionnalités
1821 @section Fonctionnalités
1823 Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
1824 paquets}, dans son propre répertoire — quelque chose comme
1825 @file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
1827 Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
1828 propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
1829 utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
1830 utilisateur dans @code{$HOME/.guix-profile}.
1832 Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
1833 @file{/home/alice/.guix-profile/bin/gcc} pointe vers
1834 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
1835 machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
1836 continue simplement de pointer vers
1837 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
1838 GCC coexistent surs le même système sans aucune interférence.
1840 La commande @command{guix package} est l'outil central pour gérer les
1841 paquets (@pxref{Invoquer guix package}). Il opère sur les profils
1842 utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
1845 @cindex transactions
1846 La commande fournit les opérations évidentes d'installation, de suppression
1847 et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
1848 soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
1849 processus @command{guix package} est terminé pendant la transaction ou si
1850 une panne de courant arrive pendant la transaction, le profil de
1851 l'utilisateur reste dans son état précédent et reste utilisable.
1853 En plus, il est possible @emph{d'annuler} toute transaction sur les
1854 paquets. Donc si par exemple un mise à jour installe une nouvelle version
1855 d'un paquet qui révèle un bogue sérieux, les utilisateurs peuvent revenir en
1856 arrière à l'instance précédente de leur profil qui est connu pour bien
1857 fonctionner. De manière similaire, la configuration globale du système dans
1858 GuixSD est sujette aux mises à jour transactionnelles et aux annulations
1859 (@pxref{Utiliser le système de configuration}).
1861 Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
1862 déterminer quels paquets sont toujours référencés par les profils des
1863 utilisateurs et supprimer ceux qui ne sont plus référencés de manière
1864 prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
1865 explicitement supprimer les anciennes générations de leur profil pour que
1866 les paquets auxquels elles faisaient référence puissent être glanés.
1868 @cindex reproductibilité
1869 @cindex constructions reproductibles
1870 Finalement, Guix prend une approche @dfn{purement fonctionnelle} de la
1871 gestion de paquets, telle que décrite dans l'introduction
1872 (@pxref{Introduction}). Chaque nom de répertoire de paquet dans
1873 @file{/gnu/store} contient un hash de toutes les entrées qui ont été
1874 utilisées pendant la construction de ce paquet — le compilateur, les
1875 bibliothèques, les scripts de construction, etc. Cette correspondance
1876 directe permet aux utilisateurs de s'assurer que l'installation d'un paquet
1877 donné correspond à l'état actuel de leur distribution. Elle aide aussi à
1878 maximiser la @dfn{reproductibilité} : grâce aux environnements de
1879 construction utilisés, une construction donnée à de forte chances de donner
1880 des fichiers identiques bit-à-bit lorsqu'elle est effectuée sur des machines
1881 différents (@pxref{Invoquer guix-daemon, container}).
1884 Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
1885 binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
1886 @file{/gnu/store} est disponible depuis une source externe (un
1887 @dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
1888 il construit le paquet depuis les sources localement (@pxref{Substituts}).
1889 Comme les résultats des constructions sont généralement reproductibles au
1890 bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
1891 fournissent les substituts : vous pouvez forcer une construction locale et
1892 @emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
1894 Le contrôle de l'environnement de construction est aussi une fonctionnalité
1895 utile pour les développeurs. La commande @command{guix environment} permet
1896 aux développeurs d'un paquet de mettre en place rapidement le bon
1897 environnement de développement pour leur paquet, sans avoir à installer
1898 manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
1900 @node Invoquer guix package
1901 @section Invoquer @command{guix package}
1903 @cindex installer des paquets
1904 @cindex supprimer des paquets
1905 @cindex installation de paquets
1906 @cindex suppression de paquets
1907 La commande @command{guix package} est l'outil qui permet d'installer,
1908 mettre à jour et supprimer les paquets ainsi que de revenir à une
1909 configuration précédente. Elle n'opère que dans le profil de l'utilisateur
1910 et fonctionne avec les privilèges utilisateurs normaux
1911 (@pxref{Fonctionnalités}). Sa syntaxe est :
1914 guix package @var{options}
1916 @cindex transactions
1917 @var{options} spécifie d'abord les opérations à effectuer pendant la
1918 transaction. À la fin, une nouvelle génération du profil est créée mais les
1919 @dfn{générations} précédentes du profil restent disponibles si l'utilisateur
1922 Par exemple, pour supprimer @code{lua} et installer @code{guile} et
1923 @code{guile-cairo} en une seule transaction :
1926 guix package -r lua -i guile guile-cairo
1929 @command{guix package} supporte aussi une @dfn{approche déclarative} où
1930 l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
1931 disponibles le passe @i{via} l'option @option{--manifest}
1932 (@pxref{profile-manifest, @option{--manifest}}).
1935 Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
1936 utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
1937 lien symbolique pointe toujours vers la génération actuelle du profil par
1938 défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
1939 @file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
1941 @cindex chemins de recherche
1942 Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
1943 les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
1944 Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
1945 ensuite aient les bonnes définitions des variables d'environnement :
1948 GUIX_PROFILE="$HOME/.guix-profile" ; \
1949 source "$HOME/.guix-profile/etc/profile"
1952 Dans un environnement multi-utilisateur, les profils utilisateurs sont
1953 stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
1954 @file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
1956 @code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
1957 @var{localstatedir} est la valeur passée à @code{configure} avec
1958 @code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
1959 répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
1960 démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
1963 Les @var{options} peuvent être les suivante :
1967 @item --install=@var{paquet} @dots{}
1968 @itemx -i @var{paquet} @dots{}
1969 Installer les @var{paquet}s spécifiés.
1971 Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
1972 @code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
1973 version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
1974 dernier cas, la version la plus récente commençant par @code{1.8} est
1977 Si aucun numéro de version n'est spécifié, la version la plus récente
1978 disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
1979 suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
1980 @code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
1981 paquets avec un nom correspondant et (éventuellement une version) sont
1982 recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
1984 @cindex entrées propagées
1985 Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
1986 dépendances qui sont installées automatiquement avec le paquet demandé
1987 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1988 @code{package} objects} pour plus d'informations sur les entrées propagées
1989 dans les définitions des paquets).
1991 @anchor{package-cmd-propagated-inputs}
1992 Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
1993 réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
1994 ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
1995 bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
1996 MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
1997 installés explicitement par l'utilisateur.
1999 D'autre part, les paquets dépendent parfois de la définition de variables
2000 d'environnement pour leur chemin de recherche (voir les explications sur
2001 @code{--search-paths} plus bas). Toute définition de variable
2002 d'environnement manquante ou possiblement incorrecte est rapportée ici.
2004 @item --install-from-expression=@var{exp}
2006 Installer le paquet évalué par @var{exp}
2008 @var{exp} doit être une expression Scheme qui s'évalue en un objet
2009 @code{<package>}. Cette option est notamment utile pour distinguer les
2010 variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
2011 (gnu packages base) guile-final)}.
2013 Remarquez que cette option installe la première sortie du paquet, ce qui
2014 peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
2015 paquet à plusieurs sorties.
2017 @item --install-from-file=@var{fichier}
2018 @itemx -f @var{fichier}
2019 Installer le paquet évalué par le code dans le @var{fichier}.
2021 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
2022 (@pxref{Définition des paquets}) :
2025 @verbatiminclude package-hello.scm
2028 Les développeurs peuvent trouver utile d'inclure un tel fichier
2029 @file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
2030 pourrait être utilisé pour tester des versions de développement et créer des
2031 environnements de développement reproductibles (@pxref{Invoquer guix environment}).
2033 @item --remove=@var{paquet} @dots{}
2034 @itemx -r @var{paquet} @dots{}
2035 Supprimer les @var{paquet}s spécifiés.
2037 Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
2038 version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
2039 glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
2041 @item --upgrade[=@var{regexp} @dots{}]
2042 @itemx -u [@var{regexp} @dots{}]
2043 @cindex mettre à jour des paquets
2044 Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
2045 spécifiée, la mise à jour n'installera que les paquets dont le nom
2046 correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
2049 Remarquez que cela met à jour vers la dernière version des paquets trouvée
2050 dans la distribution actuellement installée. Pour mettre à jour votre
2051 distribution, vous devriez lancer régulièrement @command{guix pull}
2052 (@pxref{Invoquer guix pull}).
2054 @item --do-not-upgrade[=@var{regexp} @dots{}]
2055 Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
2056 mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
2057 exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
2058 de ceux qui contiennent la chaîne « emacs » :
2061 $ guix package --upgrade . --do-not-upgrade emacs
2064 @item @anchor{profile-manifest}--manifest=@var{fichier}
2065 @itemx -m @var{fichier}
2066 @cindex déclaration de profil
2067 @cindex manifest de profil
2068 Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
2069 le code Scheme dans @var{fichier}.
2071 Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
2072 construire avec une série de @code{--install} et de commandes similaires.
2073 L'avantage étant que le @var{fichier} peut être placé sous contrôle de
2074 version, copié vers d'autres machines pour reproduire le même profil, etc.
2076 @c FIXME: Add reference to (guix profile) documentation when available.
2077 @var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
2080 @findex packages->manifest
2082 (use-package-modules guile emacs)
2087 ;; Utiliser une sortie spécifique d'un paquet.
2088 (list guile-2.0 "debug")))
2091 @findex specifications->manifest
2092 Dans cet exemple on doit savoir quels modules définissent les variables
2093 @code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
2094 @code{use-package-modules} ce qui peut être embêtant. On peut à la place
2095 fournir des spécifications de paquets normales et laisser
2096 @code{specifications->manifest} rechercher les objets de paquets
2097 correspondants, comme ceci :
2100 (specifications->manifest
2101 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2105 @cindex revenir en arrière
2106 @cindex défaire des transactions
2107 @cindex transactions, défaire
2108 Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
2109 dernière transaction.
2111 Lorsqu'elle est combinée avec des options comme @code{--install}, cette
2112 option revient en arrière avant toute autre action.
2114 Lorsque vous revenez de la première génération qui contient des fichiers, le
2115 profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
2116 fichier en dehors de ses propres métadonnées.
2118 Après être revenu en arrière, l'installation, la suppression et la mise à
2119 jour de paquets réécrit les futures générations précédentes. Ainsi,
2120 l'historique des générations dans un profil est toujours linéaire.
2122 @item --switch-generation=@var{motif}
2123 @itemx -S @var{motif}
2125 Basculer vers une génération particulière définie par le @var{motif}.
2127 Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
2128 de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
2129 d'un nombre donné de générations. Par exemple, si vous voulez retourner à
2130 la dernière génération après @code{--roll-back}, utilisez
2131 @code{--switch-generation=+1}.
2133 La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
2134 que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
2135 donc si la génération demandée n'existe pas la génération actuelle ne
2138 @item --search-paths[=@var{genre}]
2139 @cindex chemins de recherche
2140 Rapporter les définitions des variables d'environnement dans la syntaxe Bash
2141 qui peuvent être requises pour utiliser l'ensemble des paquets installés.
2142 Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
2143 de recherche} de fichiers utilisés par les paquets installés.
2145 Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
2146 @code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
2147 profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
2148 Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
2149 installés dans le profil, alors @code{--search-paths} suggérera
2150 d'initialiser ces variables à @code{@var{profil}/include} et
2151 @code{@var{profil}/lib}, respectivement.
2153 Le cas d'utilisation typique est de définir ces variables d'environnement
2157 $ eval `guix package --search-paths`
2160 @var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
2161 @code{suffix}, ce qui signifie que les définitions des variables
2162 d'environnement retournées seront soit les paramètres exactes, ou placés
2163 avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
2164 @var{genre} a pour valeur par défaut @code{exact}.
2166 Cette option peut aussi être utilisé pour calculer les chemins de recherche
2167 @emph{combinés} de plusieurs profils. Regardez cet exemple :
2170 $ guix package -p foo -i guile
2171 $ guix package -p bar -i guile-json
2172 $ guix package -p foo -p bar --search-paths
2175 La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
2176 bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
2177 donné cette recommendation.
2180 @item --profile=@var{profil}
2181 @itemx -p @var{profil}
2182 Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
2184 @cindex collisions, dans un profil
2185 @cindex faire des collisions de paquets dans des profils
2186 @cindex profil, collisions
2187 @item --allow-collisions
2188 Permettre des collisions de paquets dans le nouveau profil. À utiliser à
2189 vos risques et périls !
2191 Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
2192 profil comme des erreurs. Les collisions ont lieu quand deux version ou
2193 variantes d'un paquet donné se retrouvent dans le profil.
2196 Produire une sortie verbeuse. En particulier, fournir les journaux de
2197 construction de l'environnement sur le port d'erreur standard.
2200 Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
2201 option n'est utile que pour les développeurs de la distriibution.
2205 En plus de ces actions, @command{guix package} supporte les options
2206 suivantes pour demander l'état actuel d'un profil ou la disponibilité des
2211 @item --search=@var{regexp}
2212 @itemx -s @var{regexp}
2213 @cindex chercher des paquets
2214 Lister les paquets disponibles dont le nom, le synopsis ou la description
2215 correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
2216 métadonnées des paquets correspondants au format @code{recutils}
2217 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
2219 Cela permet à des champs spécifiques d'être extraits avec la commande
2220 @command{recsel}, par exemple :
2223 $ guix package -s malloc | recsel -p name,version,relevance
2237 De manière similaire, pour montrer le nom de tous les paquets disponibles
2238 sous license GNU@tie{}LGPL version 3 :
2241 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2248 Il est aussi possible de raffiner les résultats de la recherche avec
2249 plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
2250 liste des jeux de plateau :
2253 $ guix package -s '\<board\>' -s game | recsel -p name
2258 Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
2259 qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
2260 les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
2261 parlent de clavier (en anglais : key@emph{board}).
2263 Et maintenant un exemple plus élaboré. La commande suivante recherche les
2264 bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
2265 Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
2268 $ guix package -s crypto -s library | \
2269 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2273 @xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
2274 d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
2276 @item --show=@var{paquet}
2277 Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
2278 au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
2279 GNU recutils manual}).
2282 $ guix package --show=python | recsel -p name,version
2290 Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
2291 détails concernant une version spécifique :
2293 $ guix package --show=python@@3.4 | recsel -p name,version
2300 @item --list-installed[=@var{regexp}]
2301 @itemx -I [@var{regexp}]
2302 Liste les paquets actuellement installés dans le profil spécifié, avec les
2303 paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
2304 spécifié, liste uniquement les paquets installés dont le nom correspond à
2307 Pour chaque paquet installé, affiche les éléments suivants, séparés par des
2308 tabulations : le nom du paquet, sa version, la partie du paquet qui est
2309 installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
2310 pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
2312 @item --list-available[=@var{regexp}]
2313 @itemx -A [@var{regexp}]
2314 Lister les paquets actuellement disponibles dans la distribution pour ce
2315 système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
2316 liste uniquement les paquets dont le nom correspond à @var{regexp}.
2318 Pour chaque paquet, affiche les éléments suivants séparés par des
2319 tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
2321 @item --list-generations[=@var{motif}]
2322 @itemx -l [@var{motif}]
2324 Renvoyer la liste des générations avec leur date de création ; pour chaque
2325 génération, montre les paquets installés avec les paquets installés les plus
2326 récemment en dernier. Remarquez que la zéroième génération n'est jamais
2329 Pour chaque paquet installé, afficher les éléments suivants, séparés par des
2330 tabulations : le nom du paquet, sa version, la partie du paquet qui a été
2331 installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
2332 paquet dans le dépôt.
2334 Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
2335 correspondantes. Les motifs valides sont :
2338 @item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
2339 à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
2342 Et @code{--list-generations=1,8,2} renvoie les trois générations dans
2343 l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
2345 @item @emph{Des interval}. @code{--list-generations=2..9} affiche les
2346 générations demandées et tout ce qui se trouvent entre elles. Remarquez que
2347 le début d'un interval doit être plus petit que sa fin.
2349 Il est aussi possible d'omettre le numéro final. Par exemple,
2350 @code{--list-generations=2..} renvoie toutes les générations à partir de la
2353 @item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
2354 ou moins en passant un entier avec la première lettre de la durée (en
2355 anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
2356 générations qui sont agées d'au plus 20 jours.
2359 @item --delete-generations[=@var{motif}]
2360 @itemx -d [@var{motif}]
2361 Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
2364 Cette commande accepte les même motifs que @option{--list-generations}.
2365 Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
2366 Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
2367 que la durée spécifiée correspondent. Par exemple
2368 @code{--delete-generations=1m} supprime les générations vieilles de plus
2371 Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
2372 zéroième génération n'est elle non plus jamais supprimée.
2374 Remarquez que supprimer des générations empêche de revenir en arrière vers
2375 elles. Ainsi, cette commande doit être utilisée avec précaution.
2379 Enfin, comme @command{guix package} peut démarrer des processus de
2380 construction, elle supporte les options de construction communes
2381 (@pxref{Options de construction communes}). Elle supporte aussi les options de
2382 transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
2383 paquets sont perdues à la mise à jour ; pour les préserver à travers les
2384 mises à jours, vous devriez définir vos propres variantes des paquets dans
2385 une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
2391 @cindex binaires pré-construits
2392 Guix gère le déploiement depuis des binaires ou des sources de manière
2393 transparente ce qui signifie qu'il peut aussi bien construire localement que
2394 télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
2395 appelons ces éléments pré-construits des @dfn{substituts} — ils se
2396 substituent aux résultats des constructions locales. Dans la plupart des
2397 cas, télécharger un substitut est bien plus rapide que de construire les
2400 Les substituts peuvent être tout ce qui résulte d'une construction de
2401 dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
2402 de paquets binaires pré-construits, mais les archives des sources par
2403 exemple résultent aussi de la construction d'une dérivation qui peut aussi
2404 être disponible en tant que substitut.
2407 * Serveur de substituts officiel:: Une source particulière de substituts.
2408 * Autoriser un serveur de substituts:: Comment activer ou désactiver les
2410 * Authentification des substituts:: Coment Guix vérifie les substituts.
2411 * Paramètres de serveur mandataire:: Comment récupérer des substituts à
2412 travers un serveur mandataire.
2413 * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
2414 * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
2418 @node Serveur de substituts officiel
2419 @subsection Serveur de substituts officiel
2422 @cindex ferme de construction
2423 Le serveur @code{mirror.hydra.gnu.org} est une interface à la ferme de
2424 construction officielle qui construit des paquets pour Guix continuellement
2425 pour certaines architectures et les rend disponibles en tant que
2426 substituts. C'est la source par défaut des substituts ; elle peut être
2427 modifiée en passant l'option @option{--substitute-urls} soit à
2428 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
2429 --substitute-urls}}) soit aux outils clients comme @command{guix package}
2430 (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
2432 Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
2433 est recommandé parce que les communications sont chiffrées ; à l'inverse
2434 HTTP rend les communications visibles pour un espion qui peut utiliser les
2435 informations accumulées sur vous pour déterminer par exemple si votre
2436 système a des vulnérabilités de sécurités non corrigées.
2438 Les substituts de la ferme de construction officielle sont activés par
2439 défaut dans la distribution système Guix (@pxref{Distribution GNU}).
2440 Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
2441 distribution externe, à moins que vous ne les ayez explicitement activés via
2442 l'une des étapes d'installation recommandées (@pxref{Installation}). Les
2443 paragraphes suivants décrivent comment activer ou désactiver les substituts
2444 de la ferme de construction ; la même procédure peut être utilisée pour
2445 activer les substituts de n'importe quel autre serveur de substituts.
2447 @node Autoriser un serveur de substituts
2448 @subsection Autoriser un serveur de substituts
2451 @cindex substituts, autorisations
2452 @cindex liste de contrôle d'accès (ACL), pour les substituts
2453 @cindex ACL (liste de contrôle d'accès), pour les substituts
2454 Pour permettre à Guix de télécharger les substituts depuis
2455 @code{hydra.gnu.org} ou un mirroir, vous devez ajouter sa clef publique à la
2456 liste de contrôle d'accès (ACL) des imports d'archives, avec la commande
2457 @command{guix archive} (@pxref{Invoquer guix archive}). Cela implique que
2458 vous faîtes confiance à @code{hydra.gnu.org} pour ne pas être compromis et
2459 vous servir des substituts authentiques.
2461 La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans
2462 @code{@var{préfixe}/share/guix/hydra.gnu.org.pub}, où @var{préfixe} est le
2463 préfixe d'installation de Guix. Si vous avez installé Guix depuis les
2464 sources, assurez-vous d'avoir vérifié la signature GPG de
2465 @file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
2466 publique. Ensuite vous pouvez lancer quelque chose comme ceci :
2469 # guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub
2473 De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique
2474 de la nouvelle ferme de construction du projet, disponible depuis
2475 @indicateurl{https://berlin.guixsd.org}.
2477 Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à
2478 niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester.
2479 Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir
2480 des substituts plus rapidement que @code{mirror.hydra.gnu.org}
2483 Une fois que cela est en place, la sortie d'une commande comme @code{guix
2484 build} devrait changer de quelque chose comme :
2487 $ guix build emacs --dry-run
2488 Les dérivations suivantes seraient construites :
2489 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2490 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2491 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2492 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2497 à quelque chose comme :
2500 $ guix build emacs --dry-run
2501 112.3 Mo seraient téléchargés :
2502 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2503 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2504 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2505 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2510 Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
2511 seront téléchargés, si possible, pour les futures constructions.
2513 @cindex substituts, comment les désactiver
2514 Le mécanisme de substitution peut être désactivé globalement en lançant
2515 @code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
2516 l'option @code{--no-substitutes} à @command{guix package}, @command{guix
2517 build} et aux autres outils en ligne de commande.
2519 @node Authentification des substituts
2520 @subsection Authentification des substituts
2522 @cindex signatures numériques
2523 Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
2524 qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
2525 ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
2527 Il y a une exception cependant : si un serveur non autorisé fournit des
2528 substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
2529 serveur autorisé, alors le serveur non autorisé devient disponible pour les
2530 téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
2531 substituts avec cette option :
2534 --substitute-urls="https://a.example.org https://b.example.org"
2538 @cindex constructions reproductibles
2539 Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
2540 @code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
2541 téléchargera les substituts de @code{a.example.org} parce qu'il vient en
2542 premier dans la liste et peut être considéré comme un mirroir de
2543 @code{b.example.org}. En pratique, des machines de constructions produisent
2544 souvent les mêmes binaires grâce à des construction reproductibles au bit
2545 près (voir plus bas).
2547 Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
2548 validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
2549 à ce que des clients HTTPS comme des navigateurs web font habituellement.
2550 Cela est dû au fait que Guix authentifie les informations sur les substituts
2551 eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
2552 que les certificats X.509 authentifie la relation entre nom de domaine et
2555 @node Paramètres de serveur mandataire
2556 @subsection Paramètres de serveur mandataire
2559 Les substituts sont téléchargés par HTTP ou HTTPS. La variable
2560 d'environnement @code{http_proxy} peut être initialisée dans l'environnement
2561 de @command{guix-daemon} et est respectée pour le téléchargement des
2562 substituts. Remarquez que la valeur de @code{http_proxy} dans
2563 l'environnement où tournent @command{guix build}, @command{guix package} et
2564 les autres clients n'a @emph{absolument aucun effet}.
2566 @node Échec de substitution
2567 @subsection Échec de substitution
2569 Même lorsqu'un substitut pour une dérivation est disponible, la substitution
2570 échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
2571 substitut peut être hors ligne, le substitut a récemment été supprimé du
2572 serveur, la connexion peut avoir été interrompue, etc.
2574 Lorsque les substituts sont activés et qu'un substitut pour une dérivation
2575 est disponible, mais que la tentative de substitution échoue, Guix essaiera
2576 de construire la dérivation localement si @code{--fallback} a été passé en
2577 argument (@pxref{option de repli,, common build option @code{--fallback}}).
2578 Plus spécifiquement, si cet option n'a pas été passée en argument, alors
2579 aucune construction locale n'est effectuée et la dérivation est considérée
2580 comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
2581 alors Guix essaiera de construire la dérivation localement et l'échec ou le
2582 succès de la dérivation dépend de l'échec ou du succès de la construction
2583 locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
2584 substitut n'est disponible pour la dérivation en question, une construction
2585 locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
2586 @code{--fallback} ait été ou non passé.
2588 Pour se donner une idée du nombre de substituts disponibles maintenant, vous
2589 pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
2590 fournis par un serveur.
2592 @node De la confiance en des binaires
2593 @subsection De la confiance en des binaires
2595 @cindex confiance, en des binaires pré-construits
2596 De nos jours, le contrôle individuel sur son utilisation propre de
2597 l'informatique est à la merci d'institutions, de sociétés et de groupes avec
2598 assez de pouvoir et de détermination pour contourner les infrastructures
2599 informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
2600 substituts de @code{hydra.gnu.org} soit pratique, nous encourageons les
2601 utilisateurs à construire aussi par eux-même, voir à faire tourner leur
2602 propre ferme de construction, pour que @code{hydra.gnu.org} devienne une
2603 cible moins intéressante. Une façon d'aider est de publier les logiciels
2604 que vous construisez avec @command{guix publish} pour que les autres aient
2605 plus de choix de serveurs où télécharger les substituts (@pxref{Invoquer guix publish}).
2607 Guix possède les fondations pour maximiser la reproductibilité logicielle
2608 (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
2609 indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
2610 résultats identiques au bit près. Ainsi, à travers un ensemble de
2611 constructions de paquets indépendantes il est possible de renforcer
2612 l'intégrité du système. La commande @command{guix challenge} a pour but
2613 d'aider les utilisateurs à tester les serveurs de substituts et à aider les
2614 développeurs à trouver les constructions de paquets non-déterministes
2615 (@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
2616 @command{guix build} permet aux utilisateurs de vérifier si les substituts
2617 précédemment installés sont authentiques en les reconstruisant localement
2618 (@pxref{vérification de la construction, @command{guix build --check}}).
2620 Dans le futur, nous aimerions que Guix puisse publier et recevoir des
2621 binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
2622 discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
2624 @node Des paquets avec plusieurs résultats
2625 @section Des paquets avec plusieurs résultats
2627 @cindex paquets avec plusieurs résultats
2628 @cindex sorties de paquets
2631 Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
2632 c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
2633 dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
2634 la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
2635 @code{out} mais son nom peut être omis comme le montre cette commande. Dans
2636 ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
2637 fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
2638 statiques, la documentation Info et les autres fichiers de support.
2640 Parfois il est plus approprié de séparer les divers types de fichiers
2641 produits par un même paquet source en plusieurs sorties. Par exemple, la
2642 bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
2643 plus de 20 Mo de documentation de référence dans des pages HTML. Pour
2644 préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
2645 documentation va dans une sortie séparée nommée @code{doc}. Pour installer
2646 la sortie principale de GLib, qui contient tout sauf la documentation, on
2650 guix package -i glib
2653 @cindex documentation
2654 La commande pour installer la documentation est :
2657 guix package -i glib:doc
2660 Certains paquets installent des programmes avec des « empreintes dépendances
2661 » différentes. Par exemple le paquet WordNet installe à la fois les outils
2662 en ligne de commande et les interfaces graphiques (GUI). La première ne
2663 dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
2664 et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
2665 en ligne de commande dans la sortie par défaut et l'interface graphique dans
2666 une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
2667 d'interface graphique de gagner de la place. La commande @command{guix
2668 size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
2670 Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
2671 D'autres noms de sorties conventionnels sont @code{lib} pour les
2672 bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
2673 programmes indépendants et @code{debug} pour les informations de débogage
2674 (@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
2675 dans la troisième colonne de la sortie de @command{guix package
2676 --list-available} (@pxref{Invoquer guix package}).
2679 @node Invoquer guix gc
2680 @section Invoquer @command{guix gc}
2682 @cindex ramasse-miettes
2683 @cindex espace disque
2684 Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
2685 La commande @command{guix gc} permet aux utilisateurs de lancer
2686 explicitement le ramasse-miettes pour récupérer de l'espace dans le
2687 répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
2688 des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
2689 répertoires à la main peut le casser de manière impossible à réparer !
2691 @cindex racines du GC
2692 @cindex racines du ramasse-miettes
2693 Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
2694 dans @file{/gnu/store} atteignable depuis une racine est considéré comme
2695 @dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
2696 considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
2697 racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
2698 les profils par défaut des utilisateurs ; par défaut les liens symboliques
2699 sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
2700 racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
2701 exemple (@pxref{Invoquer guix build}).
2703 Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
2704 c'est souvent utile de supprimer les anciennes génération des profils
2705 utilisateurs ; de cette façon les anciennes constructions de paquets
2706 référencées par ces générations peuvent être glanées. Cela se fait en
2707 lançaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
2709 Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
2710 avez besoin d'espace disque. Par exemple pour garantir qu'au moins
2711 5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
2717 Il est parfaitement possible de le lancer comme une tâche périodique
2718 non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
2719 paramétrer une telle tâche sur GuixSD). Lancer @command{guix gc} sans
2720 argument ramassera autant de miettes que possible mais ça n'est pas le plus
2721 pratique : vous pourriez vous retrouver à reconstruire ou re-télécharger des
2722 logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
2723 construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
2725 La command @command{guix gc} a trois modes d'opération : il peut être
2726 utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
2727 fichiers spécifiques (l'option @code{--delete}), pour afficher des
2728 informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
2729 options du ramasse-miettes sont :
2732 @item --collect-garbage[=@var{min}]
2733 @itemx -C [@var{min}]
2734 Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
2735 @file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
2736 lorsqu'aucune option n'est spécifiée.
2738 Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
2739 collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
2740 d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
2741 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2743 Lorsque @var{min} est omis, tout glaner.
2745 @item --free-space=@var{libre}
2746 @itemx -F @var{libre}
2747 Glaner jusqu'à ce que @var{libre} espace soit disponible dans
2748 @file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
2749 comme @code{500MiB} comme décrit ci-dessus.
2751 Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
2752 faire et s'arrêter immédiatement.
2756 Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
2757 en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
2758 ou s'ils sont toujours utilisés.
2760 @item --list-failures
2761 Lister les éléments du dépôt qui correspondent à des échecs de construction
2763 Cela n'affiche rien à moins que le démon n'ait été démarré avec
2764 @option{--cache-failures} (@pxref{Invoquer guix-daemon,
2765 @option{--cache-failures}}).
2767 @item --clear-failures
2768 Supprimer les éléments du dépôt spécifiés du cache des constructions
2771 De nouveau, cette option ne fait de sens que lorsque le démon est démarré
2772 avec @option{--cache-failures}. Autrement elle ne fait rien.
2775 Montrer la liste des fichiers et des répertoires inutilisés encore présents
2776 dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
2777 atteignables par aucune racine.
2780 Montrer la liste des fichiers et des répertoires du dépôt utilisés.
2784 En plus, les références entre les fichiers existants du dépôt peuvent être
2791 @cindex dépendances des paquets
2792 Lister les références (respectivement les référents) des fichiers du dépôt
2798 Lister les prérequis des fichiers du dépôt passés en argument. Les
2799 prérequis sont le fichier du dépôt lui-même, leur références et les
2800 références de ces références, récursivement. En d'autre termes, la liste
2801 retournée est la @dfn{closure transitive} des fichiers du dépôt.
2803 @xref{Invoquer guix size} pour un outil pour surveiller la taille de la
2804 closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
2805 visualiser le graphe des références.
2809 Renvoie les dérivations menant aux éléments du dépôt donnés
2810 (@pxref{Dérivations}).
2812 Par exemple cette commande :
2815 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2819 renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
2822 Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
2823 ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
2824 @file{.drv} correspondant à cause de dérivations à sortie fixées.
2827 Enfin, les options suivantes vous permettent de vérifier l'intégrité du
2828 dépôt et de contrôler l'utilisation du disque.
2832 @item --verify[=@var{options}]
2833 @cindex intégrité, du dépôt
2834 @cindex vérification d'intégrité
2835 Vérifier l'intégrité du dépôt.
2837 Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
2838 dans la base de données du démon existent bien dans @file{/gnu/store}.
2840 Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
2841 virgule de l'un ou plus parmi @code{contents} et @code{repair}.
2843 Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
2844 contenu de chaque élément du dépôt et le compare au hash de sa base de
2845 données. Les différences de hash sont rapportées comme des corruptions de
2846 données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
2847 commande peut prendre très longtemps pour terminer, surtout sur un système
2848 avec un disque lent.
2850 @cindex réparer le dépôt
2851 @cindex corruption, récupérer de
2852 Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
2853 que le démon essaie de réparer les objets du dépôt corrompus en récupérant
2854 leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
2855 atomique et donc potentiellement dangereuse, elle n'est disponible que pour
2856 l'administrateur système. Une alternative plus légère lorsque vous
2857 connaissez exactement quelle entrée est corrompue consiste à lancer
2858 @command{guix build --repair} (@pxref{Invoquer guix build}).
2861 @cindex déduplication
2862 Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
2863 @dfn{déduplication}.
2865 Le démon effectue une déduplication à chaque construction réussie ou import
2866 d'archive à moins qu'il n'ait été démarré avec
2867 @code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
2868 @code{--disable-deduplication}}). Ainsi, cette option est surtout utile
2869 lorsque le démon tourne avec @code{--disable-deduplication}.
2873 @node Invoquer guix pull
2874 @section Invoquer @command{guix pull}
2876 @cindex mettre à niveau Guix
2877 @cindex mettre à jour Guix
2878 @cindex @command{guix pull}
2880 Les paquets sont installés ou mis à jour vers la dernière version disponible
2881 dans la distribution actuellement disponible sur votre machine locale. Pour
2882 mettre à jour cette distribution, en même temps que les outils Guix, vous
2883 devez lancer @command{guix pull} ; la commande télécharge le dernier code
2884 source de Guix et des descriptions de paquets et le déploie. Le code source
2885 est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}.
2887 À la fin, @command{guix package} utilisera les paquets et les versions des
2888 paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
2889 toutes les commandes Guix et les modules Scheme seront aussi récupérés
2890 depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
2891 ajoutés par la mise à jour sont aussi maintenant disponibles.
2893 Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
2894 pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
2895 pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
2896 pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
2899 Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
2900 disponible sous @file{~/.config/guix/current} contenant la dernière version
2901 de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
2902 recherche pour que vous utilisiez la dernière version. Le même conseil
2903 s'applique au manuel Info (@pxref{Documentation}) :
2906 export PATH="$HOME/.config/guix/current/bin:$PATH"
2907 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
2910 L'option @code{--list-generations} ou @code{-l} liste les anciennes
2911 générations produites par @command{guix pull}, avec des détails sur leur
2916 Génération 1 10 juin 2018 00:18:18
2918 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
2919 branche : origin/master
2920 commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
2922 Generation 2 Jun 11 2018 11:02:49
2924 repository URL: https://git.savannah.gnu.org/git/guix.git
2925 branch: origin/master
2926 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
2927 2 new packages: keepalived, libnfnetlink
2928 6 packages upgraded: emacs-nix-mode@@2.0.4,
2929 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
2930 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
2932 Generation 3 Jun 13 2018 23:31:07 (current)
2934 repository URL: https://git.savannah.gnu.org/git/guix.git
2935 branch: origin/master
2936 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
2937 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
2938 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
2941 Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
2942 créés par @command{guix package} (@pxref{Invoquer guix package}).
2943 C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
2944 une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
2947 $ guix package -p ~/.config/guix/current --roll-back
2948 passé de la génération 3 à 2
2949 $ guix package -p ~/.config/guix/current --delete-generations=1
2950 suppression de /home/charlie/.config/guix/current-1-link
2953 La commande @command{guix pull} est typiquement invoquée sans arguments mais
2954 il supporte les options suivantes :
2958 Produire une sortie verbeuse, en écrivant les journaux de construction sur
2959 la sortie d'erreur standard.
2961 @item --url=@var{url}
2962 Télécharger Guix depuis le dépôt Git à @var{url}.
2964 @vindex GUIX_PULL_URL
2965 Par défaut, la source est récupérée depuis le dépôt Git canonique sur
2966 @code{gnu.org}, pour la branche stable de Guix. Pour utiliser une autre
2967 source, paramétrez la variable d'environnement @code{GUIX_PULL_URL}.
2969 @item --commit=@var{commit}
2970 Déployer de @var{commit}, un ID de commit Git valide représenté par une
2971 chaîne hexadécimale.
2973 @item --branch=@var{branche}
2974 Déployer le haut de la @var{branche}, le nom d'une branche Git disponible
2975 sur le répertoire à @var{url}.
2977 @item --list-generations[=@var{motif}]
2978 @itemx -l [@var{motif}]
2979 Liste toutes les générations de @file{~/.config/guix/current} ou, si
2980 @var{motif} est fournit, le sous-ensemble des générations qui correspondent
2981 à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
2982 package --list-generations} (@pxref{Invoquer guix package}).
2985 Utiliser le programme d'amorçage Guile pour construire la dernière version
2986 de Guix. Cette option n'est utile que pour les développeurs de Guix.
2989 En plus, @command{guix pull} supporte toutes les options de construction
2990 communes (@pxref{Options de construction communes}).
2992 @node Invoquer guix pack
2993 @section Invoquer @command{guix pack}
2995 Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
2996 la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
2997 package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
2998 C'est là que @command{guix pack} entre en jeu.
3001 Si vous cherchez comment échanger des binaires entre des machines où Guix
3002 est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
3003 et @ref{Invoquer guix archive}.
3008 @cindex lot d'applications
3009 @cindex lot de logiciels
3010 La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
3011 : elle crée une archive tar ou un autre type d'archive contenunt les
3012 binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
3013 L'archive qui en résulte peut être utilisée sur toutes les machines qui
3014 n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
3015 ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
3016 reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
3017 contient bien les résultats que vous prétendez proposer.
3019 Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
3020 leurs dépendances, vous pouvez lancer :
3023 $ guix pack guile emacs geiser
3025 /gnu/store/@dots{}-pack.tar.gz
3028 Le résultat ici est une archive tar contenant un répertoire
3029 @file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
3030 résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
3031 ; le profil est le même qui celui qui aurait été créé avec @command{guix
3032 package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
3033 binaires indépendantes de Guix (@pxref{Installation binaire}).
3035 Les utilisateurs de ce pack devraient lancer
3036 @file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
3037 pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
3038 symbolique @file{/opt/gnu/bin} vers le profil :
3041 guix pack -S /opt/gnu/bin=bin guile emacs geiser
3045 De cette façon, les utilisateurs peuvent joyeusement taper
3046 @file{/opt/gnu/bin/guile} et profiter.
3048 @cindex binaires repositionnables, avec @command{guix pack}
3049 Et si le destinataire de votre pack n'a pas les privilèges root sur sa
3050 machine, et ne peut donc pas le décompresser dans le système de fichiers
3051 racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
3052 (voir plus bas). Cette option produite des @dfn{binaire repositionnables},
3053 ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
3054 du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
3055 décompresser votre archive dans leur répertoire personnel et lancer
3056 directement @file{./opt/gnu/bin/guile}.
3058 @cindex Docker, construire une image avec guix pack
3059 Autrement, vous pouvez produire un pack au format d'image Docker avec la
3063 guix pack -f docker guile emacs geiser
3067 Le résultat est une archive tar qui peut être passée à la commande
3068 @command{docker load}. Voir la
3069 @uref{https://docs.docker.com/engine/reference/commandline/load/,
3070 documentation de Docker} pour plus d'informations.
3072 @cindex Singularity, construire une image avec guix pack
3073 @cindex SquashFS, construire une image avec guix pack
3074 Autrement, vous pouvez produire une image SquashFS avec la commande suivante
3078 guix pack -f squashfs guile emacs geiser
3082 Le résultat est une image de système de fichiers SquashFS qui peut soit être
3083 montée directement soit être utilisée comme image de conteneur de système de
3084 fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
3085 conteneurisé Singularity}, avec des commandes comme @command{singularity
3086 shell} ou @command{singularity exec}.
3088 Diverses options en ligne de commande vous permettent de personnaliser votre
3092 @item --format=@var{format}
3093 @itemx -f @var{format}
3094 Produire un pack dans le @var{format} donné.
3096 Les formats disponibles sont :
3100 C'est le format par défaut. Il produit une archive tar contenant tous les
3101 binaires et les liens symboliques spécifiés.
3104 Cela produit une archive tar qui suit la
3105 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
3106 spécification des images Docker}.
3109 Cela produit une image SquashFS contenant tous les binaires et liens
3110 symboliques spécifiés, ainsi que des points de montages vides pour les
3111 systèmes de fichiers virtuels comme procfs.
3116 Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
3117 vous pouvez placer n'importe où dans l'arborescence du système de fichiers
3118 et les lancer à partir de là. Par exemple, si vous créez un pack contenant
3122 guix pack -R -S /mybin=bin bash
3126 … vous pouvez copier ce pack sur une machine qui n'a pas Guix et depuis
3127 votre répertoire personnel en tant qu'utilisateur non-privilégié, lancer :
3135 Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
3136 @file{/gnu/store} apparaît et contient toutes les dépendances de
3137 @code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
3138 C'est sans doute la manière la plus simple de déployer du logiciel construit
3139 avec Guix sur une machine sans Guix.
3141 Il y a un inconvénient cependant : cette technique repose sur les
3142 @dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
3143 non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
3144 Les anciennes versions de Linux ne le supportaient pas et certaines
3145 distributions GNU/Linux les désactivent ; sur ces système, les programme du
3146 pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
3147 racine du système de fichiers.
3149 @item --expression=@var{expr}
3150 @itemx -e @var{expr}
3151 Considérer le paquet évalué par @var{expr}.
3153 Cela a le même but que l'option de même nom de @command{guix build}
3154 (@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
3157 @item --manifest=@var{fichier}
3158 @itemx -m @var{fichier}
3159 Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
3160 Scheme dans @var{fichier}
3162 Elle a un but similaire à l'option de même nom dans @command{guix package}
3163 (@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
3164 fichiers manifeste. Ils vous permettent de définir une collection de
3165 paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
3166 créer des archives pour des machines qui n'ont pas Guix d'installé.
3167 Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
3168 @emph{soit} une liste de paquet, mais pas les deux.
3170 @item --system=@var{système}
3171 @itemx -s @var{système}
3172 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
3173 plutôt que pour le type de système de l'hôte de construction.
3175 @item --target=@var{triplet}
3176 @cindex compilation croisée
3177 Effectuer une compilation croisée pour @var{triplet} qui doit être un
3178 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
3179 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
3181 @item --compression=@var{outil}
3182 @itemx -C @var{outil}
3183 Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
3184 @code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
3186 @item --symlink=@var{spec}
3187 @itemx -S @var{spec}
3188 Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
3189 option peut apparaître plusieurs fois.
3191 @var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
3192 le lien symbolique qui sera créé et @var{cible} est la cible du lien.
3194 Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
3195 @file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
3197 @item --localstatedir
3198 Inclure le « répertoire d'état local », @file{/var/guix} dans le paquet
3201 @file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
3202 ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
3203 fournir dans le pack signifie que le dépôt et « complet » et gérable par
3204 Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
3205 aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
3207 Un cas d'utilisation est l'archive binaire indépendante de Guix
3208 (@pxref{Installation binaire}).
3211 Utiliser les programmes d'amorçage pour construire le pack. Cette option
3212 n'est utile que pour les développeurs de Guix.
3215 En plus, @command{guix pack} supporte toutes les options de construction
3216 communes (@pxref{Options de construction communes}) et toutes les options de
3217 transformation de paquets (@pxref{Options de transformation de paquets}).
3220 @node Invoquer guix archive
3221 @section Invoquer @command{guix archive}
3223 @cindex @command{guix archive}
3225 La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
3226 des fichiers du dépôt dans une simple archive puis ensuite de les
3227 @dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
3228 permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
3232 Si vous chercher une manière de produire des archives dans un format adapté
3233 pour des outils autres que Guix, @pxref{Invoquer guix pack}.
3236 @cindex exporter des éléments du dépôt
3237 Pour exporter des fichiers du dépôt comme une archive sur la sortie
3241 guix archive --export @var{options} @var{spécifications}...
3244 @var{spécifications} peut être soit des noms de fichiers soit des
3245 spécifications de paquets, comme pour @command{guix package}
3246 (@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
3247 archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
3248 principale de @code{emacs} :
3251 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
3254 Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
3255 les construit automatiquement. Le processus de construction peut être
3256 contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
3258 Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
3262 guix archive --export -r emacs | ssh la-machine guix archive --import
3266 De même, on peut transférer un profil utilisateur complet d'une machine à
3267 une autre comme cela :
3270 guix archive --export -r $(readlink -f ~/.guix-profile) | \
3271 ssh la-machine guix-archive --import
3275 Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
3276 profil ainsi que toutes leurs dépendances sont transférées (à cause de
3277 @code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
3278 de la machine cible. L'option @code{--missing} peut vous aider à comprendre
3279 les éléments qui manquent dans le dépôt de la machine cible. La commande
3280 @command{guix copy} simplifie et optimise ce processus, c'est donc ce que
3281 vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
3283 @cindex nar, format d'archive
3284 @cindex archive normalisée (nar)
3285 Les archives sont stockées au format « archive normalisé » ou « nar », qui
3286 est comparable dans l'esprit à « tar » mais avec des différences qui le
3287 rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
3288 stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
3289 mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
3290 les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
3291 Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
3292 toujours l'ordre des noms de fichier dans l'environnement linguistique C.
3293 Cela rend la production des archives entièrement déterministe.
3295 @c FIXME: Add xref to daemon doc about signatures.
3296 Lors de l'export, le démon signe numériquement le contenu de l'archive et
3297 cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
3298 vérifie la signature et rejette l'import en cas de signature invalide ou si
3299 la clef de signature n'est pas autorisée.
3301 Les principales options sont :
3305 Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
3306 l'archive résultante sur la sortie standard.
3308 Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
3309 @code{--recursive} ne soit passé.
3313 En combinaison avec @code{--export}, cette option demande à @command{guix
3314 archive} d'inclure les dépendances des éléments donnés dans l'archive.
3315 Ainsi, l'archive résultante est autonome : elle contient la closure des
3316 éléments du dépôt exportés.
3319 Lire une archive depuis l'entrée standard et importer les fichiers inclus
3320 dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
3321 signée par une clef publique qui ne se trouve pas dans le clefs autorisées
3322 (voir @code{--authorize} plus bas.)
3325 Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
3326 ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
3327 manquent dans le dépôt.
3329 @item --generate-key[=@var{paramètres}]
3330 @cindex signature, archives
3331 Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
3332 avant que les archives ne puissent être exportées avec @code{--export}.
3333 Remarquez que cette opération prend généralement du temps parce qu'elle doit
3334 récupère suffisamment d'entropie pour générer la paire de clefs.
3336 La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
3337 dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
3338 privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
3339 clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
3340 libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
3341 @var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
3342 libgcrypt (@pxref{General public-key related Functions,
3343 @code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
3346 @cindex autorisation, archives
3347 Autoriser les imports signés par la clef publique passée sur l'entrée
3348 standard. La clef publique doit être au « format avancé s-expression » —
3349 c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
3351 La liste des clefs autorisées est gardée dans un fichier modifiable par des
3352 humains dans @file{/etc/guix/acl}. Le fichier contient des
3353 @url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
3354 avancé »} et est structuré comme une liste de contrôle d'accès dans
3355 l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
3358 @item --extract=@var{répertoire}
3359 @itemx -x @var{répertoire}
3360 Lit une archive à un seul élément telle que servie par un serveur de
3361 substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
3362 une opération de bas niveau requise seulement dans de rares cas d'usage ;
3365 Par exemple, la commande suivante extrait le substitut pour Emacs servi par
3366 @code{hydra.gnu.org} dans @file{/tmp/emacs} :
3370 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
3371 | bunzip2 | guix archive -x /tmp/emacs
3374 Les archives à un seul élément sont différentes des archives à plusieurs
3375 éléments produites par @command{guix archive --export} ; elles contiennent
3376 un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
3377 Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
3378 devrait être considérée comme non sûre.
3380 Le but principal de cette opération est de faciliter l'inspection du contenu
3381 des archives venant de serveurs auxquels on ne fait potentiellement pas
3386 @c *********************************************************************
3387 @node Interface de programmation
3388 @chapter Interface de programmation
3390 GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
3391 définir, construire et faire des requêtes sur des paquets. La première
3392 interface permet aux utilisateurs d'écrire des définitions de paquets de
3393 haut-niveau. Ces définitions se réfèrent à des concepts de création de
3394 paquets familiers, comme le nom et la version du paquet, son système de
3395 construction et ses dépendances. Ces définitions peuvent ensuite être
3396 transformées en actions concrètes lors de la construction.
3398 Les actions de construction sont effectuées par le démon Guix, pour le
3399 compte des utilisateurs. Dans un environnement standard, le démon possède
3400 les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
3401 pas les utilisateurs. La configuration recommandée permet aussi au démon
3402 d'effectuer la construction dans des chroots, avec un utilisateur de
3403 construction spécifique pour minimiser les interférences avec le reste du
3407 Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
3408 Pour demander au démon d'effectuer une action de construction, les
3409 utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
3410 une représentation à bas-niveau des actions de construction à entreprendre
3411 et l'environnement dans lequel elles devraient avoir lieu — les dérivations
3412 sont aux définitions de paquets ce que l'assembleur est aux programmes C.
3413 Le terme de « dérivation » vient du fait que les résultats de la
3414 construction en @emph{dérivent}.
3416 Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
3417 paquets à haut-niveau.
3420 * Définition des paquets:: Définir de nouveaux paquets.
3421 * Systèmes de construction:: Spécifier comment construire les paquets.
3422 * Le dépôt:: Manipuler le dépôt de paquets.
3423 * Dérivations:: Interface de bas-niveau avec les dérivations
3425 * La monad du dépôt:: Interface purement fonctionnelle avec le
3427 * G-Expressions:: Manipuler les expressions de construction.
3428 * Invoking guix repl:: Fiddling with Guix interactively.
3431 @node Définition des paquets
3432 @section Définition des paquets
3434 L'interface de haut-niveau pour les définitions de paquets est implémentée
3435 dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
3436 exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
3440 (define-module (gnu packages hello)
3441 #:use-module (guix packages)
3442 #:use-module (guix download)
3443 #:use-module (guix build-system gnu)
3444 #:use-module (guix licenses)
3445 #:use-module (gnu packages gawk))
3447 (define-public hello
3453 (uri (string-append "mirror://gnu/hello/hello-" version
3457 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3458 (build-system gnu-build-system)
3459 (arguments '(#:configure-flags '("--enable-silent-rules")))
3460 (inputs `(("gawk" ,gawk)))
3461 (synopsis "Hello, GNU world: An example GNU package")
3462 (description "Guess what GNU Hello prints!")
3463 (home-page "http://www.gnu.org/software/hello/")
3468 Sans être un expert Scheme, le lecteur peut comprendre la signification des
3469 différents champs présents. Cette expression lie la variable @code{hello} à
3470 un objet @code{<package>}, qui est essentiellement un enregistrement
3471 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
3472 peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
3473 le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
3474 renvoie — oh surprise ! — @code{"hello"}.
3476 Avec un peu de chance, vous pourrez importer tout ou partie de la définition
3477 du paquet qui vous intéresse depuis un autre répertoire avec la commande
3478 @code{guix import} (@pxref{Invoquer guix import}).
3480 Dans l'exemple précédent, @var{hello} est défini dans un module à part,
3481 @code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
3482 nécessaire, mais c'est pratique : tous les paquets définis dans des modules
3483 sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
3484 ligne de commande (@pxref{Modules de paquets}).
3486 Il y a quelques points à remarquer dans la définition de paquet précédente :
3490 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
3491 @code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
3492 est un fichier à télécharger par FTP ou HTTP.
3494 Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
3495 des miroirs GNU définis dans @code{(guix download)}.
3497 Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
3498 téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
3499 fichier. La forme @code{(base32 @dots{})} introduit a représentation en
3500 base32 du hash. Vous pouvez obtenir cette information avec @code{guix
3501 download} (@pxref{Invoquer guix download}) et @code{guix hash}
3502 (@pxref{Invoquer guix hash}).
3505 Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
3506 @code{patches} qui liste les correctifs à appliquer et un champ
3507 @code{snippet} qui donne une expression Scheme pour modifier le code source.
3510 @cindex Système de construction GNU
3511 Le champ @code{build-system} spécifie la procédure pour construire le paquet
3512 (@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
3513 de construction GNU familier, où les paquets peuvent être configurés,
3514 construits et installés avec la séquence @code{./configure && make && make
3515 check && make install} habituelle.
3518 Le champ @code{arguments} spécifie des options pour le système de
3519 construction (@pxref{Systèmes de construction}). Ici il est interprété par
3520 @var{gnu-build-system} comme une demande de lancer @file{configure} avec le
3521 drapeau @code{--enable-silent-rules}.
3527 Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
3528 introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
3529 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
3530 des détails. Ice la valeur du champ @code{arguments} est une liste
3531 d'arguments passés au système de construction plus tard, comme avec
3532 @code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
3535 La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
3536 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
3537 @code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
3538 système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
3542 Le champ @code{inputs} spécifie les entrées du processus de construction —
3543 c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
3544 on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
3545 @var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
3547 @cindex accent grave (quasiquote)
3550 @cindex virgule (unquote)
3554 @findex unquote-splicing
3555 De nouveau, @code{`} (un accent grave, synonyme de la fonction
3556 @code{quasiquote}) nous permet d'introduire une liste litérale dans le champ
3557 @code{inputs}, tandis que @code{,} (une virgule, synonyme de la fonction
3558 @code{unquote}) nous permet d'insérer une valeur dans cette liste
3559 (@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
3561 Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
3562 besoin d'être spécifiés en tant qu'entrées ici. À la place, le
3563 @var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
3564 (@pxref{Systèmes de construction}).
3566 Cependant, toutes les autres dépendances doivent être spécifiées dans le
3567 champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
3568 simplement indisponible pour le processus de construction, ce qui peut mener
3569 à un échec de la construction.
3572 @xref{Référence de paquet}, pour une description complète des champs
3575 Lorsqu'une définition de paquet est en place, le paquet peut enfin être
3576 construit avec l'outil en ligne de commande @code{guix build}
3577 (@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
3578 vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
3579 aisément revenir à la définition du paquet avec la commande @command{guix
3580 edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
3581 d'inforamtions sur la manière de tester des définitions de paquets et
3582 @ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
3583 que la définition réspecte les conventions de style.
3584 @vindex GUIX_PACKAGE_PATH
3585 Enfin, @pxref{Modules de paquets} pour des informations sur la manière
3586 d'étendre la distribution en ajoutant vos propres définitions de paquets
3587 dans @code{GUIX_PACKAGE_PATH}.
3589 Finalement, la mise à jour de la définition du paquet à une nouvelle version
3590 amont peut en partie s'automatiser avec la commande @command{guix refresh}
3591 (@pxref{Invoquer guix refresh}).
3593 Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
3594 d'abord calculé par la procédure @code{package-derivation}. Cette
3595 dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
3596 Les actions de construction qu'il prescrit peuvent ensuite être réalisées
3597 par la procédure @code{build-derivation} (@pxref{Le dépôt}).
3599 @deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
3600 Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
3601 (@pxref{Dérivations}).
3603 @var{paquet} doit être un objet @code{<package>} valide et @var{système} une
3604 chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
3605 pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
3606 connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
3610 @cindex compilation croisée
3611 De manière identique, il est possible de calculer une dérivation qui
3612 effectue une compilation croisée d'un paquet pour un autre système :
3614 @deffn {Procédure Scheme} package-cross-derivation @var{store} @
3615 @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
3616 duof @var{paquet} construit depuis @var{système} pour @var{cible}.
3618 @var{cible} doit être un triplet GNU valide indiquant le matériel cible et
3619 le système d'exploitation, comme @code{"mips64el-linux-gnu"}
3620 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3621 Configure and Build System}).
3624 @cindex transformations de paquets
3625 @cindex réécriture d'entrées
3626 @cindex réécriture de l'arbre des dépendances
3627 On peut manipuler les paquets de manière arbitraire. Une transformation
3628 utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
3629 dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
3632 @deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
3633 [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
3634 paquet, remplace des dépendances directes et indirectes (mais pas ses
3635 entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
3636 est une liste de paires de paquets ; le premier élément de chaque pair est
3637 le paquet à remplacer, le second son remplaçant.
3639 De manière facultative, @var{nom-réécrit} est une procédure à un argument
3640 qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
3645 Regardez cet exemple :
3648 (define libressl-instead-of-openssl
3649 ;; Cette procédure remplace OPENSSL par LIBRESSL,
3651 (package-input-rewriting `((,openssl . ,libressl))))
3653 (define git-with-libressl
3654 (libressl-instead-of-openssl git))
3658 Ici nous définissons d'abord une procédure de réécriture qui remplace
3659 @var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
3660 @dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
3661 @var{openssl}. cela est exactement ce que l'option en ligne de commande
3662 @option{--with-input} fait (@pxref{Options de transformation de paquets,
3663 @option{--with-input}}).
3665 Une procédure plus générique pour réécrire un graphe de dépendance d'un
3666 paquet est @code{package-mapping} : elle supporte n'importe quel changement
3667 dans les nœuds du graphe.
3669 @deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
3670 Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
3671 paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
3672 arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
3676 * Référence de paquet:: Le type de donnée des paquets.
3677 * Référence d'origine:: Le type de données d'origine.
3681 @node Référence de paquet
3682 @subsection Référence de @code{package}
3684 Cette section résume toutes les options disponibles dans les déclarations
3685 @code{package} (@pxref{Définition des paquets}).
3687 @deftp {Type de données} package
3688 C'est le type de donnée représentant une recette de paquets
3692 Le nom du paquet, comme une chaîne de caractères.
3694 @item @code{version}
3695 La version du paquet, comme une chaîne de caractères.
3698 Un objet qui indique comment le code source du paquet devrait être
3699 récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
3700 fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
3701 s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
3702 indique un fichier du système de fichier local (@pxref{G-Expressions,
3703 @code{local-file}}).
3705 @item @code{build-system}
3706 Le système de construction qui devrait être utilisé pour construire le
3707 paquet (@pxref{Systèmes de construction}).
3709 @item @code{arguments} (par défaut : @code{'()})
3710 Les arguments à passer au système de construction. C'est une liste qui
3711 contient typiquement une séquence de paires de clefs-valeurs.
3713 @item @code{inputs} (par défaut : @code{'()})
3714 @itemx @code{native-inputs} (par défaut : @code{'()})
3715 @itemx @code{propagated-inputs} (par défaut : @code{'()})
3716 @cindex entrées, des paquets
3717 Ces champs listent les dépendances du paquet. Chacune est une liste de
3718 tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
3719 caractères) comme premier élément, un paquet, une origine ou une dérivation
3720 comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
3721 est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
3722 plus d'informations sur les sorties des paquets). Par exemple, la liste
3723 suivante spécifie trois entrées :
3726 `(("libffi" ,libffi)
3727 ("libunistring" ,libunistring)
3728 ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
3731 @cindex compilation croisée, dépendances des paquets
3732 La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
3733 lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
3734 les dépendances listées dans @code{inputs} sont construites pour
3735 l'architecture @emph{cible} ; inversement, les dépendances listées dans
3736 @code{native-inputs} sont construites pour l'architecture de la machine de
3737 @emph{construction}.
3739 @code{native-inputs} est typiquement utilisé pour lister les outils requis à
3740 la construction mais pas à l'exécution, comme Autoconf, Automake,
3741 pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
3742 erreurs de ce type (@pxref{Invoquer guix lint}).
3744 @anchor{package-propagated-inputs}
3745 Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
3746 paquets spécifiés seront automatiquement installés avec le paquet auquel ils
3747 appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
3748 package}}, pour des informations sur la manière dont @command{guix package}
3749 traite les entrées propagées).
3751 Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
3752 d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
3753 pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
3755 Un autre exemple où @code{propagated-inputs} est utile est pour les langages
3756 auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
3757 cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
3758 et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
3759 peuvent trouver le code des bibliothèques dont elles dépendent à
3760 l'exécution, les dépendances à l'exécution doivent être listées dans
3761 @code{propagated-inputs} plutôt que @code{inputs}.
3763 @item @code{self-native-input?} (par défaut : @code{#f})
3764 C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
3765 comme entrée native lors de la compilation croisée.
3767 @item @code{outputs} (par défaut : @code{'("out")})
3768 La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
3771 @item @code{native-search-paths} (par défaut : @code{'()})
3772 @itemx @code{search-paths} (par défaut : @code{'()})
3773 Une liste d'objets @code{search-path-specification} décrivant les variables
3774 d'environnement de recherche de chemins que ce paquet utilise.
3776 @item @code{replacement} (par défaut : @code{#f})
3777 Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
3778 comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
3781 @item @code{synopsis}
3782 Une description sur une ligne du paquet.
3784 @item @code{description}
3785 Une description plus détaillée du paquet.
3787 @item @code{license}
3788 @cindex licence, des paquets
3789 La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
3790 liste de ces valeurs.
3792 @item @code{home-page}
3793 L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
3795 @item @code{supported-systems} (par défaut : @var{%supported-systems})
3796 La liste des systèmes supportés par le paquet, comme des chaînes de
3797 caractères de la forme @code{architecture-noyau}, par exemple
3798 @code{"x86_64-linux"}.
3800 @item @code{maintainers} (par défaut : @code{'()})
3801 La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
3803 @item @code{location} (par défaut : emplacement de la source de la forme @code{package})
3804 L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
3805 hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
3811 @node Référence d'origine
3812 @subsection Référence de @code{origin}
3814 Cette section résume toutes les options disponibles dans le déclarations
3815 @code{origin} (@pxref{Définition des paquets}).
3817 @deftp {Type de données} origin
3818 C'est le type de donnée qui représente l'origine d'un code source.
3822 Un objet contenant l'URI de la source. Le type d'objet dépend de la
3823 @code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
3824 de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
3825 représentée par une chaîne de caractères, ou une liste de chaînes de
3829 Un procédure qui gère l'URI.
3834 @item @var{url-fetch} de @code{(guix download)}
3835 télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
3839 @item @var{git-fetch} de @code{(guix git-download)}
3840 clone le dépôt sous contrôle de version Git et récupère la révision
3841 spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
3842 un objet @code{git-reference} ressemble à cela :
3846 (url "git://git.debian.org/git/pkg-shadow/shadow")
3847 (commit "v4.1.5.1"))
3852 Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
3853 @code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
3854 de caractères en base-32.
3856 Vous pouvez obtenir cette information avec @code{guix download}
3857 (@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
3859 @item @code{file-name} (par défaut : @code{#f})
3860 Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
3861 @code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
3862 des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
3863 fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
3864 contrôle de version, il est recommandé de fournir un nom de fichier
3865 explicitement parce que le nom par défaut n'est pas très descriptif.
3867 @item @code{patches} (par défaut : @code{'()})
3868 Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
3869 (@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
3870 à appliquer sur la source.
3872 Cette liste de correctifs doit être inconditionnelle. En particulier, elle
3873 ne peut pas dépendre des valeurs de @code{%current-system} ou
3874 @code{%current-target-system}.
3876 @item @code{snippet} (par défaut : @code{#f})
3877 Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
3878 dans le répertoire des sources. C'est une manière pratique de modifier la
3879 source, parfois plus qu'un correctif.
3881 @item @code{patch-flags} (par défaut : @code{'("-p1")})
3882 Une liste de drapeaux à passer à la commande @code{patch}.
3884 @item @code{patch-inputs} (par défaut : @code{#f})
3885 Paquets d'entrées ou dérivations pour le processus de correction.
3886 Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
3887 pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
3889 @item @code{modules} (par défaut : @code{'()})
3890 Une liste de modules Guile qui devraient être chargés pendant le processus
3891 de correction et pendant que le lancement du code du champ @code{snippet}.
3893 @item @code{patch-guile} (par défaut : @code{#f})
3894 Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
3895 à @code{#f}, une valeur par défaut raisonnable est utilisée.
3900 @node Systèmes de construction
3901 @section Systèmes de construction
3903 @cindex système de construction
3904 Chaque définition de paquet définie un @dfn{système de construction} et des
3905 arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
3906 champ @code{build-system} représente la procédure de construction du paquet,
3907 ainsi que des dépendances implicites pour cette procédure de construction.
3909 Les systèmes de construction sont des objets
3910 @code{<build-system>}. L'interface pour les créer et les manipuler est
3911 fournie par le module @code{(guix build-system)} et les systèmes de
3912 construction eux-mêmes sont exportés par des modules spécifiques.
3914 @cindex sac (représentation à bas-niveau des paquets)
3915 Sous le capot, les systèmes de construction compilent d'abord des objets
3916 paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
3917 décoration — en d'autres mots, un sac est une représentation à bas-niveau
3918 d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
3919 été implicitement ajoutées par le système de construction. Cette
3920 représentation intermédiaire est ensuite compilée en une dérivation
3921 (@pxref{Dérivations}).
3923 Les systèmes de construction acceptent une liste d'@dfn{arguments}
3924 facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
3925 champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
3926 arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
3927 Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
3928 habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
3929 un processus Guile lancé par le démon (@pxref{Dérivations}).
3931 Le système de construction principal est le @var{gnu-build-system} qui
3932 implémente les procédures de construction standard pour les paquets GNU et
3933 de nombreux autres. Il est fournit par le module @code{(guix build-system
3936 @defvr {Variable Scheme} gnu-build-system
3937 @var{gnu-build-system} représente le système de construction GNU et ses
3938 variantes (@pxref{Configuration, configuration and makefile conventions,,
3939 standards, GNU Coding Standards}).
3941 @cindex phases de construction
3942 En résumé, les paquets qui l'utilisent sont configurés, construits et
3943 installés avec la séquence @code{./configure && make && make check && make
3944 install} habituelle. En pratique, des étapes supplémentaires sont souvent
3945 requises. Toutes ces étapes sont séparées dans des @dfn{phases}
3946 différentes, notamment@footnote{Regardez les modules @code{(guix build
3947 gnu-build-system)} pour plus de détails sur les phases de construction.}:
3951 Décompresse l'archive des sources et se déplace dans l'arborescence des
3952 sources fraîchement extraites. Si la source est en fait un répertoire, le
3953 copie dans l'arborescence de construction et entre dans ce répertoire.
3955 @item patch-source-shebangs
3956 Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
3957 réfèrent aux bons noms de fichiers. Par exemple, elle change
3958 @code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3961 Lance le script @code{configure} avec un certain nombre d'options par
3962 défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
3963 spécifiées par l'argument @code{#:configure-flags}.
3966 Lance @code{make} avec la liste des drapeaux spécifiés avec
3967 @code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
3968 défaut), construit avec @code{make -j}.
3971 Lance @code{make check}, ou une autre cible spécifiée par
3972 @code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
3973 l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
3977 Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
3979 @item patch-shebangs
3980 Corrige les shebangs des fichiers exécutables installés.
3983 Nettoie les symboles de débogage dans les fichiers ELF (à moins que
3984 @code{#:strip-binaries?} ne soit faux), les copie dans la sortie
3985 @code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
3988 @vindex %standard-phases
3989 Le module du côté du constructeur @code{(guix build gnu-build-system)}
3990 définie @var{%standard-phases} comme la liste par défaut des phases de
3991 construction. @var{%standard-phases} est une liste de paires de symboles
3992 et de procédures, où la procédure implémente la phase en question.
3994 La liste des phases utilisées par un paquet particulier peut être modifiée
3995 avec le paramètre @code{#:phases}. Par exemple, en passant :
3998 #:phases (modify-phases %standard-phases (delete 'configure))
4001 signifie que toutes les procédures décrites plus haut seront utilisées, sauf
4002 la phase @code{configure}.
4004 En plus, ce système de construction s'assure que l'environnement « standard
4005 » pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
4006 libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
4007 @code{(guix build-system gnu)} pour une liste complète). Nous les appelons
4008 les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
4009 ne les mentionne pas.
4012 D'autres objets @code{<build-system>} sont définis pour supporter d'autres
4013 conventions et outils utilisés par les paquets de logiciels libres. Ils
4014 héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
4015 l'ensemble des entrées implicites ajoutées au processus de construction et
4016 dans la liste des phases exécutées. Certains de ces systèmes de
4017 construction sont listés ci-dessous.
4019 @defvr {Variable Scheme} ant-build-system
4020 Cette variable est exportée par @code{(guix build-system ant)}. Elle
4021 implémente la procédure de construction pour les paquets Java qui peuvent
4022 être construits avec @url{http://ant.apache.org/, l'outil de construction
4025 Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
4026 (JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
4027 paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
4028 et @code{#:jdk} respectivement.
4030 Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
4031 acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
4032 fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
4033 construire l'archive jar spécifiée. Dans ce cas, le paramètre
4034 @code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
4035 sources, par défaut « src ».
4037 Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
4038 construction minimal pour spécifier la classe principale du jar. Cela rend
4039 le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
4040 utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
4041 défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
4042 peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
4043 @code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
4044 peuvent pas être utilisées comme des tests.
4046 Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
4047 Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
4048 tâche « jar » sera lancée.
4052 @defvr {Variable Scheme} android-ndk-build-system
4053 @cindex Distribution android
4054 @cindex système de construction Android NDK
4055 Cette variable est exportée par @code{(guix build-system android-ndk)}.
4056 Elle implémente une procédure de construction pour les paquets du NDK
4057 Android (@i{native development kit}) avec des processus de construction
4060 Le système de construction suppose que les paquets installent leur interface
4061 publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
4062 « out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
4065 Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
4066 pas de fichiers en conflit.
4068 Pour l'instant, la compilation croisée n'est pas supportées — donc pour
4069 l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
4070 des outils de l'hôte.
4074 @defvr {Variable Scheme} asdf-build-system/source
4075 @defvrx {Variable Scheme} asdf-build-system/sbcl
4076 @defvrx {Variable Scheme} asdf-build-system/ecl
4078 Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
4079 les procédures de constructions pour les paquets en Common Lisp qui
4080 utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
4081 un dispositif de définition de systèmes pour les programmes et les
4082 bibliothèques en Common Lisp.
4084 Le système @code{asdf-build-system/source} installe les paquets au format
4085 source qui peuvent être chargés avec n'importe quelle implémentation de
4086 common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
4087 installent des binaires au format qu'un implémentation particulière
4088 comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
4089 produire des programmes exécutables ou des images lisp qui contiennent un
4090 ensemble de paquets pré-chargés.
4092 Le système de construction utilise des conventions de nommage. Pour les
4093 paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
4094 lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
4096 En plus, le paquet source correspondant devrait étiquetté avec la même
4097 convention que les paquets python (voir @ref{Modules python}), avec le
4100 Pour les paquets binaires, chaque système devrait être défini comme un
4101 paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
4102 peut créer des variantes du paquet pour construire tous les systèmes. Les
4103 paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
4104 contenir plusieurs systèmes.
4106 Pour créer des programmes exécutables et des images, les procédures côté
4107 construction @code{build-program} et @code{build-image} peuvent être
4108 utilisées. Elles devraient être appelées dans une phase de construction
4109 après la phase @code{create-symlinks} pour que le système qui vient d'être
4110 construit puisse être utilisé dans l'image créée. @code{build-program}
4111 requiert une liste d'expressions Common Lisp dans l'argument
4112 @code{#:entry-program}.
4114 Si le système n'est pas défini dans son propre fichier @code{.asd} du même
4115 nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
4116 spécifier dans quel fichier le système est défini. De plus, si le paquet
4117 défini un système pour ses tests dans un fichier séparé, il sera chargé
4118 avant que les tests ne soient lancés s'il est spécifié par le paramètre
4119 @code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
4120 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
4121 @code{test.asd} seront testés.
4123 Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
4124 différente de ce que la convention de nommage suggère, le paramètre
4125 @code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
4129 @defvr {Variable Scheme} cargo-build-system
4130 @cindex Langage de programmation Rust
4131 @cindex Cargo (système de construction Rust)
4132 Cette variable est exportée par @code{(guix build-system cargo)}. Elle
4133 supporte les construction de paquets avec Cargo, le système de construction
4134 du @uref{https://www.rust-lang.org, langage de programmation Rust}.
4136 Dans sa phase @code{configure}, ce système de construction remplace les
4137 dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
4138 Guix. La phase @code{install} installe les binaires et installe aussi le
4139 code source et le fichier @file{Cargo.toml}.
4142 @defvr {Variable Scheme} cmake-build-system
4143 Cette variable est exportée par @code{(guix build-system cmake)}. Elle
4144 implémente la procédure de construction des paquets qui utilisent
4145 l'@url{http://www.cmake.org, outils de construction CMake}.
4147 Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
4148 entrées. Le paquet utilisé peut être spécifié par le paramètre
4151 Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
4152 passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
4153 spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
4154 par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
4155 les informations de débogage » en plus court), ce qui signifie en gros que
4156 le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
4160 @defvr {Variable Scheme} go-build-system
4161 Cette variable est exportée par @code{(guix build-system go)}. Elle
4162 implémente la procédure pour les paquets Go utilisant les
4163 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
4164 mécanismes de construction Go} standard.
4166 L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
4167 dans certains cas, @code{#:unpack-path}. Le
4168 @url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
4169 correspond au chemin dans le système de fichiers attendu par le script de
4170 construction du paquet et les paquets qui s'y réfèrent et fournit une
4171 manière unique de se référer à un paquet Go. Il est typiquement basé sur
4172 une combinaison de l'URI du code source du paquet et d'une structure
4173 hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
4174 le code source du paquet dans une structure de répertoires différente que
4175 celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
4176 utilisé dans ces cas-là.
4178 Les paquets qui fournissent des bibliothèques Go devraient être installées
4179 avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
4180 par défaut, contrôle l'installation du code source. Elle peut être mise à
4181 @code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
4184 @defvr {Variable Scheme} glib-or-gtk-build-system
4185 Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
4186 Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
4189 Ce système de construction ajoute les deux phases suivantes à celles
4190 définies par @var{gnu-build-system} :
4193 @item glib-or-gtk-wrap
4194 La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
4195 @file{bin/} sont capable de trouver les « schemas » GLib et les
4196 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
4197 GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
4198 lancement qui initialisent correctement les variables d'environnement
4199 @code{XDG_DATA_DIRS} et @code{GTK_PATH}.
4201 Il est possible d'exclure des sorties spécifiques de ce processus
4202 d'enveloppage en listant leur nom dans le paramètre
4203 @code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
4204 est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
4205 ajouterait une dépendance inutile vers GLib et GTK+.
4207 @item glib-or-gtk-compile-schemas
4208 La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
4209 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
4210 schémas GSettings} de GLib sont compilés. La compilation est effectuée par
4211 le programme @command{glib-compile-schemas}. Il est fournit par le paquet
4212 @code{glib:bin} qui est automatiquement importé par le système de
4213 construction. Le paquet @code{glib} qui fournit
4214 @command{glib-compile-schemas} peut être spécifié avec le paramètre
4218 Ces deux phases sont exécutées après la phase @code{install}.
4221 @defvr {Scheme Variable} guile-build-system
4222 This build system is for Guile packages that consist exclusively of Scheme
4223 code and that are so lean that they don't even have a makefile, let alone a
4224 @file{configure} script. It compiles Scheme code using @command{guild
4225 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
4226 installs the @file{.scm} and @file{.go} files in the right place. It also
4227 installs documentation.
4229 This build system supports cross-compilation by using the @code{--target}
4230 option of @command{guild compile}.
4232 Packages built with @code{guile-build-system} must provide a Guile package
4233 in their @code{native-inputs} field.
4236 @defvr {Variable Scheme} minify-build-system
4237 Cette variable est exportée par @code{(guix build-system minify)}. Elle
4238 implémente une procédure de minification pour des paquets JavaScript
4241 Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
4242 compresser tous les fichiers JavaScript du répertoire @file{src}. Un
4243 minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
4244 mais il est attendu que ce paquet écrive le code minifié sur la sortie
4247 Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
4248 répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
4249 utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
4252 @defvr {Variable Scheme} ocaml-build-system
4253 Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
4254 implémente une procédure de construction pour les paquets
4255 @uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
4256 commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
4257 des commandes diverses pour être construit. Ce système de construction en
4260 Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
4261 haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
4262 setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
4263 construction supposera que ces fichiers ont été générés par
4264 @uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
4265 d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
4266 désactivés. Vous pouvez passer des drapeaux de configuration et de
4267 consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
4268 @code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
4269 utilisés pour activer les tests. La clef @code{#:use-make?} peut être
4270 utilisée pour outrepasser ce système dans les phases de construction et
4273 Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
4274 d'un script configure écrit à la main qui demande un format différent de
4275 celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
4276 la clef @code{#:configure-flags}.
4278 Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
4279 @code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
4280 construction et l'installation avec la clef @code{#:make-flags}.
4282 Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
4283 plus ou moins standard pour leur système de construction. Dans ce cas, le
4284 système de construction lancera @code{ocaml pkg/pkg.ml} ou
4285 @code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
4286 requis. Des drapeaux supplémentaires peuvent être passés via la clef
4287 @code{#:bulid-flags}. L'installation se fait avec
4288 @command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
4289 ajouté au champ @code{native-inputs} de la définition du paquet.
4291 Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
4292 dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
4293 dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
4294 leur propre répertoire de module, ce qui est normalement correct puisqu'il
4295 s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
4296 bibliothèques ne peuvent pas y être trouvées et on utilise
4297 @code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
4298 @file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
4299 @file{.so} devraient être installées.
4302 @defvr {Variable Scheme} python-build-system
4303 Cette variable est exportée par @code{(guix build-system python)}. Elle
4304 implémente la procédure de construction plus ou moins standarde utilisée
4305 pour les paquets Python, qui consiste à lancer @code{python setup.py build}
4306 puis @code{python setup.py install --prefix=/gnu/store/@dots{}}.
4308 Pour les paquets qui installent des programmes autonomes dans @code{bin/},
4309 elle prend soin d'envelopper ces binaires pour que leur variable
4310 d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
4311 Python dont ils dépendent.
4313 Le paquet Python utilisé pour effectuer la construction peut être spécifié
4314 avec le paramètre @code{#:python}. C'est une manière utile de forcer un
4315 paquet à être construit avec une version particulière de l'interpréteur
4316 python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
4317 une version de l'interpréteur.
4319 Par défaut Guix appelle @code{setup.py} sous le contrôle de
4320 @code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
4321 pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
4322 en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
4325 @defvr {Variable Scheme} perl-build-system
4326 Cette variable est exportée par @code{(guix build-system perl)}. Elle
4327 implémente la procédure de construction standarde des paquets Perl, qui
4328 consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
4329 suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
4330 Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
4331 install}, en fonction de la présence de @code{Build.PL} ou
4332 @code{Makefile.PL} dans la distribution du paquet. Le premier a la
4333 préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
4334 la distribution du paquet. Cette préférence peut être inversée en
4335 spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
4337 L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
4338 passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
4339 @code{#:module-build-flags}, respectivement.
4341 Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
4344 @defvr {Variable Scheme} r-build-system
4345 Cette variable est exportée par @code{(guix build-system r)}. Elle
4346 implémente la procédure de construction utilisée par les paquets
4347 @uref{http://r-project.org, R} qui consiste à lancer à peine plus que
4348 @code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
4349 @code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
4350 sont lancés après l'installation avec la fonction R
4351 @code{tools::testInstalledPackage}.
4354 @defvr {Variable Scheme} texlive-build-system
4355 Cette variable est exportée par @code{(guix build-system texlive)}. Elle
4356 est utilisée pour construire des paquets TeX en mode batch avec le moteur
4357 spécifié. Le système de construction initialise la variable
4358 @code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
4360 Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
4361 par @code{ins}. Un moteur et un format différent peuvent être spécifiés
4362 avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
4363 peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
4364 liste de noms de fichiers. Le système de construction ajoute uniquement
4365 @code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
4366 tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
4367 arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
4370 Le paramètre @code{#:tex-directory} dit au système de construction où
4371 installer les fichiers construit dans l'arbre texmf.
4374 @defvr {Variable Scheme} ruby-build-system
4375 Cette variable est exportée par @code{(guix build-system ruby)}. Elle
4376 implémenter la procédure de construction RubyGems utilisée par les paquets
4377 Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
4379 Le champ @code{source} d'un paquet qui utilise ce système de construction
4380 référence le plus souvent une archive gem, puisque c'est le format utilisé
4381 par les développeurs Ruby quand ils publient leur logiciel. Le système de
4382 construction décompresse l'archive gem, éventuellement en corrigeant les
4383 sources, lance la suite de tests, recompresse la gemme et l'installe. En
4384 plus, des répertoires et des archives peuvent être référencés pour permettre
4385 de construire des gemmes qui n'ont pas été publiées depuis Git ou une
4386 archive de sources traditionnelle.
4388 Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
4389 Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
4390 peut être spécifiée avec le paramètre @code{#:gem-flags}.
4393 @defvr {Variable Scheme} waf-build-system
4394 Cette variable est exportée par @code{(guix build-system waf)}. Elle
4395 implémente une procédure de construction autour du script @code{waf}. Les
4396 phases usuelles — @code{configure}, @code{build} et @code{install} — sont
4397 implémentée en passant leur nom en argument au script @code{waf}.
4399 Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
4400 Python utilisé pour lancer le script peut être spécifié avec le paramètre
4404 @defvr {Variable Scheme} scons-build-system
4405 Cette variable est exportée par @code{(guix build-system scons)}. Elle
4406 implémente la procédure de construction utilisée par l'outil de construction
4407 SCons. Ce système de construction lance @code{scons} pour construire le
4408 paquet, @code{scons test} pour lancer les tests puis @code{scons install}
4409 pour installer le paquet.
4411 On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
4412 avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
4413 lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
4414 avec le paramètre @code{#:scons}.
4417 @defvr {Variable Scheme} haskell-build-system
4418 Cette variable est exportée par @code{(guix build-system haskell)}. Elle
4419 implémente la procédure de construction Cabal utilisée par les paquets
4420 Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
4421 --prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
4422 que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
4423 pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
4424 dépôt en lecture-seule du compilateur, le système de construction utilise
4425 @code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
4426 register}. En plus, le système de construction génère la documentation du
4427 paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
4428 @code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
4429 peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
4430 fichier @code{Setup.hs} n'est pas trouvé, le système de construction
4431 cherchera @code{Setup.lhs} à la place.
4433 Le compilateur Haskell utilisé peut être spécifié avec le paramètre
4434 @code{#:haskell} qui a pour valeur par défaut @code{ghc}.
4437 @defvr {Variable Scheme} dub-build-system
4438 Cette variable est exportée par @code{(guix build-system dub)}. Elle
4439 implémente la procédure de construction Dub utilisée par les paquets D qui
4440 consiste à lancer @code{dub build} et @code{dub run}. L'installation est
4441 effectuée en copiant les fichiers manuellement.
4443 Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
4444 qui vaut par défaut @code{ldc}.
4447 @defvr {Variable Scheme} emacs-build-system
4448 Cette variable est exportée par @code{(guix build-system emacs)}. Elle
4449 implémente une procédure d'installation similaire au système de gestion de
4450 paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4452 Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
4453 tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
4454 gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
4455 dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
4456 paquet est installé dans son propre répertoire dans
4457 @file{share/emacs/site-lisp/guix.d}.
4460 @defvr {Variable Scheme} font-build-system
4461 Cette variable est exportée par @code{(guix build-system font)}. Elle
4462 implémente une procédure d'installation pour les paquets de polices où des
4463 fichiers de polices TrueType, OpenType, etc sont fournis en amont et n'ont
4464 qu'à être copiés à leur emplacement final. Elle copie les fichiers de
4465 polices à l'emplacement standard dans le répertoire de sortie.
4468 @defvr {Variable Scheme} meson-build-system
4469 Cette variable est exportée par @code{(guix build-system meson)}. Elle
4470 implémente la procédure de construction des paquets qui utilisent
4471 @url{http://mesonbuild.com, Meson} comme système de construction.
4473 Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
4474 l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
4475 @code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
4476 @code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
4477 @code{RUNPATH} des binaires et les bibliothèques qu'il installe.
4479 Ce système de construction est une extension de @var{gnu-build-system}, mais
4480 avec les phases suivantes modifiées pour Meson :
4485 La phase lance @code{meson} avec les drapeaux spécifiés dans
4486 @code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
4487 initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
4488 dans @code{#:build-type}.
4491 La phase lance @code{ninja} pour construire le paquet en parallèle par
4492 défaut, mais cela peut être changé avec @code{#:parallel-build?}.
4495 La phase lance @code{ninja} avec la cible spécifiée dans
4496 @code{#:test-target}, qui est @code{"test"} par défaut.
4499 La phase lance @code{ninja install} et ne peut pas être changée.
4502 En dehors de cela, le système de construction ajoute aussi la phase suivante
4508 Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
4509 dont ils ont besoin. Elle cherche les bibliothèques requises dans les
4510 sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
4511 là où c'est nécessaire. Elle supprime aussi les références aux
4512 bibliothèques laissées là par la phase de construction par
4513 @code{meson-for-build} comme les dépendances des tests, qui ne sont pas
4514 vraiment requises pour le programme.
4516 @item glib-or-gtk-wrap
4517 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
4518 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
4520 @item glib-or-gtk-compile-schemas
4521 Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
4522 n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
4526 Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
4527 système de construction « trivial » est disponible. Il est trivial dans le
4528 sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
4529 implicite, et n'a pas de notion de phase de construction.
4531 @defvr {Variable Scheme} trivial-build-system
4532 Cette variable est exportée par @code{(guix build-system trivial)}.
4534 Ce système de construction requiert un argument @code{#:builder}. Cet
4535 argument doit être une expression Scheme qui construit la sortie du paquet —
4536 comme avec @code{build-expression->derivation} (@pxref{Dérivations,
4537 @code{build-expression->derivation}}).
4544 @cindex éléments du dépôt
4545 @cindex chemins dans le dépôt
4547 Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
4548 bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
4549 sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
4550 parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
4551 qui contient des informations comme les chemins du dépôt auxquels se
4552 réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
4553 @emph{valides} — les résultats d'une construction réussie. Cette base de
4554 données se trouve dans @file{@var{localstatedir}/guix/db} où
4555 @var{localstatedir} est le répertoire d'états spécifié @i{via} @option
4556 {--localstatedir} à la configuration, typiquement @file{/var}.
4558 C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
4559 clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
4560 clients se connectent au démon par un socket Unix-domain, envoient une
4561 requête dessus et lisent le résultat — ce sont des appels de procédures
4565 Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
4566 @file{/gnu/store} directement. Cela entraînerait des incohérences et
4567 casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
4568 (@pxref{Introduction}).
4570 @xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
4571 sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
4572 modifications accidentelles.
4575 Le module @code{(guix store)} fournit des procédures pour se connecter au
4576 démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
4577 @code{open-connection}, et donc toutes les commandes @command{guix} se
4578 connectent au démon local ou à l'URI spécifiée par la variable
4579 d'environnement @code{GUIX_DAEMON_SOCKET}.
4581 @defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
4582 Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
4583 de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
4584 nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
4585 des noms de fichiers, les schémas d'URI supportés sont :
4590 Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
4591 est équivalent à @file{/var/guix/daemon-socket/socket}.
4594 @cindex démon, accès distant
4595 @cindex accès distant au démon
4596 @cindex démon, paramètres de grappes
4597 @cindex grappes, paramètres du démon
4598 Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
4599 authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
4600 éventuellement un numéro de port (par défaut 44146) :
4603 guix://master.guix.example.org:1234
4606 Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
4607 de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
4608 construction sur @code{master.guix.example.org}.
4610 L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
4611 dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
4615 @cindex accès SSH au démon de construction
4616 Ces URI vous permettent de vous connecter au démon à distance à travers
4617 SSH@footnote{Cette fonctionnalité requiert Guile-SSH
4618 (@pxref{Prérequis}).}.
4621 ssh://charlie@@guix.example.org:22
4624 Comme pour @command{guix copy}, les fichiers de configuration du client
4625 OpenSSH sont respectés (@pxref{Invoquer guix copy}).
4628 Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
4630 @c XXX: Remove this note when the protocol incurs fewer round trips
4631 @c and when (guix derivations) no longer relies on file system access.
4633 La capacité de se connecter à un démon de construction distant est considéré
4634 comme expérimental à la version @value{VERSION}. Contactez-nous pour
4635 partager vos problèmes ou des suggestions que vous pourriez avoir
4636 (@pxref{Contribuer}).
4640 @deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
4641 Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
4642 de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
4643 réserver un peu de place supplémentaire sur le système de fichiers pour que
4644 le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
4647 @var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
4648 l'emplacement normal en fonction des options données à @command{configure}.
4651 @deffn {Procédure Scheme} close-connection @var{server}
4652 Ferme la connexion au @var{serveur}.
4655 @defvr {Variable Scheme} current-build-output-port
4656 Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
4657 journaux de construction et d'erreur envoyés par le démon devraient être
4661 Les procédures qui font des RPC prennent toutes un objet serveur comme
4664 @deffn {Procédure Scheme} valid-path? @var{server} @var{path}
4665 @cindex éléments du dépôt invalides
4666 Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
4667 @code{#f} sinon (un élément invalide peut exister sur le disque mais rester
4668 invalide, par exemple parce que c'est le résultat d'une construction annulée
4671 Une condition @code{&nix-protocol-error} est levée si @var{path} n'est pas
4672 préfixée par le répertoire du dépôt (@file{/gnu/store}).
4675 @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
4676 Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
4677 chemin. @var{references} est la liste des chemins du dépôt référencés par
4678 le chemin du dépôt qui en résulte.
4681 @deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
4682 Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
4683 chemins de dérivations) et retourne quand le travailleur a fini de les
4684 construire. Renvoie @code{#t} en cas de réussite.
4687 Remarque que le module @code{(guix monads)} fournit une monad ainsi que des
4688 version monadiques des procédures précédentes, avec le but de rendre plus
4689 facile de travailler avec le code qui accède au dépôt (@pxref{La monad du dépôt}).
4692 @i{Cette section est actuellement incomplète.}
4695 @section Dérivations
4698 Les actions de construction à bas-niveau et l'environnement dans lequel
4699 elles sont effectuées sont représentés par des @dfn{dérivations}. Une
4700 dérivation contient cet ensemble d'informations :
4704 Les sorties de la dérivation — les dérivations produisent au moins un
4705 fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
4708 Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
4709 fichiers dans le dépôt (correctifs, scripts de construction, etc).
4712 Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
4715 Le nom de fichier d'un script de construction dans le dépôt avec les
4716 arguments à lui passer.
4719 Une liste de variables d'environnement à définir.
4723 @cindex chemin de dérivation
4724 Les dérivations permettent aux client du démon de communiquer des actions de
4725 construction dans le dépôt. Elles existent sous deux formes : en tant que
4726 représentation en mémoire, à la fois côté client et démon, et en tant que
4727 fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
4728 des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
4729 passés à la procédure @code{build-derivations} pour effectuer les actions de
4730 construction qu'ils prescrivent (@pxref{Le dépôt}).
4732 @cindex dérivations à sortie fixe
4733 Des opérations comme le téléchargement de fichiers et la récupération de
4734 sources gérés par un logiciel de contrôle de version pour lesquels le hash
4735 du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
4736 sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
4737 dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
4738 source téléchargé produit le même résultat quelque soit la méthode de
4739 téléchargement utilisée.
4741 Le module @code{(guix derivations)} fournit une représentation des
4742 dérivations comme des objets Scheme, avec des procédures pour créer et
4743 manipuler des dérivations. La primitive de plus bas-niveau pour créer une
4744 dérivation est la procédure @code{derivation} :
4746 @deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
4747 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4748 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @ [#:system
4749 (%current-system)] [#:references-graphs #f] @
4750 [#:allowed-references #f] [#:disallowed-references #f] @
4751 [#:leaked-env-vars #f] [#:local-build? #f] @
4752 [#:substitutable? #t]
4754 Construit une dérivation avec les arguments donnés et renvie l'objet
4755 @code{<derivation>} obtenu.
4757 Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
4758 sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
4759 à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
4760 @var{recursive?} est vrai, alors la sortie fixe peut être un fichier
4761 exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
4762 contenant la sortie.
4764 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
4765 paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
4766 des références de chaque chemin du dépôt est exporté dans l'environnement de
4767 construction dans le fichier correspondant, dans un simple format texte.
4769 Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
4770 d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
4771 peut faire référence. De même, @var{disallowed-references}, si vrai, doit
4772 être une liste de choses que la sortie ne doit @emph{pas} référencer.
4774 Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
4775 chaînes de caractères qui désignent les variables d'environnements qui
4776 peuvent « fuiter » de l'environnement du démon dans l'environnement de
4777 construction. Ce n'est possible que pour les dérivations à sortie fixe —
4778 c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
4779 permettre à des variables comme @code{http_proxy} d'être passées aux
4780 dérivations qui téléchargent des fichiers.
4782 Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
4783 bon candidat pour le déchargement et devrait plutôt être construit
4784 localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
4785 dérivations où le coût du transfert de données est plus important que les
4788 Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
4789 sortie de la dérivation ne devraient pas être utilisés
4790 (@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
4791 qui utilisent des détails du jeu d'instruction du CPU hôte.
4795 Voici un exemple avec un script shell comme constructeur, en supposant que
4796 @var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
4797 exécutable Bash dans le dépôt :
4800 (use-modules (guix utils)
4804 (let ((builder ; ajoute le script Bash au dépôt
4805 (add-text-to-store store "my-builder.sh"
4806 "echo hello world > $out\n" '())))
4807 (derivation store "foo"
4808 bash `("-e" ,builder)
4809 #:inputs `((,bash) (,builder))
4810 #:env-vars '(("HOME" . "/homeless"))))
4811 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
4814 Comme on pourrait s'en douter, cette primitive est difficile à utiliser
4815 directement. Une meilleure approche est d'écrire les scripts de
4816 construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
4817 le code de construction comme une « G-expression » et de la passer à
4818 @code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
4820 Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
4821 une dérivation donc le code de construction était écrit en Scheme se faisait
4822 avec @code{build-expression->derivation}, documenté plus bas. Cette
4823 procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
4826 @deffn {Procédure Scheme} build-expression->derivation @var{store} @
4827 @var{name} @var{exp} @
4828 [#:system (%current-system)] [#:inputs '()] @
4829 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4830 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4831 [#:references-graphs #f] [#:allowed-references #f] @
4832 [#:disallowed-references #f] @
4833 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4834 Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
4835 constructeur pour la dérivation @var{name}. @var{inputs} doit être une
4836 liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
4837 omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
4838 modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
4839 compilés et rendus disponibles dans le chemin de chargement pendant
4840 l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
4841 gnu-build-system))}.
4843 @var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
4844 une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
4845 une liste de paires de chaînes de caractères et de chemin de sortie
4846 construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
4847 liste de paires de chaînes de caractères spécifiant le nom et la valeur de
4848 variables d'environnement visibles pour le constructeur. Le constructeur
4849 termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
4850 @var{exp} renvoie @code{#f}, la construction est considérée en échec.
4852 @var{exp} est construite avec @var{guile-for-build} (une dérivation).
4853 Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
4854 @code{%guile-for-build} est utilisée à la place.
4856 Voir la procédure @code{derivation} pour la signification de
4857 @var{references-graph}, @var{allowed-references},
4858 @var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
4862 Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
4866 (let ((builder '(let ((out (assoc-ref %outputs "out")))
4867 (mkdir out) ; create /gnu/store/@dots{}-goo
4868 (call-with-output-file (string-append out "/test")
4870 (display '(hello guix) p))))))
4871 (build-expression->derivation store "goo" builder))
4873 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4877 @node La monad du dépôt
4878 @section La monad du dépôt
4882 Les procédures qui travaillent sur le dépôt décrites dans les sections
4883 précédentes prennent toutes une connexion ouverte au démon de construction
4884 comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
4885 elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
4887 Le premier point est embêtant : on doit se balader avec la connexion au
4888 démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
4889 des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
4890 prennent. Le deuxième point est problématique : comme les opérations sur le
4891 dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
4892 être enchaînés correctement.
4894 @cindex valeurs monadiques
4895 @cindex fonctions monadiques
4896 C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
4897 module fournit un cadre pour travailler avec des @dfn{monads}, en
4898 particulier une monad très utile pour notre usage, la @dfn{monad du dépôt}.
4899 Les monads sont des constructions qui permettent deux choses : associer un «
4900 contexte » avec une valeur (dans notre cas, le contexte est le dépôt) et
4901 construire une séquence de calculs (ici les calculs comprennent des accès au
4902 dépôt). Les valeurs dans une monad — les valeurs qui contiennent ce
4903 contexte supplémentaire — sont appelées des @dfn{valeurs monadiques} ; les
4904 procédures qui renvoient ce genre de valeur sont appelées des
4905 @dfn{procédures monadiques}.
4907 Considérez cette procédure « normale » :
4910 (define (sh-symlink store)
4911 ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
4912 (let* ((drv (package-derivation store bash))
4913 (out (derivation->output-path drv))
4914 (sh (string-append out "/bin/bash")))
4915 (build-expression->derivation store "sh"
4916 `(symlink ,sh %output))))
4919 En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
4920 en une fonction monadique :
4923 (define (sh-symlink)
4924 ;; Pareil, mais renvoie une valeur monadique.
4925 (mlet %store-monad ((drv (package->derivation bash)))
4926 (gexp->derivation "sh"
4927 #~(symlink (string-append #$drv "/bin/bash")
4931 Il y a plusieurs choses à remarquer avec cette deuxième version : le
4932 paramètre @code{store} est maintenant implicitement « enfilé » dans les
4933 appels aux procédures monadiques @code{package->derivation} et
4934 @code{gexp->derivation}, et la valeur monadique renvoyée par
4935 @code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
4938 Il se trouve que l'appel à @code{package->derivation} peut même être omis
4939 puisqu'il aura lieu implicitement, comme nous le verrons plus tard
4940 (@pxref{G-Expressions}) :
4943 (define (sh-symlink)
4944 (gexp->derivation "sh"
4945 #~(symlink (string-append #$bash "/bin/bash")
4950 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
4951 @c for the funny quote.
4952 L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
4953 anglais on pourrait dire « you exit a monad like you exit a building on
4954 fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble
4955 en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir
4956 et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
4957 la monad et obtenir l'effet escompté, on doit utiliser
4958 @code{run-with-store}.
4961 (run-with-store (open-connection) (sh-symlink))
4962 @result{} /gnu/store/...-sh-symlink
4965 Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
4966 de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
4967 procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
4968 première est utilisée pour « lancer » une seule valeur monadique à travers
4972 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4973 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4976 La deuxième entre dans une console récursive, où toutes les valeurs de
4977 retour sont automatiquement lancées à travers le dépôt :
4980 scheme@@(guile-user)> ,enter-store-monad
4981 store-monad@@(guile-user) [1]> (package->derivation hello)
4982 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4983 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4984 $3 = "/gnu/store/@dots{}-foo"
4985 store-monad@@(guile-user) [1]> ,q
4986 scheme@@(guile-user)>
4990 Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
4993 Les formes syntaxiques principales pour utiliser des monads en général sont
4994 disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
4996 @deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
4997 Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
4998 comme une @var{monad}.
5001 @deffn {Syntaxe Scheme} return @var{val}
5002 Renvoie une valeur monadique qui encapsule @var{val}.
5005 @deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
5006 @dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
5007 procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
5008 souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
5009 voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
5010 langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
5015 (with-monad %state-monad
5017 (lambda (x) (return (+ 1 x)))
5018 (lambda (x) (return (* 2 x)))))
5022 @result{} some-state
5026 @deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
5028 @deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
5030 Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
5031 @var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
5032 on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
5033 » dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
5034 cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
5035 (@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
5036 comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
5037 vers la droite. La dernière expression de @var{body} doit être une
5038 expression monadique et son résultat deviendra le résultat de @code{mlet} ou
5039 @code{mlet*} lorsque lancé dans la @var{monad}.
5041 @code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
5042 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
5045 @deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
5046 Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
5047 renvoie le résultat de la dernière expression. Chaque expression dans la
5048 séquence doit être une expression monadique.
5050 Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
5051 des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
5052 @code{begin}, mais appliqué à des expressions monadiques.
5055 @deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
5056 Lorsque la @var{condition} est vraie, évalue la séquence des expressions
5057 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5058 @var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
5059 actuelle. Cahque expression dans la séquence doit être une expression
5063 @deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
5064 Lorsque la @var{condition} est fausse, évalue la séquence des expressions
5065 monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
5066 @var{condition} est vraie, renvoie @code{*unspecified*} dans la monad
5067 actuelle. Cahque expression dans la séquence doit être une expression
5071 @cindex monad d'état
5072 Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à
5073 une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
5076 @defvr {Variable Scheme} %state-monad
5077 La monad d'état. les procédure dans la monad d'état peuvent accéder et
5078 modifier l'état qui est enfilé.
5080 Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
5081 valeur dans la monad d'état. Elle renvoie le carré de son argument, mais
5082 incrémente aussi la valeur actuelle de l'état :
5086 (mlet %state-monad ((count (current-state)))
5087 (mbegin %state-monad
5088 (set-current-state (+ 1 count))
5091 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
5096 Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
5097 d'état supplémentaire, qui est le nombre d'appels à @code{square}.
5100 @deffn {Procédure Monadic} current-state
5101 Renvoie l'état actuel dans une valeur monadique.
5104 @deffn {Procédure Monadic} set-current-state @var{value}
5105 Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
5109 @deffn {Procédure Monadic} state-push @var{value}
5110 Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
5111 renvoie l'état précédent dans une valeur monadique.
5114 @deffn {Procédure Monadic} state-pop
5115 Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
5116 monadique. L'état est supposé être une liste.
5119 @deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
5120 Lance la valeur monadique @var{mval} avec @var{state} comme valeur
5121 initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
5125 L'interface principale avec la monad du dépôt, fournit par le module
5126 @code{(guix store)}, est la suivante.
5128 @defvr {Variable Scheme} %store-monad
5129 La monad du dépôt — un alias pour @var{%state-monad}.
5131 Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque
5132 son effet est requis, une valeur de la monad du dépôt doit être « évaluée »
5133 en la passant à la procédure @code{run-with-store} (voir plus bas).
5136 @deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
5137 Lance @var{mval}, une valeur monadique dans la monad du dépôt, dans
5138 @var{store}, une connexion ouvert au dépôt.
5141 @deffn {Procédure Monadique} text-file @var{name} @var{text} [@var{references}]
5142 Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
5143 du fichier contenant @var{text}, une chaîne de caractères. @var{references}
5144 est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
5145 réfère ; c'est la liste vide par défaut.
5148 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
5149 Return as a monadic value the absolute file name in the store of the file
5150 containing @var{data}, a bytevector. @var{references} is a list of store
5151 items that the resulting binary file refers to; it defaults to the empty
5155 @deffn {Procédure Monadique} interned-file @var{file} [@var{name}] @
5156 [#:recursive? #t] [#:select? (const #t)]
5157 Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
5158 comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
5161 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
5162 récursivement ; si @var{file} désigne un fichier simple et que
5163 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
5166 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
5167 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
5168 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
5169 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
5171 L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
5174 (run-with-store (open-connection)
5175 (mlet %store-monad ((a (interned-file "README"))
5176 (b (interned-file "README" "LEGU-MIN")))
5177 (return (list a b))))
5179 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
5184 Le module @code{(guix packages)} exporte les procédures monadiques liées aux
5187 @deffn {Procédure Monadique} package-file @var{package} [@var{file}] @
5188 [#:system (%current-system)] [#:target #f] @
5190 Renvoie une valeur monadique qui contient le nom de fichier absolu de
5191 @var{file} dans le répertoire @var{output} de @var{package}. Lorsque
5192 @var{file} est omis, renvoie le nom du répertoire @var{output} de
5193 @var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
5194 cible pour la compilation croisée.
5197 @deffn {Procédure Monadique} package->derivation @var{package} [@var{system}]
5198 @deffnx {Procédure Monadique} package->cross-derivation @var{package} @
5199 @var{target} [@var{system}]
5200 Version monadique de @code{package-derivation} et
5201 @code{package-cross-derivation} (@pxref{Définition des paquets}).
5206 @section G-Expressions
5208 @cindex G-expression
5209 @cindex quoting du code de construction
5210 On a donc des « dérivations » qui représentent une séquence d'actions de
5211 construction à effectuer pour produire un élément du dépôt
5212 (@pxref{Dérivations}). Ces actions de construction sont effectuées
5213 lorsqu'on demande au démon de construire effectivement les dérivations ;
5214 elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
5216 @cindex strate de code
5217 Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
5218 construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
5219 de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
5220 par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
5221 sur Hop. Oleg Kiselyov, qui a écrit des
5222 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
5223 et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
5224 genre de génération de code.} : le « code hôte » — le code qui défini les
5225 paquets, parle au démon, etc — et le « code côté construction » — le code
5226 qui effectue effectivement les actions de construction, comme créer des
5227 répertoires, invoquer @code{make}, etc.
5229 Pour décrire une dérivation et ses actions de construction, on a typiquement
5230 besoin d'intégrer le code de construction dans le code hôte. Ça revient à
5231 manipuler le code de construction comme de la donnée, et l'homoiconicité de
5232 Scheme — le code a une représentation directe en tant que donnée — est très
5233 utile pour cela. Mais on a besoin de plus que le mécanisme de
5234 @code{quasiquote} en Scheme pour construire des expressions de construction.
5236 Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
5237 de S-expression adaptée aux expressions de construction. Les G-expression,
5238 ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
5239 @code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
5240 @code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
5241 @code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
5242 (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
5243 Manual}). Cependant il y a des différences majeures :
5247 Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
5248 manipulées par d'autres processus.
5251 Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
5252 unquotée dans une gexp, le résultat est comme si le nom de fichier de son
5253 résultat avait été introduit.
5256 Les gexps transportent des informatinos sur les paquets ou les dérivations
5257 auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
5258 comme des entrées du processus de construction qui les utilise.
5261 @cindex abaissement, des objets haut-niveau dans les gepxs
5262 Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
5263 définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
5264 haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
5265 aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
5266 utiles qui pourraient être insérées dans une gexp sont les « objets
5267 simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
5268 les références vers eux dans les dérivations et autres (voir
5269 @code{local-file} et @code{plain-file} ci-dessous).
5271 Pour illustrer cette idée, voici un exemple de gexp :
5278 (symlink (string-append #$coreutils "/bin/ls")
5282 Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
5283 dérivation qui construit une répertoire contenant exactement un lien
5284 symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
5287 (gexp->derivation "the-thing" build-exp)
5290 Comme on pourrait s'y attendre, la chaîne
5291 @code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
5292 référence au paquet @var{coreutils} dans le code de construction final, et
5293 @var{coreutils} est automatiquement devenu une entrée de la dérivation. De
5294 même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
5295 une chaîne de caractères contenant le nom du répertoire de la sortie de la
5298 @cindex compilation croisée
5299 Dans le contexte d'une compilation croisée, il est utile de distinguer entre
5300 des références à la construction @emph{native} d'un paquet — qui peut être
5301 lancé par l'hôte — et des références à la construction croisée d'un paquet.
5302 Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
5303 construction native d'un paquet :
5306 (gexp->derivation "vi"
5309 (system* (string-append #+coreutils "/bin/ln")
5311 (string-append #$emacs "/bin/emacs")
5312 (string-append #$output "/bin/vi")))
5313 #:target "mips64el-linux-gnu")
5317 Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
5318 utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
5319 mais ensuite la construction croisée d'@var{emacs} est utilisée.
5321 @cindex modules importés, pour les gexps
5322 @findex with-imported-modules
5323 Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
5324 voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
5325 dans la gexp, donc ces modules devraient être importés dans «
5326 l'environnement de construction ». La forme @code{with-imported-modules}
5327 vous permet d'exprimer ça :
5330 (let ((build (with-imported-modules '((guix build utils))
5332 (use-modules (guix build utils))
5333 (mkdir-p (string-append #$output "/bin"))))))
5334 (gexp->derivation "empty-dir"
5337 (display "success!\n")
5342 Dans cet exemple, le module @code{(guix build utils)} est automatiquement
5343 récupéré dans l'environnement de construction isolé de notre gexp, pour que
5344 @code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
5346 @cindex closure de module
5347 @findex source-module-closure
5348 Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
5349 importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
5350 plutôt que seulement le module ; sinon, une tentative de chargement du
5351 module échouera à cause des modules dépendants manquants. La procédure
5352 @code{source-module-closure} calcule la closure d'un module en cherchant
5353 dans ses en-têtes sources, ce qui est pratique dans ce cas :
5356 (use-modules (guix modules)) ;pour 'source-module-closure'
5358 (with-imported-modules (source-module-closure
5359 '((guix build utils)
5361 (gexp->derivation "something-with-vms"
5363 (use-modules (guix build utils)
5368 @cindex extensions, des gexps
5369 @findex with-extensions
5370 Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
5371 modules en Scheme pur, mais aussi des « extensions » comme des liaisons
5372 Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
5373 voulez utiliser le paquet @code{guile-json} du côté de la construction,
5374 voici comme procéder :
5377 (use-modules (gnu packages guile)) ;pour 'guile-json'
5379 (with-extensions (list guile-json)
5380 (gexp->derivation "something-with-json"
5382 (use-modules (json))
5386 La forme syntaxique pour construire des gexps est résumée ci-dessous.
5388 @deffn {Syntaxe Scheme} #~@var{exp}
5389 @deffnx {Syntaxe Scheme} (gexp @var{exp})
5390 Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
5391 ou plusieurs de ces formes :
5395 @itemx (ungexp @var{obj})
5396 Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
5397 supportés, par exemple un paquet ou une dérivation, auquel cas la forme
5398 @code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
5399 @code{"/gnu/store/@dots{}-coreutils-8.22}.
5401 Si @var{boj} est une liste, elle est traversée et les références aux objets
5402 supportés sont substitués de manière similaire.
5404 Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
5405 sont ajoutées à celle de la gexp qui l'entoure.
5407 Si @var{obj} est un autre type d'objet, il est inséré tel quel.
5409 @item #$@var{obj}:@var{output}
5410 @itemx (ungexp @var{obj} @var{output})
5411 Cette forme est similaire à la précédente, mais se réfère explicitement à la
5412 sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
5413 produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
5416 @itemx #+@var{obj}:output
5417 @itemx (ungexp-native @var{obj})
5418 @itemx (ungexp-native @var{obj} @var{output})
5419 Comme @code{ungexp}, mais produit une référence à la construction
5420 @emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
5423 @item #$output[:@var{output}]
5424 @itemx (ungexp output [@var{output}])
5425 Insère une référence à la sortie @var{output} de la dérivation, ou à la
5426 sortie principale lorsque @var{output} est omis.
5428 Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
5431 @itemx (ungexp-splicing @var{lst})
5432 Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
5433 liste qui la contient.
5436 @itemx (ungexp-native-splicing @var{lst})
5437 Comme au dessus, mais se réfère à la construction native des objets listés
5442 Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
5443 l'exécution du type @code{gexp?} (voir plus bas).
5446 @deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
5447 Marque les gexps définies dans @var{body}@dots{} comme requérant
5448 @var{modules} dans leur environnement d'exécution.
5450 Chaque élément dans @var{module} peut être le nom d'un module, comme
5451 @code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
5452 d'un objet simili-fichier :
5455 `((guix build utils)
5457 ((guix config) => ,(scheme-file "config.scm"
5458 #~(define-module @dots{}))))
5462 Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
5463 chemin de recherche, et le dernier est créé à partir d'un objet
5466 Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
5467 directement définies dans @var{body}@dots{}, mais pas sur celles définies
5468 dans des procédures appelées par @var{body}@dots{}.
5471 @deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
5472 Marque les gexps définies dans @var{body}@dots{} comme requérant
5473 @var{extensions} dans leur environnement de construction et d'exécution.
5474 @var{extensions} est typiquement une liste d'objets paquets comme définis
5475 dans le module @code{(gnu packages guile)}.
5477 Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
5478 chemin de chargement lors de la compilation des modules importés dans
5479 @var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
5480 gexp renvoyée par @var{body}@dots{}.
5483 @deffn {Procédure Scheme} gexp? @var{obj}
5484 Renvoie @code{#t} si @var{obj} est une G-expression.
5487 Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
5488 que code pour construire une dérivation, soit en tant que fichier normal
5489 dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
5490 cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
5492 @deffn {Procédure Monadique} gexp->derivation @var{name} @var{exp} @
5493 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
5494 [#:hash #f] [#:hash-algo #f] @
5495 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5496 [#:module-path @var{%load-path}] @
5497 [#:effective-version "2.2"] @
5498 [#:references-graphs #f] [#:allowed-references #f] @
5499 [#:disallowed-references #f] @
5500 [#:leaked-env-vars #f] @
5501 [#:script-name (string-append @var{name} "-builder")] @
5502 [#:deprecation-warnings #f] @
5503 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
5504 Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
5505 @var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
5506 stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
5507 vraie, elle est utilisée comme triplet de cible de compilation croisée pour
5508 les paquets référencés par @var{exp}.
5510 @var{modules} est devenu obsolète en faveur de
5511 @code{with-imported-modules}. Sa signification est de rendre @var{modules}
5512 disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
5513 une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
5514 pour les copier dans le dépôt, les compiler et les rendre disponibles dans
5515 le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
5516 @code{((guix build utils) (guix build gnu-build-system))}.
5518 @var{effective-version} détermine la chaîne à utiliser lors d'ajout
5519 d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
5520 recherche — p.@: ex.@: @code{"2.2"}.
5522 @var{graft?} détermine si les paquets référencés par @var{exp} devraient
5523 être greffés si possible.
5525 Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
5526 tuples de la forme suivante :
5529 (@var{file-name} @var{package})
5530 (@var{file-name} @var{package} @var{output})
5531 (@var{file-name} @var{derivation})
5532 (@var{file-name} @var{derivation} @var{output})
5533 (@var{file-name} @var{store-item})
5536 La partie droite des éléments de @var{references-graphs} est automatiquement
5537 transformée en une entrée du processus de construction @var{exp}. Dans
5538 l'environnement de construction, chaque @var{file-name} contient le graphe
5539 des références de l'élément correspondant, dans un format texte simple.
5541 @var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
5542 sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
5543 dépôt auxquels le résultat a le droit de faire référence. Toute référence à
5544 un autre élément du dépôt conduira à une erreur à la construction. Comme
5545 pour @var{disallowed-references}, qui peut lister des éléments qui ne
5546 doivent pas être référencés par les sorties.
5548 @var{deprecation-warnings} détermine s'il faut afficher les avertissement
5549 d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
5550 @code{t} ou @code{'detailed}.
5552 Les autres arguments sont les mêmes que pour @code{derivation}
5553 (@pxref{Dérivations}).
5556 @cindex objets simili-fichiers
5557 Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
5558 @code{program-file} et @code{scheme-file} ci-dessous renvoient des
5559 @dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
5560 une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
5561 cette G-expression :
5564 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
5565 #$(local-file "/tmp/my-nscd.conf"))
5568 Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
5569 dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
5570 G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
5571 modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
5572 fait la G-expression. @code{plain-file} peut être utilisé de la même
5573 manière ; elle est seulement différente par le fait que le contenu du
5574 fichier est passé directement par une chaîne de caractères.
5576 @deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
5577 [#:recursive? #f] [#:select? (const #t)]
5578 Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
5579 ; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
5580 fichier relatif, il est récupéré à partir de la position du fichier source
5581 dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
5582 @var{name} — par défaut le nom de base de @var{file}.
5584 Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
5585 récursivement ; si @var{file} désigne un fichier simple et que
5586 @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
5589 Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
5590 @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
5591 absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
5592 l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
5594 C'est la version déclarative de la procédure monadique @code{interned-file}
5595 (@pxref{La monad du dépôt, @code{interned-file}}).
5598 @deffn {Procédure Scheme} plain-file @var{name} @var{content}
5599 Return an object representing a text file called @var{name} with the given
5600 @var{content} (a string or a bytevector) to be added to the store.
5602 C'est la version déclarative de @code{text-file}.
5605 @deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
5606 [#:options '(#:local-build? #t)]
5607 Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
5608 un répertoire calculé par @var{gexp}. @var{options} est une liste
5609 d'arguments supplémentaires à passer à @code{gexp->derivation}.
5611 C'est la version déclarative de @code{gexp->derivation}.
5614 @deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
5615 [#:guile (default-guile)] [#:module-path %load-path]
5616 Renvoie un script exécutable @var{name} qui lance @var{exp} avec
5617 @var{guile}, avec les modules importés de @var{exp} dans son chemin de
5618 recherche. Cherche les modules de @var{exp} dans @var{module-path}.
5620 L'exemple ci-dessous construit un script qui invoque simplement la commande
5624 (use-modules (guix gexp) (gnu packages base))
5626 (gexp->script "list-files"
5627 #~(execl #$(file-append coreutils "/bin/ls")
5631 Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
5632 @code{run-with-store}}), on obtient une dérivation qui produit une fichier
5633 exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
5636 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
5638 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
5642 @deffn {Procédure Scheme} program-file @var{name} @var{exp} @
5643 [#:guile #f] [#:module-path %load-path]
5644 Renvoie un objet représentant un élément du dépôt @var{name} qui lance
5645 @var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
5646 script. Les modules importés par @var{gexp} sont recherchés dans
5649 C'est la version déclarative de @code{gexp->script}.
5652 @deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
5653 [#:set-load-path? #t] [#:module-path %load-path] @
5655 [#:guile (default-guile)]
5656 Renvoie une dérivation qui construit un fichier @var{name} contenant
5657 @var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
5658 une liste d'expressions qui seront splicée dans le fichier qui en résulte.
5660 Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
5661 résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
5662 pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
5663 sont trouvés dans @var{module-path}.
5665 Le fichier qui en résulte retient les références à toutes les dépendances de
5666 @var{exp} ou un sous-ensemble.
5669 @deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
5670 Renvoie un objet représentant le fichier Scheme @var{name} qui contient
5673 C'est la version déclarative de @code{gexp->file}.
5676 @deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
5677 Renvoie une valeur monadique qui construit un ficher texte contenant
5678 @var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
5679 objet de n'importe quel type qui peut être utilisé dans une gexp : des
5680 paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
5681 dépôt qui en résulte en retient toutes les références.
5683 Cette variante devrait être préférée à @code{text-file} lorsque vous
5684 souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
5685 typiquement lorsque vous construisez un fichier de configuration qui
5686 contient des noms de fichiers du dépôt, comme ceci :
5689 (define (profile.sh)
5690 ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
5691 ;; la variable d'environnement « PATH ».
5692 (text-file* "profile.sh"
5693 "export PATH=" coreutils "/bin:"
5694 grep "/bin:" sed "/bin\n"))
5697 Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
5698 résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
5699 empêche d'être glanés tant que le script est accessible.
5702 @deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
5703 Renvoie un objet représentant le fichier du dépôt @var{name} contenant
5704 @var{text}. @var{text} est une séquence de chaînes de caractères et de
5705 fichiers simili-objets, comme dans :
5708 (mixed-text-file "profile"
5709 "export PATH=" coreutils "/bin:" grep "/bin")
5712 C'est la version déclarative de @code{text-file*}.
5715 @deffn {Procédure Scheme} file-union @var{name} @var{files}
5716 Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
5717 tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
5718 une paire où le premier élément est le nom de fichier à utiliser dans le
5719 nouveau répertoire et le second élément est une gexp dénotant le fichier
5720 cible. Voici un exemple :
5724 `(("hosts" ,(plain-file "hosts"
5725 "127.0.0.1 localhost"))
5726 ("bashrc" ,(plain-file "bashrc"
5727 "alias ls='ls --color=auto'"))))
5730 Cela crée un répertoire @code{etc} contenant ces deux fichiers.
5733 @deffn {Procédure Scheme} directory-union @var{name} @var{things}
5734 Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
5735 une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
5739 (directory-union "guile+emacs" (list guile emacs))
5742 crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
5745 @deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
5746 Renvoie un objet simili-fichier qui correspond à la concaténation de
5747 @var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
5748 @var{suffix} est une chaîne de caractères.
5750 Par exemple, considérez cette gexp :
5753 (gexp->script "run-uname"
5754 #~(system* #$(file-append coreutils
5758 On peut obtenir le même effet avec :
5761 (gexp->script "run-uname"
5762 #~(system* (string-append #$coreutils
5766 Il y a une différence cependant : dans le cas @code{file-append}, le script
5767 qui en résulte contient le nom de fichier absolu comme une chaîne de
5768 caractère alors que dans le deuxième cas, le script contient une expression
5769 @code{(string-append @dots{})} pour construire le nom de fichier @emph{à
5774 Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
5775 contiennent des outils de construction. Pour savoir facilement qu'ils sont
5776 à utiliser dans la strate de construction, ces modules sont gardés dans
5777 l'espace de nom @code{(guix build @dots{})}.
5779 @cindex abaissement, des objets haut-niveau dans les gepxs
5780 En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
5781 compilateur, soit en des dérivations, soit en des objets du dépôt. Par
5782 exemple, abaisser un paquet crée une dérivation, et abaisser un
5783 @code{plain-file} crée un élément du dépôt. Cela est effectué par la
5784 procédure monadique @code{lower-object}.
5786 @deffn {Procédure Monadique} lower-object @var{obj} [@var{system}] @
5788 Renvoie la dérivation ou l'élément du dépôt comme une valeur de
5789 @var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
5790 compilant de manière croisée pour @var{target} si @var{target} est vrai.
5791 @var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
5795 @node Invoking guix repl
5796 @section Invoking @command{guix repl}
5798 @cindex REPL, read-eval-print loop
5799 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
5800 (REPL) for interactive programming (@pxref{Using Guile Interactively,,,
5801 guile, GNU Guile Reference Manual}). Compared to just launching the
5802 @command{guile} command, @command{guix repl} guarantees that all the Guix
5803 modules and all its dependencies are available in the search path. You can
5808 scheme@@(guile-user)> ,use (gnu packages base)
5809 scheme@@(guile-user)> coreutils
5810 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
5814 In addition, @command{guix repl} implements a simple machine-readable REPL
5815 protocol for use by @code{(guix inferior)}, a facility to interact with
5816 @dfn{inferiors}, separate processes running a potentially different revision
5819 The available options are as follows:
5822 @item --type=@var{type}
5823 @itemx -t @var{type}
5824 Start a REPL of the given @var{TYPE}, which can be one of the following:
5828 This is default, and it spawns a standard full-featured Guile REPL.
5830 Spawn a REPL that uses the machine-readable protocol. This is the protocol
5831 that the @code{(guix inferior)} module speaks.
5834 @item --listen=@var{extrémité}
5835 By default, @command{guix repl} reads from standard input and writes to
5836 standard output. When this option is passed, it will instead listen for
5837 connections on @var{endpoint}. Here are examples of valid options:
5840 @item --listen=tcp:37146
5841 Accept connections on localhost on port 37146.
5843 @item --listen=unix:/tmp/socket
5844 Accept connections on the Unix-domain socket @file{/tmp/socket}.
5848 @c *********************************************************************
5850 @chapter Utilitaires
5852 cette section décrit les utilitaires en ligne de commande de Guix. certains
5853 sont surtout faits pour les développeurs qui écrivent de nouvelles
5854 définitions de paquets tandis que d'autres sont plus utiles pour une
5855 utilisation générale. Ils complètent l'interface de programmation Scheme de
5856 Guix d'une manière pratique.
5859 * Invoquer guix build:: Construire des paquets depuis la ligne de
5861 * Invoquer guix edit:: Modifier les définitions de paquets.
5862 * Invoquer guix download:: Télécharger un fichier et afficher son hash.
5863 * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
5864 * Invoquer guix import:: Importer des définitions de paquets.
5865 * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
5866 * Invoquer guix lint:: Trouver des erreurs dans les définitions de
5868 * Invoquer guix size:: Profiler l'utilisation du disque.
5869 * Invoquer guix graph:: Visualiser le graphe des paquets.
5870 * Invoquer guix environment:: Mettre en place des environnements de
5872 * Invoquer guix publish:: Partager des substituts.
5873 * Invoquer guix challenge:: Défier les serveurs de substituts.
5874 * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
5875 * Invoquer guix container:: Isolation de processus.
5876 * Invoquer guix weather:: Mesurer la disponibilité des substituts.
5879 @node Invoquer guix build
5880 @section Invoquer @command{guix build}
5882 @cindex construction de paquets
5883 @cindex @command{guix build}
5884 La commande @command{guix build} construit des paquets ou des dérivations et
5885 leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
5886 qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
5887 commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
5888 elle est surtout utile pour les développeurs de la distribution.
5890 La syntaxe générale est :
5893 guix build @var{options} @var{package-or-derivation}@dots{}
5896 Par exemple, la commande suivante construit la dernière version d'Emacs et
5897 de Guile, affiche leur journaux de construction et enfin affiche les
5898 répertoires des résultats :
5901 guix build emacs guile
5904 De même, la commande suivante construit tous les paquets disponibles :
5907 guix build --quiet --keep-going \
5908 `guix package -A | cut -f1,2 --output-delimiter=@@`
5911 @var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
5912 distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
5913 soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
5914 Dans le premier cas, la commande cherchera un paquet avec le nom
5915 correspondant (et éventuellement la version) dans les modules de la
5916 distribution GNU (@pxref{Modules de paquets}).
5918 Autrement, l'option @code{--expression} peut être utilisée pour spécifier
5919 une expression Scheme qui s'évalue en un paquet ; c'est utile pour
5920 différencier des paquets avec le même nom ou des variantes de paquets.
5922 Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
5923 disponibles sont décrites dans les sous-sections ci-dessous.
5926 * Options de construction communes:: Options de construction pour la
5927 plupart des commandes.
5928 * Options de transformation de paquets:: Créer des variantes de paquets.
5929 * Options de construction supplémentaires:: Options spécifiques à «
5931 * Débogage des échecs de construction:: La vie d'un empaqueteur.
5934 @node Options de construction communes
5935 @subsection Options de construction communes
5937 Un certain nombre d'options qui contrôlent le processus de construction sont
5938 communes avec @command{guix build} et les autres commandes qui peuvent
5939 générer des constructions, comme @command{guix package} ou @command{guix
5940 archive}. Voici ces options :
5944 @item --load-path=@var{répertoire}
5945 @itemx -L @var{répertoire}
5946 Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
5947 (@pxref{Modules de paquets}).
5949 Cela permet à des utilisateurs de définir leur propres paquets et les rendre
5950 disponibles aux outils en ligne de commande.
5954 Garde l'arborescence de construction des constructions en échec. Ainsi, si
5955 une construction échoue, son arborescence de construction est préservée dans
5956 @file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
5957 de construction. Cela est utile pour déboguer des échecs de construction.
5958 @xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
5959 des problèmes de construction.
5963 Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
5964 toutes les constructions ont soit réussies, soit échouées.
5966 Le comportement par défaut est de s'arrêter dès qu'une des dérivations
5971 Ne pas construire les dérivations.
5973 @anchor{option de repli}
5975 Lorsque la substitution d'un binaire pré-compilé échoue, construit les
5976 paquets localement à la place (@pxref{Échec de substitution}).
5978 @item --substitute-urls=@var{urls}
5979 @anchor{client-substitute-urls}
5980 Considère @var{urls} comme une liste d'URL de sources de substituts séparés
5981 par des espaces, et remplace la liste par défaut d'URL de
5982 @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
5985 Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
5986 tant qu'ils sont signés par une clef autorisée par l'administrateur système
5987 (@pxref{Substituts}).
5989 Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
5992 @item --no-substitutes
5993 Ne pas utiliser de substitut pour les résultats de la construction.
5994 C'est-à-dire, toujours construire localement plutôt que de permettre le
5995 téléchargement de binaires pré-construits (@pxref{Substituts}).
5998 Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
5999 jour des paquets disponibles comme des greffes ne sont pas appliquées.
6000 @xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
6002 @item --rounds=@var{n}
6003 Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
6004 les constructions consécutives ne sont pas identiques bit-à-bit.
6006 Cela est une manière utile pour détecter des processus de construction non
6007 déterministes. Les processus de construction non déterministes sont
6008 problématiques car ils rendent pratiquement impossible la
6009 @emph{vérification} par les utilisateurs de l'authenticité de binaires
6010 tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
6012 Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
6013 devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
6014 résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
6015 puis en reconstruisant, et enfin en comparant les deux résultats.
6017 @item --no-build-hook
6018 N'essaye pas de décharger les constructions via le « crochet de construction
6019 » du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
6020 construit localement plutôt que de décharger les constructions à une machine
6023 @item --max-silent-time=@var{secondes}
6024 Lorsque le processus de construction ou de substitution restent silencieux
6025 pendant plus de @var{secondes}, le terminer et rapporter une erreur de
6028 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
6030 @item --timeout=@var{secondes}
6031 De même, lorsque le processus de construction ou de substitution dure plus
6032 de @var{secondes}, le terminer et rapporter une erreur de construction.
6034 Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
6036 @item --verbosity=@var{level}
6037 Utilise le niveau de verbosité donné. @var{level} doit être un entier entre
6038 0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le
6039 mettre à 4 ou plus peut être utile pour déboguer des problèmes de
6040 configuration du démon de construction.
6042 @item --cores=@var{n}
6044 Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
6045 valeur spéciale @code{0} signifie autant de cœurs que possible.
6047 @item --max-jobs=@var{n}
6049 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
6050 l'option équivalente pour @command{guix-daemon}.
6054 Sous le capot, @command{guix build} est surtout un interface à la procédure
6055 @code{package-derivation} du module @code{(guix packages)}, et à la
6056 procédure @code{build-derivations} du module @code{(guix derivations)}.
6058 En plus des options passées explicitement par la ligne de commande,
6059 @command{guix build} et les autres commande @command{guix} qui peuvent
6060 effectuer des construction honorent la variable d'environnement
6061 @code{GUIX_BUILD_OPTIONS}.
6063 @defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
6064 Les utilisateurs peuvent définir cette variable à une liste d'options de la
6065 ligne de commande qui seront automatiquement utilisées par @command{guix
6066 build} et les autres commandes @command{guix} qui peuvent effectuer des
6067 constructions, comme dans l'exemple suivant :
6070 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
6073 Ces options sont analysées indépendamment, et le résultat est ajouté aux
6074 options de la ligne de commande analysées.
6078 @node Options de transformation de paquets
6079 @subsection Options de transformation de paquets
6081 @cindex variantes de paquets
6082 Un autre ensemble d'options de la ligne de commande supportés par
6083 @command{guix build} et aussi @command{guix package} sont les @dfn{options
6084 de transformation de paquets}. Ce sont des options qui rendent possible la
6085 définition de @dfn{variantes de paquets} — par exemple, des paquets
6086 construit à partir de sources différentes. C'est une manière simple de
6087 créer des paquets personnalisés à la volée sans avoir à taper les
6088 définitions de variantes de paquets (@pxref{Définition des paquets}).
6092 @item --with-source=@var{source}
6093 @itemx --with-source=@var{paquet}=@var{source}
6094 @itemx --with-source=@var{paquet}@@@var{version}=@var{source}
6095 Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
6096 son numéro de version. @var{source} doit être un nom de fichier ou une URL,
6097 comme pour @command{guix download} (@pxref{Invoquer guix download}).
6099 Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
6100 spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
6101 @code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
6103 De même, lorsque @var{version} est omis, la chaîne de version est inférée à
6104 partir de @var{source} ; dans l'exemple précédent, il s'agit de
6107 Cette option permet aux utilisateurs d'essayer des version des paquets
6108 différentes de celles fournies par la distribution. L'exemple ci-dessous
6109 télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
6110 source pour le paquet @code{ed} :
6113 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
6116 En tant que développeur, @code{--with-source} permet de tester facilement
6120 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
6123 @dots{} ou pour construire un dépôt de gestion de version dans un
6124 environnement vierge :
6127 $ git clone git://git.sv.gnu.org/guix.git
6128 $ guix build guix --with-source=guix@@1.0=./guix
6131 @item --with-input=@var{paquet}=@var{remplaçant}
6132 Remplace la dépendance sur @var{paquet} par une dépendance à
6133 @var{remplaçant}. @var{paquet} doit être un nom de paquet et
6134 @var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
6137 Par exemple, la commande suivante construit Guix, mais remplace sa
6138 dépendance à la version stable actuelle de Guile par une dépendance à une
6139 ancienne version de Guile, @code{guile@@2.0} :
6142 guix build --with-input=guile=guile@@2.0 guix
6145 C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
6146 @code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
6147 @code{guile}) sont reconstruits avec @code{guile@@2.0}.
6149 Cette option est implémentée avec la procédure Scheme
6150 @code{package-input-rewriting} (@pxref{Définition des paquets,
6151 @code{package-input-rewriting}}).
6153 @item --with-graft=@var{paquet}=@var{remplaçant}
6154 Cette option est similaire à @code{--with-input} mais avec une différence
6155 importante : plutôt que de reconstruire la chaîne de dépendance complète,
6156 @var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
6157 référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
6158 d'information sur les greffes.
6160 Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
6161 Wget et toutes ses dépendances, en remplaçant les références à la version
6162 actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
6165 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
6168 Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
6169 y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
6170 sont strictement compatibles — par exemple, s'ils fournissent une
6171 bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
6172 doivent être compatibles. Si @var{remplaçant} est incompatible avec
6173 @var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
6174 utilisez avec précaution !
6178 @node Options de construction supplémentaires
6179 @subsection Options de construction supplémentaires
6181 Les options de la ligne de commande ci-dessous sont spécifiques à
6182 @command{guix build}.
6188 Construire en silence, sans afficher les journaux de construction. À la
6189 fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
6190 on peut toujours l'y trouver avec l'option @option{--log-file}.
6192 @item --file=@var{fichier}
6193 @itemx -f @var{fichier}
6195 Construit le paquet ou la dérivation en lequel le code dans @var{file}
6198 Par exemple, @var{file} peut contenir une définition de paquet comme ceci
6199 (@pxref{Définition des paquets}) :
6202 @verbatiminclude package-hello.scm
6205 @item --expression=@var{expr}
6206 @itemx -e @var{expr}
6207 Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
6209 Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
6210 guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
6211 version 1.8 de Guile.
6213 Autrement, @var{exp} peut être une G-expression, auquel cas elle est
6214 utilisée comme un programme de construction passé à @code{gexp->derivation}
6215 (@pxref{G-Expressions}).
6217 Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
6218 argument (@pxref{La monad du dépôt}). La procédure doit renvoyer une
6219 dérivation comme une valeur monadique, qui est ensuite lancée à travers
6220 @code{run-with-store}.
6224 Construit les dérivation source des paquets, plutôt que des paquets
6227 Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
6228 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
6231 L'archive des sources renvoyée est le résultat de l'application des
6232 correctifs et des extraits de code éventuels spécifiés dans le champ
6233 @code{origin} du paquet (@pxref{Définition des paquets}).
6236 Récupère et renvoie la source de @var{package-or-derivation} et toute ses
6237 dépendances, récursivement. C'est pratique pour obtenir une copie locale de
6238 tous les codes sources requis pour construire @var{packages}, ce qui vous
6239 permet de les construire plus tard même sans accès réseau. C'est une
6240 extension de l'option @code{--source} et peut accepter l'un des arguments
6241 facultatifs suivants :
6245 Cette valeur fait que l'option @code{--sources} se comporte comme l'option
6249 Construit les dérivations des sources de tous les paquets, dont les sources
6250 qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
6253 $ guix build --sources tzdata
6254 The following derivations will be built:
6255 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
6256 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6260 Construit les dérivations des sources de tous les paquets, ainsi que toutes
6261 celles les entrées transitives des paquets. On peut utiliser cette option
6262 pour précharger les sources des paquets pour les construire plus tard hors
6266 $ guix build --sources=transitive tzdata
6267 The following derivations will be built:
6268 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6269 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
6270 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
6271 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
6272 /gnu/store/@dots{}-make-4.1.tar.xz.drv
6273 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
6279 @item --system=@var{système}
6280 @itemx -s @var{système}
6281 Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
6282 plutôt que pour le type de système de l'hôte de construction.
6285 Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
6286 ne doit pas être confondu avec une compilation croisée. Voir
6287 @code{--target} ci-dessous pour des informations sur la compilation croisée.
6290 Par exemple, passer @code{--system=i686-linux} sur un système
6291 @code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
6292 @code{aarch64-linux} vous permet de construire des paquets dans un
6293 environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
6294 option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
6297 La possibilité de construire pour un système @code{armhf-linux} est activé
6298 sans condition sur les machines @code{aarch64-linux}, bien que certaines
6299 puces aarch64 n'en soient pas capables, comme les ThunderX.
6302 De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
6303 est activée (@pxref{Services de virtualisation,
6304 @code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
6305 quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
6308 Les constructions pour un autre système que celui de la machine que vous
6309 utilisez peuvent aussi être déchargées à une machine distante de la bonne
6310 architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
6313 @item --target=@var{triplet}
6314 @cindex compilation croisée
6315 Effectuer une compilation croisée pour @var{triplet} qui doit être un
6316 triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
6317 target triplets, GNU configuration triplets,, autoconf, Autoconf}).
6319 @anchor{vérification de la construction}
6321 @cindex déterminisme, vérification
6322 @cindex reproductibilité, vérification
6323 Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
6324 le dépôt et lève une erreur si les résultats des constructions ne sont pas
6325 identiques bit-à-bit.
6327 Ce mécanisme vous permet de vérifier si les substituts précédemment
6328 installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
6329 construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
6330 pour plus d'informations et pour les outils.
6332 Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
6333 dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
6334 l'étude des différences entre les deux résultats.
6337 @cindex réparer les éléments du dépôt
6338 @cindex corruption, récupérer de
6339 Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
6340 les téléchargeant ou en les construisant à nouveau.
6342 Cette opération n'est pas atomique et donc restreinte à l'utilisateur
6347 Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
6350 @item --root=@var{fichier}
6351 @itemx -r @var{fichier}
6352 @cindex racines du GC, ajout
6353 @cindex ajout de racines au ramasse-miettes
6354 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
6355 en tant que racine du ramasse-miettes.
6357 En conséquence, les résultats de cette invocation de @command{guix build}
6358 sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
6359 supprimé. Lorsque cette option est omise, les constructions sont
6360 susceptibles d'être glanées.
6363 @cindex journaux de construction, accès
6364 Renvoie les noms des journaux de construction ou les URL des
6365 @var{package-or-derivation} donnés ou lève une erreur si les journaux de
6366 construction sont absents.
6368 Cela fonctionne indépendamment de la manière dont les paquets ou les
6369 dérivations sont spécifiées. Par exemple, les invocations suivantes sont
6373 guix build --log-file `guix build -d guile`
6374 guix build --log-file `guix build guile`
6375 guix build --log-file guile
6376 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
6379 Si un journal n'est pas disponible localement, à moins que
6380 @code{--no-substitutes} ne soit passé, la commande cherche un journal
6381 correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
6382 @code{--substitute-urls}.)
6384 Donc par exemple, imaginons que vous souhaitiez voir le journal de
6385 construction de GDB sur MIPS, mais que vous n'avez qu'une machine
6389 $ guix build --log-file gdb -s mips64el-linux
6390 https://hydra.gnu.org/log/@dots{}-gdb-7.10
6393 Vous pouvez accéder librement à un vaste bibliothèque de journaux de
6397 @node Débogage des échecs de construction
6398 @subsection Débogage des échecs de construction
6400 @cindex échecs de construction, débogage
6401 Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
6402 passerez probablement du temps à déboguer et modifier la construction
6403 jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
6404 construction vous-même dans un environnement le plus proche possible de
6405 celui qu'utilise le démon de construction.
6407 Pour cela, la première chose à faire est d'utiliser l'option
6408 @option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
6409 l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
6410 par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
6412 À partir de là, vous pouvez vous déplacer dans l'arborescence de
6413 construction et sourcer le fichier @file{environment-variables}, qui
6414 contient toutes les variables d'environnement qui étaient définies lorsque
6415 la construction a échoué. Disons que vous déboguez un échec de construction
6416 dans le paquet @code{foo} ; une session typique ressemblerait à cela :
6420 @dots{} @i{build fails}
6421 $ cd /tmp/guix-build-foo.drv-0
6422 $ source ./environment-variables
6426 Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
6427 (presque) et corriger le processus de construction.
6429 Parfois il arrive que, par exemple, les tests d'un paquet réussissent
6430 lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
6431 le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
6432 contrairement à notre environnement au-dessus, l'accès réseau est
6433 indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
6435 Dans ce cas, vous pourriez avoir besoin de lancer le processus de
6436 construction dans un conteneur similaire à celui que le démon crée :
6441 $ cd /tmp/guix-build-foo.drv-0
6442 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
6443 [env]# source ./environment-variables
6447 Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
6448 shell dedans (@pxref{Invoquer guix environment}). La partie
6449 @command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
6450 @command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
6451 débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
6452 environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
6453 plus d'informations sur les greffes).
6455 Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
6456 de construction, on peut enlever @file{/bin/sh} :
6462 Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
6463 conteneur jetable créé par @command{guix environment}.
6465 La commande @command{strace} n'est probablement pas dans le chemin de
6466 recherche, mais on peut lancer :
6469 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
6472 De cette manière, non seulement vous aurez reproduit les variables
6473 d'environnement utilisées par le démon, mais vous lancerez aussi le
6474 processus de construction dans un conteneur similaire à celui utilisé par le
6478 @node Invoquer guix edit
6479 @section Invoquer @command{guix edit}
6481 @cindex @command{guix edit}
6482 @cindex définition de paquets, modification
6483 Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
6484 facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
6485 sur le fichier source qui contient la définition des paquets spécifiés. Par
6489 guix edit gcc@@4.9 vim
6493 lance le programme spécifié dans la variable d'environnement @code{VISUAL}
6494 ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
6496 Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
6497 ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
6498 (@pxref{Définition des paquets}), vous pourrez modifier les recettes des
6499 paquets. Sinon, vous pourrez examiner les recettes en lecture-seule des
6500 paquets actuellement dans le dépôt.
6503 @node Invoquer guix download
6504 @section Invoquer @command{guix download}
6506 @cindex @command{guix download}
6507 @cindex télécharger les sources des paquets
6508 En écrivant des définitions de paquets, les développeurs ont généralement
6509 besoin de télécharger une archive des sources, calculer son hash SHA256 et
6510 écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
6511 L'outil @command{guix download} aide à cette tâche : il télécharge un
6512 fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
6513 le dépôt et son hash SHA56.
6515 Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
6516 passante : losque les développeurs finissent par construire le paquet
6517 nouvellement défini avec @command{guix build}, l'archive des sources n'aura
6518 pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
6519 le dépôt. C'est aussi une manière pratique de garder des fichiers
6520 temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
6522 La commande @command{guix download} supporte les mêmes URI que celles
6523 utilisées dans les définitions de paquets. En particulier, elle supporte
6524 les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
6525 supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
6526 l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
6527 erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
6528 bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
6530 @command{guix download} vérifie les certificats du serveur HTTPS en
6531 chargeant les autorités de certification X.509 depuis le répertoire vers
6532 lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
6534 Les options suivantes sont disponibles :
6537 @item --format=@var{fmt}
6539 Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
6540 d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
6542 @item --no-check-certificate
6543 Ne pas valider les certificats HTTPS des serveurs.
6545 Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
6546 garanti} que vous communiquez avec le serveur authentique responsable de
6547 l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
6550 @item --output=@var{fichier}
6551 @itemx -o @var{fichier}
6552 Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
6556 @node Invoquer guix hash
6557 @section Invoquer @command{guix hash}
6559 @cindex @command{guix hash}
6560 La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
6561 surtout un outil pour simplifier la vie des contributeurs de la distribution
6562 : il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
6563 la définition d'un paquet (@pxref{Définition des paquets}).
6565 La syntaxe générale est :
6568 guix hash @var{option} @var{fichier}
6571 Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
6572 hash des données lues depuis l'entrée standard. @command{guix hash} a les
6577 @item --format=@var{fmt}
6579 Écrit le hash dans le format spécifié par @var{fmt}.
6581 Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
6582 (@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
6584 Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
6585 affichera le hash en @code{nix-base32}. Cette représentation est utilisée
6586 dans les définitions des paquets.
6590 Calcule le hash sur @var{fichier} récursivement.
6592 @c FIXME: Replace xref above with xref to an ``Archive'' section when
6594 Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
6595 dont ses enfants si c'est un répertoire. Certaines métadonnées de
6596 @var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
6597 est un fichier normal, le hash est différent que le @var{fichier} soit
6598 exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
6599 sur le hash (@pxref{Invoquer guix archive}).
6603 Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
6604 système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
6607 Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
6608 avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
6611 $ git clone http://example.org/foo.git
6617 @node Invoquer guix import
6618 @section Invoquer @command{guix import}
6620 @cindex importer des paquets
6621 @cindex paquets importés
6622 @cindex conversion de paquets
6623 @cindex Invoquer @command{guix import}
6624 La commande @command{guix import} est utile pour les gens qui voudraient
6625 ajouter un paquet à la distribution avec aussi peu de travail que possible —
6626 une demande légitime. La commande connaît quelques dépôts logiciels d'où
6627 elle peut « importer » des métadonnées de paquets. Le résultat est une
6628 définition de paquet, ou un modèle de définition, dans le format reconnu par
6629 Guix (@pxref{Définition des paquets}).
6631 La syntaxe générale est :
6634 guix import @var{importer} @var{options}@dots{}
6637 @var{importer} spécifie la source depuis laquelle importer des métadonnées
6638 de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
6639 options spécifiques à @var{importer}. Actuellement les « importateurs »
6644 Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
6645 la dernière version de ce paquet GNU, avec le hash de son archive, le
6646 synopsis et la description canonique.
6648 Les informations supplémentaires comme les dépendances du paquet et sa
6649 licence doivent être renseignées manuellement.
6651 Par exemple, la commande suivante renvoie une définition de paquets pour
6655 guix import gnu hello
6658 Les options spécifiques sont :
6661 @item --key-download=@var{politique}
6662 Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
6663 OpenPGP manquantes lors de la vérification de la signature d'un paquet.
6664 @xref{Invoquer guix refresh, @code{--key-download}}.
6669 Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
6670 paquets Python}@footnote{Cette fonctionnalité requiert l'installation de
6671 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées à
6672 partir de la description en JSON disponible sur @code{pypi.python.org} et
6673 inclus généralement toutes les informations utiles, dont les dépendances des
6674 paquets. Pour une efficacité maximale, il est recommandé d'installer
6675 l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
6676 wheels Python et récupérer les informations contenues à l'intérieur.
6678 La commande ci-dessous importe les métadonnées du paquet Python
6679 @code{itsdangerous} :
6682 guix import pypi itsdangerous
6687 Importe des métadonnées de @uref{https://rubygems.org/,
6688 RubyGems}@footnote{Cette fonctionnalité requiert l'installation de
6689 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
6690 format JSON disponible sur @code{rubygems.org} et inclut les informations
6691 les plus utiles, comme les dépendances à l'exécution. Il y a des pièges
6692 cependant. Les métadonnées ne distinguent pas synopsis et description, donc
6693 la même chaîne est utilisée pour les deux champs. En plus, les détails des
6694 dépendances non Ruby requises pour construire des extensions natives sont
6695 indisponibles et laissé en exercice au packager.
6697 La commande ci-dessous importe les métadonnées pour le paquet Ruby
6701 guix import gem rails
6707 Traverse le graphe des dépendances du paquet amont donné et génère les
6708 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6713 Importe des métadonnées de @uref{https://www.metacpan.org/,
6714 MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de
6715 Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
6716 format JSON disponible à travers @uref{https://fastapi.metacpan.org/, l'API
6717 de MetaCPAN} et inclus les informations les plus utiles, comme les
6718 dépendances des modules. L'information sur les licences doit être vérifiée
6719 avec attention. Si Perl est disponible dans le dépôt, alors l'utilitaire
6720 @code{corelist} sera utiliser pour exclure les modules du cœur de la
6721 distribution Perl de la liste des dépendances.
6723 La commande ci-dessous importe les métadonnées du module Perl
6724 @code{Acme::Boolean} :
6727 guix import cpan Acme::Boolean
6732 @cindex Bioconductor
6733 Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
6734 dépôt central de @uref{http://r-project.org, l'environnement statistique et
6735 graphique GUN@tie{}R}.
6737 Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
6739 La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
6742 guix import cran Cairo
6745 Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
6746 le graphe des dépendances du paquet amont récursivement et générera des
6747 expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
6749 Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
6750 sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
6751 répertoire de paquets R pour l'analyse et la compréhension de données
6752 génomiques volumineuses en bioinformatique.
6754 Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
6755 publié sur l'interface web du dépôt SVN de Bioconductor.
6757 La commande ci-dessous importe les métadonnées du paquet R
6758 @code{GenomicRanges} :
6761 guix import cran --archive=bioconductor GenomicRanges
6767 Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
6768 réseau complète pour les paquets TeX qui font partie de la
6769 @uref{https://www.tug.org/texlive/, distribution TeX Live}.
6771 Les informations sur les paquets sont obtenues à travers l'API XML fournie
6772 par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
6773 projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
6774 d'archives versionnées.
6776 La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
6780 guix import texlive fontspec
6783 Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
6784 n'est pas téléchargé depuis le sous-répertoire @file{latex} du
6785 l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
6786 depuis le répertoire voisin spécifié sous la même racine.
6788 La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
6789 depuis CTAN en récupérant les sources depuis le répertoire
6790 @file{texmf/source/generic} :
6793 guix import texlive --archive=generic ifxetex
6797 @cindex JSON, import
6798 Importe des métadonnées d'un fichier JSON local@footnote{Cette
6799 fonctionnalité requiert l'installation de Guile-JSON.
6800 @xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de
6801 paquet au format JSON :
6807 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
6808 "build-system": "gnu",
6809 "home-page": "https://www.gnu.org/software/hello/",
6810 "synopsis": "Hello, GNU world: An example GNU package",
6811 "description": "GNU Hello prints a greeting.",
6812 "license": "GPL-3.0+",
6813 "native-inputs": ["gcc@@6"]
6817 Les noms des champs sont les mêmes que pour les enregistrements de
6818 @code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
6819 paquets sont fournies comme des listes JSON de chaînes de spécifications de
6820 paquets comme @code{guile} ou @code{guile@@2.0}.
6822 L'importateur supporte aussi une définition plus explicite des sources avec
6823 les champs habituels pour les enregistrements @code{<origin>} :
6829 "method": "url-fetch",
6830 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
6832 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
6839 La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
6840 et renvoie une expression de paquet :
6843 guix import json hello.json
6847 Importe les métadonnées d'une copie locale des source de
6848 @uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
6849 repose sur la commande @command{nix-instantiate} de
6850 @uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
6851 Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
6852 Bash. Cette commande n'importe que la structure de haut-niveau du paquet
6853 qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
6854 de base de la définition d'un paquet.
6856 Lorsque vous importez un paquet GNU, le synopsis et la description sont
6857 replacés par la version canonique en amont.
6859 Normalement, vous devrez d'abord faire :
6862 export NIX_REMOTE=daemon
6866 pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
6869 Par exemple, la commande ci-dessous importe la définition du paquet de
6870 LibreOffice (plus précisément, elle importe la définition du paquet lié à
6871 l'attribut de plus haut-niveau @code{libreoffice}) :
6874 guix import nix ~/path/to/nixpkgs libreoffice
6879 Importe les métadonnées de l'archive de paquets centrale de la communauté
6880 Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
6881 sont récupérées depuis les fichiers Cabal et incluent toutes les
6882 informations utiles, dont les dépendances des paquets.
6884 Les options spécifiques sont :
6889 Lit un fichier Cabal depuis l'entrée standard.
6890 @item --no-test-dependencies
6892 N'inclut pas les dépendances requises uniquement par les suites de tests.
6893 @item --cabal-environment=@var{alist}
6894 @itemx -e @var{alist}
6895 @var{alist} est une alist Scheme qui définie l'environnement dans lequel les
6896 conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
6897 @code{arch}, @code{impl} et une représentation sous forme de chaîne de
6898 caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
6899 le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
6900 doivent se conformer avec la définition du format de fichiers Cabal. La
6901 valeur par défaut associée avec les clefs @code{os}, @code{arch} et
6902 @code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
6905 Traverse le graphe des dépendances du paquet amont donné et génère les
6906 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6909 La commande ci-dessous importe les métadonnées de la dernière version du
6910 paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
6911 spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
6915 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
6918 Une version spécifique du paquet peut éventuellement être spécifiée en
6919 faisant suivre le nom du paquet par un arobase et un numéro de version comme
6920 dans l'exemple suivant :
6923 guix import hackage mtl@@2.1.3.1
6928 L'importateur @code{stackage} est une enveloppe autour de l'importateur
6929 @code{hackage}. Il prend un nom de paquet, recherche la version incluse
6930 dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
6931 Stackage} et utilise l'importateur @code{hackage} pour récupérer les
6932 métadonnées. Remarquez que c'est à vous de choisir une version LTS
6933 compatible avec le compilateur GHC utilisé par Guix.
6935 Les options spécifiques sont :
6938 @item --no-test-dependencies
6940 N'inclut pas les dépendances requises uniquement par les suites de tests.
6941 @item --lts-version=@var{version}
6942 @itemx -r @var{version}
6943 @var{version} est la version LTS désirée. Si elle est omise, la dernière
6944 version est utilisée.
6947 La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
6948 inclus dans la version LTS 7.18 de Stackage :
6951 guix import stackage --lts-version=7.18 HTTP
6956 Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
6957 Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6959 Les options spécifiques sont :
6962 @item --archive=@var{repo}
6963 @itemx -a @var{repo}
6964 @var{repo} identifie le dépôt d'archive depuis lequel récupérer les
6965 informations. Actuellement les dépôts supportés et leurs identifiants sont
6969 @uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
6970 l'identifiant @code{gnu}. C'est la valeur par défaut.
6972 Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
6973 porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
6974 similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
6975 package signatures,, emacs, The GNU Emacs Manual}).
6978 @uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
6979 sélectionner avec l'identifiant @code{melpa-stable}.
6982 @uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
6983 l'identifiant @code{melpa}.
6988 Traverse le graphe des dépendances du paquet amont donné et génère les
6989 expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
6994 Importe les métadonnées du répertoire des paquets Rust
6995 @uref{https://crates.io, crates.io}.
7000 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
7001 repository used by the OCaml community.
7004 La structure du code de @command{guix import} est modulaire. Il serait
7005 utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
7006 aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
7008 @node Invoquer guix refresh
7009 @section Invoquer @command{guix refresh}
7011 @cindex @command{guix refresh}
7012 L'audience première de la commande @command{guix refresh} est l'ensemble des
7013 développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
7014 les paquets fournis par la distribution qui sont en retard par rapport aux
7015 dernières versions disponibles en amont, comme ceci :
7019 gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
7020 gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
7023 Autrement, on peut spécifier les paquets à considérer, auquel cas un
7024 avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
7025 mise à jour associé :
7028 $ guix refresh coreutils guile guile-ssh
7029 gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
7030 gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
7033 @command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
7034 le numéro de version le plus élevé parmi les versions publiées. La commande
7035 sait comment mettre à jour certains types de paquets : les paquets GNU, les
7036 paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
7037 Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
7038 déterminer si une nouvelle version est disponible en amont. Cependant, le
7039 mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
7040 une nouvelle méthode !
7042 Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
7043 @command{guix refresh} a besoin d'un peu d'aide. La plupart des
7044 gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
7045 les définitions de paquets, ce qui peut être utilisé à cette fin :
7048 (define-public network-manager
7050 (name "network-manager")
7052 (properties '((upstream-name . "NetworkManager")))))
7055 Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
7056 source de la distribution pour mettre à jour le numéro de version et le hash
7057 de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
7058 Cela est effectué en téléchargeant la dernière version de l'archive des
7059 sources de chaque paquet et des signatures associées, en authentifiant
7060 l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
7061 calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
7062 manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
7063 récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
7064 clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
7065 refresh} rapporte une erreur.
7067 Les options suivantes sont supportées :
7071 @item --expression=@var{expr}
7072 @itemx -e @var{expr}
7073 Considérer le paquet évalué par @var{expr}.
7075 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
7079 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
7082 Cette commande liste les paquets qui dépendent de la libc « finale » (en
7083 gros tous les paquets).
7087 Met à jour les fichiers source de la distribution (les recettes de paquets)
7088 en place. Cette option est généralement utilisée depuis une copie du dépôt
7089 git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
7092 $ ./pre-inst-env guix refresh -s non-core -u
7095 @xref{Définition des paquets}, pour plus d'information sur les définitions des
7098 @item --select=[@var{subset}]
7099 @itemx -s @var{subset}
7100 Choisi tous les paquets dans @var{subset}, entre @code{core} et
7103 Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
7104 distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
7105 tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
7106 Habituellement, changer l'un de ces paquets dans la distribution implique de
7107 reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
7108 pour les utilisateurs, en terme de temps de compilation et de bande passante
7109 utilisés pour effectuer la mise à jour.
7111 Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
7112 habituellement utile dans les cas où une mise à jour des paquets du cœur
7115 @item --manifest=@var{fichier}
7116 @itemx -m @var{fichier}
7117 Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
7118 vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
7121 @item --type=@var{updater}
7122 @itemx -t @var{updater}
7123 Chois uniquement les paquets pris en charge par @var{updater}
7124 (éventuellement une liste de gestionnaires de mise à jour séparés par des
7125 virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
7130 le gestionnaire de mise à jour pour les paquets GNU ;
7132 le gestionnaire de mise à jour pour les paquets GNOME ;
7134 le gestionnaire de mise à jour pour les paquets KDE ;
7136 le gestionnaire de mise à jour pour les paquets X.org ;
7138 le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
7140 le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
7143 le gestionnaire de mise à jour pour les paquets
7144 @uref{https://cran.r-project.org/, CRAN} ;
7146 le gestionnaire de mise à jour pour les paquets
7147 @uref{https://www.bioconductor.org/, Bioconductor} ;
7149 le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
7152 le gestionnaire de mise à jour pour les paquets
7153 @uref{https://pypi.python.org, PyPI} ;
7155 le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
7158 le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
7161 le gestionnaire de mise à jour pour les paquets
7162 @uref{https://hackage.haskell.org, Hackage} ;
7164 le gestionnaire de mise à jour pour les paquets
7165 @uref{https://www.stackage.org, Stackage} ;
7167 le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
7171 Par exemple, la commande suivante ne vérifie que les mises à jour des
7172 paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
7175 $ guix refresh --type=elpa,cran
7176 gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
7177 gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
7182 En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
7183 paquets, comme dans cet exemple :
7186 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
7190 La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
7191 @code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
7193 Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
7194 de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
7195 vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
7196 avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
7200 @item --list-updaters
7202 Liste les gestionnaires de mise à jour et quitte (voir l'option
7203 @option{--type} plus haut).
7205 Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
7206 la fin, affiche le pourcentage de paquets couverts par tous les
7209 @item --list-dependent
7211 Liste les paquets de plus haut-niveau qui devraient être reconstruits après
7212 la mise à jour d'un ou plusieurs paquets.
7214 @xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
7215 graph}}, pour des informations sur la manière de visualiser la liste des
7216 paquets dépendant d'un autre.
7220 Soyez conscients que l'option @code{--list-dependent} ne fait
7221 @emph{qu'approximer} les reconstructions qui seraient requises par une mise
7222 à jour. Plus de reconstructions pourraient être requises dans certaines
7226 $ guix refresh --list-dependent flex
7227 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
7228 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7231 La commande ci-dessus liste un ensemble de paquets qui peuvent être
7232 construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
7234 Les options suivante peuvent être utilisées pour personnaliser les
7235 opérations avec GnuPG :
7239 @item --gpg=@var{commande}
7240 Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
7241 recherchée dans @code{PATH}.
7243 @item --key-download=@var{politique}
7244 Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
7245 l'une des suivantes :
7249 Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
7250 ajouter au porte-clefs de l'utilisateur.
7253 Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
7257 Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
7258 à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
7262 @item --key-server=@var{host}
7263 Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
7268 Le gestionnaire de mises à jour @code{github} utilise
7269 @uref{https://developer.github.com/v3/, l'API de GitHub} pour faire des
7270 requêtes sur les nouvelles versions. Lorsqu'elle est utilisé de manière
7271 répétée, p.@: ex.@: lorsque vous vérifiez tous les paquets, GitHub finira
7272 par refuser de répondre à d'autres requêtes de l'API. Par défaut 60
7273 requêtes à l'heure sont autorisées, et une vérification complète de tous les
7274 paquets GitHub dans Guix requiert bien plus que cela. L'authentification
7275 avec GitHub à travers l'utilisation d'un jeton d'API lève ces limites. Pour
7276 utiliser un jeton de l'API, initialisez la variable d'environnement
7277 @code{GUIX_GITHUB_TOKEN} avec un jeton que vous vous serez procuré sur
7278 @uref{https://github.com/settings/tokens} ou autrement.
7281 @node Invoquer guix lint
7282 @section Invoquer @command{guix lint}
7284 @cindex @command{guix lint}
7285 @cindex paquets, chercher des erreurs
7286 La commande @command{guix lint} est conçue pour aider les développeurs à
7287 éviter des erreurs commune et à utiliser un style cohérent lors de
7288 l'écriture de recettes de paquets. Elle lance des vérifications sur un
7289 ensemble de paquets donnés pour trouver des erreurs communes dans leur
7290 définition. Les @dfn{vérifieurs} disponibles comprennent (voir
7291 @code{--list-checkers} pour une liste complète) :
7296 Vérifie certaines règles typographiques et stylistiques dans les
7297 descriptions et les synopsis.
7299 @item inputs-should-be-native
7300 Identifie les entrées qui devraient sans doute plutôt être des entrées
7306 @itemx source-file-name
7307 Sonde les URL @code{home-page} et @code{source} et rapporte celles qui sont
7308 invalides. Suggère une URL en @code{mirror://} lorsque c'est possible.
7309 Vérifie que le nom du fichier source a un sens, p.@: ex.@: qu'il ne s'agisse
7310 pas juste d'un numéro de version ou « git-checkou », sans avoir déclaré un
7311 @code{file-name} (@pxref{Référence d'origine}).
7314 @cindex vulnérabilités
7315 @cindex CVE, Common Vulnerabilities and Exposures
7316 Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
7317 (Common Vulnerabilities and Exposures) de l'année en cours et des années
7318 précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
7321 Pour voir les informations sur une vulnérabilité en particulier, visitez les
7326 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
7328 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
7332 où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
7333 @code{CVE-2015-7554}.
7335 Les développeurs de paquets peuvent spécifier dans les recettes des paquets
7336 le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
7337 et la version du paquet s'ils diffèrent du nom et de la version que Guix
7338 utilise, comme dans cet exemple :
7344 ;; CPE calls this package "grub2".
7345 (properties '((cpe-name . "grub2")
7346 (cpe-version . "2.3")))
7349 @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
7350 Certaines entrées dans la base de données CVE ne spécifient pas la version
7351 du paquet auquel elles s'appliquent et lui restera donc attachée pour
7352 toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
7353 qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
7359 ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
7360 (properties `((lint-hidden-cve . ("CVE-2011-0433"
7363 "CVE-2011-5244")))))
7367 Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
7368 source évident : des espaces en fin de ligne, des tabulations, etc.
7371 La syntaxe générale est :
7374 guix lint @var{options} @var{package}@dots{}
7377 Si aucun paquet n'est donné par la ligne de commande, tous les paquets
7378 seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
7382 @item --list-checkers
7384 Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
7385 paquets puis quitte.
7389 N'active que les vérificateurs spécifiés dans une liste de noms séparés par
7390 des virgules parmi la liste renvoyée par @code{--list-checkers}.
7394 @node Invoquer guix size
7395 @section Invoquer @command{guix size}
7398 @cindex paquet, taille
7400 @cindex @command{guix size}
7401 La commande @command{guix size} aide les développeurs à dresser un profil de
7402 l'utilisation du disque que font les paquets. C'est facile de négliger
7403 l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
7404 l'utilisation d'une sortie unique pour un paquet qui pourrait être
7405 facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
7406 problèmes que @command{guix size} peut typiquement mettre en valeur.
7408 On peut passer un ou plusieurs spécifications de paquets à la commande,
7409 comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
7410 dépôt. Regardez cet exemple :
7413 $ guix size coreutils
7414 store item total self
7415 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
7416 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
7417 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
7418 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
7419 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
7420 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
7421 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
7422 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
7427 Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
7428 Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
7429 comme ce qui serait renvoyé par :
7432 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
7435 Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
7436 première colonne, nommée « total », montre la taille en mébioctet (Mio) de
7437 la cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
7438 taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
7439 la taille de l'élément lui-même. La dernière colonne montre le ration de la
7440 taille de l'élément lui-même par rapport à celle de tous les éléments
7443 Dans cet exemple, on voit que la cloture de Coreutils pèse 79@tie{}Mio, dont
7444 la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
7445 n'est pas un problème en soit que la libc et les bibliothèques de GCC
7446 représentent une grande part de la cloture parce qu'elles sont toujours
7447 disponibles sur le système de toute façon).
7449 Lorsque les paquets passés à @command{guix size} sont disponibles dans le
7450 dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
7451 @emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
7452 @code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
7453 informations sur les greffes}, @command{guix size} demande au démon de
7454 déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
7455 @command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
7458 Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
7459 size} rapporte les informations en se basant sur les substituts disponibles
7460 (@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
7461 éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
7464 Vous pouvez aussi spécifier plusieurs noms de paquets :
7467 $ guix size coreutils grep sed bash
7468 store item total self
7469 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
7470 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
7471 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
7472 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
7478 Dans cet exemple on voit que la combinaison des quatre paquets prent
7479 102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
7480 puisqu'ils ont beaucoup de dépendances en commun.
7482 Les options disponibles sont :
7486 @item --substitute-urls=@var{urls}
7487 Utilise les informations de substituts de @var{urls}.
7488 @xref{client-substitute-urls, the same option for @code{guix build}}.
7490 @item --sort=@var{clef}
7491 Trie les lignes en fonction de la @var{clef}, l'une des optinos suivantes :
7495 la taille de chaque élément (par défaut) ;
7497 la taille totale de la cloture de l'élémente.
7500 @item --map-file=@var{fichier}
7501 Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
7503 Pour l'exemple au-dessus, le schéma ressemble à ceci :
7505 @image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
7506 Coreutils produit par @command{guix size}}
7508 Cette option requiert l'installation de
7509 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
7510 soit visible dans le chemin de recherche des modules Guile. Lorsque ce
7511 n'est pas le cas, @command{guix size} plante en essayant de le charger.
7513 @item --system=@var{système}
7514 @itemx -s @var{système}
7515 Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
7519 @node Invoquer guix graph
7520 @section Invoque @command{guix graph}
7523 @cindex @command{guix graph}
7524 @cindex dépendances des paquets
7525 Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
7526 un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
7527 une représentation mentale du DAG d'un paquet, donc la commande
7528 @command{guix graph} fournit une représentation visuelle du DAG. Par
7529 défaut, @command{guix graph} émet un représentation du DAG dans le format
7530 d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
7531 puisse être passée directement à la commande @command{dot} de Graphviz.
7532 Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
7533 un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
7534 @uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
7535 construire un graphe dans une base de donnée de graphes supportant le
7536 langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
7537 syntaxe générale est :
7540 guix graph @var{options} @var{paquet}@dots{}
7543 Par exemple, la commande suivante génère un fichier PDF représentant le DAG
7544 du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
7548 guix graph coreutils | dot -Tpdf > dag.pdf
7551 La sortie ressemble à ceci :
7553 @image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
7555 Joli petit graphe, non ?
7557 Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
7558 graphe des objets paquets, en omettant les entrées implicites comme GCC,
7559 libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
7560 parfois on veut voir plus de détails. @command{guix graph} supporte
7561 plusieurs types de graphes, qui vous permettent de choisir le niveau de
7566 C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
7567 des objets paquets, sans les dépendances implicites. C'est concis, mais
7568 omet pas mal de détails.
7570 @item reverse-package
7571 Cela montre le DAG @emph{inversé} des paquets. Par exemple :
7574 guix graph --type=reverse-package ocaml
7577 … montre le graphe des paquets qui dépendent de OCaml.
7579 Remarquez que pour les paquets du cœur de la distribution, cela crée des
7580 graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
7581 dépendent d'un paquet donnés, utilisez @command{guix refresh
7582 --list-dependent} (@pxref{Invoquer guix refresh,
7583 @option{--list-dependent}}).
7586 C'est le DAG du paquet, @emph{avec} les entrées implicites.
7588 Par exemple, la commande suivante :
7591 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
7594 … montre ce graphe plus gros :
7596 @image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
7599 En bas du graphe, on voit toutes les entrées implicites de
7600 @var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
7602 Maintenant, remarquez que les dépendances de ces entrées implicites —
7603 c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
7604 sont pas affichées, pour rester concis.
7607 Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
7610 @item bag-with-origins
7611 Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
7614 C'est la représentation lu plus détaillée : elle montre le DAG des
7615 dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
7616 représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
7617 scripts de construction, les correctifs, les modules Guile, etc.
7619 Pour ce type de graphe, il est aussi possible de passer un nom de fichier
7620 @file{.drv} à la place d'un nom de paquet, comme dans :
7623 guix graph -t derivation `guix system build -d my-config.scm`
7627 C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
7628 exemple, la commande suivante montre le graphe des modules de paquets qui
7629 définissent le paquet @code{guile} :
7632 guix graph -t module guile | dot -Tpdf > module-graph.pdf
7636 Tous les types ci-dessus correspondent aux @emph{dépendances à la
7637 construction}. Le type de graphe suivant représente les @emph{dépendances à
7642 C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
7643 renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
7645 Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
7646 @command{guix graph} essayera d'obtenir les informations sur les dépendances
7647 à travers les substituts.
7649 Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
7650 paquet. Par exemple, la commande ci-dessous produit le graphe des
7651 références de votre profile (qui peut être gros !) :
7654 guix graph -t references `readlink -f ~/.guix-profile`
7658 C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
7659 par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
7661 Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
7662 supposons que Inkscape est actuellement disponible dans 10 profils sur votre
7663 machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
7664 la racine est Inkscape avec 10 profils qui y sont liés.
7666 Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
7671 Les options disponibles sont les suivante :
7674 @item --type=@var{type}
7675 @itemx -t @var{type}
7676 Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
7677 des types au-dessus.
7680 Liste les types de graphes supportés.
7682 @item --backend=@var{moteur}
7683 @itemx -b @var{moteur}
7684 Produit un graphe avec le @var{moteur} choisi.
7686 @item --list-backends
7687 Liste les moteurs de graphes supportés.
7689 Actuellement les moteurs disponibles sont Graphviz et d3.js.
7691 @item --expression=@var{expr}
7692 @itemx -e @var{expr}
7693 Considérer le paquet évalué par @var{expr}.
7695 C'est utile pour précisément se référer à un paquet, comme dans cet exemple
7699 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
7704 @node Invoquer guix environment
7705 @section Invoquer @command{guix environment}
7707 @cindex environnements de construction reproductibles
7708 @cindex environnement de développement
7709 @cindex @command{guix environment}
7710 @cindex environnement de construction de paquets
7711 Le but de @command{guix environment} est d'assister les hackers dans la
7712 création d'environnements de développement reproductibles sans polluer leur
7713 profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
7714 paquets, construit leurs entrées et crée un environnement shell pour pouvoir
7717 La syntaxe générale est :
7720 guix environment @var{options} @var{paquet}@dots{}
7723 L'exemple suivant crée un nouveau shell préparé pour le développement de
7727 guix environment guile
7730 Si les dépendances requises ne sont pas déjà construites, @command{guix
7731 environment} les construit automatiquement. L'environnement du nouveau
7732 shell est une version améliorée de l'environnement dans lequel @command{guix
7733 environment} a été lancé. Il contient les chemins de recherche nécessaires
7734 à la construction du paquet donné en plus des variables d'environnement
7735 existantes. Pour créer un environnement « pur », dans lequel les variables
7736 d'environnement de départ ont été nettoyées, utilisez l'option
7737 @code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
7738 supplémentaires dans les variables comme @code{PATH} dans leur
7739 @file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
7740 Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
7741 variables d'environnement. C'est une erreur de définir ces variables
7742 d'environnement dans @file{.bashrc} ; à la place, elles devraient être
7743 définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
7744 de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
7745 Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
7747 @vindex GUIX_ENVIRONMENT
7748 @command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
7749 le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
7750 environnement. Cela permet aux utilisateur, disons, de définir un prompt
7751 spécifique pour les environnement de développement dans leur @file{.bashrc}
7752 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
7755 if [ -n "$GUIX_ENVIRONMENT" ]
7757 export PS1="\u@@\h \w [dev]\$ "
7762 … ou de naviguer dans le profil :
7765 $ ls "$GUIX_ENVIRONMENT/bin"
7768 En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
7769 des paquets données est utilisée. Par exemple, la commande ci-dessous crée
7770 un shell où toutes les dépendances de Guile et Emacs sont disponibles :
7773 guix environment guile emacs
7776 Parfois, une session shell interactive est inutile. On peut invoquer une
7777 commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
7778 du reste des arguments :
7781 guix environment guile -- make -j4
7784 Dans d'autres situations, il est plus pratique de spécifier la liste des
7785 paquets requis dans l'environnement. Par exemple, la commande suivante
7786 lance @command{python} dans un environnement contenant Python@tie{}2.7 et
7790 guix environment --ad-hoc python2-numpy python-2.7 -- python
7793 En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
7794 supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
7795 construction, mais qui sont utiles au développement tout de même. À cause
7796 de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
7797 apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
7798 les dépendances seront ajoutées à l'environnement. Les paquets qui
7799 apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
7800 ajouter à l'environnement directement. Par exemple, la commande suivante
7801 crée un environnement de développement pour Guix avec les paquets Git et
7805 guix environment guix --ad-hoc git strace
7808 Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
7809 une pureté et une reproductibilité maximale. En particulier, lorsque vous
7810 utilisez Guix sur une distribution hôte qui n'est pas GuixSD, il est
7811 souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
7812 système depuis les environnements de développement. Par exemple, la
7813 commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
7814 et le répertoire de travail actuel sont montés :
7817 guix environment --ad-hoc --container guile -- guile
7821 L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
7824 Les options disponibles sont résumées ci-dessous.
7827 @item --root=@var{fichier}
7828 @itemx -r @var{fichier}
7829 @cindex environnement persistent
7830 @cindex racine du ramasse-miettes, pour les environnements
7831 Fait de @var{fichier} un lien symbolique vers le profil de cet
7832 environnement, et l'enregistre comme une racine du ramasse-miettes.
7834 C'est utile si vous souhaitez protéger votre environnement du
7835 ramasse-miettes, pour le rendre « persistent ».
7837 Lorsque cette option est omise, l'environnement n'est protégé du
7838 ramasse-miettes que le temps de la session @command{guix environment}. Cela
7839 signifie que la prochaine fois que vous créerez le même environnement, vous
7840 pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
7842 @item --expression=@var{expr}
7843 @itemx -e @var{expr}
7844 Crée un environnement pour le paquet ou la liste de paquets en lesquels
7845 s'évalue @var{expr}.
7847 Par exemple, lancer :
7850 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
7853 démarre un shell avec l'environnement pour cette variante spécifique du
7859 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
7862 démarre un shell où tous les paquets de base de GuixSD sont disponibles.
7864 Les commande au-dessus n'utilisent que les sorties par défaut des paquets
7865 donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
7868 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
7871 @item --load=@var{fichier}
7872 @itemx -l @var{fichier}
7873 Crée un environnement pour le paquet ou la liste de paquets en lesquels
7874 @var{fichier} s'évalue.
7876 Par exemple, @var{fichier} peut contenir une définition comme celle-ci
7877 (@pxref{Définition des paquets}) :
7880 @verbatiminclude environment-gdb.scm
7883 @item --manifest=@var{fichier}
7884 @itemx -m @var{fichier}
7885 Crée un environnement pour les paquets contenus dans l'objet manifeste
7886 renvoyé par le code Scheme dans @var{fichier}.
7888 C'est similaire à l'option de même nom de @command{guix package}
7889 (@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
7893 Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
7894 si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
7895 Cette option est utile pour créer un environnement rapidement sans avoir à
7896 écrire une expression de paquet contenant les entrées désirées.
7898 Par exemple la commande :
7901 guix environment --ad-hoc guile guile-sdl -- guile
7904 lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
7907 Remarquez que cet exemple demande implicitement la sortie par défaut de
7908 @code{guile} et @code{guile-sdl}, mais il est possible de demander une
7909 sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
7910 de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
7912 Cette option peut être composée avec le comportement par défaut de
7913 @command{guix environment}. Les paquets qui apparaissent avant
7914 @code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
7915 seront ajoutées à l'environnement, le comportement par défaut. Les paquets
7916 qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
7917 ajouter à l'environnement directement.
7920 Nettoie les variables d'environnement existantes lors de la construction du
7921 nouvel environnement. Cela a pour effet de créer un environnement dans
7922 lequel les chemins de recherche ne contiennent que des entrées de paquets.
7924 @item --search-paths
7925 Affiche les définitions des variables d'environnement qui composent
7928 @item --system=@var{système}
7929 @itemx -s @var{système}
7930 Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
7935 Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
7936 actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
7937 de le changer avec @code{--user}, un répertoire personnel fictif est créé
7938 pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwod} est
7939 configuré en conséquence. Le processus est lancé en tant que l'utilisateur
7940 actuel en dehors du conteneur, mais a les privilèges root dans le contexte
7945 Pour les conteneurs, partage l'espace de nom du réseau avec le système
7946 hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
7949 @item --link-profile
7951 Pour les conteneurs, lie le profil de l'environnement à
7952 @file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
7953 commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
7954 conteneur. La liaison échouera et annulera l'environnement si le répertoire
7955 existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
7956 invoqué dans le répertoire personnel de l'utilisateur.
7958 Certains paquets sont configurés pour chercher des fichiers de configuration
7959 et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
7960 @code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
7961 des polices supplémentaires.} ; @code{--link-profile} permet à ces
7962 programmes de se comporter comme attendu dans l'environnement.
7964 @item --user=@var{utilisateur}
7965 @itemx -u @var{utilisateur}
7966 Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
7967 place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwod}
7968 dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
7969 personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
7970 copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
7972 En plus, tous les chemins partagés ou exposés (voir @code{--share} et
7973 @code{--expose} respectivement) dont la cible est dans le répertoire
7974 personnel de l'utilisateur seront remontés relativement à
7975 @file{/home/UTILISATEUR} ; cela comprend le montage automatique du
7976 répertoire de travail actuel.
7979 # exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
7981 guix environment --container --user=foo \
7982 --expose=$HOME/test \
7983 --expose=/tmp/target=$HOME/target
7986 Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
7987 chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
7988 qu'un composant utile pour une solution d'anonymisation ou de préservation
7989 de la vie privée — pas une solution en elle-même.
7991 @item --expose=@var{source}[=@var{cible}]
7992 Pour les conteneurs, expose le système de fichiers @var{source} du système
7993 hôte comme un système de fichiers en lecture seule @var{cible} dans le
7994 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
7995 comme point de montage dans le conteneur.
7997 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
7998 répertoire personnel de l'utilisateur est accessible en lecture-seule via le
7999 répertoire @file{/exchange} :
8002 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
8005 @item --share=@var{source}[=@var{cible}]
8006 Pour les conteneurs, partage le système de fichiers @var{soruce} du système
8007 hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
8008 conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
8009 comme point de montage dans le conteneur.
8011 L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
8012 répertoire personnel de l'utilisateur est accessible en lecture-écriture via
8013 le répertoire @file{/exchange} :
8016 guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
8020 @command{guix environment} supporte aussi toutes les options de construction
8021 que @command{guix build} supporte (@pxref{Options de construction communes}).
8024 @node Invoquer guix publish
8025 @section Invoquer @command{guix publish}
8027 @cindex @command{guix publish}
8028 Le but de @command{guix publish} est de vous permettre de partager
8029 facilement votre dépôt avec d'autres personnes qui peuvent ensuite
8030 l'utiliser comme serveur de substituts (@pxref{Substituts}).
8032 Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
8033 à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
8034 signifie que toutes les machines qui font tourner Guix peuvent aussi agir
8035 comme une ferme de construction, puisque l'interface HTTP est compatible
8036 avec Hydra, le logiciel derrière la ferme de construction
8037 @code{hydra.gnu.org}.
8039 Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
8040 destinataires de vérifier leur authenticité et leur intégrité
8041 (@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
8042 signature du système, qui n'est lisible que par l'administrateur système, il
8043 doit être lancé en root ; l'option @code{--user} lui fait baisser ses
8044 privilèges le plus tôt possible.
8046 La pair de clefs pour les signatures doit être générée avant de lancer
8047 @command{guix publish}, avec @command{guix archive --generate-key}
8048 (@pxref{Invoquer guix archive}).
8050 La syntaxe générale est :
8053 guix publish @var{options}@dots{}
8056 Lancer @command{guix publish} sans arguments supplémentaires lancera un
8057 serveur HTTP sur le port 8080 :
8063 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 :
8066 guix-daemon --substitute-urls=http://example.org:8080
8069 Par défaut, @command{guix publish} compresse les archives à la volée quand
8070 il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
8071 aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
8072 s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
8073 @option{--cache}, qui active le cache des archives avant de les envoyer aux
8074 clients — voir les détails plus bas. La commande @command{guix weather}
8075 fournit un manière pratique de vérifier ce qu'un serveur fournit
8076 (@pxref{Invoquer guix weather}).
8078 En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
8079 des fichiers source référencées dans les enregistrements @code{origin}
8080 (@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
8081 publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
8082 brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
8083 format @code{nix-base32}, @pxref{Invoquer guix hash}) :
8086 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
8089 Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
8090 dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
8092 @cindex journaux de construction, publication
8093 Les journaux de construction sont disponibles à partir des URL @code{/log}
8097 http://example.org/log/gwspk@dots{}-guile-2.2.3
8101 Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
8102 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,
8103 avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
8104 Nous recommandons de lancer @command{guix-daemon} avec
8105 @code{--log-compression=gzip} pace que les navigateurs web les décompressent
8106 automatiquement, ce qui n'est pas le cas avec la compression bzip2.
8108 Les options suivantes sont disponibles :
8111 @item --port=@var{port}
8112 @itemx -p @var{port}
8113 Écoute les requêtes HTTP sur le @var{port}
8115 @item --listen=@var{hôte}
8116 Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
8117 accepte les connexions de n'importe quelle interface.
8119 @item --user=@var{utilisateur}
8120 @itemx -u @var{utilisateur}
8121 Charge les privilèges de @var{utilisateur} le plus vite possible —
8122 c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
8123 signature a été lue.
8125 @item --compression[=@var{niveau}]
8126 @itemx -C [@var{niveau}]
8127 Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
8128 zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
8129 différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
8130 meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
8132 À moins que @option{--cache} ne soit utilisé, la compression se fait à la
8133 volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
8134 charge sur la machine qui fait tourner @command{guix publish}, c'est une
8135 bonne idée de choisir un niveau de compression faible, de lancer
8136 @command{guix publish} derrière un serveur de cache ou d'utiliser
8137 @option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
8138 @command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
8141 @item --cache=@var{répertoire}
8142 @itemx -c @var{répertoire}
8143 Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
8144 @var{répertoire} et ne sert que les archives dans ce cache.
8146 Lorsque cette option est omise, les archives et les métadonnées sont crées à
8147 la volée. Cela réduit la bande passante disponible, surtout quand la
8148 compression est activée puisqu'elle pourrait être limitée par le CPU. Un
8149 autre inconvénient au mode par défaut est que la taille des archives n'est
8150 pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
8151 @code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
8152 la quantité de données à télécharger.
8154 À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
8155 un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
8156 déclenche la création de l'archive — en calculant son @code{.narinfo} et en
8157 compressant l'archive au besoin. Une fois l'archive cachée dans
8158 @var{répertoire}, les requêtes suivantes réussissent et sont servies
8159 directement depuis le cache, ce qui garanti que les clients ont la meilleure
8160 bande passante possible.
8162 Le processus de création est effectué par des threads de travail. Par
8163 défaut, un thread par cœur du CPU est créé, mais cela peut être
8164 personnalisé. Voir @option{--workers} plus bas.
8166 Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
8167 automatiquement supprimées lorsqu'elles expirent.
8169 @item --workers=@var{N}
8170 Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
8171 thread de travail pour créer les archives.
8173 @item --ttl=@var{ttl}
8174 Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
8175 vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
8176 signifie 5 jours, @code{1m} signifie un mois, etc.
8178 Cela permet au Guix de l'utilisateur de garder les informations en cache
8179 pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
8180 pas lui-même que les éléments du dépôt qu'il fournit seront toujours
8181 disponible pendant la durée @var{ttl}.
8183 En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
8184 n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
8185 dans le dépôt peuvent être supprimées.
8187 @item --nar-path=@var{chemin}
8188 Utilise @var{chemin} comme préfixe des URL de fichier « nar »
8189 (@pxref{Invoquer guix archive, normalized archives}).
8191 Par défaut, les nars sont présents à l'URL comme
8192 @code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
8193 changer la partie @code{/nar} en @var{chemin}.
8195 @item --public-key=@var{fichier}
8196 @itemx --private-key=@var{fichier}
8197 Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
8198 signer les éléments avant de les publier.
8200 Les fichiers doivent correspondre à la même pair de clefs (la clef privée
8201 est utilisée pour signer et la clef publique est seulement ajouté aux
8202 métadonnées de la signature). Ils doivent contenir les clefs dans le format
8203 s-expression canonique produit par @command{guix archive --generate-key}
8204 (@pxref{Invoquer guix archive}). Par défaut,
8205 @file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
8208 @item --repl[=@var{port}]
8209 @itemx -r [@var{port}]
8210 Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
8211 Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
8212 pour déboguer un serveur @command{guix publish} qui tourne.
8215 Activer @command{guix publish} sur un système GuixSD est vraiment une seule
8216 ligne : instantiez simplement un service @code{guix-publish-service-type}
8217 dans le champs @code{services} de votre déclaration @code{operating-system}
8218 (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
8220 Si vous avez installé Guix sur une « distro extérieure », suivez ces
8225 Si votre distro hôte utilise le système d'init systemd :
8228 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
8229 /etc/systemd/system/
8230 # systemctl start guix-publish && systemctl enable guix-publish
8234 Si votre distribution hôte utilise le système d'initialisation Upstart :
8237 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
8238 # start guix-publish
8242 Sinon, procédez de manière similaire avec votre système d'init de votre
8246 @node Invoquer guix challenge
8247 @section Invoquer @command{guix challenge}
8249 @cindex constructions reproductibles
8250 @cindex constructions vérifiables
8251 @cindex @command{guix challenge}
8253 Est-ce que les binaires fournis par ce serveur correspondent réellement au
8254 code source qu'il dit avoir construit ? Est-ce que le processus de
8255 construction d'un paquet est déterministe ? Ce sont les question auxquelles
8256 la commande @command{guix challenge} essaye de répondre.
8258 La première question est évidemment importante : avant d'utiliser un serveur
8259 de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
8260 fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
8261 permet la première : si les constructions des paquets sont déterministes
8262 alors des constructions indépendantes du paquet devraient donner le même
8263 résultat, bit à bit ; si un serveur fournit un binaire différent de celui
8264 obtenu localement, il peut être soit corrompu, soit malveillant.
8266 On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
8267 toutes les entrées du processus qui construit le fichier ou le répertoire —
8268 les compilateurs, les bibliothèques, les scripts de construction,
8269 etc. (@pxref{Introduction}). En supposant que les processus de construction
8270 sont déterministes, un nom de fichier dans le dépôt devrait correspondre
8271 exactement à une sortie de construction. @command{guix challenge} vérifie
8272 si il y a bien effectivement une seule correspondance en comparant les
8273 sorties de plusieurs constructions indépendantes d'un élément du dépôt
8276 La sortie de la commande ressemble à :
8279 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
8280 mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 100.0%
8281 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
8282 le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
8283 empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8284 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8285 https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
8286 le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
8287 empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
8288 https://hydra.gnu.org/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
8289 https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
8290 le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
8291 empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8292 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8293 https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
8297 6,406 éléments du dépôt ont été analysés :
8298 - 4,749 (74.1%) étaient identiques
8299 - 525 (8.2%) étaient différents
8300 - 1,132 (17.7%) étaient impossibles à évaluer
8304 Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
8305 déterminer l'ensemble des dérivations construites localement — en opposition
8306 aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
8307 demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
8308 les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
8309 différent de la construction locale.
8311 @cindex non-déterminisme, dans les constructions des paquets
8312 Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
8313 différente. Inversement, @code{hydra.gnu.org} est d'accord avec les
8314 constructions locale, sauf dans le cas de Git. Cela peut indiquer que le
8315 processus de construction de Git est non-déterministe, ce qui signifie que
8316 sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
8317 parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
8318 sources les plus communes de non-déterminisme comprennent l'ajout
8319 d'horodatage dans les résultats des constructions, l'inclusion de nombres
8320 aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
8321 @uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
8323 Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
8324 chose comme cela (@pxref{Invoquer guix archive}) :
8327 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
8328 | guix archive -x /tmp/git
8329 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
8332 Cette commande montre les différences entre les fichiers qui résultent de la
8333 construction locale et des fichiers qui résultent de la construction sur
8334 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
8335 diffutils, Comparing and Merging Files}). La commande @command{diff}
8336 fonctionne bien avec des fichiers texte. Lorsque des fichiers binaires
8337 diffèrent cependant, @uref{https://diffoscope.org/, Diffoscope} est une
8338 meilleure option. C'est un outil qui aide à visualiser les différences
8339 entre toute sorte de fichiers.
8341 Une fois que vous avez fait ce travail, vous pourrez dire si les différences
8342 sont dues au non-déterminisme du processus de construction ou à la
8343 malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
8344 les sources de non-déterminisme dans les paquets pour rendre plus facile la
8345 vérification des substituts, mais bien sûr, c'est un processus qui
8346 n'implique pas que Guix, mais une grande partie de la communauté des
8347 logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
8348 pour aider à corriger le problème.
8350 Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
8351 @code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
8352 résultat que vous avec :
8355 $ guix challenge @var{paquet}
8359 où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
8362 La syntaxe générale est :
8365 guix challenge @var{options} [@var{paquets}@dots{}]
8368 Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
8369 localement et celle d'un substitut fournit par un serveur, ou parmi les
8370 substituts fournis par différents serveurs, la commande l'affiche comme dans
8371 l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
8372 différentes de 0 indiquent d'autres sortes d'erreurs).
8374 L'option qui compte est :
8378 @item --substitute-urls=@var{urls}
8379 Considère @var{urls} comme la liste des URL des sources de substituts
8380 séparés par des espaces avec lesquels comparer les paquets locaux.
8384 Montre des détails sur les correspondances (contenu identique) en plus des
8385 informations sur différences.
8389 @node Invoquer guix copy
8390 @section Invoquer @command{guix copy}
8392 @cindex copier des éléments du dépôt par SSH
8393 @cindex SSH, copie d'éléments du dépôt
8394 @cindex partager des éléments du dépôt entre plusieurs machines
8395 @cindex transférer des éléments du dépôt entre plusieurs machines
8396 La commande @command{guix copy} copie des éléments du dépôt d'une machine
8397 vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
8398 commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
8399 pour des détails}. Par exemple, la commande suivante copie le paquet
8400 @code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
8401 @var{hôte}, en tant qu'utilisateur @var{utilisateur} :
8404 guix copy --to=@var{utilisateur}@@@var{hôte} \
8405 coreutils `readlink -f ~/.guix-profile`
8408 Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
8411 La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
8412 @var{hôte}, en supposant qu'ils y sont présents :
8415 guix copy --from=@var{hôte} libreoffice gimp
8418 La connexion SSH est établie avec le client Guile-SSH, qui set compatible
8419 avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
8420 et utilise l'agent SSH pour l'authentification.
8422 La clef utilisée pour signer les éléments qui sont envoyés doit être
8423 acceptée par la machine distante. De même, la clef utilisée pour la machine
8424 distante depuis laquelle vous récupérez des éléments doit être dans
8425 @file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
8426 @xref{Invoquer guix archive}, pour plus d'informations sur
8427 l'authentification des éléments du dépôt.
8429 La syntaxe générale est :
8432 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
8435 Vous devez toujours spécifier l'une des options suivantes :
8438 @item --to=@var{spec}
8439 @itemx --from=@var{spec}
8440 Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
8441 être une spécification SSH comme @code{example.org},
8442 @code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
8445 L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
8446 éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
8448 Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
8449 construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
8450 options de construction communes sont supportées (@pxref{Options de construction communes}).
8453 @node Invoquer guix container
8454 @section Invoquer @command{guix container}
8456 @cindex @command{guix container}
8458 À la version @value{VERSION}, cet outil est toujours expérimental.
8459 L'interface est sujette à changement radicaux dans le futur.
8462 Le but de @command{guix container} est de manipuler des processus qui
8463 tournent dans un environnement séparé, connus sous le nom de « conteneur »,
8464 typiquement créés par les commandes @command{guix environment}
8465 (@pxref{Invoquer guix environment}) et @command{guix system container}
8466 (@pxref{Invoquer guix system}).
8468 La syntaxe générale est :
8471 guix container @var{action} @var{options}@dots{}
8474 @var{action} spécifie les opérations à effectuer avec un conteneur, et
8475 @var{options} spécifie les arguments spécifiques au contexte pour l'action.
8477 Les actions suivantes sont disponibles :
8481 Exécute une commande dans le contexte d'un conteneur lancé.
8486 guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
8489 @var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
8490 nom du fichier exécutable dans le système de fichiers racine du conteneur.
8491 @var{arguments} sont les options supplémentairesà passer à @var{programme}.
8493 La commande suivante lance un shell de connexion interactif dans un
8494 conteneur GuixSD, démarré par @command{guix system container} et dont le PID
8498 guix container exec 9001 /run/current-system/profile/bin/bash --login
8501 Remarquez que @var{pid} ne peut pas être le processus parent d'un
8502 conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
8507 @node Invoquer guix weather
8508 @section Invoquer @command{guix weather}
8510 Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
8511 et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
8512 commande @command{guix weather} rapporte la disponibilité des substituts sur
8513 les serveurs spécifiés pour que vous sachiez si vous allez raller
8514 aujourd'hui. Cela peut parfois être une information utile pour les
8515 utilisateurs, mais elle est surtout utile pour les personnes qui font
8516 tourner @command{guix publish} (@pxref{Invoquer guix publish}).
8518 @cindex statistiques sur les substituts
8519 @cindex disponibilité des substituts
8520 @cindex substuts, disponibilité
8521 @cindex weather, disponibilité des substituts
8525 $ guix weather --substitute-urls=https://guix.example.org
8526 calcul de 5,872 dérivations de paquets pour x86_64-linux…
8527 recherche de 6,128 éléments du dépôt sur https://guix.example.org…
8528 mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
8529 https://guix.example.org
8530 43.4% substituts disponibles (2,658 sur 6,128)
8531 7,032.5 Mo de fichiers nar (compressés)
8532 19,824.2 Mo sur le disque (décompressés)
8533 0.030 secondes par requêtes (182.9 secondes au total)
8534 33.5 requêtes par seconde
8536 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
8537 867 constructions dans la queue
8538 x86_64-linux : 518 (59.7%)
8539 i686-linux : 221 (25.5%)
8540 aarch64-linux : 128 (14.8%)
8541 vitesse de construction : 23.41 constructions par heure
8542 x86_64-linux : 11.16 constructions par heure
8543 i686-linux : 6.03 constructions par heure
8544 aarch64-linux : 6.41 constructions par heure
8547 @cindex intégration continue, statistiques
8548 Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
8549 lesquels des substituts sont disponibles sur le serveur — indépendamment du
8550 fait que les substituts soient activés, et indépendamment du fait que la
8551 clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
8552 des archives compressées fournies par le serveur, la taille des éléments du
8553 dépôt correspondant dans le dépôt (en supposant que la déduplication soit
8554 désactivée) et la vitesse du serveur. La deuxième partie donne des
8555 statistiques sur l'intégration continue (CI), si le serveur le supporte.
8557 Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
8558 (@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
8559 @command{guix challenge}, il ignore les signatures de ces substituts, ce qui
8560 n'est pas dangereux puisque la commande ne fait que récupérer des
8561 statistiques et n'installe pas ces substituts.
8563 Entre autres choses, il est possible de demander des types de système
8564 particuliers et des ensembles de paquets particuliers. Les options
8565 disponibles sont listées plus bas.
8568 @item --substitute-urls=@var{urls}
8569 @var{urls} est la liste des URL des serveurs de substituts séparés par des
8570 espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
8571 de substituts par défaut est utilisé.
8573 @item --system=@var{système}
8574 @itemx -s @var{système}
8575 Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
8576 @code{aarch64-linux}. Cette option peut être répétée, auquel cas
8577 @command{guix weather} demandera les substituts de plusieurs types de
8580 @item --manifest=@var{fichier}
8581 Plutôt que de demander des substituts pour tous les paquets, demande
8582 uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
8583 contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
8584 package} (@pxref{Invoquer guix package}).
8588 @c *********************************************************************
8589 @node Distribution GNU
8590 @chapter Distribution GNU
8592 @cindex Distribution Système Guix
8594 Guix fournit aussi une distribution du système GNU contenant uniquement des
8595 logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
8596 @url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
8597 l'utilisateur de ces logiciels}.}. On peut installer la distribution
8598 elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
8599 comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
8600 (@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
8601 distribution autonome « Distribution Système Guix » ou GuixSD.
8603 la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
8604 Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
8605 complète des paquets disponibles se trouve
8606 @url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
8607 @command{guix package} (@pxref{Invoquer guix package}) :
8610 guix package --list-available
8613 Notre but est de fournir une distribution logicielle entièrement libre de
8614 GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
8615 et l'intégration étroite des composants GNU en insistant sur les programmes
8616 et les outils qui aident l'utilisateur à exercer ses libertés.
8618 Les paquets sont actuellement disponibles pour les plateformes suivantes :
8623 l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
8626 l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
8629 l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
8630 NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
8634 les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
8635 Le support est actuellement expérimental et limité. @xref{Contribuer},
8636 pour savoir comment aider !
8638 @item mips64el-linux
8639 les processeurs MIPS 64-bits little-endian, spécifiquement la série
8640 Loongson, ABI n32, avec le noyau Linux-libre.
8644 GuixSD lui-même est actuellement disponible sur @code{i686} et
8648 Pour des informations sur comment porter vers d'autres architectures et
8649 d'autres noyau, @pxref{Porter}.
8652 * Installation du système:: Installer le système d'exploitation complet.
8653 * Configuration système:: Configurer le système d'exploitation.
8654 * Documentation:: Visualiser les manuels d'utilisateur des
8656 * Installer les fichiers de débogage:: Nourrir le débogueur.
8657 * Mises à jour de sécurité:: Déployer des correctifs de sécurité
8659 * Modules de paquets:: Les paquets du point de vu du programmeur.
8660 * Consignes d'empaquetage:: Faire grandir la distribution.
8661 * Bootstrapping:: GNU/Linux depuis zéro.
8662 * Porter:: Cibler une autre plateforme ou un autre noyau.
8665 La construction de cette distribution est un effort collaboratif et nous
8666 vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
8667 sur la manière de nous aider.
8669 @node Installation du système
8670 @section Installation du système
8672 @cindex installer GuixSD
8673 @cindex Distribution Système Guix
8674 Cette section explique comment installer la distribution système Guix
8675 (GuixSD) sur votre machine. Le gestionnaire de paquets Guix peut aussi être
8676 installé sur un système GNU/Linux déjà installé, @pxref{Installation}.
8680 @c This paragraph is for people reading this from tty2 of the
8681 @c installation image.
8682 Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
8683 son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
8684 ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
8685 Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
8687 Autrement, lancez @command{info info} dans un autre tty pour garder ce
8693 * Limitations:: Ce à quoi vous attendre.
8694 * Considérations matérielles:: Matériel supporté.
8695 * Installation depuis une clef USB ou un DVD:: Préparer le média
8697 * Préparer l'installation:: Réseau, partitionnement, etc.
8698 * Effectuer l'installation:: Pour de vrai.
8699 * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
8700 * Construire l'image d'installation:: D'où vient tout cela.
8704 @subsection Limitations
8706 À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est
8707 pas prête pour la production. Elle peut contenir des bogues et ne pas avoir
8708 certaines fonctionnalités importantes. Ainsi, si vous cherche un système de
8709 production stable qui respecte votre liberté en tant qu'utilisateur, une
8710 bonne solution consiste à utiliser
8711 @url{http://www.gnu.org/distros/free-distros.html, une des distributions
8712 GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à
8713 GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser
8714 votre distribution actuelle et essayer le gestionnaire de paquet par dessus
8715 celle-ci (@pxref{Installation}).
8717 Avant de procéder à l'installation, soyez conscient de ces limitations les
8718 plus importantes qui s'appliquent à la version @value{VERSION} :
8722 Le procédé d'installation n'a pas d'interface utilisateur graphique et
8723 requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
8724 suivantes pour avoir un aperçu de ce que cela signifie).
8727 LVM (gestionnaire de volumes logiques) n'est pas supporté.
8730 De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
8731 certains manquent toujours cruellement.
8734 More than 7,500 packages are available, but you might occasionally find that
8735 a useful package is missing.
8738 GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
8739 cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
8742 Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
8743 rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
8744 la distribution. @xref{Contribuer}, pour plus d'info.
8747 @node Considérations matérielles
8748 @subsection Considérations matérielles
8750 @cindex support matériel sur GuixSD
8751 GNU@tie{}GuixSD se concentre sur le respect des libertés de ses
8752 utilisateurs. Il est construit autour du noyau Linux-libre, ce qui signifie
8753 que seuls les matériels pour lesquels des pilotes logiciels et des
8754 microgiciels libres sont disponibles sont supportés. De nos jours, une
8755 grande gamme de matériel qu'on peut acheter est supporté par GNU/Linux-libre
8756 — des claviers aux cartes graphiques en passant par les scanners et les
8757 contrôleurs Ethernet. Malheureusement, il reste des produit dont les
8758 fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre
8759 utilisation de l'ordinateur, et ces matériels ne sont pas supportés par
8762 @cindex WiFi, support matériel
8763 L'un des types de matériels où les pilotes ou les microgiciels sont le moins
8764 disponibles sont les appareils WiFi. Les appareils WiFi connus pour
8765 fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui
8766 correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent
8767 des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui
8768 correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels
8769 libres existent pour les deux et sont disponibles directement sur GuixSD,
8770 dans @var{%base-firmware} (@pxref{Référence de système d'exploitation,
8773 @cindex RYF, Respects Your Freedom
8774 La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
8775 certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
8776 Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
8777 votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
8778 Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
8780 Une autre ressource utile est le site web @uref{https://www.h-node.org/,
8781 H-Node}. Il contient un catalogue d'appareils avec des informations sur
8782 leur support dans GNU/Linux.
8785 @node Installation depuis une clef USB ou un DVD
8786 @subsection Installation depuis une clef USB ou un DVD
8788 An ISO-9660 installation image that can be written to a USB stick or burnt
8789 to a DVD can be downloaded from
8790 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz},
8791 where @var{system} is one of:
8795 pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
8798 pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
8801 @c start duplication of authentication part from ``Binary Installation''
8802 Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
8803 l'authenticité de l'image avec, de cette manière :
8806 $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8807 $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8810 Si cette commande échoue parce que vous n'avez pas la clef publique requise,
8811 lancez cette commande pour l'importer :
8814 $ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
8819 et relancez la commande @code{gpg --verify}.
8821 Cette image contient les outils nécessaires à l'installation. Elle est
8822 faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
8825 @unnumberedsubsubsec Copie sur une clef USB
8827 Pour copier l'image sur une clef USB, suivez ces étapes :
8831 Décompressez l'image avec la commande @command{xz} :
8834 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
8838 Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
8839 son nom d'appareil. En supposant que la clef usb est connue sous le nom de
8840 @file{/dev/sdX}, copiez l'image avec :
8843 dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
8847 Accéder à @file{/dev/sdX} requiert généralement les privilèges
8851 @unnumberedsubsubsec Graver sur un DVD
8853 Pour copier l'image sur un DVD, suivez ces étapes :
8857 Décompressez l'image avec la commande @command{xz} :
8860 xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
8864 Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
8865 En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
8869 growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
8872 Accéder à @file{/dev/srX} requiert généralement les privilèges
8876 @unnumberedsubsubsec Démarrage
8878 Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
8879 démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
8880 entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
8881 démarrer sur la clef USB.
8883 @xref{Installer GuixSD dans une VM}, si, à la place, vous souhaitez installer
8884 GuixSD dans une machine virtuelle (VM).
8887 @node Préparer l'installation
8888 @subsection Préparer l'installation
8890 Une fois que vous avez démarré votre ordinateur sur le média d'installation,
8891 vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont
8892 configurées et peuvent être utilisés pour lancer des commandes en root. Le
8893 TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer avec
8894 les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
8895 Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
8896 vous permet de sélectionner du texte avec le bouton gauche de la souris et
8897 de le coller en appuyant sur la molette.
8900 L'installation nécessite un accès au réseau pour que les dépendances
8901 manquantes de votre configuration système puissent être téléchargées. Voyez
8902 la section « réseau » plus bas.
8905 Le système d'installation inclus plusieurs outils usuels pour requis pour
8906 cette tâche. Mais c'est aussi un système GuixSD complet, ce qui signifie
8907 que vous pouvez installer des paquets supplémentaires si vous en avez
8908 besoin, avec @command{guix package} (@pxref{Invoquer guix package}).
8910 @subsubsection Disposition du clavier
8912 @cindex disposition du clavier
8913 L'image d'installation utilise la disposition clavier qwerty (US). Si vous
8914 voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
8915 exemple, la commande suivante sélectionne la disposition Dvorak :
8921 Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
8922 pour trouver une liste des dispositions disponibles. Lancez @command{man
8923 loadkey} pour plus d'informations.
8925 @subsubsection Réseau
8927 Run the following command to see what your network interfaces are called:
8934 @dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
8940 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
8941 Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
8942 l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
8943 est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
8944 @samp{w}, comme @samp{w1p2s0}.
8947 @item Connexion filaire
8948 Pour configure une connexion filaire, lancez la commande suivante, en
8949 remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
8953 ifconfig @var{interface} up
8956 @item Connexion sans-fil
8959 Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
8960 configuration pour l'outil de configuration @command{wpa_supplicant} (son
8961 emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
8965 nano wpa_supplicant.conf
8968 Par exemple, la déclaration qui suit peut aller dans ce fichier et
8969 fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
8970 la phrase de passe pour le réseau auquel vous vous connectez :
8974 ssid="@var{mon-ssid}"
8976 psk="la phrase de passe secrète du réseau"
8980 Démarrez le service sans-file et lancez-le en tache de fond avec la commande
8981 suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
8982 vous voulez utiliser) :
8985 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
8988 Lancez @command{man wpa_supplicant} pour plus d'informations.
8992 À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
8993 où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
8996 dhclient -v @var{interface}
8999 Essayez de pinger un serveur pour voir si le réseau fonctionne :
9005 Mettre en place un accès réseau est presque toujours une nécessité parce que
9006 l'image ne contient pas tous les logiciels et les outils dont vous pourriez
9009 @cindex installer par SSH
9010 Si vous le souhaitez, vous pouvez continuer l'installation à distance en
9011 démarrant un serveur SSH :
9014 herd start ssh-daemon
9017 Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
9018 configurer l'authentification par clef OpenSSH avant de vous connecter.
9020 @subsubsection Partitionnement
9022 À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
9023 partitionner le disque puis à formater les partitions cibles.
9025 L'image d'installation inclus plusieurs outils de partitionnement, dont
9026 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
9027 @command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
9028 disque avec le partitionnement qui vous convient :
9034 Si votre disque utilise le format des tables de partitions GUID (GPT) et que
9035 vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
9036 défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
9037 disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
9039 @cindex EFI, installation
9040 @cindex UEFI, installation
9041 @cindex ESP, partition système EFI
9042 Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
9043 avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition
9044 devrait être montée dans @file{/boot/efi} et doit avoir le drapeau
9045 @code{esp}. P.@: ex.@: pour @command{parted} :
9048 parted /dev/sda set 1 esp on
9052 @vindex grub-bootloader
9053 @vindex grub-efi-bootloader
9054 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
9055 @file{/sys/firmware/efi} exists in the installation image, then you should
9056 probably perform an EFI installation, using @code{grub-efi-bootloader}.
9057 Otherwise you should use the BIOS-based GRUB, known as
9058 @code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage}, for more info on
9062 Once you are done partitioning the target hard disk drive, you have to
9063 create a file system on the relevant partition(s)@footnote{Currently GuixSD
9064 only supports ext4 and btrfs file systems. In particular, code that reads
9065 file system UUIDs and labels only works for these file system types.}. For
9066 the ESP, if you have one and assuming it is @file{/dev/sda1}, run:
9069 mkfs.fat -F32 /dev/sda1
9072 Preferably, assign file systems a label so that you can easily and reliably
9073 refer to them in @code{file-system} declarations (@pxref{Systèmes de fichiers}).
9074 This is typically done using the @code{-L} option of @command{mkfs.ext4} and
9075 related commands. So, assuming the target root partition lives at
9076 @file{/dev/sda2}, a file system with the label @code{my-root} can be created
9080 mkfs.ext4 -L my-root /dev/sda2
9083 @cindex chiffrement du disque
9084 If you are instead planning to encrypt the root partition, you can use the
9085 Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
9086 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
9087 @code{man cryptsetup}} for more information.) Assuming you want to store
9088 the root partition on @file{/dev/sda2}, the command sequence would be along
9092 cryptsetup luksFormat /dev/sda2
9093 cryptsetup open --type luks /dev/sda2 my-partition
9094 mkfs.ext4 -L my-root /dev/mapper/my-partition
9097 Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
9098 avec une commande comme (de nouveau, en supposant que @code{my-root} est
9099 l'étiquette du système de fichiers racine) :
9102 mount LABEL=my-root /mnt
9105 Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
9106 système cible relativement à ce chemin. Si vous avez un @file{/boot} sur
9107 une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant
9108 pour qu'il puisse être trouvé par @code{guix system init} ensuite.
9110 Finally, if you plan to use one or more swap partitions (@pxref{Memory
9111 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make sure
9112 to initialize them with @command{mkswap}. Assuming you have one swap
9113 partition on @file{/dev/sda3}, you would run:
9120 Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
9121 supposant que dans le nouveau système vous voulez utiliser le fichier
9122 @file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
9123 fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
9124 Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
9125 (COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
9126 détails, regardez les pages de manuel de @command{mkswap} et
9127 @command{swapon}.} :
9130 # Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
9131 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
9132 # Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
9133 chmod 600 /mnt/swapfile
9134 mkswap /mnt/swapfile
9135 swapon /mnt/swapfile
9138 Remarquez que si vous avez chiffré la partition racine et créé un fichier
9139 d'échange dans son système de fichier comme décrit ci-dessus, alors le
9140 chiffrement protégera aussi le fichier d'échange, comme n'importe quel
9141 fichier de ce système de fichiers.
9143 @node Effectuer l'installation
9144 @subsection Effectuer l'installation
9146 Lorsque la partition cible est prête et que les autres partitions sont
9147 montées, on est prêt à commencer l'installation. Commencez par :
9150 herd start cow-store /mnt
9153 Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
9154 sorte que les paquets ajoutés pendant l'installation sont écrits sur le
9155 disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
9156 nécessaire parce que la première phase de la commande @command{guix system
9157 init} (voir plus bas) implique de télécharger ou de construire des éléments
9158 de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
9160 Ensuite, vous devrez modifier un fichier et fournir la déclaration du
9161 système à installer. Pour cela, le système d'installation propose trois
9162 éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
9163 Manual}), qui supporte la coloration syntaxique la correspondance de
9164 parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
9165 (un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
9166 vivement de stocker ce fichier sur le système de fichier racine cible,
9167 disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
9168 fichier de configuration une fois que vous aurez redémarré sur votre nouveau
9171 @xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
9172 fichier de configuration. Les exemples de configuration dont on parle dans
9173 cette section sont disponibles dans @file{/etc/configuration} sur l'image
9174 d'installation. Ainsi, pour commencer avec une configuration du système qui
9175 fournit un serveur d'affichage graphique (un système de « bureau »), vous
9176 pouvez lancer ce qui suit :
9180 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
9181 # nano /mnt/etc/config.scm
9184 Vous devriez faire attention à ce que contient votre fichier de
9185 configuration, en particulier :
9189 Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
9190 cible où vous voulez installer GRUB. Elle devrait aussi mentionner
9191 @code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
9192 ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
9193 anciens systèmes, le champs @code{target} contient un périphérique comme
9194 @code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
9195 partition EFI montée, comme @code{/boot/efi}, et assurez-vous que ce chemin
9199 Be sure that your file system labels match the value of their respective
9200 @code{device} fields in your @code{file-system} configuration, assuming your
9201 @code{file-system} configuration uses the @code{file-system-label} procedure
9202 in its @code{device} field.
9205 Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
9206 champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
9209 Une fois que vous avez fini les préparatifs sur le fichier de configuration,
9210 le nouveau système peut être initialisé (rappelez-vous que le système de
9211 fichiers racine cible est dans @file{/mnt}) :
9214 guix system init /mnt/etc/config.scm /mnt
9218 Cela copie tous les fichiers nécessaires et installe GRUB sur
9219 @file{/dev/sdX} à moins que vous ne passiez l'option
9220 @option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
9221 constructions pour les paquets manquants, ce qui peut prendre du temps.
9223 Une fois que cette commande a terminée — et on l'espère réussi ! — vous
9224 pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
9225 mot de passe @code{root} est d'abord vide ; les mots de passe des autres
9226 utilisateurs doivent être initialisés avec la commande @command{passwd} en
9227 tant que @code{root}, à mois que votre configuration ne spécifie autre chose
9228 (@pxref{user-account-password, mot de passe des comptes utilisateurs}).
9230 @cindex mettre à jour GuixSD
9231 À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le
9232 souhaitez en lançant @command{guix pull} en tant que @code{root}
9233 (@pxref{Invoquer guix pull}), puis en lançant @command{guix system
9234 reconfigure} pour construire une nouvelle génération du système avec les
9235 derniers paquets et les derniers services (@pxref{Invoquer guix system}).
9236 Nous vous recommandons de le faire régulièrement pour que votre système
9237 inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}).
9239 Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
9240 @file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou
9243 @node Installer GuixSD dans une VM
9244 @subsection Installer GuixSD sur une machine virtuelle
9246 @cindex machine virtuelle, installation de GuixSD
9247 @cindex serveur privé virtuel (VPS)
9248 @cindex VPS (serveur privé virtuel)
9249 Si vous souhaitez installer GuixSD sur une machine virtuelle (VM) ou un
9250 serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
9251 section est faite pour vous.
9253 Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer GuixSD sur
9254 une image disque, suivez ces étapes :
9258 Tout d'abord récupérez et décompressez l'image d'installation de GuixSD
9259 comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
9262 Créez une image disque qui contiendra le système installé. Pour créer une
9263 image qcow2, utilise la commande @command{qemu-img} :
9266 qemu-img create -f qcow2 guixsd.img 50G
9269 Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
9270 moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
9274 Démarrez l'image d'installation USB dans une VM :
9277 qemu-system-x86_64 -m 1024 -smp 1 \
9278 -net user -net nic,model=virtio -boot menu=on \
9279 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
9280 -drive file=guixsd.img
9283 L'ordre des périphérique est important
9285 Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
9286 le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
9287 pour valider votre choix.
9290 Vous êtes maintenant root dans la VM, continuez en suivant la procédure
9291 d'installation. @xref{Préparer l'installation}, et suivez les
9295 Une fois l'installation terminée, vous pouvez démarrer le système dans votre
9296 image @file{guixsd.img}. @xref{Lancer GuixSD dans une VM}, pour une manière de
9299 @node Construire l'image d'installation
9300 @subsection Construire l'image d'installation
9302 @cindex image d'installation
9303 L'image d'installation décrite plus haut a été construite avec la commande
9304 @command{guix system}, plus précisément :
9307 guix system disk-image gnu/system/install.scm
9310 Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
9311 sources et regardez aussi @ref{Invoquer guix system} pour plus
9312 d'informations sur l'image d'installation.
9314 @subsection Construire l'image d'installation pour les cartes ARM
9316 De nombreuses cartes ARM requièrent une variante spécifique du chargeur
9317 d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
9319 Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
9320 disponible autrement (sur un autre périphérique d'amorçage etc), il est
9321 recommandé de construire une image qui inclus le chargeur d'amorçage, plus
9325 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
9328 @code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
9329 carte invalide, une liste de cartes possibles sera affichée.
9331 @node Configuration système
9332 @section Configuration système
9334 @cindex configuration du système
9335 La distribution système Guix utilise un mécanisme de configuration du
9336 système cohérent. On veut dire par là que tous les aspects de la
9337 configuration globale du système — comme la disponibilité des services
9338 système, des fuseaux horaires, des paramètres linguistiques, des comptes
9339 utilisateurs — sont déclarés à un seul endroit. Une telle
9340 @dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
9343 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
9344 L'un des avantages de placer toute la configuration du système sous le
9345 contrôle de Guix est de permettre les mises à jour transactionnelles du
9346 système ce qui rend possible le fait de revenir en arrière à une
9347 instanciation précédent du système, si quelque chose se passait mal avec le
9348 nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
9349 réplication de la même configuration sur plusieurs machines différentes ou à
9350 différents moments dans le temps, sans avoir à recourir à des outils
9351 d'administrations supplémentaires au-dessus des outils du système.
9353 Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
9354 le point de vue de l'administrateur système en expliquant comment le système
9355 est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
9356 être étendu, par exemple pour supporter de nouveaux services systèmes.
9359 * Utiliser le système de configuration:: Personnaliser votre système
9361 * Référence de système d'exploitation:: Détail sur la déclaration de
9362 système d'exploitation.
9363 * Systèmes de fichiers:: Configurer les montages de systèmes de
9365 * Périphériques mappés:: Gestion des périphériques de bloc.
9366 * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
9367 * Régionalisation:: Paramétrer la langue et les conventions
9369 * Services:: Spécifier les services du système.
9370 * Programmes setuid:: Programmes tournant avec les privilèges root.
9371 * Certificats X.509:: Authentifier les serveurs HTTPS@.
9372 * Name Service Switch:: Configurer le « name service switch » de la
9374 * Disque de RAM initial:: Démarrage de Linux-Libre.
9375 * Configuration du chargeur d'amorçage:: Configurer le chargeur
9377 * Invoquer guix system:: Instantier une configuration du système.
9378 * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
9380 * Définir des services:: Ajouter de nouvelles définitions de services.
9383 @node Utiliser le système de configuration
9384 @subsection Utiliser le système de configuration
9386 Le système d'exploitation est configuré en fournissant une déclaration
9387 @code{operating-system} dans un fichier qui peut être passé à la command
9388 @command{guix system} (@pxref{Invoquer guix system}). Une configuration
9389 simple, avec les services systèmes par défaut, le noyau Linux-Libre par
9390 défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
9393 @findex operating-system
9395 @include os-config-bare-bones.texi
9398 Cet exemple devrait se comprendre de lui-même. Certains champs définis
9399 ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
9400 D'autres comme @code{packages} et @code{services} peuvent être omis auquel
9401 cas ils ont une valeur par défaut.
9403 Ci-dessous nous discutons des effets de certains des champs les plus
9404 importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
9405 les champs disponibles) et comment @dfn{instancier} le système
9406 d'exploitation avec @command{guix system}.
9408 @unnumberedsubsubsec Bootloader
9410 @cindex legacy boot, on Intel machines
9411 @cindex BIOS boot, on Intel machines
9414 The @code{bootloader} field describes the method that will be used to boot
9415 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
9416 mode, as in the example above. However, more recent machines rely instead
9417 on the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that
9418 case, the @code{bootloader} field should contain something along these
9422 (bootloader-configuration
9423 (bootloader grub-efi-bootloader)
9424 (target "/boot/efi"))
9427 @xref{Configuration du chargeur d'amorçage}, for more information on the available
9428 configuration options.
9430 @unnumberedsubsubsec Paquets visibles sur tout le système
9432 @vindex %base-packages
9433 Le champ @code{packages} liste les paquets qui seront visibles sur tout le
9434 système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
9435 d'environnement @code{PATH} de tous les utilisateurs — en plus des paquets
9436 par profil (@pxref{Invoquer guix package}). La variable
9437 @var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
9438 les taches de base de l'administrateur et de l'utilisateur — dont les GNU
9439 Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
9440 Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajout
9441 GNU@tie{}Screen et OpenSSH à ces paquets, récupérés depuis les modules
9442 @code{(gnu packages screen)} et @code{(gnu packages ssh)} (@pxref{Modules de paquets}). La syntaxe @code{(list paquet sortie)} peut être utilisée pour
9443 ajouter une sortie spécifique d'un paquet :
9446 (use-modules (gnu packages))
9447 (use-modules (gnu packages dns))
9451 (packages (cons (list bind "utils")
9455 @findex specification->package
9456 Se référer aux paquets par le nom de leur variable, comme @code{bind}
9457 ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
9458 rendre rapidement compte de coquilles quand on a des « variables non liées
9459 ». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
9460 le paquet, et de modifier la ligne @code{use-package-modules} en
9461 conséquence. Pour éviter cela, on peut utiliser la procédure
9462 @code{specification->package} du module @code{(gnu packages)}, qui renvoie
9463 le meilleur paquet pour un nom donné ou un nom et une version :
9466 (use-modules (gnu packages))
9470 (packages (append (map specification->package
9471 '("tcpdump" "htop" "gnupg@@2.0"))
9475 @unnumberedsubsubsec Services systèmes
9478 @vindex %base-services
9479 Le champ @code{services} liste les @dfn{services système} à rendre
9480 disponible lorsque le système démarre (@pxref{Services}). La déclaration
9481 @code{operating-system} au-dessus spécifie que, en plus des services de
9482 base, on veut que le démon ssh @command{lshd} écoute sur le port 2222
9483 (@pxref{Services réseau, @code{lsh-service}}). Sous le capot,
9484 @code{lsh-service} s'arrange pour que @code{lshd} soit lancé avec les bonnes
9485 options de la ligne de commande, éventuellement en générant des fichiers de
9486 configuration (@pxref{Définir des services}).
9488 @cindex personnalisation des services
9489 @findex modify-services
9490 Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
9491 vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
9492 (@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
9494 Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
9495 Mingetty (l'écran de connexion en console) dans la liste
9496 @var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
9497 cela, vous pouvez écrire ce qui suit dans votre déclaration de système
9501 (define %my-services
9502 ;; Ma propre liste de services.
9503 (modify-services %base-services
9504 (guix-service-type config =>
9507 (use-substitutes? #f)
9508 (extra-options '("--gc-keep-derivations"))))
9509 (mingetty-service-type config =>
9510 (mingetty-configuration
9511 (inherit config)))))
9514 (services %my-services))
9517 Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
9518 l'instance de @code{guix-service-type}, et de toutes les instances de
9519 @code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
9520 comment on fait cela : d'abord, on s'arrange pour que la configuration de
9521 départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
9522 @var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
9523 remarquez comment on utilise @code{inherit} pour créer une nouvelle
9524 configuration qui a les même valeurs que l'ancienne configuration, avec
9525 seulement quelques modifications.
9527 @cindex chiffrement du disque
9528 La configuration pour une utilisation de « bureau » typique, avec une
9529 partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
9530 utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
9531 connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
9532 l'énergie, et bien plus, ressemblerait à ceci :
9535 @include os-config-desktop.texi
9538 A graphical system with a choice of lightweight window managers instead of
9539 full-blown desktop environments would look like this:
9542 @include os-config-lightweight-desktop.texi
9545 Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
9546 @code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
9547 renvoyé par la commande @command{blkid}.
9549 @xref{Services de bureaux}, pour la liste exacte des services fournis par
9550 @var{%desktop-services}. @xref{Certificats X.509}, pour des informations
9551 sur le paquet @code{nss-certs} utilisé ici.
9553 Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
9554 service. Si vous voulez en supprimer des services, vous pouvez le faire
9555 avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
9556 Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
9557 l'expression suivante renvoie une liste qui contient tous les services dans
9558 @var{%desktop-services} sauf le service Avahi :
9561 (remove (lambda (service)
9562 (eq? (service-kind service) avahi-service-type))
9566 @unnumberedsubsubsec Instancier le système
9568 En supposant que la déclaration @code{operating-system} est stockée dans le
9569 fichier @file{my-system-config.scm}, la commande @command{guix system
9570 reconfigure my-system-config.scm} instancie cette configuration et en fait
9571 l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
9573 Pour changer la configuration du système, on met normalement à jour ce
9574 fichier et on relance @command{guix system reconfigure}. On ne devrait
9575 jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
9576 commandes qui modifient l'état du système comme @command{useradd} ou
9577 @command{grub-install}. En fait, vous devez les éviter parce que non
9578 seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
9579 à des versions précédents du système, si vous en avez besoin.
9581 @cindex revenir en arrière dans la configuration du système
9582 En parlant de revenir en arrière, à chaque fois que vous lancez
9583 @command{guix system reconfigure}, une nouvelle @dfn{génération} du système
9584 est crée — sans modifier ou supprimer les générations précédentes. Les
9585 anciennes générations du système ont une entrée dans le menu du chargeur
9586 d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
9587 serait mal passé avec la dernière génération. C'est rassurant, non ? La
9588 commande @command{guix system list-generations} liste les générations du
9589 système disponibles sur le disque. Il est possible de revenir à une
9590 ancienne génération via les commandes @command{guix system roll-back} et
9591 @command{guix system switch-generation}.
9593 Although the @command{guix system reconfigure} command will not modify
9594 previous generations, you must take care when the current generation is not
9595 the latest (e.g., after invoking @command{guix system roll-back}), since the
9596 operation might overwrite a later generation (@pxref{Invoquer guix system}).
9598 @unnumberedsubsubsec L'interface de programmation
9600 Au niveau Scheme, la grosse déclaration @code{operating-system} est
9601 instanciée avec la procédure monadique suivante (@pxref{La monad du dépôt}) :
9603 @deffn {Procédure Monadique} operating-system-derivation os
9604 Renvoie une dérivation qui construit @var{os}, un objet
9605 @code{operating-system} (@pxref{Dérivations}).
9607 La sortie de la dérivation est un répertoire qui se réfère à tous les
9608 paquets et d'autres fichiers supports requis pour instancier @var{os}.
9611 Cette procédure est fournie par le module @code{(gnu system)}. Avec
9612 @code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
9613 de GuixSD. Ouvrez-le un jour !
9616 @node Référence de système d'exploitation
9617 @subsection Référence de @code{operating-system}
9619 Cette section résume toutes les options disponibles dans les déclarations
9620 @code{operating-system} (@pxref{Utiliser le système de configuration}).
9622 @deftp {Type de données} operating-system
9623 C'est le type de données représentant une configuration d'un système
9624 d'exploitation. On veut dire par là toute la configuration globale du
9625 système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
9628 @item @code{kernel} (par défaut : @var{linux-libre})
9629 L'objet paquet d'un noyau de système d'exploitation à
9630 utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
9631 le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
9633 @item @code{kernel-arguments} (par défaut : @code{'()})
9634 Liste de chaînes ou de gexps représentant des arguments supplémentaires à
9635 passer sur la ligne de commande du noyau — p.@: ex.@:
9636 @code{("console=ttyS0")}.
9638 @item @code{bootloader}
9639 L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
9641 @item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
9643 @cindex disque de RAM initial
9644 La liste des modules du noyau linux requis dans l'image disque de RAM
9645 initiale. @xref{Disque de RAM initial}.
9647 @item @code{initrd} (par défaut : @code{base-initrd})
9648 Une procédure monadique qui renvoie un disque de RAM initial pour le noyau
9649 Linux. Ce champ est fournit pour pouvoir personnaliser son système à
9650 bas-niveau et n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
9652 @item @code{firmware} (par défaut : @var{%base-firmware})
9654 Liste les paquets de microgiciels chargeables pour le noyau de système
9657 La valeur par défaut contient les microgiciels requis pour les périphériques
9658 WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
9659 Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
9660 d'info sur les périphériques supportés.
9662 @item @code{host-name}
9665 @item @code{hosts-file}
9666 @cindex fichier hosts
9667 Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
9668 utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
9669 Library Reference Manual}). La valeur par défaut est un fichier avec des
9670 entrées pour @code{localhost} et @var{host-name}.
9672 @item @code{mapped-devices} (par défaut : @code{'()})
9673 Une liste de périphériques mappés. @xref{Périphériques mappés}.
9675 @item @code{file-systems}
9676 Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
9678 @item @code{swap-devices} (par défaut : @code{'()})
9679 @cindex espaces d'échange
9680 Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
9681 pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
9682 Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
9683 @code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
9684 sur un périphérique mappé, tant que le périphérique nécessaire et le système
9685 de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
9687 @item @code{users} (par défaut : @code{%base-user-accounts})
9688 @itemx @code{groups} (par défaut : @var{%base-groups})
9689 Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
9691 Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
9692 root » avec l'UID@tie{}0 est automatiquement ajouté.
9694 @item @code{skeletons} (par défaut : @code{(default-skeletons)})
9695 Une liste de couples composés d'un nom de fichier cible et d'un objet
9696 simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
9697 fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
9698 utilisateurs nouvellement créés.
9700 Par exemple, un valeur valide ressemblerait à cela :
9703 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
9704 (".guile" ,(plain-file "guile"
9705 "(use-modules (ice-9 readline))
9706 (activate-readline)")))
9709 @item @code{issue} (par défaut : @var{%default-issue})
9710 Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
9711 affiché lorsqu'un utilisateur se connecte sur la console.
9713 @item @code{packages} (par défaut : @var{%base-packages})
9714 L'ensemble des paquets installés dans le profil global, qui est accessible à
9715 partir de @file{/run/current-system/profile}.
9717 L'ensemble par défaut contient les utilitaires de base et c'est une bonne
9718 pratique d'installer les utilitaires non essentiels dans les profils
9719 utilisateurs (@pxref{Invoquer guix package}).
9721 @item @code{timezone}
9722 Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
9724 Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
9725 horaire correspondant à votre région. Si vous choisissez un nom de fuseau
9726 horaire invalide, @command{guix system} échouera.
9728 @item @code{locale} (par défaut : @code{"en_US.utf8"})
9729 Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
9730 GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
9732 @item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
9733 La liste des définitions de locales à compiler et qui devraient être
9734 utilisées à l'exécution. @xref{Régionalisation}.
9736 @item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
9737 La liste des paquets GNU@tie{}libc dont les données des paramètres
9738 linguistiques sont utilisées pour construire les définitions des paramètres
9739 linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
9740 qui justifient cette option.
9742 @item @code{name-service-switch} (par défaut : @var{%default-nss})
9743 La configuration de NSS de la libc (name service switch) — un objet
9744 @code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
9746 @item @code{services} (par défaut : @var{%base-services})
9747 Une liste d'objets services qui dénotent les services du système.
9750 @item @code{pam-services} (par défaut : @code{(base-pam-services)})
9752 @cindex pluggable authentication modules
9753 @c FIXME: Add xref to PAM services section.
9754 Services PAM (@dfn{pluggable authentication module}) Linux.
9756 @item @code{setuid-programs} (par défaut : @var{%setuid-programs})
9757 Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
9758 les programmes setuid. @xref{Programmes setuid}.
9760 @item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
9761 @cindex fichier sudoers
9762 Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
9763 (@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
9765 Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
9766 @command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
9767 peuvent gagner. La valeur par défaut est que seul @code{root} et les
9768 membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
9773 @node Systèmes de fichiers
9774 @subsection Systèmes de fichiers
9776 La liste des systèmes de fichiers à monter est spécifiée dans le champ
9777 @code{file-systems} de la déclaration de système d'exploitation
9778 (@pxref{Utiliser le système de configuration}). Chaque système de fichier est
9779 déclaré avec la forme @code{file-system}, comme ceci :
9783 (mount-point "/home")
9784 (device "/dev/sda3")
9788 Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
9789 l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
9792 @deftp {Type de données} file-system
9793 Les objets de ce type représentent des systèmes de fichiers à monter. Ils
9794 contiennent les membres suivants :
9798 C'est une chaîne de caractères spécifiant le type du système de fichier —
9799 p.@: ex.@: @code{"ext4"}.
9801 @item @code{mount-point}
9802 Désigne l'emplacement où le système de fichier sera monté.
9805 Ce champ nomme le système de fichier « source ». il peut être l'une de ces
9806 trois choses : une étiquette de système de fichiers, un UUID de système de
9807 fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
9808 offrent une manière de se référer à des systèmes de fichiers sans avoir à
9809 coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
9810 d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
9811 obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
9812 périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
9813 disponibles au moment de monter le périphérique.}.
9815 @findex file-system-label
9816 Les étiquettes de systèmes de fichiers sont crées avec la procédure
9817 @code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
9818 @file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
9819 système de fichiers référencé par son étiquette, donnée par la commande
9824 (mount-point "/home")
9826 (device (file-system-label "my-home")))
9830 Les UUID sont convertis à partir de leur représentation en chaîne de
9831 caractères (montrée par la command @command{tune2fs -l}) en utilisant la
9832 forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
9833 octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
9834 RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
9835 systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
9836 que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
9841 (mount-point "/home")
9843 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
9846 Lorsque la source d'un système de fichiers est un périphérique mappé
9847 (@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
9848 nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
9849 Cela est requis pour que le système sache que monter ce système de fichier
9850 dépend de la présence du périphérique mappé correspondant.
9852 @item @code{flags} (par défaut : @code{'()})
9853 C'est une liste de symboles qui dénotent des drapeaux de montage. Les
9854 drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
9855 (interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
9856 setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
9858 @item @code{options} (par défaut : @code{#f})
9859 C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
9862 @item @code{mount?} (par défaut : @code{#t})
9863 Cette valeur indique s'il faut monter automatiquement le système de fichier
9864 au démarrage du système. Lorsque la valeur est @code{#f}, le système de
9865 fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
9866 @command{mount}) mais n'est pas monté automatiquement.
9868 @item @code{needed-for-boot?} (par défaut : @code{#f})
9869 Cette valeur booléenne indique si le système de fichier est nécessaire au
9870 démarrage. Si c'est vrai alors le système de fichier est monté au
9871 chargement du disque de RAM initial. C'est toujours le cas par exemple du
9872 système de fichiers racine.
9874 @item @code{check?} (par défaut : @code{#t})
9875 Cette valeur booléenne indique si le système de fichier doit être vérifié
9878 @item @code{create-mount-point?} (par défaut : @code{#f})
9879 Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
9882 @item @code{dependencies} (par défaut : @code{'()})
9883 C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
9884 représentent les systèmes de fichiers qui doivent être montés ou les
9885 périphériques mappés qui doivent être ouverts avant (et monté ou fermés
9888 Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
9889 est une dépendance de @file{/sys/fs/cgroup/cpu} et
9890 @file{/sys/fs/cgroup/memory}.
9892 Un autre exemple est un système de fichier qui dépend d'un périphérique
9893 mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
9897 Le module @code{(gnu system file-systems)} exporte les variables utiles
9900 @defvr {Variable Scheme} %base-file-systems
9901 Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
9902 normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
9903 (voir plus bas). Les déclarations de systèmes d'exploitation devraient au
9907 @defvr {Variable Scheme} %pseudo-terminal-file-system
9908 C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
9909 @dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
9910 (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
9911 pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
9915 @defvr {Variable Scheme} %shared-memory-file-system
9916 Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
9917 partage de mémoire entre processus (@pxref{Memory-mapped I/O,
9918 @code{shm_open},, libc, The GNU C Library Reference Manual}).
9921 @defvr {Variable Scheme} %immutable-store
9922 Ce système de fichiers effectue un « montage lié » en lecture-seule de
9923 @file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
9924 les utilisateurs dont @code{root}. Cela évite que des logiciels qui
9925 tournent en @code{root} ou des administrateurs systèmes ne modifient
9926 accidentellement le dépôt.
9928 Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
9929 remonté en lecture-écriture dans son propre « espace de nom ».
9932 @defvr {Variable Scheme} %binary-format-file-system
9933 Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
9934 quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
9935 demande que le module du noyau @code{binfmt.ko} soit chargé.
9938 @defvr {Variable Scheme} %fuse-control-file-system
9939 Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
9940 privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
9941 utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
9945 @node Périphériques mappés
9946 @subsection Périphériques mappés
9948 @cindex mappage de périphériques
9949 @cindex périphériques mappés
9950 Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
9951 périphérique bloc, comme une partition sur un disque dur, peut être
9952 @dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
9953 avec des calculs supplémentaires sur les données qui naviguent entre les
9954 deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
9955 concept de « périphérique mappé » et celle d'un système de fichiers : les
9956 deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
9957 faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
9958 Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
9959 avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
9960 hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
9961 de périphériques chiffrés : toutes les écritures sont sur le périphérique
9962 mappé sont chiffrées, toutes les lectures déchiffrées, de manière
9963 transparente. Guix étend cette notion en considérant que tout périphérique
9964 ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
9965 manière créent un nouveau périphérique ; par exemple, les périphériques RAID
9966 sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
9967 disque ou des partitions, en un nouveau périphérique en tant qu'unique
9968 partition. Un autre exemple, qui n'est pas encore disponible, sont les
9969 volumes logiques LVM.
9971 Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
9972 définie comme suit ; par exemple, voir ci-dessous.
9974 @deftp {Type de données} mapped-device
9975 Les objets de ce type représentent des mappages de périphériques qui seront
9976 effectués au démarrage du système.
9980 C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
9981 comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
9982 assembler pour en créer un nouveau.
9985 Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
9986 mappeurs noyaux comme les périphériques chiffrés de type
9987 @code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
9988 périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
9989 de type @code{raid-device-mapping}, il faut donner le nom complet comme
9993 Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
9994 @var{source} est mappés sur @var{target}.
9998 @defvr {Variable Scheme} luks-device-mapping
9999 Cela définie les périphériques blocs chiffrés en LUKS avec
10000 @command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
10001 noyau Linux @code{dm-crypt}.
10004 @defvr {Variable Scheme} raid-device-mapping
10005 Cela définie un périphérique RAID qui est assemblé avec la commande
10006 @code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
10007 approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
10008 RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
10011 @cindex chiffrement du disque
10013 L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
10014 @file{/dev/mapper/home} avec LUKS —
10015 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
10016 mécanisme standard pour chiffrer les disques. Le périphérique
10017 @file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
10018 déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10022 (source "/dev/sda3")
10024 (type luks-device-mapping))
10027 Autrement, pour devenir indépendant du numéro de périphérique, on peut
10028 obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
10029 une commande comme :
10032 cryptsetup luksUUID /dev/sda3
10035 et l'utiliser ainsi :
10039 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
10041 (type luks-device-mapping))
10044 @cindex chiffrement de l'espace d'échange
10045 Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
10046 d'échange peut contenir des données sensibles. Une manière de faire cela
10047 est d'utiliser un fichier d'échange dans un système de fichiers sur un
10048 périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
10049 d'échange est chiffré parce que tout le périphérique est chiffré.
10050 @xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
10052 Un périphérique RAID formé des partitions @file{/dev/sda1} et
10053 @file{/dev/sdb1} peut être déclaré ainsi :
10057 (source (list "/dev/sda1" "/dev/sdb1"))
10058 (target "/dev/md0")
10059 (type raid-device-mapping))
10062 Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
10063 @code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10064 Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
10065 pendant la création initiale du périphérique RAID et est ensuite déterminé
10069 @node Comptes utilisateurs
10070 @subsection Comptes utilisateurs
10072 @cindex utilisateurs
10074 @cindex comptes utilisateurs
10075 Les comptes utilisateurs et les groupes sont gérés entièrement par la
10076 déclaration @code{operating-system}. Ils sont spécifiés avec les formes
10077 @code{user-account} et @code{user-group} :
10083 (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
10085 "video" ;périphériques réseaux comme les webcams
10086 "cdrom")) ;le bon vieux CD-ROM
10087 (comment "Bob's sister")
10088 (home-directory "/home/alice"))
10091 Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
10092 système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
10093 dans la déclaration @code{operating-system} existent, et avec les propriétés
10094 spécifiées. Ainsi, les modifications ou les créations de comptes ou de
10095 groupes effectuées directement en invoquant des commandes comme
10096 @command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
10097 permet de s'assurer que le système reste exactement tel que déclaré.
10099 @deftp {Type de données} user-account
10100 Les objets de se type représentent les comptes utilisateurs. Les membres
10101 suivants peuvent être spécifiés :
10105 Le nom du compte utilisateur.
10109 C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
10110 utilisateur auquel ce compte appartient.
10112 @item @code{supplementary-groups} (par défaut : @code{'()})
10113 Éventuellement, cela peut être définie comme une liste de noms de groupes
10114 auxquels ce compte appartient.
10116 @item @code{uid} (par défaut : @code{#f})
10117 C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
10118 dernier cas, le nombre est choisi automatiquement par le système à la
10119 création du compte.
10121 @item @code{comment} (par défaut : @code{""})
10122 Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
10124 @item @code{home-directory}
10125 C'est le nom du répertoire personnel du compte.
10127 @item @code{create-home-directory?} (par défaut : @code{#t})
10128 Indique si le répertoire personnel du compte devrait être créé s'il n'existe
10131 @item @code{shell} (par défaut : Bash)
10132 C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
10133 comme shell (@pxref{G-Expressions}).
10135 @item @code{system?} (par défaut : @code{#f})
10136 C'est une valeur booléenne qui indique si le compte est un compte « système
10137 ». Les comptes systèmes sont parfois traités à part ; par exemple, les
10138 gestionnaires de connexion graphiques ne les liste pas.
10140 @anchor{user-account-password}
10141 @item @code{password} (par défaut : @code{#f})
10142 Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
10143 de passe utilisateurs en tant que @code{root} avec la commande
10144 @command{passwd}, puis laisseriez l'utilisateur le changer avec
10145 @command{passwd}. Les mots de passes définis avec @command{passwd} sont
10146 bien sûr préservés après redémarrage et reconfiguration.
10148 Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
10149 ce champ doit contenir le mot de passe chiffré, comme une chaîne de
10150 caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
10151 plus d'information sur le chiffrement des mots de passe et
10152 @ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
10153 sur la procédure @code{crypt} de Guile.
10159 Les déclarations de groupes sont encore plus simple :
10162 (user-group (name "students"))
10165 @deftp {Type de données} user-group
10166 C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
10173 @item @code{id} (par défaut : @code{#f})
10174 L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
10175 est alloué automatiquement lorsque le groupe est créé.
10177 @item @code{system?} (par défaut : @code{#f})
10178 Cette valeur booléenne indique si le groupe est un groupe « système ». les
10179 groupes systèmes ont un numéro d'ID bas.
10181 @item @code{password} (par défaut : @code{#f})
10182 Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
10183 bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
10189 Par simplicité, une variable liste les groupes utilisateurs de base auxquels
10190 on pourrait s'attendre :
10192 @defvr {Variable Scheme} %base-groups
10193 C'est la liste des groupes utilisateur de base que les utilisateurs et les
10194 paquets s'attendent à trouver sur le système. Cela comprend des groupes
10195 comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
10196 contrôler l'accès à certains périphériques, comme « audio », « disk » et «
10200 @defvr {Variable Scheme} %base-user-accounts
10201 C'est la liste des compte du système de base que les programmes peuvent
10202 s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
10204 Remarquez que le compte « root » n'est pas défini ici. C'est un cas
10205 particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
10208 @node Régionalisation
10209 @subsection Régionalisation
10211 @cindex paramètres linguistiques
10212 Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
10213 langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
10214 Library Reference Manual}). Chaque paramètre linguistique a un nom de la
10215 forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
10216 ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
10217 avec les conventions culturelles du Luxembourg, en utilisant l'encodage
10220 @cindex définition des paramètres linguistiques
10221 Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
10222 pour la machine en utilisant le champ @code{locale} de la déclaration
10223 @code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
10225 Les paramètres régionaux choisis sont automatiquement ajoutés aux
10226 définitions des @dfn{paramètres régionaux} connues par le système au besoin,
10227 avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
10228 @code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
10229 @code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
10230 le champ @code{locale-definitions} de @code{operating-system} — c'est utile
10231 par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
10232 L'ensemble par défaut de définitions comprend certains paramètres
10233 linguistiques parmi les plus utilisés, mais pas toutes les variantes
10234 disponibles, pour gagner de la place.
10236 Par exemple, pour ajouter les paramètres pour le frison septentrional en
10237 Allemagne, la valeur de ce champ serait :
10240 (cons (locale-definition
10241 (name "fy_DE.utf8") (source "fy_DE"))
10242 %default-locale-definitions)
10245 De me, pour gagner de la place, on peut vouloir lister dans
10246 @code{locale-definitions} seulement les paramètres qui sont vraiment
10247 utilisés, comme dans :
10250 (list (locale-definition
10251 (name "ja_JP.eucjp") (source "ja_JP")
10252 (charset "EUC-JP")))
10256 Les définitions des paramètres linguistiques compilées sont disponibles dans
10257 @file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
10258 libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
10259 Guix cherche les données de régionalisation. Cet emplacement peut être
10260 modifié avec la variable d'environnement @code{LOCPATH}
10261 (@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
10263 La forme @code{locale-definition} est fournie par le module @code{(gnu
10264 system locale)}. Des détails sont disponibles plus bas.
10266 @deftp {Type de données} locale-definition
10267 C'est le type de données d'une définition de paramètres linguistiques.
10272 Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
10273 Library Reference Manual}, pour en savoir plus sur les noms de paramètres
10276 @item @code{source}
10277 Le nom de la source pour ce paramètre linguistique. C'est typiquement la
10278 partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
10280 @item @code{charset} (par défaut : @code{"UTF-8"})
10281 Le « jeu de caractères » d'un paramètre linguistique,
10282 @uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
10287 @defvr {Variable Scheme} %default-locale-definitions
10288 Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
10289 comme valeur par défaut pour le champ @code{locale-definitions} des
10290 déclarations @code{operating-system}.
10292 @cindex nom de paramètre linguistique
10293 @cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
10294 Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
10295 caractère normalisé} pour la partie qui suit le point dans le nom
10296 (@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
10297 Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
10298 @emph{pas}, disons, @code{uk_UA.UTF-8}.
10301 @subsubsection Considérations sur la compatibilité des données linguistiques
10303 @cindex incompatibilité, des données linguistiques
10304 Les déclaration @code{operating-system} fournissent un champ
10305 @code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
10306 compiler les déclarations de paramètres linguistiques
10307 (@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
10308 », vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
10309 des données linguistique est parfois incompatible d'une version de la libc à
10312 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
10313 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
10314 Par exemple, un programme lié à la libc version 2.21 est incapable de lire
10315 les données linguistiques produites par la libc 2.22 ; pire, ce programme
10316 @emph{plante} plutôt que d'ignorer les données linguistiques
10317 incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
10318 sauteront simplement les données linguistiques incompatibles, ce qui est
10319 déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
10320 mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
10321 les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
10322 @code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
10324 Le « problème » avec GuixSD c'est que les utilisateurs ont beaucoup de
10325 liberté : ils peuvent choisir s'ils veulent et quand ils veulent mettre à
10326 jour les logiciels de leur profil, et peuvent utiliser une version
10327 différente de la libc de celle que l'administrateur système utilise pour
10328 construire les données linguistiques du système global.
10330 Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
10331 propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
10332 (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
10334 Cependant, c'est encore mieux si les données linguistiques du système dans
10335 @file{/run/current-system/locale} étaient construites avec les versions de
10336 la libc utilisées sur le système, pour que tous les programmes puissent y
10337 accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
10338 cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
10339 champ @code{locale-libcs} de @code{operating-system} :
10342 (use-package-modules base)
10346 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
10349 cet exemple créera un système contenant les définitions des paramètres
10350 linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
10351 @file{/run/current-system/locale}.
10355 @subsection Services
10357 @cindex services systèmes
10358 Une part importante de la préparation d'une déclaration
10359 @code{operating-system} est la liste des @dfn{services systèmes} et de leur
10360 configuration (@pxref{Utiliser le système de configuration}). Les services
10361 systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
10362 requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
10364 GuixSD a une définition large de « service » (@pxref{Composition de services}),
10365 mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
10366 (@pxref{Services Shepherd}). Sur un système lancé, la commande
10367 @command{herd} vous permet de lister les services disponibles, montrer leur
10368 statut, les démarrer et les arrêter, ou faire d'autres opérations
10369 spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
10376 La commande ci-dessus, lancée en @code{root}, liste les services
10377 actuellement définis. La commande @command{herd doc} montre un synopsis du
10382 Run libc's name service cache daemon (nscd).
10385 Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
10386 l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
10387 service nscd et redémarrent le serveur d'affichage Xorg :
10391 Service nscd has been stopped.
10392 # herd restart xorg-server
10393 Service xorg-server has been stopped.
10394 Service xorg-server has been started.
10397 Les sections suivantes documentent les services disponibles, en commençant
10398 par les services de base qui peuvent être utilisés avec une déclaration
10399 @code{operating-system}.
10402 * Services de base:: Services systèmes essentiels.
10403 * Exécution de tâches planifiées:: Le service mcron.
10404 * Rotation des journaux:: Le service rottlog.
10405 * Services réseau:: Paramétres réseau, démon SSH, etc.
10406 * Système de fenêtrage X:: Affichage graphique.
10407 * Services d'impression:: Support pour les imprimantes locales et
10409 * Services de bureaux:: D-Bus et les services de bureaux.
10410 * Services de son:: Services ALSA et Pulseaudio.
10411 * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
10412 * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
10413 * Services de messagerie:: Services de messagerie.
10414 * Services de téléphonie:: Services de téléphonie.
10415 * Services de surveillance:: Services de surveillance.
10416 * Services Kerberos:: Services Kerberos.
10417 * Services web:: Services web.
10418 * Services de certificats:: Certificats TLS via Let's Encrypt.
10419 * Services DNS:: Démons DNS@.
10420 * Services VPN:: Démons VPN
10421 * Système de fichiers en réseau:: Services liés à NFS@.
10422 * Intégration continue:: Le service Cuirass.
10423 * Power Management Services:: Extending battery life.
10424 * Services audio:: MPD@.
10425 * Services de virtualisation:: Services de virtualisation.
10426 * Services de contrôle de version:: Fournit des accès distants à des
10428 * Services de jeu:: Serveurs de jeu.
10429 * Services divers:: D'autres services.
10432 @node Services de base
10433 @subsubsection Services de base
10435 Le module @code{(gnu services base)} fournit des définitions de services
10436 poru les services de base qu'on peut attendre du système. Les services
10437 exportés par ce module sort listés ci-dessous.
10439 @defvr {Variable Scheme} %base-services
10440 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
10441 attendre du système : un service de connexion (mingetty) sur chaque tty,
10442 syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
10443 périphériques udev, et plus.
10445 C'est la valeur par défaut du champ @code{services} des déclarations
10446 @code{operating-system}. Habituellement, lors de la personnalisation d'un
10447 système, vous voudrez ajouter des services à ceux de @var{%base-services},
10451 (cons* (avahi-service) (lsh-service) %base-services)
10455 @defvr {Variable Scheme} special-files-service-type
10456 C'est le service qui met en place des « fichiers spéciaux » comme
10457 @file{/bin/sh} ; une instance de ce service fait partie de
10458 @code{%base-services}.
10460 La valeur associée avec les services @code{special-files-service-type} doit
10461 être une liste de couples dont le premier élément est le « fichier spécial »
10462 et le deuxième sa cible. Par défaut il s'agit de :
10464 @cindex @file{/bin/sh}
10465 @cindex @file{sh}, dans @file{/bin}
10467 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
10470 @cindex @file{/usr/bin/env}
10471 @cindex @file{env}, dans @file{/usr/bin}
10472 Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
10473 pouvez changer cela en :
10476 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
10477 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
10480 Comme il fait parti de @code{%base-services}, vous pouvez utiliser
10481 @code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
10482 (@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
10483 simple d'ajouter un fichier spécial est d'utiliser la procédure
10484 @code{extra-special-file} (voir plus bas).
10487 @deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
10488 Utilise @var{target} comme « fichier spécial » @var{file}.
10490 Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
10491 votre déclaration de système d'exploitation crée un lien symbolique
10492 @file{/usr/bin/env} :
10495 (extra-special-file "/usr/bin/env"
10496 (file-append coreutils "/bin/env"))
10500 @deffn {Procédure Scheme} host-name-service @var{name}
10501 Renvoie un service qui paramètre le nom d'hôte à @var{name}.
10504 @deffn {Procédure Scheme} login-service @var{config}
10505 Renvoie un service pour lancer login en suivant @var{config}, un objet
10506 @code{<login-configuration>} qui spécifie le message du jour, entre autres
10510 @deftp {Type de données} login-configuration
10511 Le type de données qui représente la configuration de login.
10516 @cindex message du jour
10517 Un objet simili-fichier contenant le « message du jour ».
10519 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
10520 Permet les mots de passes vides par défaut pour que les utilisateurs
10521 puissent se connecter au compte « root » la première fois après sa création.
10526 @deffn {Procédure Scheme} mingetty-service @var{config}
10527 Renvoie un service qui lance mingetty en suivant @var{config}, un objet
10528 @code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
10532 @deftp {Type de données} mingetty-configuration
10533 C'est le type de données représentant la configuration de Mingetty, qui
10534 fournit l'implémentation par défaut de l'écran de connexion des consoles
10540 Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
10543 @item @code{auto-login} (par défaut : @code{#f})
10544 Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
10545 dénotant le nom d'utilisateur pour lequel le système se connecte
10546 automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
10547 d'utilisateur et un mot de passe pour se connecter.
10549 @item @code{login-program} (par défaut : @code{#f})
10550 Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
10551 est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
10552 dénotant le nom d'un programme de connexion.
10554 @item @code{login-pause?} (par défaut : @code{#f})
10555 Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
10556 devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
10558 @item @code{mingetty} (par défaut : @var{mingetty})
10559 Le paquet Mingetty à utiliser.
10564 @deffn {Procédure Scheme} agetty-service @var{config}
10565 Renvoie un service pour lancer agetty en suivant @var{config}, un objet
10566 @code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
10570 @deftp {Type de données} agetty-configuration
10571 Ce type de données représente la configuration de agetty, qui implémente
10572 l'écran de connexion des consoles virtuelles et series. Voir la page de
10573 manuel de @code{agetty(8)} pour plus d'informations.
10578 Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
10579 @code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
10580 raisonnable d'un port série utilisé par le noyau Linux.
10582 Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
10583 ligne de commande du noyau, agetty extraira le nom du périphérique du port
10584 série à partir de cette option.
10586 Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
10587 la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
10588 du port série et l'utilisera.
10590 Dans les deux cas, agetty laissera les autres paramètres du périphérique
10591 série (baud, etc) sans y toucher — dans l'espoir que Linux leur a assigné
10592 les bonnes valeurs.
10594 @item @code{baud-rate} (par défaut : @code{#f})
10595 Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
10596 des virgules, en ordre décroissant.
10598 @item @code{term} (par défaut : @code{#f})
10599 Une chaîne contenant la valeur utilisée pour la variable d'environnement
10602 @item @code{eight-bits?} (par défaut : @code{#f})
10603 Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
10604 caractères 8-bit et la détection de parité est désactivée.
10606 @item @code{auto-login} (par défaut : @code{#f})
10607 Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
10608 l'utilisateur spécifié sera automatiquement connecté sans demande du nom
10609 d'utilisateur ni du mot de passe.
10611 @item @code{no-reset?} (par défaut : @code{#f})
10612 Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
10615 @item @code{host} (par défaut : @code{#f})
10616 Cette option accepte une chaîne contenant le « login_host », qui sera écrit
10617 dans le fichier @file{/var/run/utmpx}.
10619 @item @code{remote?} (par défaut : @code{#f})
10620 Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
10621 une option fakehost @code{-r} à la ligne de commande du programme de
10622 connexion spécifié dans @var{login-program}.
10624 @item @code{flow-control?} (par défaut : @code{#f})
10625 Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
10628 @item @code{no-issue?} (par défaut : @code{#f})
10629 Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
10630 sera pas affiché avant de présenter l'écran de connexion.
10632 @item @code{init-string} (par défaut : @code{#f})
10633 Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
10634 modem avant toute autre chose. Elle peut être utilisée pour initialiser un
10637 @item @code{no-clear?} (par défaut : @code{#f})
10638 Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
10639 montrer l'écran de connexion.
10641 @item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
10642 Cette option doit être soit une gexp dénotant le nom d'un programme de
10643 connexion, soit non définie, auquel cas la valeur par défaut est la commande
10644 @command{login} de la suite d'outils Shadow.
10646 @item @code{local-line} (par défaut : @code{#f})
10647 Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
10648 comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
10649 est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
10651 @item @code{extract-baud?} (par défaut : @code{#f})
10652 Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
10653 de baud depuis les messages de statut produits par certains modems.
10655 @item @code{skip-login?} (par défaut : @code{#f})
10656 Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
10657 peut être utilisée avec le champ @var{login-program} pour utiliser des
10658 systèmes de connexion non standards.
10660 @item @code{no-newline?} (par défaut : @code{#f})
10661 Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
10662 d'afficher le fichier @file{/etc/issue}.
10664 @c Is this dangerous only when used with login-program, or always?
10665 @item @code{login-options} (par défaut : @code{#f})
10666 Cette option accepte une chaîne de caractères contenant des options passées
10667 au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
10668 conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
10669 d'utilisateur contenant des options incluses qui pourraient être analysées
10670 par le programme de connexion.
10672 @item @code{login-pause} (par défaut : @code{#f})
10673 Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
10674 montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
10675 pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
10677 @item @code{chroot} (par défaut : @code{#f})
10678 Change de racine dans le répertoire donné. Cette option accepte un chemin
10679 en tant que chaîne de caractères.
10681 @item @code{hangup?} (par défaut : @code{#f})
10682 Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
10683 le terminal spécifié.
10685 @item @code{keep-baud?} (par défaut : @code{#f})
10686 Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
10687 Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
10688 caractères @key{BREAK}.
10690 @item @code{timeout} (par défaut : @code{#f})
10691 Lorsque la valeur est un nombre entier, termine la session si aucun nom
10692 d'utilisateur n'a pu être lu après @var{timeout} secondes.
10694 @item @code{detect-case?} (par défaut : @code{#f})
10695 Lorsque la valeur est @code{#t}, active le support pour la détection des
10696 terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
10697 d'utilisateur qui ne contient que des majuscules indique un terminal en
10698 majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
10699 que cela ne fonctionne pas avec les caractères unicode.
10701 @item @code{wait-cr?} (par défaut : @code{#f})
10702 Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
10703 un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
10704 l'écran de connexion. Cela est typiquement utilisé avec l'option
10707 @item @code{no-hints?} (par défaut : @code{#f})
10708 Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
10709 verrouillages numériques, majuscule et défilement.
10711 @item @code{no-hostname?} (par défaut : @code{#f})
10712 Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
10713 aucun nom d'hôte ne sera affiché.
10715 @item @code{long-hostname?} (par défaut : @code{#f})
10716 Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
10717 la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
10718 @code{gethostname} ou @code{getaddrinfo} sera affiché.
10720 @item @code{erase-characters} (par défaut : @code{#f})
10721 Cette option accepte une chaîne de caractères de caractères supplémentaires
10722 qui devraient être interprétés comme des effacements lorsque l'utilisateur
10723 les tape dans leur nom d'utilisateur.
10725 @item @code{kill-characters} (par défaut : @code{#f})
10726 Cette option accepte une chaîne de caractères qui devrait être interprété
10727 comme signifiant « ignore tous les caractères précédent » (aussi appelé un
10728 caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
10730 @item @code{chdir} (par défaut : @code{#f})
10731 Cette option accepte, en tant que chaîne de caractères, un chemin vers un
10732 répertoire dans lequel se trouvera la commande avant la connexion.
10734 @item @code{delay} (par défaut : @code{#f})
10735 Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
10736 avant d'ouvrir le tty et afficher l'écran de connexion.
10738 @item @code{nice} (par défaut : @code{#f})
10739 Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
10740 programme @command{login} tourne.
10742 @item @code{extra-options} (par défaut : @code{'()})
10743 Cette option fournie un « mécanisme de secours » pour que l'utilisateur
10744 puisse ajouter des arguments de la ligne de commande arbitraires à
10745 @command{agetty} comme une liste de chaînes de caractères.
10750 @deffn {Procédure Scheme} kmscon-service-type @var{config}
10751 Renvoie un service qui lance
10752 @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
10753 @var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
10754 sur lequel tourner, entre autres choses.
10757 @deftp {Type de données} kmscon-configuration
10758 C'est le type de données représentant la configuration de Kscon, qui
10759 implémente l'écran de chargement de la console virtuelle.
10763 @item @code{virtual-terminal}
10764 Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
10766 @item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
10767 Une gexp qui dénote le nom d'un programme de connexion. le programme de
10768 connexion par défaut est @command{login} de la suite d'outils Shadow.
10770 @item @code{login-arguments} (par défaut : @code{'("-p")})
10771 Une liste d'arguments à passer à @command{login}.
10773 @item @code{hardware-acceleration?} (par défaut : #f)
10774 S'il faut utiliser l'accélération matérielle.
10776 @item @code{kmscon} (par défaut : @var{kmscon})
10777 Le paquet Kmscon à utiliser.
10782 @cindex name service cache daemon
10784 @deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
10785 [#:name-services '()]
10786 Renvoie un service qui lance le démon de cache de services de noms de la
10787 libc (nscd) avec la @var{config} donnée — un objet
10788 @code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
10791 @defvr {Variable Scheme} %nscd-default-configuration
10792 C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
10793 utilisée par @code{nscd-service}. Elle utilise les caches définis par
10794 @var{%nscd-default-caches} ; voir plus bas.
10797 @deftp {Type de données} nscd-configuration
10798 C'est le type de données qui représente la configuration du démon de cache
10799 de services de noms (nscd).
10803 @item @code{name-services} (par défaut : @code{'()})
10804 Liste des paquets dénotant des @dfn{services de noms} qui doivent être
10805 visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
10807 @item @code{glibc} (par défaut : @var{glibc})
10808 Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
10811 @item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
10812 Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
10813 envoyée lorsque @code{debug-level} est strictement positif.
10815 @item @code{debug-level} (par défaut : @code{0})
10816 Entier qui dénote le niveau de débogage. Les entiers les plus grands
10817 signifient plus de sortie de débogage.
10819 @item @code{caches} (par défaut : @var{%nscd-default-caches})
10820 Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
10826 @deftp {Type de données} nscd-cache
10827 Type de données représentant une base de données de cache de nscd et ses
10832 @item @code{database}
10833 C'est un symbole qui représente le nom de la base de donnée à mettre en
10834 cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
10835 @code{services} qui désignent les bases de données NSS correspondantes
10836 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
10838 @item @code{positive-time-to-live}
10839 @itemx @code{negative-time-to-live} (par défaut : @code{20})
10840 Un entier qui représente le nombre de secondes pendant lesquelles un
10841 résultat positif ou négatif reste en cache.
10843 @item @code{check-files?} (par défaut : @code{#t})
10844 Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
10847 Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
10848 nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
10851 @item @code{persistent?} (par défaut : @code{#t})
10852 Indique si le cache devrait être stocké de manière persistante sur le
10855 @item @code{shared?} (par défaut : @code{#t})
10856 Indique si le cache devrait être partagé entre les utilisateurs.
10858 @item @code{max-database-size} (par défaut : 32@tie{}MiB)
10859 Taille maximale en octets de la base de données en cache.
10861 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
10862 @c settings, so leave them out.
10867 @defvr {Variable Scheme} %nscd-default-caches
10868 Liste d'objets @code{<nscd-cache>} utilisés par défaut par
10869 @code{nscd-configuration} (voir plus haut).
10871 Elle active la mise en cache persistante et agressive des recherches de
10872 services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
10873 d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
10874 et une protection de votre vie privée plus efficace — souvent le résultat
10875 des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
10876 de nom externes n'ont même pas besoin d'être questionnés.
10879 @anchor{syslog-configuration-type}
10882 @deftp {Type de données} syslog-configuration
10883 Ce type de données représente la configuration du démon syslog.
10886 @item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
10887 Le démon syslog à utiliser.
10889 @item @code{config-file} (par défaut : @code{%default-syslog.conf})
10890 Le fichier de configuration de syslog à utiliser.
10895 @anchor{syslog-service}
10897 @deffn {Procédure Scheme} syslog-service @var{config}
10898 Renvoie un service qui lance un démon syslog en suivant @var{config}.
10900 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
10901 d'informations sur la syntaxe du fichier de configuration.
10904 @anchor{guix-configuration-type}
10905 @deftp {Type de données} guix-configuration
10906 Ce type de données représente la configuration du démon de construction de
10907 Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
10910 @item @code{guix} (par défaut : @var{guix})
10911 Le paquet Guix à utiliser.
10913 @item @code{build-group} (par défaut : @code{"guixbuild"})
10914 Nom du groupe des comptes utilisateurs de construction.
10916 @item @code{build-accounts} (par défaut : @code{10})
10917 Nombre de comptes utilisateurs de construction à créer.
10919 @item @code{authorize-key?} (par défaut : @code{#t})
10920 @cindex substituts, autorisations
10921 Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
10922 — par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}).
10924 @vindex %default-authorized-guix-keys
10925 @item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
10926 La liste des fichiers de clefs autorisées pour les imports d'archives, en
10927 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}
10928 (@pxref{Substituts}).
10930 @item @code{use-substitutes?} (par défaut : @code{#t})
10931 S'il faut utiliser les substituts.
10933 @item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
10934 La liste des URL où trouver des substituts par défaut.
10936 @item @code{max-silent-time} (par défaut : @code{0})
10937 @itemx @code{timeout} (par défaut : @code{0})
10938 Le nombre de secondes de silence et le nombre de secondes d'inactivité,
10939 respectivement, après lesquelles un processus de construction son délai
10940 d'attente. Une valeur de zéro désactive le délai d'attente.
10942 @item @code{log-compression} (par défaut : @code{'bzip2})
10943 Le type de compression utilisé par les journaux de construction — parmi
10944 @code{gzip}, @code{bzip2} et @code{none}.
10946 @item @code{extra-options} (par défaut : @code{'()})
10947 Liste d'options supplémentaires de la ligne de commande pour
10948 @command{guix-daemon}.
10950 @item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
10951 Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
10954 @item @code{http-proxy} (par défaut : @code{#f})
10955 Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
10956 sortie fixe et les substituts.
10958 @item @code{tmpdir} (par défaut : @code{#f})
10959 Un répertoire où @command{guix-daemon} effectuera ses constructions.
10964 @deffn {Procédure Scheme} guix-service @var{config}
10965 Renvoie un service qui fait tourner le démon de construction de Guix en
10966 suivant @var{config}.
10969 @deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
10970 Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
10971 règles udev peuvent être fournies comme une liste de fichier via la variable
10972 @var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
10973 @code{(gnu services base)} simplifient la création de ces fichiers de règle.
10975 @deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
10976 Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
10977 définie par le litéral @var{contents}.
10979 Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
10980 sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
10981 script à la détection du périphérique USB avec l'identifiant de produit
10985 (define %example-udev-rule
10987 "90-usb-thing.rules"
10988 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
10989 "ATTR@{product@}==\"Example\", "
10990 "RUN+=\"/path/to/script\"")))
10994 Ici on montre comment le service @var{udev-service} par défaut peut être
10995 étendu avec cette règle.
11001 (modify-services %desktop-services
11002 (udev-service-type config =>
11003 (udev-configuration (inherit config)
11004 (rules (append (udev-configuration-rules config)
11005 (list %example-udev-rule))))))))
11008 @deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
11009 Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
11010 dans @var{file}, un objet simili-fichier.
11012 L'exemple suivant montre comment utiliser un fichier de règles existant.
11015 (use-modules (guix download) ;pour url-fetch
11016 (guix packages) ;pour origin
11019 (define %android-udev-rules
11021 "51-android-udev.rules"
11022 (let ((version "20170910"))
11025 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
11026 "android-udev-rules/" version "/51-android.rules"))
11028 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
11032 En plus, les définitions des paquets de Guix peuvent être inclus dans
11033 @var{rules} pour étendre les règles avec les définitions trouvées dans leur
11034 sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
11035 @var{file->udev-rule} précédent, on aurait pu utiliser le paquet
11036 @var{android-udev-rules} qui existe dans le module @code{(gnu packages
11039 L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
11040 pour que l'outil Android @command{adb} puisse détecter les appareils sans
11041 privilège root. Il détaille aussi comment créer le grope @code{adbusers},
11042 requis pour le bon fonctionnement des règles définies dans le paquet
11043 @var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
11044 @var{supplementary-groups} de la déclaration @var{user-account} ainsi que
11045 dans le champ @var{groups} de l'enregistrement @var{operating-system}.
11048 (use-modules (gnu packages android) ;for android-udev-rules
11049 (gnu system shadow) ;for user-group
11054 (users (cons (user-acount
11056 (supplementary-groups
11057 '("adbusers" ;for adb
11058 "wheel" "netdev" "audio" "video"))
11061 (groups (cons (user-group (system? #t) (name "adbusers"))
11067 (modify-services %desktop-services
11068 (udev-service-type config =>
11069 (udev-configuration (inherit config)
11070 (rules (cons* android-udev-rules
11071 (udev-configuration-rules config))))))))
11075 @defvr {Variable Scheme} urandom-seed-service-type
11076 Garde de l'entropie dans @var{%random-seed-file} pour démarrer
11077 @file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
11078 @file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
11079 @file{/dev/hwrng} existe et peut être lu.
11082 @defvr {Variable Scheme} %random-seed-file
11083 C'est le nom du fichier où des octets aléatoires sont sauvegardés par
11084 @var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
11085 redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
11088 @cindex disposition clavier
11090 @deffn {Procédure Scheme} console-keymap-service @var{files} ...
11091 @cindex disposition du clavier
11092 Renvoie un service qui charge les dispositions claviers de @var{files} avec
11093 la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
11094 disposition par défaut, ce qui se fait ainsi :
11097 (console-keymap-service "dvorak")
11100 Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
11101 combiner les dispositions suivantes :
11103 (console-keymap-service "se-lat6" "se-fi-lat6")
11106 Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
11107 complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
11113 @defvr {Variable Scheme} gpm-service-type
11114 C'est le type du service qui lance GPM, le @dfn{démon de souris à but
11115 général}, qui fournit le support de la souris sur la console Linux. GPM
11116 permet aux utilisateurs d'utiliser la souris dans la console, entre autres
11117 pour sélectionner, copier et coller du texte.
11119 La valeur pour les services de ce type doit être un @code{gpm-configuration}
11120 (voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
11123 @deftp {Type de données} gpm-configuration
11124 Type de données représentant la configuration de GPM.
11127 @item @code{options} (par défaut : @code{%default-gpm-options})
11128 Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
11129 des options par défaut dit à @command{gpm} d'écouter les événements de la
11130 souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
11131 pour plus d'informations.
11133 @item @code{gpm} (par défaut : @code{gpm})
11134 Le paquet GPM à utiliser.
11139 @anchor{guix-publish-service-type}
11140 @deffn {Variable Scheme} guix-publish-service-type
11141 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
11144 Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
11145 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.
11148 @deftp {Type de données} guix-publish-configuration
11149 Le type de données représentant la configuration du service @code{guix
11153 @item @code{guix} (par défaut : @code{guix})
11154 Le paquet Guix à utiliser.
11156 @item @code{port} (par défaut : @code{80})
11157 Le port TCP sur lequel écouter les connexions.
11159 @item @code{host} (par défaut : @code{"localhost"})
11160 L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
11161 @code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
11163 @item @code{compression-level} (par défaut : @code{3})
11164 Le niveau de compression gzip auquel les substituts sont compressés.
11165 Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
11166 pour avoir le meilleur taux de compression contre une plus grande
11167 utilisation du CPU.
11169 @item @code{nar-path} (par défaut : @code{"nar"})
11170 Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
11171 @code{--nar-path}}, pour des détails.
11173 @item @code{cache} (par défaut : @code{#f})
11174 Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
11175 la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
11176 @code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
11177 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
11180 @item @code{workers} (par défaut : @code{#f})
11181 Lorsque la valeur est un entier, c'est le nombre de threads de travail
11182 utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
11183 processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
11184 pour plus d'informations.
11186 @item @code{ttl} (par défaut : @code{#f})
11187 Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
11188 des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
11189 plus d'informations.
11193 @anchor{rngd-service}
11194 @deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
11195 [#:device "/dev/hwrng"]
11196 Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
11197 pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
11198 échouera si @var{device} n'existe pas.
11201 @anchor{pam-limits-service}
11202 @cindex limites de session
11207 @deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
11209 Renvoie un service qui installe un fichier de configuration pour le
11210 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
11211 @code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
11212 @code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
11213 limites @code{ulimit} et les priorités des sessions utilisateurs.
11215 La définition de limites suivante défini deux limites matérielles et
11216 logicielles pour toutes les sessions connectées des utilisateurs du groupe
11220 (pam-limits-service
11222 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
11223 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
11226 La première entrée augment la priorité en temps réel maximale des processus
11227 non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
11228 d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
11229 sont souvent utilisés sur les systèmes audio temps-réel.
11232 @node Exécution de tâches planifiées
11233 @subsubsection Exécution de tâches planifiées
11237 @cindex tâches planifiées
11238 Le module @code{(gnu services mcron)} fournit une interface pour
11239 GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
11240 mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
11241 traditionel @command{cron} ; la principale différence est qu'il est
11242 implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
11243 spécification de la planification des tâches et de leurs actions.
11245 L'exemple en dessous définit un système d'exploitation qu lance les
11246 commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
11247 Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
11248 ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
11249 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
11250 gexps pour introduire des définitions de tâches qui sont passées à mcron
11251 (@pxref{G-Expressions}).
11254 (use-modules (guix) (gnu) (gnu services mcron))
11255 (use-package-modules base idutils)
11257 (define updatedb-job
11258 ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
11259 ;; l'action de la tâche comme une procédure Scheme.
11260 #~(job '(next-hour '(3))
11262 (execl (string-append #$findutils "/bin/updatedb")
11264 "--prunepaths=/tmp /var/tmp /gnu/store"))))
11266 (define garbage-collector-job
11267 ;; Lance le ramasse-miettes tous les jours à minuit cinq.
11268 ;; L'action de la tâche est une commande shell.
11269 #~(job "5 0 * * *" ;Vixie cron syntax
11272 (define idutils-job
11273 ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
11274 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
11275 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
11276 (string-append #$idutils "/bin/mkid src")
11281 (services (cons (mcron-service (list garbage-collector-job
11287 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
11288 plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
11289 est la référence du service mcron.
11291 On a running system, you can use the @code{schedule} action of the service
11292 to visualize the mcron jobs that will be executed next:
11295 # herd schedule mcron
11299 The example above lists the next five tasks that will be executed, but you
11300 can also specify the number of tasks to display:
11303 # herd schedule mcron 10
11306 @deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}]
11307 Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches
11308 @var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de
11311 C'est un raccourci pour :
11313 (service mcron-service-type
11314 (mcron-configuration (mcron mcron) (jobs jobs)))
11318 @defvr {Variable Scheme} mcron-service-type
11319 C'est le type du service @code{mcron}, dont la valeur est un objet
11320 @code{mcron-configuration}
11322 Ce type de service peut être la cible d'une extension de service qui lui
11323 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
11324 qui fournissent des tâches mcron à lancer.
11327 @deftp {Type de données} mcron-configuration
11328 Type données qui représente la configuration de mcron.
11331 @item @code{mcron} (par défaut : @var{mcron})
11332 Le paquet mcron à utiliser.
11335 C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
11336 à une spécification de tâche de mcron (@pxref{Syntax, mcron job
11337 specifications,, mcron, GNU@tie{}mcron}).
11342 @node Rotation des journaux
11343 @subsubsection Rotation des journaux
11346 @cindex journaux, rotation
11348 Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
11349 tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
11350 tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
11351 fichiers séparés, potentiellement compressés. Le module @code{(gnu services
11352 admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
11353 de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
11355 L'exemple ci-dessous définit un système d'exploitation qui fournit la
11356 rotation des journaux avec les paramètres par défaut, pour les journaux les
11360 (use-modules (guix) (gnu))
11361 (use-service-modules admin mcron)
11362 (use-package-modules base idutils)
11366 (services (cons (service rottlog-service-type)
11370 @defvr {Variable Scheme} rottlog-service-type
11371 C'est le type du service Rotlog, dont la valeur est un objet
11372 @code{rottlog-configuration}.
11374 D'autres services peuvent étendre celui-ci avec de nouveaux objets
11375 @code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
11376 fichiers à faire tourner.
11378 Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
11379 pour lancer le service rottlog.
11382 @deftp {Type de données} rottlog-configuration
11383 Type de données représentant la configuration de rottlog.
11386 @item @code{rottlog} (par défaut : @code{rottlog})
11387 Le paquet Rottlog à utiliser.
11389 @item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
11390 Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
11391 Variables,,, rottlog, GNU Rot[t]log Manual}).
11393 @item @code{rotations} (par défaut : @code{%default-rotations})
11394 Une liste d'objets @code{log-rotation} définis plus bas.
11397 C'est une liste de gexps où chaque gexp correspond à une spécification de
11398 tache de mcron (@pxref{Exécution de tâches planifiées}).
11402 @deftp {Type de données} log-rotation
11403 Type de données représentant la rotation d'un groupe de fichiers journaux.
11405 En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
11406 Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
11407 d'un journal de cette manière :
11412 (files '("/var/log/apache/*"))
11413 (options '("storedir apache-archives"
11419 La liste des champs est la suivante :
11422 @item @code{frequency} (par défaut : @code{'weekly})
11423 La fréquence de rotation, un symbole.
11426 La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
11428 @item @code{options} (par défaut : @code{'()})
11429 La liste des options de rottlog pour cette rotation (@pxref{Configuration
11430 parameters,,, rottlog, GNU Rot[t]lg Manual}).
11432 @item @code{post-rotate} (par défaut : @code{#f})
11433 Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
11437 @defvr {Variable Scheme} %default-rotations
11438 Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
11442 @defvr {Variable Scheme} %rotated-files
11443 La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
11444 s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
11447 @node Services réseau
11448 @subsubsection Services réseau
11450 Le module @code{(gnu services networking)} fournit des services pour
11451 configurer les interfaces réseaux.
11453 @cindex DHCP, service réseau
11454 @deffn {Procédure Scheme} dhcp-client-service [#:dhcp @var{isc-dhcp}]
11455 Renvoie un service qui lance @var{dhcp}, un client DHCP (Dynamic Host
11456 Configuration Protocol) sur toutes les interfaces réseaux en dehors de la
11460 @deffn {Procédure Scheme} dhcpd-service-type
11461 Ce type définie un service qui lance un démon DHCP. Pour créer un service
11462 de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
11466 (service dhcpd-service-type
11467 (dhcpd-configuration
11468 (config-file (local-file "my-dhcpd.conf"))
11469 (interfaces '("enp0s25"))))
11473 @deftp {Type de données} dhcpd-configuration
11475 @item @code{package} (par défaut : @code{isc-dhcp})
11476 Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
11477 @file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
11478 défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
11479 @item @code{config-file} (par défaut : @code{#f})
11480 Le fichier de configuration à utiliser. Il est requis. Il sera passé à
11481 @code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
11482 objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
11483 @code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
11485 @item @code{version} (par défaut : @code{"4"})
11486 La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
11487 4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
11488 et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
11490 @item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
11491 Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
11492 ce répertoire sera créé s'il n'existe pas.
11493 @item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
11494 Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
11495 @code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
11496 @item @code{interfaces} (par défaut : @code{'()})
11497 Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
11498 n'est pas vide, alors ses éléments (qui doivent être des chaînes de
11499 caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
11500 du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
11501 ; voir @code{man dhcpd} pour plus de détails.
11505 @defvr {Variable Scheme} static-networking-service-type
11506 @c TODO Document <static-networking> data structures.
11507 C'est le type des interfaces réseaux configurés statiquement.
11510 @deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
11511 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @ [#:requirement
11512 @code{'(udev)}] Return a service that starts @var{interface} with address
11513 @var{ip}. If @var{netmask} is true, use it as the network mask. If
11514 @var{gateway} is true, it must be a string specifying the default network
11515 gateway. @var{requirement} can be used to declare a dependency on another
11516 service before configuring the interface.
11518 On peut appeler cette procédure plusieurs fois, une fois par interface
11519 réseau qui nous intéresse. Dans les coulisses, elle étend
11520 @code{static-networking-service-type} avec les interfaces réseaux
11521 supplémentaires à gérer.
11527 @cindex gestion du réseau
11528 @deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
11529 Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
11530 de gestion réseau qui cherche à simplifier la configuration des résaux
11531 filaires et sans fil.
11533 Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
11534 commandes pour interagir avec le démon et configurer le réseau :
11535 @command{wicd-client}, une interface graphique et les interfaces
11536 utilisateurs @command{wicd-cli} et @command{wicd-curses}.
11539 @cindex ModemManager
11541 @defvr {Variable Scheme} modem-manager-service-type
11542 C'est le type de service pour le service
11543 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
11544 valeur de ce type de service est un enregistrement
11545 @code{modem-manager-configuration}.
11547 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
11550 @deftp {Type de données} modem-manager-configuration
11551 Type de donnée représentant la configuration de ModemManager.
11554 @item @code{modem-manager} (par défaut : @code{modem-manager})
11555 Le paquet ModemManager à utiliser.
11560 @cindex NetworkManager
11562 @defvr {Variable Scheme} network-manager-service-type
11563 C'est le type de service pour le service
11564 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
11565 valeur pour ce type de service est un enregistrement
11566 @code{network-manager-configuration}.
11568 Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
11571 @deftp {Type de données} network-manager-configuration
11572 Type de données représentant la configuration de NetworkManager.
11575 @item @code{network-manager} (par défaut : @code{network-manager})
11576 Le paquet NetworkManager à utiliser.
11578 @item @code{dns} (par défaut : @code{"default"})
11579 Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
11580 utilise le fichier de configuration @code{resolv.conf}
11584 NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
11585 de noms fournis par les connexions actives.
11588 NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
11589 utilisant une configuration « DNS disjointe » si vous êtes connecté par un
11590 VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
11594 NetworkManager ne modifiera pas @code{resolv.conf}.
11597 @item @code{vpn-plugins} (par défaut : @code{'()})
11598 C'est la liste des greffons disponibles pour les VPN (réseaux privés
11599 virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
11600 permet à NetworkManager de gérer des VPN via OpenVPN.
11606 @deffn {Variable Scheme} connman-service-type
11607 C'est le type de service pour lancer @url{https://01.org/connman,Connman},
11608 un gestionnaire de connexions réseaux.
11610 Sa valeur doit être un enregistrement @code{connman-configuration} comme
11614 (service connman-service-type
11615 (connman-configuration
11616 (disable-vpn? #t)))
11619 Voir plus bas pour des détails sur @code{connman-configuration}.
11622 @deftp {Type de données} connman-configuration
11623 Type de données représentant la configuration de connman.
11626 @item @code{connman} (par défaut : @var{connman})
11627 Le paquet connman à utiliser.
11629 @item @code{disable-vpn?} (par défaut : @code{#f})
11630 Lorsque la valeur est vraie, active le greffon vpn de connman.
11634 @cindex WPA Supplicant
11635 @defvr {Variable Scheme} wpa-supplicant-service-type
11636 C'est le type du service qui lance @url{https://w1.fi/wpa_supplicant/,WPA
11637 supplicant}, un démon d'authentification requis pour s'authentifier sur des
11638 WiFi chiffrés ou des réseaux ethernet. l est configuré pour écouter des
11639 requêtes sur D-Bus.
11641 La valeur de ce service est le paquet @code{wpa-supplicant} à utiliser.
11642 Ainsi, il peut être instancié de cette manière :
11645 (use-modules (gnu services networking))
11647 (service wpa-supplicant-service-type)
11653 @deffn {Procédure Scheme} ntp-service [#:ntp @var{ntp}] @
11654 [#:servers @var{%ntp-servers}] @
11655 [#:allow-large-adjustment? #f]
11656 Renvoie un service qui lance le démon de @var{ntp}, le
11657 @uref{http://www.ntp.org, paquet Network Time Protocol}. Le démon gardera
11658 l'horloge système synchronisée avec celle des serveurs @var{servers}.
11659 @var{allow-large-adjustment?} détermine si @command{ntpd} a le droit de
11660 faire des ajustements initiaux de plus de 1 000 secondes.
11663 @defvr {Variable Scheme} %ntp-servers
11664 Liste des noms d'hôtes utilisés comme serveurs NTP par défaut.
11668 @deffn {Procédure Scheme} openntpd-service-type
11669 Lance le démon NTP @command{ntpd}, implémenté par
11670 @uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
11671 système synchronisée avec celle des serveurs donnés.
11675 openntpd-service-type
11676 (openntpd-configuration
11677 (listen-on '("127.0.0.1" "::1"))
11678 (sensor '("udcf0 correction 70000"))
11679 (constraint-from '("www.gnu.org"))
11680 (constraints-from '("https://www.google.com/"))
11681 (allow-large-adjustment? #t)))
11686 @deftp {Type de données} openntpd-configuration
11688 @item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
11689 L'exécutable openntpd à utiliser.
11690 @item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
11691 Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
11693 @item @code{query-from} (par défaut : @code{'()})
11694 Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
11696 @item @code{sensor} (par défaut : @code{'()})
11697 Spécifie une liste de senseurs de différences de temps que ntpd devrait
11698 utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
11699 qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
11700 documentation en amont} pour plus d'informations.
11701 @item @code{server} (par défaut : @var{%ntp-servers})
11702 Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
11703 lesquels se synchroniser.
11704 @item @code{servers} (par défaut : @code{'()})
11705 Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
11706 NTP avec lesquelles se synchroniser.
11707 @item @code{constraint-from} (par défaut : @code{'()})
11708 @code{ntpd} peut être configuré pour demander la « Date » à des serveurs
11709 HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
11710 pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
11711 l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
11712 authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
11713 serveurs HTTPS qui fournissent cette contrainte.
11714 @item @code{constraints-from} (par défaut : @code{'()})
11715 Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
11716 ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
11717 noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
11718 contrainte médiane.
11719 @item @code{allow-large-adjustment?} (par défaut : @code{#f})
11720 Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
11726 @deffn {Variable Scheme} inetd-service-type
11727 Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
11728 inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur des
11729 sockets internet et démarre le programme spécifié uniquement lorsqu'une
11730 connexion arrive sur l'un de ces sockets.
11732 La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
11733 suivant configure le démon @command{inetd} pour qu'il fournisse le service
11734 @command{echo}, ainsi qu'in service smtp qui transfère le trafic smtp par
11735 ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
11741 (inetd-configuration
11745 (socket-type 'stream)
11752 (socket-type 'stream)
11756 (program (file-append openssh "/bin/ssh"))
11758 '("ssh" "-qT" "-i" "/path/to/ssh_key"
11759 "-W" "smtp-server:25" "user@@hostname")))))
11762 Voir plus bas pour plus de détails sur @code{inetd-configuration}.
11765 @deftp {Type de données} inetd-configuration
11766 Type de données représentant la configuration de @command{inetd}.
11769 @item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
11770 L'exécutable @command{inetd} à utiliser.
11772 @item @code{entries} (par défaut : @code{'()})
11773 Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
11774 crée avec le constructeur @code{inetd-entry}.
11778 @deftp {Type de données} inetd-entry
11779 Type de données représentant une entrée dans la configuration
11780 d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
11781 @command{inetd} écoutera les requêtes.
11784 @item @code{node} (par défaut : @code{#f})
11785 Chaîne de caractères facultative, un liste d'adresses locales séparées par
11786 des virgules que @command{inetd} devrait utiliser pour écouter ce service.
11787 @xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
11788 complète de toutes les options.
11790 Une chaîne de caractères dont le nom doit correspondre à une entrée de
11791 @code{/etc/services}.
11792 @item @code{socket-type}
11793 Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
11795 @item @code{protocol}
11796 Une chaîne de caractères qui doit correspondre à une entrée dans
11797 @code{/etc/protocols}.
11798 @item @code{wait?} (par défaut : @code{#t})
11799 Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
11800 d'écouter de nouvelles demandes de service.
11802 Une chaîne de caractères contenant le nom d'utilisateur (et éventuellement
11803 de groupe) de l'utilisateur en tant que lequel le serveur devrait tourner.
11804 Le nom du groupe peut être spécifié comme un suffixe, séparé par un
11805 deux-points ou un point, c.-à-d.@: @code{"utilisateur"},
11806 @code{"utilisateur:groupe"} ou @code{"utilisateur.groupe"}.
11807 @item @code{program} (par défaut : @code{"internal"})
11808 Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
11809 @command{inetd} devrait utiliser un service inclus.
11810 @item @code{arguments} (par défaut : @code{'()})
11811 Une liste de chaînes de caractères ou d'objets simili-fichiers qui sont les
11812 arguments du programme du serveur, en commençant par le zéroième argument,
11813 c.-à-d.@: le nom du programme lui-même. Pour les services internes à
11814 @command{inetd}, cette entrée doit être @code{'()} ou @code{'("internal")}.
11817 @xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
11818 discussion plus détaillée de chaque champ de configuration.
11822 @deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}]
11823 Renvoie un service qui lance le démon de réseau anonyme
11824 @uref{https://torproject.org, Tor}.
11826 Le démon est lancé avec l'identité de l'utilisateur non privilégié
11827 @code{tor}. Il lit @var{config-file}, un objet simili-fichier, avec une
11828 ligne @code{User tor} supplémentaire et des lignes pour les services cachés
11829 ajoutées par des @code{tor-hidden-service}. Lncez @command{man tor} pour
11830 obtenir des informations sur le fichier de configuration.
11833 @cindex service caché
11834 @deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
11835 Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
11836 @var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
11840 '((22 "127.0.0.1:22")
11841 (80 "127.0.0.1:8080"))
11844 Dans cet exemple, le port 22 du service caché est relié au port local 22 et
11845 le port 80 est relié au port local 8080.
11847 Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
11848 fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
11851 Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
11852 Tor project's documentation} pour trouver plus d'information.
11855 Le module @code{(gnu services rsync)} fournit les services suivant :
11857 Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
11858 disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
11859 fichiers existants ou en téléverser des nouveaux.
11861 @deffn {Variable Scheme} rsync-service-type
11862 C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
11863 un enregistrement @command{rsync-configuration} comme dans cet exemple :
11866 (service rsync-service-type)
11869 Voir plus pas pour trouver des détails à propos de
11870 @code{rsync-configuration}.
11873 @deftp {Type de données} rsync-configuration
11874 Type de données représentant la configuration de @code{rsync-service}.
11877 @item @code{package} (par défaut : @var{rsync})
11878 Le paquet @code{rsync} à utiliser.
11880 @item @code{port-number} (par défaut : @code{873})
11881 Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
11882 le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
11883 tant qu'utilisateur et groupe @code{root}.
11885 @item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
11886 Nom du fichier où @command{rsync} écrit son PID.
11888 @item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
11889 Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
11891 @item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
11892 Nom du fichier où @command{rsync} écrit son fichier de journal.
11894 @item @code{use-chroot?} (par défaut : @var{#t})
11895 S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
11897 @item @code{share-path} (par défaut : @file{/srv/rsync})
11898 Emplacement du répertoire partagé de @command{rsync}.
11900 @item @code{share-comment} (par défaut : @code{"Rsync share"})
11901 Commentaire du répertoire partagé de @command{rsync}.
11903 @item @code{read-only?} (par défaut : @var{#f})
11904 Permission en écriture sur le répertoire partagé.
11906 @item @code{timeout} (par défaut : @code{300})
11907 Délai d'attente d'entrée-sortie en secondes.
11909 @item @code{user} (par défaut : @var{"root"})
11910 Propriétaire du processus @code{rsync}.
11912 @item @code{group} (par défaut : @var{"root"})
11913 Groupe du processus @code{rsync}.
11915 @item @code{uid} (par défaut : @var{"rsyncd"})
11916 Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
11917 fichiers ont lieu si le démon a été lancé en @code{root}.
11919 @item @code{gid} (par défaut : @var{"rsyncd"})
11920 Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
11925 En plus, @code{(gnu services ssh)} fournit les services suivant.
11927 @cindex serveur SSH
11929 @deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
11930 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
11931 [#:allow-empty-passwords? #f] [#:root-login? #f] @
11932 [#:syslog-output? #t] [#:x11-forwarding? #t] @
11933 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
11934 [#:public-key-authentication? #t] [#:initialize? #t]
11935 Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
11936 @var{port-number}. @var{host-key} doit désigner un fichier contenant la
11937 clef d'hôte et ne doit être lisible que par root.
11939 Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
11940 qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
11941 @var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
11942 dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
11943 vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
11945 Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
11946 lors de l'activation du service s'ils n'existent pas encore. Cela peut
11947 prendre du temps et demande une interaction.
11949 Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
11950 générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
11951 une paire de clefs dont la clef privée sera stockée dans le fichier
11952 @var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
11954 Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
11955 interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
11956 d'hôtes et d'adresses.
11958 @var{allow-empty-passwords?} spécifie si les connexions avec des mots de
11959 passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
11962 Les autres options devraient être évidentes.
11966 @cindex serveur SSH
11967 @deffn {Variable Scheme} openssh-service-type
11968 C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
11969 @command{sshd}. Sa valeur doit être un enregistrement
11970 @code{openssh-configuration} comme dans cet exemple :
11973 (service openssh-service-type
11974 (openssh-configuration
11975 (x11-forwarding? #t)
11976 (permit-root-login 'without-password)
11978 `(("alice" ,(local-file "alice.pub"))
11979 ("bob" ,(local-file "bob.pub"))))))
11982 Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
11984 Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
11988 (service-extension openssh-service-type
11989 (const `(("charlie"
11990 ,(local-file "charlie.pub")))))
11994 @deftp {Type de données} openssh-configuration
11995 C'est l'enregistrement de la configuration de la commande @command{sshd}
11999 @item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
12000 Nom du fichier où @command{sshd} écrit son PID.
12002 @item @code{port-number} (par défaut : @code{22})
12003 Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
12005 @item @code{permit-root-login} (par défaut : @code{#f})
12006 Ce champ détermine si et quand autoriser les connexions en root. Si la
12007 valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
12008 est @code{#t}, elles sont autorisées. S'il s'agit du symbole
12009 @code{'without-password}, alors les connexions root sont autorisées mais pas
12010 par une authentification par mot de passe.
12012 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
12013 Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
12014 peuvent se connecter. Sinon, ils ne peuvent pas.
12016 @item @code{password-authentication?} (par défaut : @code{#t})
12017 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12018 mot de passe. Sinon, ils doivent utiliser une autre méthode
12019 d'authentification.
12021 @item @code{public-key-authentication?} (par défaut : @code{#t})
12022 Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
12023 clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
12024 d'authentification.
12026 Les clefs publiques autorisées sont stockées dans
12027 @file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
12030 @item @code{x11-forwarding?} (par défaut : @code{#f})
12031 Lorsque la valeur est vraie, le transfert de connexion du client graphique
12032 X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
12033 de @command{ssh} fonctionneront.
12035 @item @code{allow-agent-forwarding?} (default: @code{#t})
12036 Whether to allow agent forwarding.
12038 @item @code{allow-tcp-forwarding?} (default: @code{#t})
12039 Whether to allow TCP forwarding.
12041 @item @code{gateway-ports?} (default: @code{#f})
12042 Whether to allow gateway ports.
12044 @item @code{challenge-response-authentication?} (par défaut : @code{#f})
12045 Spécifie si l'authentification par défi est autorisée (p.@: ex.@: via PAM).
12047 @item @code{use-pam?} (par défaut : @code{#t})
12048 Active l'interface avec le module d'authentification greffable, PAM. Si la
12049 valeur est @code{#t}, cela activera l'authentification PAM avec
12050 @code{challenge-response-authentication?} et
12051 @code{password-authentication?}, en plus des modules de compte et de session
12052 de PAM pour tous les types d'authentification.
12054 Comme l'authentification par défi de PAM sert généralement un rôle
12055 équivalent à l'authentification par mot de passe, vous devriez désactiver
12056 soit @code{challenge-response-authentication?}, soit
12057 @code{password-authentication?}.
12059 @item @code{print-last-log?} (par défaut : @code{#t})
12060 Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
12061 connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
12064 @item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
12065 Configure les sous-systèmes externes (p.@: ex.@: le démon de transfert de
12068 C'est une liste de paires, composées chacune du nom du sous-système et d'une
12069 commande (avec éventuellement des arguments) à exécuter à la demande du
12072 La commande @command{internal-sftp} implémente un serveur SFTP dans le
12073 processus. Autrement, on peut spécifier la commande @command{sftp-server} :
12075 (service openssh-service-type
12076 (openssh-configuration
12078 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12081 @item @code{accepted-environment} (par défaut : @code{'()})
12082 Liste de chaînes de caractères qui décrivent les variables d'environnement
12083 qui peuvent être exportées.
12085 Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
12086 @code{man sshd_config}.
12088 Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
12089 Elle est initialisée par les émulateurs de terminaux qui supportent les
12090 couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
12091 shell pour activer les couleurs sur la ligne de commande si cette variable
12095 (service openssh-service-type
12096 (openssh-configuration
12097 (accepted-environment '("COLORTERM"))))
12100 @item @code{authorized-keys} (par défaut : @code{'()})
12101 @cindex clefs autorisées, SSH
12102 @cindex SSH, clefs autorisées
12103 C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
12104 d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
12105 représentent les clefs publiques SSH. Par exemple :
12108 (openssh-configuration
12110 `(("rekado" ,(local-file "rekado.pub"))
12111 ("chris" ,(local-file "chris.pub"))
12112 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
12116 enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
12117 @code{chris} et @code{root}.
12119 Des clefs autorisées supplémentaires peuvent être spécifiées via
12120 @code{service-extension}.
12122 Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
12123 @file{~/.ssh/authorized_keys}.
12127 @deffn {Procédure Scheme} dropbear-service [@var{config}]
12128 Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
12129 Dropbear} avec la configuration @var{config} donnée, un objet
12130 @code{<dropbear-configuration>}.
12132 Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
12133 ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
12136 (dropbear-service (dropbear-configuration
12137 (port-number 1234)))
12141 @deftp {Type de données} dropbear-configuration
12142 Ce type de données représente la configuration d'un démon SSH Dropbear.
12145 @item @code{dropbear} (par défaut : @var{dropbear})
12146 Le paquet Dropbear à utiliser.
12148 @item @code{port-number} (par défaut : 22)
12149 Le port TCP sur lequel le démon attend des connexions entrantes.
12151 @item @code{syslog-output?} (par défaut : @code{#t})
12152 Indique s'il faut activer la sortie vers syslog.
12154 @item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
12155 Nom du fichier de PID du démon.
12157 @item @code{root-login?} (par défaut : @code{#f})
12158 Indique s'il faut autoriser les connexions en @code{root}.
12160 @item @code{allow-empty-passwords?} (par défaut : @code{#f})
12161 Indique s'il faut autoriser les mots de passes vides.
12163 @item @code{password-authentication?} (par défaut : @code{#t})
12164 Indique s'il faut autoriser l'authentification par mot de passe.
12168 @defvr {Variable Scheme} %facebook-host-aliases
12169 Cette variable contient une chaîne de caractères à utiliser dans
12170 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
12171 Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
12172 des serveurs connus du service en ligne Facebook — p.@: ex.@:
12173 @code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
12174 équivalent en IPv6, @code{::1}.
12176 Cette variable est typiquement utilisée dans le champ @code{hosts-file}
12177 d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
12180 (use-modules (gnu) (guix))
12183 (host-name "mamachine")
12186 ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
12187 ;; et « mamachine », ainsi que pour les serveurs de Facebook.
12188 (plain-file "hosts"
12189 (string-append (local-host-aliases host-name)
12190 %facebook-host-aliases))))
12193 Ce mécanisme peut éviter que des programmes qui tournent localement, comme
12194 des navigateurs Web, ne se connectent à Facebook.
12197 Le module @code{(gnu services avahi)} fourni la définition suivante.
12199 @deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @
12200 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
12201 [#:ipv6? #t] [#:wide-area? #f] @
12202 [#:domains-to-browse '()] [#:debug? #f]
12203 Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond
12204 aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher
12205 des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et
12206 qui étend le démon de cache de services de noms (nscd) pour qu'il puisse
12207 résoudre des noms en @code{.local} avec
12208 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus,
12209 ajoute le paquet @var{avahi} au profil du système pour que les commandes
12210 comme @command{avahi-browse} soient directement utilisables.
12212 Si @var{host-name} n'est pas @code{#f}, utilise cette valeur comme nom
12213 d'hôte à publier pour la machine ; sinon, utilise le vrai nom d'hôte de la
12216 Lorsque la valeur de @var{publish?} est vraie, la publication des noms
12217 d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon
12218 publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau
12221 Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est
12224 Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut
12225 utiliser un socket IPv4 ou IPv6 respectivement.
12228 @deffn {Variable Scheme} openvswitch-service-type
12229 C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
12230 dont la valeur devrait être un objet @code{openvswitch-configuration}.
12233 @deftp {Type de données} openvswitch-configuration
12234 Type de données représentant la configuration de Open vSwitch, un
12235 commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
12236 massive des réseaux avec des extensions programmables.
12239 @item @code{package} (par défaut : @var{openvswitch})
12240 Objet de paquet de Open vSwitch.
12245 @node Système de fenêtrage X
12246 @subsubsection Système de fenêtrage X
12249 @cindex Système de fenêtrage X
12250 @cindex gestionnaire de connexion
12251 Le support pour le système d'affichage graphique X Window — en particulier
12252 Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
12253 qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
12254 est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
12256 @cindex gestionnaire de fenêtre
12257 Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
12258 fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
12259 préférence en l'ajoutant au champ @code{packages} de votre définition de
12260 système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
12263 @defvr {Variable Scheme} slim-service-type
12264 C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
12266 @cindex types de sessions (X11)
12267 @cindex X11, types de sessions
12268 SLiM cherche des @dfn{types de sessions} définies par les fichiers
12269 @file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
12270 permet aux utilisateurs de choisir une session depuis l'écran de connexion
12271 avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
12272 @code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
12273 l'ensemble des paquets du système les rendra automatiquement disponibles sur
12274 l'écran de connexion.
12276 En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
12277 disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
12278 un gestionnaire de fenêtre au un autre client X.
12281 @deftp {Type de données} slim-configuration
12282 Type de données représentant la configuration de @code{slim-service-type}.
12285 @item @code{allow-empty-passwords?} (par défaut : @code{#t})
12286 S'il faut autoriser les connexions avec un mot de passe vide.
12288 @item @code{auto-login?} (par défaut : @code{#f})
12289 @itemx @code{default-user} (par défaut : @code{""})
12290 Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
12292 Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
12293 que @code{default-user}.
12295 @item @code{theme} (par défaut : @code{%default-slim-theme})
12296 @itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
12297 Le thème graphique à utiliser et son nom.
12299 @item @code{auto-login-session} (par défaut : @code{#f})
12300 Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
12301 comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
12302 "/bin/windowmaker")}.
12304 Si la valeur est fausse, une session décrite par l'un des fichiers
12305 @file{.desktop} disponibles dans @code{/run/current-system/profile} et
12306 @code{~/.guix-profile} sera utilisée.
12308 @quotation Remarque
12309 Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
12310 système ou dans votre profil utilisateur. Sinon, si
12311 @code{auto-login-session} est faux, vous ne serez jamais capable de vous
12315 @item @code{startx} (par défaut : @code{(xorg-start-command)})
12316 La commande utilisée pour démarrer le serveur graphique X11.
12318 @item @code{xauth} (par défaut : @code{xauth})
12319 Le paquet XAuth à utiliser.
12321 @item @code{shepherd} (par défaut : @code{shepherd})
12322 Le paquet Shepherd à utiliser pour invoquer @command{halt} et
12325 @item @code{sessreg} (par défaut : @code{sessreg})
12326 Le paquet sessreg à utiliser pour enregistrer la session.
12328 @item @code{slim} (par défaut : @code{slim})
12329 Le paquet SLiM à utiliser.
12333 @defvr {Variable Scheme} %default-theme
12334 @defvrx {Variable Scheme} %default-theme-name
12335 Le thème SLiM par défaut et son nom.
12339 @deftp {Type de données} sddm-configuration
12340 C'est le type de données représentant la configuration du service sddm.
12343 @item @code{display-server} (par défaut : "x11")
12344 Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
12345 valeurs valides sont « x11 » et « wayland ».
12347 @item @code{numlock} (par défaut : "on")
12348 Les valeurs valides sont « on », « off » ou « none ».
12350 @item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
12351 La commande à lancer à l'arrêt du système.
12353 @item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
12354 La commande à lancer lors du redémarrage du système.
12356 @item @code{theme} (par défaut : "maldives")
12357 Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
12360 @item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
12361 Le répertoire où se trouvent les thèmes.
12363 @item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
12364 Répertoire où se trouvent les avatars.
12366 @item @code{default-path} (par défaut : "/run/current-system/profile/bin")
12367 Le PATH par défaut à utiliser.
12369 @item @code{minimum-uid} (par défaut : 1000)
12370 UID minimum pour être affiché dans SDDM.
12372 @item @code{maximum-uid} (par défaut : 2000)
12373 UID maximum pour être affiché dans SDDM.
12375 @item @code{remember-last-user?} (par défaut : #t)
12376 S'il faut se rappeler le dernier utilisateur connecté.
12378 @item @code{remember-last-session?} (par défaut : #t)
12379 S'il faut se rappeler la dernière session.
12381 @item @code{hide-users} (par défaut : "")
12382 Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
12384 @item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
12385 Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
12388 @item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
12389 Le script à lancer avant de démarrer une session wayland.
12391 @item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
12392 Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
12395 @item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
12396 Chemin vers xorg-server.
12398 @item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
12401 @item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
12402 Chemin vers Xephyr.
12404 @item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
12405 Le script à lancer après avoir démarré xorg-server.
12407 @item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
12408 Le script à lancer avant d'arrêter xorg-server.
12410 @item @code{xsession-command} (par défaut : @code{xinitrc})
12411 Le script à lancer avant de démarrer une session X.
12413 @item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
12414 Répertoire où trouver les fichiers .desktop pour les sessions X.
12416 @item @code{minimum-vt} (par défaut : 7)
12417 VT minimal à utiliser.
12419 @item @code{xserver-arguments} (par défaut : "-nolisten tcp")
12420 Arguments à passer à xorg-server.
12422 @item @code{auto-login-user} (par défaut : "")
12423 Utilisateur à utiliser pour la connexion automatique.
12425 @item @code{auto-login-session} (par défaut : "")
12426 Le fichier desktop à utiliser pour la connexion automatique.
12428 @item @code{relogin?} (par défaut : #f)
12429 S'il faut se reconnecter après la déconnexion.
12434 @cindex gestionnaire de connexion
12435 @cindex connexion X11
12436 @deffn {Procédure Scheme} sddm-service config
12437 Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
12438 avec une configuration de type @code{<sddm-configuration>}.
12441 (sddm-service (sddm-configuration
12442 (auto-login-user "Alice")
12443 (auto-login-session "xfce.desktop")))
12447 @deffn {Procédure Scheme} xorg-start-command [#:guile] @
12448 [#:modules %default-xorg-modules] @
12449 [#:fonts %default-xorg-fonts] @
12450 [#:configuration-file (xorg-configuration-file @dots{})] @
12451 [#:xorg-server @var{xorg-server}]
12452 Renvoie un script @code{startx} dans lequel @var{modules}, une liste de
12453 paquets de modules X et @var{fonts}, une liste de répertoires de polices X,
12454 sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les
12455 arguments. Le résultat devrait être utilisé à la place de @code{startx}.
12457 Habituellement le serveur X est démarré par un gestionnaire de connexion.
12460 @deffn {Procédure Scheme} xorg-configuration-file @
12461 [#:modules %default-xorg-modules] @
12462 [#:fonts %default-xorg-fonts] @
12463 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
12464 Renvoie un fichier de configuration pour le serveur Xorg qui contient des
12465 chemins de recherche pour tous les pilotes communs.
12467 @var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
12468 serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
12469 etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
12470 @dfn{chemin de polices} du serveur.
12472 @var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
12473 pilote graphique automatiquement, soit une liste de noms de pilotes qui
12474 seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
12476 De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
12477 résolution d'écran appropriée ; autrement, ce doit être une liste de
12478 résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
12480 Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
12481 ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
12482 supplémentaire à être ajouté directement au fichier de configuration.
12484 @cindex disposition clavier
12485 @cindex disposition du clavier
12486 Cette procédure est particulièrement utile pour configurer une disposition
12487 de clavier différente de la disposition US par défaut. Par exemple, pour
12488 utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
12493 "Section \"InputClass\"
12494 Identifier \"evdev keyboard catchall\"
12496 MatchIsKeyboard \"on\"
12497 Option \"xkb_layout\" \"fr\"
12498 Option \"xkb_variant\" \"bepo\"
12504 (modify-services %desktop-services
12505 (slim-service-type config =>
12506 (slim-configuration
12508 (startx (xorg-start-command
12509 #:configuration-file
12510 (xorg-configuration-file
12512 (list bepo-evdev)))))))))
12515 La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
12516 configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
12517 comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
12518 seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
12519 utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
12520 disposition de clavier préférée une fois connecté. Le premier argument
12521 correspond à la disposition, tandis que le second argument correspond à la
12522 variante. La ligne @code{xkb_variant} peut être omise pour choisir la
12523 variante par défaut.
12526 @deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
12527 Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
12528 économiseur d'écran dont la commande est @var{program}, à l'ensemble des
12529 programmes setuid et lui ajoute une entrée PAM. Par exemple :
12532 (screen-locker-service xlockmore "xlock")
12535 rend utilisable le bon vieux XlockMore.
12539 @node Services d'impression
12540 @subsubsection Services d'impression
12542 @cindex support des imprimantes avec CUPS
12543 Le module @code{(gnu services cups)} fournit une définition de service Guix
12544 pour le service d'impression CUPS. Pour ajouter le support d'une imprimante
12545 à un système GuixSD, ajoutez un @code{cups-service} à la définition du
12546 système d'exploitation :
12548 @deffn {Variable Scheme} cups-service-type
12549 Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
12550 être une configuration CUPS valide (voir plus bas). Pour utiliser les
12551 paramètres par défaut, écrivez simplement :
12553 (service cups-service-type)
12557 La configuration de CUPS contrôle les paramètres de base de votre
12558 installation CUPS : sur quelles interfaces il doit écouter, que faire si un
12559 travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
12560 une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
12561 utiliser un outil comme les services de configuration d'imprimante de
12562 GNOME. Par défaut, la configuration du service CUPS générera un certificat
12563 auto-signé si besoin, pour les connexions sécurisée avec le serveur
12566 Suppose you want to enable the Web interface of CUPS and also add support
12567 for Epson printers @i{via} the @code{escpr} package and for HP printers
12568 @i{via} the @code{hplip-minimal} package. You can do that directly, like
12569 this (you need to use the @code{(gnu packages cups)} module):
12572 (service cups-service-type
12573 (cups-configuration
12574 (web-interface? #t)
12576 (list cups-filters escpr hplip-minimal))))
12579 Note: If you wish to use the Qt5 based GUI which comes with the hplip
12580 package then it is suggested that you install the @code{hplip} package,
12581 either in your OS configuration file or as your user.
12583 Les paramètres de configuration disponibles sont les suivants. Chaque
12584 définition des paramètres est précédé par son type ; par exemple,
12585 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
12586 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
12587 de spécifier la configuration comme une chaîne de caractères, si vous avez
12588 un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
12589 système ; voir la fin pour plus de détails.
12591 @c The following documentation was initially generated by
12592 @c (generate-documentation) in (gnu services cups). Manually maintained
12593 @c documentation is better, so we shouldn't hesitate to edit below as
12594 @c needed. However if the change you want to make to this documentation
12595 @c can be done in an automated way, it's probably easier to change
12596 @c (generate-documentation) than to make it below and have to deal with
12597 @c the churn as CUPS updates.
12600 Les champs de @code{cups-configuration} disponibles sont :
12602 @deftypevr {paramètre de @code{cups-configuration}} package cups
12606 @deftypevr {paramètre de @code{cups-configuration}} package-list extensions
12607 Pilotes et autres extensions du paquet CUPS.
12610 @deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
12611 Configuration de l'emplacement où écrire les journaux, quels répertoires
12612 utiliser pour les travaux d'impression et les paramètres de configuration
12615 Les champs @code{files-configuration} disponibles sont :
12617 @deftypevr {paramètre de @code{files-configuration}} log-location access-log
12618 Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
12619 désactive la génération de journaux d'accès. La valeur @code{stderr} fait
12620 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12621 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12622 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12623 entrées du journal sont envoyées au démon de journalisation du système. Le
12624 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12625 @code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
12627 La valeur par défaut est @samp{"/var/log/cups/access_log"}.
12630 @deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
12631 L'emplacement où CUPS devrait mettre les données en cache.
12633 La valeur par défaut est @samp{"/var/cache/cups"}.
12636 @deftypevr {paramètre de @code{files-configuration}} string config-file-perm
12637 Spécifie les permissions pour tous les fichiers de configuration que
12638 l'ordonnanceur écrit.
12640 Remarquez que les permissions pour le fichier printers.conf sont
12641 actuellement masqués pour ne permettre que l'accès par l'utilisateur de
12642 l'ordonnanceur (typiquement root). La raison est que les URI des
12643 imprimantes contiennent des informations d'authentification sensibles qui ne
12644 devraient pas être connues sur le système. Il n'est pas possible de
12645 désactiver cette fonctionnalité de sécurité.
12647 La valeur par défaut est @samp{"0640"}.
12650 @deftypevr {paramètre de @code{files-configuration}} log-location error-log
12651 Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
12652 désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
12653 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12654 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12655 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12656 entrées du journal sont envoyées au démon de journalisation du système. Le
12657 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12658 @code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
12660 La valeur par défaut est @samp{"/var/log/cups/error_log"}.
12663 @deftypevr {paramètre de @code{files-configuration}} string fatal-errors
12664 Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
12665 Les types de chaînes sont :
12669 Aucune erreur n'est fatale.
12672 Toutes les erreurs ci-dessous sont fatales.
12675 Les erreurs d'initialisation de la navigation sont fatales, par exemple les
12676 connexion échouées au démon DNS-SD.
12679 Les erreurs de syntaxe du fichier de configuration sont fatale.
12682 Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
12683 sur la boucle locale ou les adresses @code{any}.
12686 Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
12689 Les mauvaises permissions des fichiers de démarrage sont fatales, par
12690 exemple un certificat TLS et des fichiers de clefs avec des permissions
12691 permettant la lecture à tout le monde.
12694 La valeur par défaut est @samp{"all -browse"}.
12697 @deftypevr {paramètre de @code{files-configuration}} boolean file-device?
12698 Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
12699 nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
12702 La valeur par défaut est @samp{#f}.
12705 @deftypevr {paramètre de @code{files-configuration}} string group
12706 Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
12707 programmes externes.
12709 La valeur par défaut est @samp{"lp"}.
12712 @deftypevr {paramètre de @code{files-configuration}} string log-file-perm
12713 Spécifie les permissions pour tous les fichiers de journal que
12714 l'ordonnanceur écrit.
12716 La valeur par défaut est @samp{"0644"}.
12719 @deftypevr {paramètre de @code{files-configuration}} log-location page-log
12720 Définit le fichier de journal de page. Spécifier un nom de fichier vide
12721 désactive la génération de journaux de pages. La valeur @code{stderr} fait
12722 que les entrées du journal seront envoyés sur l'erreur standard lorsque
12723 l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
12724 lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
12725 entrées du journal sont envoyées au démon de journalisation du système. Le
12726 nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
12727 @code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
12729 La valeur par défaut est @samp{"/var/log/cups/page_log"}.
12732 @deftypevr {paramètre de @code{files-configuration}} string remote-root
12733 Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
12734 clients qui se disent être l'utilisateur root. La valeur par défaut est
12737 La valeur par défaut est @samp{"remroot"}.
12740 @deftypevr {paramètre de @code{files-configuration}} file-name request-root
12741 Spécifie le répertoire qui contient les travaux d'impression et d'autres
12742 données des requêtes HTTP.
12744 La valeur par défaut est @samp{"/var/spool/cups"}.
12747 @deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
12748 Spécifie le niveau d'isolation de sécurité appliqué aux filtres
12749 d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
12750 soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
12751 utilisée et supportée que sur macOS.
12753 La valeur par défaut est @samp{strict}.
12756 @deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
12757 Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
12758 cherchera les clefs publiques et privées dans ce répertoire : un fichier
12759 @code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
12760 correspondant pour la clef privée encodée en PEM.
12762 La valeur par défaut est @samp{"/etc/cups/ssl"}.
12765 @deftypevr {paramètre de @code{files-configuration}} file-name server-root
12766 Spécifie le répertoire contenant les fichiers de configuration du serveur.
12768 La valeur par défaut est @samp{"/etc/cups"}.
12771 @deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
12772 Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
12773 configuration ou les fichiers d'état.
12775 La valeur par défaut est @samp{#f}.
12778 @deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
12779 Spécifie le groupe ou les groupes à utiliser pour l'authentification du
12780 groupe @code{@@SYSTEM}.
12783 @deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
12784 Spécifie le répertoire où les fichiers temporaires sont stockés.
12786 La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
12789 @deftypevr {paramètre de @code{files-configuration}} string user
12790 Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
12793 La valeur par défaut est @samp{"lp"}.
12797 @deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
12798 Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
12799 @code{config} enregistre les ajouts, suppressions et modifications
12800 d'imprimantes et de classes et lorsque les fichiers de configuration sont
12801 accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
12802 la suspension, la libération, la modification et l'annulation des travaux et
12803 toutes les conditions de @code{config}. Le niveau @code{all} enregistre
12804 toutes les requêtes.
12806 La valeur par défaut est @samp{actions}.
12809 @deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
12810 Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
12811 n'est plus nécessaire pour les quotas.
12813 La valeur par défaut est @samp{#f}.
12816 @deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
12817 Spécifie les protocoles à utiliser pour partager les imprimantes sur le
12820 La valeur par défaut est @samp{dnssd}.
12823 @deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
12824 Spécifie si l'interface web de CUPS est publiée.
12826 La valeur par défaut est @samp{#f}.
12829 @deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
12830 Spécifie si les imprimantes partagées sont publiées.
12832 La valeur par défaut est @samp{#f}.
12835 @deftypevr {paramètre de @code{cups-configuration}} string classification
12836 Spécifie la classification de sécurité du serveur. N'importe quel nom de
12837 bannière peut être utilisé, comme « classifié », « confidentiel », « secret
12838 », « top secret » et « déclassifié » ou la bannière peut être omise pour
12839 désactiver les fonctions d'impression sécurisées.
12841 La valeur par défaut est @samp{""}.
12844 @deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
12845 Spécifie si les utilisateurs peuvent remplacer la classification (page de
12846 couverture) des travaux d'impression individuels avec l'option
12849 La valeur par défaut est @samp{#f}.
12852 @deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
12853 Spécifie le type d'authentification par défaut à utiliser.
12855 La valeur par défaut est @samp{Basic}.
12858 @deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
12859 Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
12861 La valeur par défaut est @samp{Required}.
12864 @deftypevr {paramètre de @code{cups-configuration}} string default-language
12865 Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
12867 La valeur par défaut est @samp{"en"}.
12870 @deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
12871 Spécifie la taille de papier par défaut pour les nouvelles queues
12872 d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
12873 régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
12874 par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
12877 La valeur par défaut est @samp{"Auto"}.
12880 @deftypevr {paramètre de @code{cups-configuration}} string default-policy
12881 Spécifie la politique d'accès par défaut à utiliser.
12883 La valeur par défaut est @samp{"default"}.
12886 @deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
12887 Spécifie si les imprimantes locales sont partagées par défaut.
12889 La valeur par défaut est @samp{#t}.
12892 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
12893 Spécifie le délai pour mettre à jour les fichiers de configuration et
12894 d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
12895 possible, typiquement en quelques millisecondes.
12897 La valeur par défaut est @samp{30}.
12900 @deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
12901 Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
12902 sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
12903 @code{retry-job}, qui tentera de nouveau l'impression plus tard ;
12904 @code{retry-this-job}, qui retentera l'impression immédiatement ; et
12905 @code{stop-printer} qui arrête l'imprimante.
12907 La valeur par défaut est @samp{stop-printer}.
12910 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
12911 Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
12912 minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
12913 limite de 0 désactive la limite de filtrage. Une impression standard vers
12914 une imprimante non-PostScript requirt une limite de filtre d'environ 200.
12915 Une imprimante PostScript requiert environ la moitié (100). Mettre en place
12916 la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
12917 travail d'impression à la fois.
12919 La valeur par défaut est @samp{0}.
12922 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
12923 Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
12924 imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
12925 plus basse priorité.
12927 La valeur par défaut est @samp{0}.
12930 @deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
12931 Spécifie s'il faut faire des résolutions inverses sur les clients qui se
12932 connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
12933 nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
12934 par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
12935 avec des adresses non enregistrées ne s'adressent à votre serveur.
12936 N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
12937 absolument nécessaire.
12939 La valeur par défaut est @samp{#f}.
12942 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
12943 Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
12944 moteurs associés avec un travail annulé ou suspendu.
12946 La valeur par défaut est @samp{30}.
12949 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
12950 Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
12951 typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
12952 des queues d'impressions normales dont la politique d'erreur est
12953 @code{retry-job} ou @code{retry-current-job}.
12955 La valeur par défaut est @samp{30}.
12958 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
12959 Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
12960 typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
12961 les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
12962 @code{retry-current-job}.
12964 La valeur par défaut est @samp{5}.
12967 @deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
12968 Spécifie s'il faut supporter les connexion HTTP keep-alive.
12970 La valeur par défaut est @samp{#t}.
12973 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
12974 Spécifie combien de temps les connexions inactives avec les clients restent
12975 ouvertes, en secondes.
12977 La valeur par défaut est @samp{30}.
12980 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
12981 Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
12982 données de formulaires HTML. Une limite de 0 désactive la vérification de
12985 La valeur par défaut est @samp{0}.
12988 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
12989 Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
12990 @var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
12991 des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
12992 adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
12993 UNIX domain. La directive Listen est similaire à la directive Port mais
12994 vous permet de restreindre l'accès à des interfaces ou des réseaux
12998 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
12999 Spécifie le nombre de connexions en attente qui seront permises. Ça
13000 n'affecte normalement que les serveurs très actifs qui ont atteint la limite
13001 MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
13002 simultanées. Lorsque la limite est atteinte, le système d'exploitation
13003 refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
13004 accepte les connexions en attente.
13006 La valeur par défaut est @samp{128}.
13009 @deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
13010 Spécifie un ensemble de contrôles d'accès supplémentaires.
13012 Les champs de @code{location-access-controls} disponibles sont :
13014 @deftypevr {paramètre de @code{location-access-controls}} file-name path
13015 Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
13018 @deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
13019 Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
13020 que le champ @code{access-controls} de @code{operation-access-control}.
13022 La valeur par défaut est @samp{()}.
13025 @deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
13026 Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
13028 La valeur par défaut est @samp{()}.
13030 Les champs de @code{method-access-controls} disponibles sont :
13032 @deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
13033 Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
13034 méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
13035 aux méthodes listées.
13037 La valeur par défaut est @samp{#f}.
13040 @deftypevr {paramètre de @code{method-access-controls}} method-list methods
13041 Les méthodes auxquelles ce contrôle d'accès s'applique.
13043 La valeur par défaut est @samp{()}.
13046 @deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
13047 Directives de contrôle d'accès, comme une liste de chaînes de caractères.
13048 Chaque chaîne devrait être une directive, comme « Order allow, deny ».
13050 La valeur par défaut est @samp{()}.
13055 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
13056 Spécifie le nombre de messages de débogage qui sont retenu pour la
13057 journalisation si une erreur arrive dans un travail d'impression. Les
13058 messages de débogage sont journalisés indépendamment du paramètre LogLevel.
13060 La valeur par défaut est @samp{100}.
13063 @deftypevr {paramètre de @code{cups-configuration}} log-level log-level
13064 Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
13065 @code{none} arrête toute journalisation alors que que @code{debug2}
13068 La valeur par défaut est @samp{info}.
13071 @deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
13072 Spécifie le format de la date et de l'heure dans les fichiers de journaux.
13073 La valeur @code{standard} enregistre les secondes entières alors que
13074 @code{usecs} enregistre les microsecondes.
13076 La valeur par défaut est @samp{standard}.
13079 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
13080 Spécifie le nombre maximum de clients simultanés qui sont autorisés par
13083 La valeur par défaut est @samp{100}.
13086 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
13087 Spécifie le nombre maximum de clients simultanés permis depuis une même
13090 La valeur par défaut est @samp{100}.
13093 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
13094 Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
13097 La valeur par défaut est @samp{9999}.
13100 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
13101 Spécifie la durée maximum qu'un travail peut rester dans l'état de
13102 suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
13103 désactive l'annulation des travaux suspendus.
13105 La valeur par défaut est @samp{0}.
13108 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
13109 Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
13110 permet un nombre illimité de travaux.
13112 La valeur par défaut est @samp{500}.
13115 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
13116 Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
13117 La valeur 0 permet au plus MaxJobs travaux par imprimante.
13119 La valeur par défaut est @samp{0}.
13122 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
13123 Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
13124 valeur 0 permet au plus MaxJobs travaux par utilisateur.
13126 La valeur par défaut est @samp{0}.
13129 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
13130 Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
13131 annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
13134 La valeur par défaut est @samp{10800}.
13137 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
13138 Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
13139 fasse tourner, en octets. La valeur 0 désactive la rotation.
13141 La valeur par défaut est @samp{1048576}.
13144 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
13145 Spécifie la durée maximale à permettre entre les fichiers d'un travail en
13146 contenant plusieurs, en secondes.
13148 La valeur par défaut est @samp{300}.
13151 @deftypevr {paramètre de @code{cups-configuration}} string page-log-format
13152 Spécifie le format des lignes PageLog. Les séquences qui commencent par un
13153 pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
13154 que les autres caractères sont copiés littéralement. Les séquences pourcent
13155 suivantes sont reconnues :
13159 insère un seul caractères pourcent
13162 insère la valeur de l'attribut IPP spécifié
13165 insère le nombre de copies pour la page actuelle
13168 insère le numéro de page actuelle
13171 insère la date et l'heure actuelle dans un format de journal commun
13174 insère l'ID du travail
13177 insère le nom de l'imprimante
13180 insère le nom d'utilisateur
13183 Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
13184 @code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
13185 %@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
13188 La valeur par défaut est @samp{""}.
13191 @deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
13192 Passe les variables d'environnement spécifiées aux processus fils ; une
13193 liste de chaînes de caractères.
13195 La valeur par défaut est @samp{()}.
13198 @deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
13199 Spécifie des politiques de contrôle d'accès nommées.
13201 Les champs de @code{policy-configuration} disponibles sont :
13203 @deftypevr {paramètre de @code{policy-configuration}} string name
13204 Nom de la politique.
13207 @deftypevr {paramètre de @code{policy-configuration}} string job-private-access
13208 Spécifie une liste d'accès pour les valeurs privées du travail.
13209 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
13210 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
13211 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
13212 le champ @code{system-group} de la configuration @code{files-config}, qui
13213 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
13214 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
13215 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
13216 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
13218 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
13221 @deftypevr {paramètre de @code{policy-configuration}} string job-private-values
13222 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
13223 @code{default}, ou @code{none}.
13225 La valeur par défaut est @samp{"job-name job-originating-host-name
13226 job-originating-user-name phone"}.
13229 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
13230 Spécifie un liste d'accès pour les valeurs privées de la souscription.
13231 @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
13232 requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
13233 propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
13234 le champ @code{system-group} de la configuration @code{files-config}, qui
13235 est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
13236 possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
13237 @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
13238 liste d'accès peut aussi être simplement @code{all} ou @code{default}.
13240 La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
13243 @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
13244 Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
13245 @code{default}, ou @code{none}.
13247 La valeur par défaut est @samp{"notify-events notify-pull-method
13248 notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
13251 @deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
13252 Contrôle d'accès par les actions IPP.
13254 La valeur par défaut est @samp{()}.
13258 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
13259 Spécifie si les fichiers de travaux (les documents) sont préservés après
13260 qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
13261 fichiers de travaux sont préservés pour le nombre de secondes indiquées
13262 après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
13264 La valeur par défaut est @samp{86400}.
13267 @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
13268 Spécifie si l'historique des travaux est préservé après qu'un travail est
13269 imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
13270 est préservé pour le nombre de secondes indiquées après l'impression. Si la
13271 valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
13272 atteindre la limite MaxJobs.
13274 La valeur par défaut est @samp{#t}.
13277 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
13278 Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
13281 La valeur par défaut est @samp{30}.
13284 @deftypevr {paramètre de @code{cups-configuration}} string rip-cache
13285 Spécifie la quantité de mémoire maximale à utiliser pour convertir des
13286 documents en bitmaps pour l'imprimante.
13288 La valeur par défaut est @samp{"128m"}.
13291 @deftypevr {paramètre de @code{cups-configuration}} string server-admin
13292 Spécifie l'adresse de courriel de l'administrateur système.
13294 La valeur par défaut est @samp{"root@@localhost.localdomain"}.
13297 @deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
13298 La directive ServerAlias est utilisée pour la validation des en-tête HTTP
13299 Host lorsque les clients se connectent à l'ordonnanceur depuis des
13300 interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
13301 système à des attaques connues de recombinaison DNS dans le navigateur, même
13302 lorsque vous accédez au site à travers un pare-feu. Si la découverte
13303 automatique des autres noms ne fonctionne pas, nous vous recommandons de
13304 lister chaque nom alternatif avec une directive SeverAlias plutôt que
13305 d'utiliser @code{*}.
13307 La valeur par défaut est @samp{*}.
13310 @deftypevr {paramètre de @code{cups-configuration}} string server-name
13311 Spécifie le nom d'hôte pleinement qualifié du serveur.
13313 La valeur par défaut est @samp{"localhost"}.
13316 @deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
13317 Spécifie les informations incluses dans les en-têtes Server des réponses
13318 HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
13319 @code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
13320 @code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
13321 rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
13322 commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
13325 La valeur par défaut est @samp{Minimal}.
13328 @deftypevr {paramètre de @code{cups-configuration}} string set-env
13329 Indique que la variable d'environnement spécifiée doit être passée aux
13332 La valeur par défaut est @samp{"variable value"}.
13335 @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
13336 Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
13337 valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
13338 une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
13339 pour indiquer toutes les interfaces.
13341 La valeur par défaut est @samp{()}.
13344 @deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
13345 Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
13346 chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
13347 être sures. L'option @code{AllowRC4} active les suites de chiffrement
13348 128-bits RC4, qui sont requises pour certains vieux clients qui
13349 n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
13350 v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
13353 La valeur par défaut est @samp{()}.
13356 @deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
13357 Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
13360 La valeur par défaut est @samp{#f}.
13363 @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
13364 Spécifie le délai d'attente des requêtes HTTP, en secondes.
13366 La valeur par défaut est @samp{300}.
13370 @deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
13371 Spécifie si l'interface web est activée.
13373 La valeur par défaut est @samp{#f}.
13376 Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
13377 t'aime bien mais arrête maintenant avec ces options de configuration
13378 »@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
13379 traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
13380 effet. cependant, encore un point supplémentaire : vous pouvez avoir un
13381 fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
13382 ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
13383 configuration d'un @code{cups-service-type}.
13385 Les champs de @code{opaque-cups-configuration} disponibles sont :
13387 @deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
13391 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
13392 Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
13395 @deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
13396 Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
13400 Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
13401 sont dans des chaînes du même nom, pouvez instancier un service CUPS de
13405 (service cups-service-type
13406 (opaque-cups-configuration
13407 (cupsd.conf cupsd.conf)
13408 (cups-files.conf cups-files.conf)))
13412 @node Services de bureaux
13413 @subsubsection Services de bureaux
13415 Le module @code{(gnu services desktop)} fournit des services qui sont
13416 habituellement utiles dans le contexte d'une installation « de bureau » —
13417 c'est-à-dire sur une machine qui fait tourner un service d'affichage
13418 graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
13419 Il définit aussi des services qui fournissent des environnements de bureau
13420 spécifiques comme GNOME, XFCE et MATE.
13422 Pour simplifier les choses, le module définit une variable contenant
13423 l'ensemble des services que les utilisateurs s'attendent en général à avoir
13424 sur une machine avec un environnement graphique et le réseau :
13426 @defvr {Variable Scheme} %desktop-services
13427 C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
13428 ajustant des services pour une configuration « de bureau » typique.
13430 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
13431 gestion réseau (@pxref{Services réseau,
13432 @code{network-manager-service-type}}), des services de gestion de l'énergie
13433 et des couleurs, le gestionnaire de connexion et de session @code{elogind},
13434 le service de privilèges Polkit, le service de géolocalisation GeoClue, le
13435 démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
13436 mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
13437 et le service name service switch est configuré pour pouvoir utiliser
13438 @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
13441 La variable @var{%desktop-services} peut être utilisée comme champ
13442 @code{services} d'une déclaration @code{operating-system}
13443 (@pxref{Référence de système d'exploitation, @code{services}}).
13445 En plus, les procédures @code{gnome-desktop-service},
13446 @code{xfce-desktop-service}, @code{mate-desktop-service} et
13447 @code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
13448 ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
13449 du système comme les utilitaires d'ajustement de la luminosité et de gestion
13450 de l'énergie sont ajoutés au système, en étendant @code{polkit} et
13451 @code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
13452 privilèges plus élevés sur un nombre limité d'interfaces systèmes
13453 spécialisées. En plus, ajouter un service construit par
13454 @code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
13455 système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
13456 au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
13457 d'ouvrir une fenêtre de gestion des fichier « en mode root », si
13458 l'utilisateur s'authentifie avec le mot de passe administrateur via
13459 l'interface graphique polkit standard. « Ajouter MATE » signifie que
13460 @code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
13461 à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
13462 d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
13463 @code{dbus} est étendu comme il faut et que plusieurs binaires
13464 d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
13465 d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
13468 Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
13469 par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
13470 récent Wayland, vous devez utiliser @code{sddm-service} à la place de
13471 @code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
13472 ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
13473 vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
13474 avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
13475 gnome-session}. Actuellement seul GNOME support Wayland.
13477 @deffn {Procédure Scheme} gnome-desktop-service
13478 Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
13479 étend polkit avec des actions de @code{gnome-settings-daemon}.
13482 @deffn {Procédure Scheme} xfce-desktop-service
13483 Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
13484 étend polkit avec la capacité pour @code{thunar} de manipuler le système de
13485 fichier en tant que root depuis une session utilisateur, après que
13486 l'utilisateur s'est authentifié avec le mot de passe administrateur.
13489 @deffn {Procédure Scheme} mate-desktop-service
13490 Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
13491 étend polkit avec les actions de @code{mate-settings-daemon}.
13494 @deffn {Procédure Scheme} enlightenment-desktop-service-type
13495 Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
13496 avec les actions de @code{efl}
13499 @deftp {Type de données} enlightenment-desktop-service-configuration
13501 @item @code{enlightenment} (par défaut : @code{enlightenment})
13502 Le paquet enlightenment à utiliser.
13506 Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
13507 la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
13508 Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
13509 @code{%desktop-services} dans le champ @code{services} de votre
13510 @code{operating-system}.
13513 (use-modules (gnu))
13514 (use-service-modules desktop)
13517 ;; cons* ajoute les élément à la liste donnée en dernier argument
13518 (services (cons* (gnome-desktop-service)
13519 (xfce-desktop-service)
13520 %desktop-services))
13524 Ces environnements de bureau seront alors disponibles comme une option dans
13525 la fenêtre de connexion graphique.
13527 Les définitions de service qui sont vraiment incluses dans
13528 @code{%desktop-services} et fournies par @code{(gnu services dbus)} et
13529 @code{(gnu services desktop)} sont décrites plus bas.
13531 @deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
13532 Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
13535 @uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
13536 communication inter-processus. Son bus système est utilisé pour permettre à
13537 des services systèmes de communiquer et d'être notifiés d'événements
13540 @var{services} doit être une liste de paquets qui fournissent un répertoire
13541 @file{etc/dbus-1/system.d} contenant de la configuration D-Bus
13542 supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
13543 avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
13544 @code{(list avahi)}.
13547 @deffn {Procédure Scheme} elogind-service [#:config @var{config}]
13548 Renvoie un service qui lance le démon de gestion de connexion et de session
13549 @code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
13550 une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
13551 sont connectés, le type de session qu'ils sont ouverte, suspendre le
13552 système, désactiver la veille système, redémarrer le système et d'autre
13555 Elogind gère la plupart des événements liés à l'énergie du système, par
13556 exemple mettre en veille le système quand l'écran est rabattu ou en
13557 l'éteignant quand le bouton de démarrage est appuyé.
13559 L'argument @var{config} spécifie la configuration d'elogind et devrait être
13560 le résultat d'une invocation de @code{(elogind-configuration
13561 (@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
13562 valeur par défaut sont :
13565 @item kill-user-processes?
13567 @item kill-only-users
13569 @item kill-exclude-users
13571 @item inhibit-delay-max-seconds
13573 @item handle-power-key
13575 @item handle-suspend-key
13577 @item handle-hibernate-key
13579 @item handle-lid-switch
13581 @item handle-lid-switch-docked
13583 @item power-key-ignore-inhibited?
13585 @item suspend-key-ignore-inhibited?
13587 @item hibernate-key-ignore-inhibited?
13589 @item lid-switch-ignore-inhibited?
13591 @item holdoff-timeout-seconds
13595 @item idle-action-seconds
13597 @item runtime-directory-size-percent
13599 @item runtime-directory-size
13603 @item suspend-state
13604 @code{("mem" "standby" "freeze")}
13607 @item hibernate-state
13609 @item hibernate-mode
13610 @code{("platform" "shutdown")}
13611 @item hybrid-sleep-state
13613 @item hybrid-sleep-mode
13614 @code{("suspend" "platform" "shutdown")}
13618 @deffn {Procédure Scheme} accountsservice-service @
13619 [#:accountsservice @var{accountsservice}]
13620 Renvoie un service qui lance AccountsService, un service système qui peut
13621 lister les comptes disponibles, changer leur mot de passe, etc.
13622 AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
13623 privilégiés de pouvoir modifier la configuration de leur système.
13624 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
13625 accountsservice} pour trouver plus d'informations.
13627 L'argument @var{accountsservice} est le paquet @code{accountsservice} à
13628 exposer comme un service.
13631 @deffn {Procédure Scheme} polkit-service @
13632 [#:polkit @var{polkit}]
13633 Renvoie un service qui lance le
13634 @uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
13635 des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
13636 l'accès à des opération privilégiées d'une manière structurée. En demandant
13637 au service Polkit, un composant système privilégié peut savoir lorsqu'il
13638 peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
13639 exemple, un utilisateur normal peut obtenir le droit de mettre le système en
13640 veille si l'utilisateur est connecté localement.
13643 @deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @
13644 [#:watts-up-pro? #f] @
13645 [#:poll-batteries? #t] @
13646 [#:ignore-lid? #f] @
13647 [#:use-percentage-for-policy? #f] @
13648 [#:percentage-low 10] @
13649 [#:percentage-critical 3] @
13650 [#:percentage-action 2] @
13651 [#:time-low 1200] @
13652 [#:time-critical 300] @
13653 [#:time-action 120] @
13654 [#:critical-power-action 'hybrid-sleep]
13655 Renvoie un service qui lance @uref{http://upower.freedesktop.org/,
13656 @command{upowerd}}, un moniteur système pour la consommation électrique et
13657 le niveau de batterie, avec les paramètres de configuration données. Il
13658 implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment
13662 @deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
13663 Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
13664 UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
13665 et la capacité de monter et démonter des disques à des interfaces
13666 utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
13667 commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
13670 @deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
13671 Renvoie un service qui lance @command{colord}, un service système avec une
13672 interface D-Bus pour gérer les profils de couleur des périphériques
13673 d'entrées et de sorties comme les écrans et les scanners. Il est notamment
13674 utilisé par l'outil graphique GNOME Color Manager. Voir
13675 @uref{http://www.freedesktop.org/software/colord/, le site web de colord}
13676 pour plus d'informations.
13679 @deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
13680 Renvoie une configuration qui permet d'accéder aux données de localisation
13681 de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
13682 @code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
13683 d'accéder aux informations de localisation par défaut. Le booléen
13684 @var{system?} indique si une application est un composant système ou non.
13685 Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
13686 application a le droit d'accéder aux informations de géolocalisation. Une
13687 liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
13690 @defvr {Variable Scheme} %standard-geoclue-applications
13691 la liste standard de configuration des application GeoClue connues, qui
13692 permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
13693 actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
13694 Epiphany de demander les informations de localisation. IceCat et Epiphany
13695 demandent tous deux à l'utilisateur avant de permettre à une page web de
13696 connaître l'emplacement de l'utilisateur.
13699 @deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
13700 [#:whitelist '()] @
13701 [#:wifi-geolocation-url
13702 "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
13703 [#:submit-data? #f] [#:wifi-submission-url
13704 "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
13705 [#:submission-nick "geoclue"] @
13706 [#:applications %standard-geoclue-applications]
13707 Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
13708 service fournit une interface D-Bus pour permettre aux applications de
13709 demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
13710 des informations à des bases de données de géolocalisation en ligne. Voir
13711 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
13712 GeoClue} pour plus d'informations.
13715 @deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
13716 [@w{#:auto-enable? #f}]
13717 Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
13718 appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
13719 Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
13720 automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
13721 utilisez un clavier ou une souris bluetooth.
13723 Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
13727 @node Services de son
13728 @subsubsection Services de son
13730 @cindex support du son
13732 @cindex PulseAudio, support du son
13734 The @code{(gnu services sound)} module provides a service to configure the
13735 Advanced Linux Sound Architecture (ALSA) system, which making PulseAudio the
13736 prefered ALSA output driver.
13738 @deffn {Variable Scheme} alsa-service-type
13739 This is the type for the @uref{https://alsa-project.org/, Advanced Linux
13740 Sound Architecture} (ALSA) system, which generates the
13741 @file{/etc/asound.conf} configuration file. The value for this type is a
13742 @command{alsa-configuration} record as in this example:
13745 (service alsa-service-type)
13748 Voir plus bas pour des détails sur @code{alsa-configuration}.
13751 @deftp {Type de données} alsa-configuration
13752 Type de données représentant la configuration pour @code{alsa-service}.
13755 @item @code{alsa-plugins} (default: @var{alsa-plugins})
13756 @code{alsa-plugins} package to use.
13758 @item @code{pulseaudio?} (par défaut : @var{#t})
13759 Indique si les applications ALSA devraient utiliser le serveur de son
13760 @uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
13763 Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
13764 produisent du son en même temps et de les contrôler individuellement via
13765 @command{pavucontrol} entre autres choses.
13767 @item @code{extra-options} (par défaut : @var{""})
13768 String to append to the @file{/etc/asound.conf} file.
13773 Individual users who want to override the system configuration of ALSA can
13774 do it with the @file{~/.asoundrc} file:
13777 # In guix, we have to specify the absolute path for plugins.
13779 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
13782 # Routing ALSA to jack:
13783 # <http://jackaudio.org/faq/routing_alsa.html>.
13787 0 system:playback_1
13788 1 system:playback_2
13805 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
13809 @node Services de bases de données
13810 @subsubsection Services de bases de données
13814 Le module @code{(gnu services databases)} fournit les services suivants.
13816 @deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
13817 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
13818 [#:port 5432] [#:locale ``en_US.utf8'']
13819 Renvoie un service qui lance @var{postgresql}, le service de bases de
13820 données PostgreSQL.
13822 Le démon PostgreSQL charge sa configuration à l'exécution depuis
13823 @var{config-file}, crée une grappe de bases de données avec @var{locale}
13824 comme paramètre de régionalisation par défaut, stockée dans
13825 @var{data-directory}. Il écoute ensuite sur @var{port}.
13828 @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
13829 Renvoie un service qui lance @command{mysqld}, le service de bases de
13830 données MySQL ou MariaDB.
13832 L'argument @var{config} facultatif spécifie la configuration de
13833 @command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
13836 @deftp {Type de données} mysql-configuration
13837 Type de données représentant la configuration de @var{mysql-service}.
13840 @item @code{mysql} (par défaut : @var{mariadb})
13841 Objet paquet du serveur de base de données MySQL, qui peut être soit
13842 @var{mariadb}, soit @var{mysql}.
13844 Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
13845 Pour MariaDB, le mot de passe root est vide.
13847 @item @code{port} (par défaut : @code{3306})
13848 Port TCP sur lequel le serveur de base de données écoute les connexions
13853 @defvr {Variable Scheme} memcached-service-type
13854 C'est le type de service pour le service @uref{https://memcached.org/,
13855 Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
13856 type de service est un objet @code{memcached-configuration}.
13860 (service memcached-service-type)
13863 @deftp {Type de données} memcached-configuration
13864 Type de données représentant la configuration de memcached.
13867 @item @code{memcached} (par défaut : @code{memcached})
13868 Le paquet Memcached à utiliser.
13870 @item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
13871 Les interfaces réseaux sur lesquelles écouter.
13873 @item @code{tcp-port} (par défaut : @code{11211})
13874 Port sur lequel accepter les connexions.
13876 @item @code{udp-port} (par défaut : @code{11211})
13877 Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
13880 @item @code{additional-options} (par défaut : @code{'()})
13881 Options de la ligne de commande supplémentaires à passer à @code{memcached}.
13885 @defvr {Variable Scheme} mongodb-service-type
13886 C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
13887 valeur de ce service est un objet @code{mongodb-configuration}.
13891 (service mongodb-service-type)
13894 @deftp {Type de données} mongodb-configuration
13895 Type de données représentant la configuration de mongodb.
13898 @item @code{mongodb} (par défaut : @code{mongodb})
13899 Le paquet MongoDB à utiliser.
13901 @item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
13902 Le fichier de configuration pour MongoDB.
13904 @item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
13905 Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
13906 appartienne à l'utilisateur mongodb. Il devrait correspondre au
13907 data-directory que MongoDB est configuré pour utiliser dans son fichier de
13912 @defvr {Variable Scheme} redis-service-type
13913 C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
13914 Redis} dont la valeur est un objet @code{redis-configuration}.
13917 @deftp {Type de données} redis-configuration
13918 Type de données représentant la configuration de redis.
13921 @item @code{redis} (par défaut : @code{redis})
13922 Le paquet Redis à utiliser.
13924 @item @code{bind} (par défaut : @code{"127.0.0.1"})
13925 Interface réseau sur laquelle écouter.
13927 @item @code{port} (par défaut : @code{6379})
13928 Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
13931 @item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
13932 Répertoire dans lequel stocker la base de données et les fichiers liés.
13936 @node Services de courriels
13937 @subsubsection Services de courriels
13941 Le module @code{(gnu services mail)} fournit des définitions de services
13942 Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
13943 que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
13944 détaillés dans les sous-sections ci-dessous.
13946 @subsubheading Service Dovecot
13948 @deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
13949 Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
13952 Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
13953 configuration par défaut créé par @code{(dovecot-configuration)} suffira si
13954 votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
13955 sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
13956 ports non chiffrés par défaut. Il y a quelques options cependant, que les
13957 administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
13958 d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
13959 paramètres via une interface Scheme unifiée.
13961 Par exemple, pour spécifier que les courriels se trouvent dans
13962 @code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
13965 (dovecot-service #:config
13966 (dovecot-configuration
13967 (mail-location "maildir:~/.mail")))
13970 Les paramètres de configuration disponibles sont les suivants. Chaque
13971 définition des paramètres est précédé par son type ; par exemple,
13972 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
13973 spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
13974 de spécifier la configuration comme une chaîne de caractères, si vous avez
13975 un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
13976 système ; voir la fin pour plus de détails.
13978 @c The following documentation was initially generated by
13979 @c (generate-documentation) in (gnu services mail). Manually maintained
13980 @c documentation is better, so we shouldn't hesitate to edit below as
13981 @c needed. However if the change you want to make to this documentation
13982 @c can be done in an automated way, it's probably easier to change
13983 @c (generate-documentation) than to make it below and have to deal with
13984 @c the churn as dovecot updates.
13986 Les champs de @code{dovecot-configuration} disponibles sont :
13988 @deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
13992 @deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
13993 Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
13994 sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
13995 IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
13996 ou quelque chose de plus complexe, complétez les champs d'adresse et de port
13997 de @samp{inet-listener} des services spécifiques qui vous intéressent.
14000 @deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
14001 Liste des protocoles que vous voulez servir. Les protocoles disponibles
14002 comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
14004 Les champs @code{protocol-configuration} disponibles sont :
14006 @deftypevr {paramètre de @code{protocol-configuration}} string name
14007 Le nom du protocole.
14010 @deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
14011 Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
14012 trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
14013 partagés) et lda. Sa valeur par défaut est
14014 @samp{"/var/run/dovecot/auth-userdb"}.
14017 @deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
14018 Liste de greffons à charger séparés par des espaces.
14021 @deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
14022 Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
14023 adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
14024 la casse. Par défaut @samp{10}.
14029 @deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
14030 Liste des services à activer. Les services disponibles comprennent
14031 @samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
14034 Les champs de @code{service-configuration} disponibles sont :
14036 @deftypevr {paramètre de @code{service-configuration}} string kind
14037 Le type de service. Les valeurs valides comprennent @code{director},
14038 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
14039 @code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
14040 @code{quota-warning} ou n'importe quoi d'autre.
14043 @deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
14044 Les auditeurs du service. Un auditeur est soit un
14045 @code{unix-listener-configuration}, soit un
14046 @code{fifo-listener-configuration}, soit un
14047 @code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
14049 Les champs de @code{unix-listener-configuration} disponibles sont :
14051 @deftypevr {paramètre de @code{unix-listener-configuration}} string path
14052 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14053 utilisé comme nom de section.
14056 @deftypevr {paramètre de @code{unix-listener-configuration}} string mode
14057 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14060 @deftypevr {paramètre de @code{unix-listener-configuration}} string user
14061 L'utilisateur à qui appartient le socket. La valeur par défaut est
14065 @deftypevr {paramètre de @code{unix-listener-configuration}} string group
14066 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14070 Les champs de @code{fifo-listener-configuration} disponibles sont :
14072 @deftypevr {paramètre de @code{fifo-listener-configuration}} string path
14073 Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
14074 utilisé comme nom de section.
14077 @deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
14078 Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
14081 @deftypevr {paramètre de @code{fifo-listener-configuration}} string user
14082 L'utilisateur à qui appartient le socket. La valeur par défaut est
14086 @deftypevr {paramètre de @code{fifo-listener-configuration}} string group
14087 Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
14091 Les champs de @code{inet-listener-configuration} disponibles sont :
14093 @deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
14094 Le protocole à écouter.
14097 @deftypevr {paramètre de @code{inet-listener-configuration}} string address
14098 L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
14099 La valeur par défaut est @samp{""}.
14102 @deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
14103 Le port sur lequel écouter.
14106 @deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
14107 S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
14108 @samp{required}. La valeur par défaut est @samp{#t}.
14113 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
14114 Nombre de connexions à gérer avant de démarrer un nouveau processus.
14115 Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
14116 mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
14120 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
14121 Nombre de processus à toujours garder en attente de connexions. La valeur
14122 par défaut est @samp{0}.
14125 @deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
14126 Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
14127 d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
14132 @deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
14133 Configuration du dictionnaire, créé par le constructeur
14134 @code{dict-configuration}.
14136 Les champs de @code{dict-configuration} disponibles sont :
14138 @deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
14139 Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
14140 valeur par défaut est @samp{()}.
14145 @deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
14146 Une liste de configurations passdb, chacune créée par le constructeur
14147 @code{passdb-configuration}.
14149 Les champs de @code{passdb-configuration} disponibles sont :
14151 @deftypevr {paramètre de @code{passdb-configuration}} string driver
14152 Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
14153 @samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
14154 par défaut est @samp{"pam"}.
14157 @deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
14158 Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
14159 par défaut est @samp{""}.
14164 @deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
14165 Liste des configurations userdb, chacune créée par le constructeur
14166 @code{userdb-configuration}.
14168 Les champs de @code{userdb-configuration} disponibles sont :
14170 @deftypevr {paramètre de @code{userdb-configuration}} string driver
14171 Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
14172 @samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
14175 @deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
14176 Liste des arguments du pilote userdb séparés par des espaces. La valeur par
14177 défaut est @samp{""}.
14180 @deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
14181 Remplace des champs de passwd. La valeur par défaut est @samp{()}.
14186 @deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
14187 Configuration du greffon, créé par le constructeur
14188 @code{plugin-configuration}.
14191 @deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
14192 Liste d'espaces de noms. Chaque élément de la liste est créé par le
14193 constructeur @code{namespace-configuration}.
14195 Les champs de @code{namespace-configuration} disponibles sont :
14197 @deftypevr {paramètre de @code{namespace-configuration}} string name
14198 Nom de cet espace de nom.
14201 @deftypevr {paramètre de @code{namespace-configuration}} string type
14202 Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
14203 valeur par défaut est @samp{"private"}.
14206 @deftypevr {paramètre de @code{namespace-configuration}} string separator
14207 Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
14208 séparateur pour tous les espaces de noms ou certains clients seront confus.
14209 @samp{/} est généralement une bonne valeur. La valeur par défaut dépend
14210 cependant du format de stockage sous-jacent. La valeur par défaut est
14214 @deftypevr {paramètre de @code{namespace-configuration}} string prefix
14215 Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
14216 différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
14217 valeur par défaut est @samp{""}.
14220 @deftypevr {paramètre de @code{namespace-configuration}} string location
14221 Emplacement physique de la boîte aux lettres. C'est le même format que
14222 mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
14226 @deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
14227 Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
14228 le possède. La valeur par défaut est @samp{#f}.
14231 @deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
14232 Si l'espace de nom est caché, il n'est pas publié auprès des clients par
14233 l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
14234 #f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
14235 des espaces de noms différents que vous voulez rendre obsolètes sans les
14236 casser. Par exemple vous pouvez cacher les espaces de noms avec les
14237 préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
14238 défaut est @samp{#f}.
14241 @deftypevr {paramètre de @code{namespace-configuration}} boolean list?
14242 Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
14243 Cela rend l'espace de nom visible pour les clients qui ne supportent pas
14244 l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
14245 aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
14246 défaut est @samp{#t}.
14249 @deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
14250 Les espaces de noms gèrent leur propre souscription. Si la valeur est
14251 @code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
14252 toujours avoir cette valeur à @code{#t}. La valeur par défaut est
14256 @deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
14257 Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
14258 par défaut est @samp{()}.
14260 Les champs de @code{mailbox-configuration} disponibles sont :
14262 @deftypevr {paramètre de @code{mailbox-configuration}} string name
14263 Nom de cette boîte aux lettres.
14266 @deftypevr {paramètre de @code{mailbox-configuration}} string auto
14267 @samp{create} créera automatiquement cette boîte aux lettres.
14268 @samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
14269 défaut est @samp{"no"}.
14272 @deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
14273 Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
14274 valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
14275 @code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
14276 défaut est @samp{()}.
14283 @deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
14284 Répertoire de base où stocker les données d'exécution. La valeur par défaut
14285 est @samp{"/var/run/dovecot/"}.
14288 @deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
14289 Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
14293 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
14294 Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
14295 sont autorisées à modifier leurs adresses IP et leurs ports (pour la
14296 connexion et la vérification d'authentification).
14297 @samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
14298 Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
14299 défaut est @samp{()}.
14302 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
14303 Liste des sockets de vérification d'accès de connexion (p.@: ex.@:
14304 tcpwrap). La valeur par défaut est @samp{()}.
14307 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
14308 Montre des titres de processus plus verbeux (dans ps). Actuellement, montre
14309 le nom d'utilisateur et l'adresse IP. Utile pour voir qui utilise les
14310 processus IMAP (p.@: ex.@: des boîtes aux lettres partagées ou si le même
14311 uid est utilisé pour plusieurs comptes). La valeur par défaut est
14315 @deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
14316 Indique si les processus devraient toujours être tués lorsque le processus
14317 maître de Dovecot est éteint. La valeur @code{#f} signifie que Dovecot peut
14318 être mis à jour sans forcer les connexions clientes existantes à se fermer
14319 (bien que cela puisse être un problème si la mise à jour est un correctif de
14320 sécurité par exemple). La valeur par défaut est @samp{#t}.
14323 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
14324 Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
14325 de connexions au serveur doveadm au lieu de les lancer dans le même
14326 processus. La valeur par défaut est @samp{0}.
14329 @deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
14330 Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
14331 valeur par défaut est @samp{"doveadm-server"}.
14334 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
14335 Liste des variables d'environnement qui sont préservées au démarrage de
14336 Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
14337 paires clef=valeur pour toujours spécifier ce paramètre.
14340 @deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
14341 Désactive la commande LOGIN et toutes les autres authentifications en texte
14342 clair à moins que SSL/TLS ne soit utilisé (capacité LOGINDISABLED).
14343 Remarquez que si l'IP distante correspond à l'IP locale (c.-à-d.@: que vous
14344 vous connectez depuis le même ordinateur), la connexion est considérée comme
14345 sécurisée et l'authentification en texte clair est permise. Voir aussi le
14346 paramètre ssl=required. La valeur par défaut est @samp{#t}.
14349 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
14350 Taille du cache d'authentification (p.@: ex.@: @samp{#e10e6}). 0 signifie
14351 qu'il est désactivé. Remarquez que bsdauth, PAM et vpopmail ont besoin que
14352 @samp{cache-key} soit indiqué pour que le cache soit utilisé. La valeur par
14353 défaut est @samp{0}.
14356 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
14357 Durée de vie des données en cache. Après l'expiration du TTL
14358 l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
14359 de données principale revoie une erreur interne. Nous essayons aussi de
14360 gérer les changements de mot de passe automatiquement : si
14361 l'authentification précédente de l'utilisateur était réussie mais pas
14362 celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
14363 l'authentification en texte clair uniquement. La valeur par défaut est
14367 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
14368 TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
14369 passe ne correspond pas). 0 désactive la mise en cache complètement. La
14370 valeur par défaut est @samp{"1 hour"}.
14373 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
14374 Liste des domaines pour les mécanismes d'authentification SASL qui en ont
14375 besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
14376 utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
14377 domaine listé ici, donc gardez celui par défaut en premier. La valeur par
14378 défaut est @samp{()}
14381 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
14382 Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
14383 les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
14384 authentification en texte clair. La valeur par défaut est @samp{""}.
14387 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
14388 Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
14389 d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
14390 listé ici, la connexion échoue automatiquement. C'est juste une
14391 vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
14392 exploiter des vulnérabilités potentielles d'échappement de guillemets avec
14393 les bases de données SQL/LDAP. Si vous voulez autoriser tous les
14394 caractères, indiquez la liste vide.
14397 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
14398 Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
14399 cherchés en base. La valeur contient une série de caractère de -> à. Par
14400 exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
14401 @samp{@@}. La valeur par défaut est @samp{""}.
14404 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
14405 Format des noms d'utilisateur avant qu'ils ne soient cherchés en base. Vous
14406 pouvez utiliser les variables standard ici, p.@: ex.@: %Lu est le nom
14407 d'utilisateur en minuscule, %n enlève le domaine s'il est donné ou
14408 @samp{%n-AT-%d} changerait le @samp{@@} en @samp{-AT-}. Cette traduction
14409 est faite après les changements de @samp{auth-username-translation}. La
14410 valeur par défaut est @samp{"%Lu"}.
14413 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
14414 Si vous voulez permettre aux utilisateurs maîtres de se connecter en
14415 spécifiant le nom d'utilisateur maître dans la chaîne de nom d'utilisateur
14416 normal (c.-à-d.@: sans utiliser le support du mécanisme SASL pour cela),
14417 vous pouvez spécifier le caractère de séparation ici. Le format est ensuite
14418 <nom d'utilisateur><séparateur><nom d'utilisateur maître>. UW-IMAP utilise
14419 @samp{*} comme séparateur, donc ça pourrait être un bon choix. La valeur
14420 par défaut est @samp{""}.
14423 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
14424 Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
14425 mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
14428 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
14429 Nombre maximum de processus de travail dovecot-auth. Ils sont utilisés pour
14430 exécuter des requêtes passdb et userdb bloquantes (p.@: ex.@: MySQL et
14431 PAM). Ils sont créés automatiquement et détruits au besoin. La valeur par
14432 défaut est @samp{30}.
14435 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
14436 Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
14437 est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
14438 des guillemets) pour permettre toutes les entrées keytab. La valeur par
14439 défaut est @samp{""}.
14442 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
14443 Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
14444 par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
14445 spécifié. Vous pourriez avoir besoin de faire en sorte que le service
14446 d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
14447 par défaut est @samp{""}.
14450 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
14451 Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
14452 Samba et l'utilitaire @samp{ntlm-auth}.
14453 <doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
14457 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
14458 Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
14459 @samp{"/usr/bin/ntlm_auth"}.
14462 @deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
14463 Durée d'attente avant de répondre à des authentifications échouées. La
14464 valeur par défaut est @samp{"2 secs"}.
14467 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
14468 Requiert un certification client SSL valide ou l'authentification échoue.
14469 La valeur par défaut est @samp{#f}.
14472 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
14473 Prend le nom d'utilisateur du certificat SSL client, avec
14474 @code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
14475 sujet. La valeur par défaut est @samp{#f}.
14478 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
14479 Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
14480 sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
14481 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
14482 @samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
14483 paramètre @samp{disable-plaintext-auth}.
14486 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
14487 Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
14488 Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
14489 même que le @samp{inet-listener} du service directeur. La valeur par défaut
14493 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
14494 Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
14495 grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
14496 valeur par défaut est @samp{()}.
14499 @deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
14500 Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
14501 après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
14505 @deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
14506 La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
14507 utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
14508 @@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
14509 valeur par défaut est @samp{"%Lu"}.
14512 @deftypevr {paramètre de @code{dovecot-configuration}} string log-path
14513 Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
14514 journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
14515 valeur par défaut est @samp{"syslog"}.
14518 @deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
14519 Fichier de journal à utiliser pour les messages d'information. La valeur
14520 par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
14523 @deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
14524 Fichier de journal à utiliser pour les messages de débogage. La valeur par
14525 défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
14528 @deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
14529 Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
14530 si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
14531 local0..local7. D'autres dispositifs standard sont supportés. La valeur
14532 par défaut est @samp{"mail"}.
14535 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
14536 Log unsuccessful authentication attempts and the reasons why they failed.
14537 Defaults to @samp{#f}.
14540 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
14541 In case of password mismatches, log the attempted password. Valid values
14542 are no, plain and sha1. sha1 can be useful for detecting brute force
14543 password attempts vs. user simply trying the same password over and over
14544 again. You can also truncate the value to n chars by appending ":n"
14545 (e.g. sha1:6). Defaults to @samp{#f}.
14548 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
14549 Even more verbose logging for debugging purposes. Shows for example SQL
14550 queries. Defaults to @samp{#f}.
14553 @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
14554 In case of password mismatches, log the passwords and used scheme so the
14555 problem can be debugged. Enabling this also enables @samp{auth-debug}.
14556 Defaults to @samp{#f}.
14559 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
14560 Enable mail process debugging. This can help you figure out why Dovecot
14561 isn't finding your mails. Defaults to @samp{#f}.
14564 @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
14565 Show protocol level SSL errors. Defaults to @samp{#f}.
14568 @deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
14569 Prefix for each line written to log file. % codes are in strftime(3)
14570 format. Defaults to @samp{"\"%b %d %H:%M:%S \""}.
14573 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
14574 List of elements we want to log. The elements which have a non-empty
14575 variable value are joined together to form a comma-separated string.
14578 @deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
14579 Login log format. %s contains @samp{login-log-format-elements} string, %$
14580 contains the data we want to log. Defaults to @samp{"%$: %s"}.
14583 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
14584 Log prefix for mail processes. See doc/wiki/Variables.txt for list of
14585 possible variables you can use. Defaults to
14586 @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
14589 @deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
14590 Format to use for logging mail deliveries. You can use variables:
14593 Delivery status message (e.g. @samp{saved to INBOX})
14605 La valeur par défaut est @samp{"msgid=%m: %$"}.
14608 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
14609 Location for users' mailboxes. The default is empty, which means that
14610 Dovecot tries to find the mailboxes automatically. This won't work if the
14611 user doesn't yet have any mail, so you should explicitly tell Dovecot the
14614 If you're using mbox, giving a path to the INBOX file (e.g. /var/mail/%u)
14615 isn't enough. You'll also need to tell Dovecot where the other mailboxes
14616 are kept. This is called the "root mail directory", and it must be the
14617 first path given in the @samp{mail-location} setting.
14619 There are a few special variables you can use, eg.:
14625 user part in user@@domain, same as %u if there's no domain
14627 domain part in user@@domain, empty if there's no domain
14632 See doc/wiki/Variables.txt for full list. Some examples:
14634 @item maildir:~/Maildir
14635 @item mbox:~/mail:INBOX=/var/mail/%u
14636 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
14638 La valeur par défaut est @samp{""}.
14641 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
14642 System user and group used to access mails. If you use multiple, userdb can
14643 override these by returning uid or gid fields. You can use either numbers
14644 or names. <doc/wiki/UserIds.txt>. Defaults to @samp{""}.
14647 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
14649 La valeur par défaut est @samp{""}.
14652 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
14653 Group to enable temporarily for privileged operations. Currently this is
14654 used only with INBOX when either its initial creation or dotlocking fails.
14655 Typically this is set to "mail" to give access to /var/mail. Defaults to
14659 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
14660 Grant access to these supplementary groups for mail processes. Typically
14661 these are used to set up access to shared mailboxes. Note that it may be
14662 dangerous to set these if users can create symlinks (e.g. if "mail" group is
14663 set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
14664 mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
14665 it). Defaults to @samp{""}.
14668 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
14669 Allow full file system access to clients. There's no access checks other
14670 than what the operating system does for the active UID/GID. It works with
14671 both maildir and mboxes, allowing you to prefix mailboxes names with
14672 e.g. /path/ or ~user/. Defaults to @samp{#f}.
14675 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
14676 Don't use mmap() at all. This is required if you store indexes to shared
14677 file systems (NFS or clustered file system). Defaults to @samp{#f}.
14680 @deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
14681 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS supports
14682 @samp{O_EXCL} since version 3, so this should be safe to use nowadays by
14683 default. Defaults to @samp{#t}.
14686 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
14687 When to use fsync() or fdatasync() calls:
14690 Whenever necessary to avoid losing important data
14692 Useful with e.g. NFS when write()s are delayed
14694 Never use it (best performance, but crashes can lose data).
14696 La valeur par défaut est @samp{"optimized"}.
14699 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
14700 Mail storage exists in NFS. Set this to yes to make Dovecot flush NFS
14701 caches whenever needed. If you're using only a single mail server this
14702 isn't needed. Defaults to @samp{#f}.
14705 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
14706 Mail index files also exist in NFS. Setting this to yes requires
14707 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}. Defaults to
14711 @deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
14712 Locking method for index files. Alternatives are fcntl, flock and dotlock.
14713 Dotlocking uses some tricks which may create more disk I/O than other
14714 locking methods. NFS users: flock doesn't work, remember to change
14715 @samp{mmap-disable}. Defaults to @samp{"fcntl"}.
14718 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
14719 Directory in which LDA/LMTP temporarily stores incoming mails >128 kB.
14720 Defaults to @samp{"/tmp"}.
14723 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
14724 Valid UID range for users. This is mostly to make sure that users can't log
14725 in as daemons or other system users. Note that denying root logins is
14726 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
14727 is set to 0. Defaults to @samp{500}.
14730 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
14732 La valeur par défaut est @samp{0}.
14735 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
14736 Valid GID range for users. Users having non-valid GID as primary group ID
14737 aren't allowed to log in. If user belongs to supplementary groups with
14738 non-valid GIDs, those groups are not set. Defaults to @samp{1}.
14741 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
14743 La valeur par défaut est @samp{0}.
14746 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
14747 Maximum allowed length for mail keyword name. It's only forced when trying
14748 to create new keywords. Defaults to @samp{50}.
14751 @deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
14752 List of directories under which chrooting is allowed for mail processes
14753 (i.e. /var/mail will allow chrooting to /var/mail/foo/bar too). This
14754 setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
14755 settings. If this setting is empty, "/./" in home dirs are ignored.
14756 WARNING: Never add directories here which local users can modify, that may
14757 lead to root exploit. Usually this should be done only if you don't allow
14758 shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
14761 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
14762 Default chroot directory for mail processes. This can be overridden for
14763 specific users in user database by giving /./ in user's home directory
14764 (e.g. /home/./user chroots into /home). Note that usually there is no real
14765 need to do chrooting, Dovecot doesn't allow users to access files outside
14766 their mail directory anyway. If your home directories are prefixed with the
14767 chroot directory, append "/." to @samp{mail-chroot}.
14768 <doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
14771 @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
14772 UNIX socket path to master authentication server to find users. This is
14773 used by imap (for shared users) and lda. Defaults to
14774 @samp{"/var/run/dovecot/auth-userdb"}.
14777 @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
14778 Directory where to look up mail plugins. Defaults to
14779 @samp{"/usr/lib/dovecot"}.
14782 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
14783 List of plugins to load for all services. Plugins specific to IMAP, LDA,
14784 etc. are added to this list in their own .conf files. Defaults to
14788 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
14789 The minimum number of mails in a mailbox before updates are done to cache
14790 file. This allows optimizing Dovecot's behavior to do less disk writes at
14791 the cost of more disk reads. Defaults to @samp{0}.
14794 @deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
14795 When IDLE command is running, mailbox is checked once in a while to see if
14796 there are any new mails or other changes. This setting defines the minimum
14797 time to wait between those checks. Dovecot can also use dnotify, inotify
14798 and kqueue to find out immediately when changes occur. Defaults to
14802 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
14803 Save mails with CR+LF instead of plain LF. This makes sending those mails
14804 take less CPU, especially with sendfile() syscall with Linux and FreeBSD.
14805 But it also creates a bit more disk I/O which may just make it slower. Also
14806 note that if other software reads the mboxes/maildirs, they may handle the
14807 extra CRs wrong and cause problems. Defaults to @samp{#f}.
14810 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
14811 By default LIST command returns all entries in maildir beginning with a
14812 dot. Enabling this option makes Dovecot return only entries which are
14813 directories. This is done by stat()ing each entry, so it causes more disk
14814 I/O. (For systems setting struct @samp{dirent->d_type} this check is free
14815 and it's done always regardless of this setting). Defaults to @samp{#f}.
14818 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
14819 When copying a message, do it with hard links whenever possible. This makes
14820 the performance much better, and it's unlikely to have any side effects.
14821 Defaults to @samp{#t}.
14824 @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
14825 Assume Dovecot is the only MUA accessing Maildir: Scan cur/ directory only
14826 when its mtime changes unexpectedly or when we can't find the mail
14827 otherwise. Defaults to @samp{#f}.
14830 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
14831 Which locking methods to use for locking mbox. There are four available:
14835 Create <mailbox>.lock file. This is the oldest and most NFS-safe solution.
14836 If you want to use /var/mail/ like directory, the users will need write
14837 access to that directory.
14839 Same as dotlock, but if it fails because of permissions or because there
14840 isn't enough disk space, just skip it.
14842 Use this if possible. Works with NFS too if lockd is used.
14844 May not exist in all systems. Doesn't work with NFS.
14846 May not exist in all systems. Doesn't work with NFS.
14849 You can use multiple locking methods; if you do the order they're declared
14850 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
14851 locking methods as well. Some operating systems don't allow using some of
14852 them simultaneously.
14855 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
14859 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
14860 Maximum time to wait for lock (all of them) before aborting. Defaults to
14864 @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
14865 If dotlock exists but the mailbox isn't modified in any way, override the
14866 lock file after this much time. Defaults to @samp{"2 mins"}.
14869 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
14870 When mbox changes unexpectedly we have to fully read it to find out what
14871 changed. If the mbox is large this can take a long time. Since the change
14872 is usually just a newly appended mail, it'd be faster to simply read the new
14873 mails. If this setting is enabled, Dovecot does this but still safely
14874 fallbacks to re-reading the whole mbox file whenever something in mbox isn't
14875 how it's expected to be. The only real downside to this setting is that if
14876 some other MUA changes message flags, Dovecot doesn't notice it
14877 immediately. Note that a full sync is done with SELECT, EXAMINE, EXPUNGE
14878 and CHECK commands. Defaults to @samp{#t}.
14881 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
14882 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
14883 EXAMINE, EXPUNGE or CHECK commands. If this is set, @samp{mbox-dirty-syncs}
14884 is ignored. Defaults to @samp{#f}.
14887 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
14888 Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK
14889 commands and when closing the mailbox). This is especially useful for POP3
14890 where clients often delete all mails. The downside is that our changes
14891 aren't immediately visible to other MUAs. Defaults to @samp{#t}.
14894 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
14895 If mbox size is smaller than this (e.g. 100k), don't write index files. If
14896 an index file already exists it's still read, just not updated. Defaults to
14900 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
14901 Maximum dbox file size until it's rotated. Defaults to @samp{10000000}.
14904 @deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
14905 Maximum dbox file age until it's rotated. Typically in days. Day begins
14906 from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled.
14907 Defaults to @samp{"1d"}.
14910 @deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
14911 When creating new mdbox files, immediately preallocate their size to
14912 @samp{mdbox-rotate-size}. This setting currently works only in Linux with
14913 some file systems (ext4, xfs). Defaults to @samp{#f}.
14916 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
14917 sdbox and mdbox support saving mail attachments to external files, which
14918 also allows single instance storage for them. Other backends don't support
14921 WARNING: This feature hasn't been tested much yet. Use at your own risk.
14923 Directory root where to store mail attachments. Disabled, if empty.
14924 Defaults to @samp{""}.
14927 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
14928 Attachments smaller than this aren't saved externally. It's also possible
14929 to write a plugin to disable saving specific attachments externally.
14930 Defaults to @samp{128000}.
14933 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
14934 File system backend to use for saving attachments:
14937 No SiS done by Dovecot (but this might help FS's own deduplication)
14939 SiS with immediate byte-by-byte comparison during saving
14940 @item sis-queue posix
14941 SiS with delayed comparison and deduplication.
14943 La valeur par défaut est @samp{"sis posix"}.
14946 @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
14947 Hash format to use in attachment filenames. You can add any text and
14948 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
14949 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
14950 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits. Defaults
14951 to @samp{"%@{sha1@}"}.
14954 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
14956 La valeur par défaut est @samp{100}.
14959 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
14961 La valeur par défaut est @samp{1000}.
14964 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
14965 Default VSZ (virtual memory size) limit for service processes. This is
14966 mainly intended to catch and kill processes that leak memory before they eat
14967 up everything. Defaults to @samp{256000000}.
14970 @deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
14971 Login user is internally used by login processes. This is the most
14972 untrusted user in Dovecot system. It shouldn't have access to anything at
14973 all. Defaults to @samp{"dovenull"}.
14976 @deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
14977 Internal user is used by unprivileged processes. It should be separate from
14978 login user, so that login processes can't disturb other processes. Defaults
14979 to @samp{"dovecot"}.
14982 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
14983 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>. Defaults to
14987 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
14988 PEM encoded X.509 SSL/TLS certificate (public key). Defaults to
14989 @samp{"</etc/dovecot/default.pem"}.
14992 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
14993 PEM encoded SSL/TLS private key. The key is opened before dropping root
14994 privileges, so keep the key file unreadable by anyone but root. Defaults to
14995 @samp{"</etc/dovecot/private/default.pem"}.
14998 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
14999 If key file is password protected, give the password here. Alternatively
15000 give it when starting dovecot with -p parameter. Since this file is often
15001 world-readable, you may want to place this setting instead to a different.
15002 Defaults to @samp{""}.
15005 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
15006 PEM encoded trusted certificate authority. Set this only if you intend to
15007 use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
15008 certificate(s) followed by the matching CRL(s). (e.g. @samp{ssl-ca
15009 </etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
15012 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
15013 Require that CRL check succeeds for client certificates. Defaults to
15017 @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
15018 Request client to send a certificate. If you also want to require it, set
15019 @samp{auth-ssl-require-client-cert? #t} in auth section. Defaults to
15023 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
15024 Which field from certificate to use for username. commonName and
15025 x500UniqueIdentifier are the usual choices. You'll also need to set
15026 @samp{auth-ssl-username-from-cert? #t}. Defaults to @samp{"commonName"}.
15029 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
15030 Minimum SSL protocol version to accept. Defaults to @samp{"TLSv1"}.
15033 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
15034 SSL ciphers to use. Defaults to
15035 @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
15038 @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
15039 SSL crypto device to use, for valid values run "openssl engine". Defaults
15043 @deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
15044 Address to use when sending rejection mails. %d expands to recipient
15045 domain. Defaults to @samp{"postmaster@@%d"}.
15048 @deftypevr {paramètre de @code{dovecot-configuration}} string hostname
15049 Hostname to use in various parts of sent mails (e.g. in Message-Id) and in
15050 LMTP replies. Default is the system's real hostname@@domain. Defaults to
15054 @deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
15055 If user is over quota, return with temporary failure instead of bouncing the
15056 mail. Defaults to @samp{#f}.
15059 @deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
15060 Binary to use for sending mails. Defaults to @samp{"/usr/sbin/sendmail"}.
15063 @deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
15064 If non-empty, send mails via this SMTP host[:port] instead of sendmail.
15065 Defaults to @samp{""}.
15068 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
15069 Subject: header to use for rejection mails. You can use the same variables
15070 as for @samp{rejection-reason} below. Defaults to @samp{"Rejected: %s"}.
15073 @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
15074 Human readable error message for rejection mails. You can use variables:
15086 La valeur par défaut est @samp{"Your message to <%t> was automatically
15090 @deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
15091 Delimiter character between local-part and detail in email address.
15092 Defaults to @samp{"+"}.
15095 @deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
15096 Header where the original recipient address (SMTP's RCPT TO: address) is
15097 taken from if not available elsewhere. With dovecot-lda -a parameter
15098 overrides this. A commonly used header for this is X-Original-To. Defaults
15102 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
15103 Should saving a mail to a nonexistent mailbox automatically create it?.
15104 Defaults to @samp{#f}.
15107 @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
15108 Should automatically created mailboxes be also automatically subscribed?.
15109 Defaults to @samp{#f}.
15112 @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
15113 Maximum IMAP command line length. Some clients generate very long command
15114 lines with huge mailboxes, so you may need to raise this if you get "Too
15115 long argument" or "IMAP command line too large" errors often. Defaults to
15119 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
15120 IMAP logout format string:
15123 total number of bytes read from client
15125 total number of bytes sent to client.
15127 See @file{doc/wiki/Variables.txt} for a list of all the variables you can
15128 use. Defaults to @samp{"in=%i out=%o deleted=%@{deleted@}
15129 expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@}
15130 hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@}
15131 body_bytes=%@{fetch_body_bytes@}"}.
15134 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
15135 Override the IMAP CAPABILITY response. If the value begins with '+', add
15136 the given capabilities on top of the defaults (e.g. +XFOO XBAR). Defaults
15140 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
15141 How long to wait between "OK Still here" notifications when client is
15142 IDLEing. Defaults to @samp{"2 mins"}.
15145 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
15146 ID field names and values to send to clients. Using * as the value makes
15147 Dovecot use the default value. The following fields have default values
15148 currently: name, version, os, os-version, support-url, support-email.
15149 Defaults to @samp{""}.
15152 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
15153 ID fields sent by client to log. * means everything. Defaults to
15157 @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
15158 Workarounds for various client bugs:
15161 @item delay-newmail
15162 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
15163 CHECK commands. Some clients ignore them otherwise, for example OSX Mail
15164 (<v2.1). Outlook Express breaks more badly though, without this it may show
15165 user "Message no longer in server" errors. Note that OE6 still breaks even
15166 with this workaround if synchronization is set to "Headers Only".
15168 @item tb-extra-mailbox-sep
15169 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and adds
15170 extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
15171 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
15173 @item tb-lsub-flags
15174 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox). This
15175 makes Thunderbird realize they aren't selectable and show them greyed out,
15176 instead of only later giving "not selectable" popup error.
15178 La valeur par défaut est @samp{()}.
15181 @deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
15182 Host allowed in URLAUTH URLs sent by client. "*" allows all. Defaults to
15187 Whew! Lots of configuration options. The nice thing about it though is that
15188 GuixSD has a complete interface to Dovecot's configuration language. This
15189 allows not only a nice way to declare configurations, but also offers
15190 reflective capabilities as well: users can write code to inspect and
15191 transform configurations from within Scheme.
15193 However, it could be that you just want to get a @code{dovecot.conf} up and
15194 running. In that case, you can pass an @code{opaque-dovecot-configuration}
15195 as the @code{#:config} parameter to @code{dovecot-service}. As its name
15196 indicates, an opaque configuration does not have easy reflective
15199 Les champs de @code{opaque-dovecot-configuration} disponibles sont :
15201 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
15205 @deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
15206 The contents of the @code{dovecot.conf}, as a string.
15209 For example, if your @code{dovecot.conf} is just the empty string, you could
15210 instantiate a dovecot service like this:
15213 (dovecot-service #:config
15214 (opaque-dovecot-configuration
15218 @subsubheading OpenSMTPD Service
15220 @deffn {Variable Scheme} opensmtpd-service-type
15221 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD} service,
15222 whose value should be an @code{opensmtpd-configuration} object as in this
15226 (service opensmtpd-service-type
15227 (opensmtpd-configuration
15228 (config-file (local-file "./my-smtpd.conf"))))
15232 @deftp {Type de données} opensmtpd-configuration
15233 Data type representing the configuration of opensmtpd.
15236 @item @code{package} (par défaut : @var{opensmtpd})
15237 Package object of the OpenSMTPD SMTP server.
15239 @item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
15240 File-like object of the OpenSMTPD configuration file to use. By default it
15241 listens on the loopback network interface, and allows for mail from users
15242 and daemons on the local machine, as well as permitting email to remote
15243 servers. Run @command{man smtpd.conf} for more information.
15248 @subsubheading Exim Service
15250 @cindex mail transfer agent (MTA)
15251 @cindex MTA (mail transfer agent)
15254 @deffn {Variable Scheme} exim-service-type
15255 This is the type of the @uref{https://exim.org, Exim} mail transfer agent
15256 (MTA), whose value should be an @code{exim-configuration} object as in this
15260 (service exim-service-type
15261 (exim-configuration
15262 (config-file (local-file "./my-exim.conf"))))
15266 In order to use an @code{exim-service-type} service you must also have a
15267 @code{mail-aliases-service-type} service present in your
15268 @code{operating-system} (even if it has no aliases).
15270 @deftp {Type de données} exim-configuration
15271 Data type representing the configuration of exim.
15274 @item @code{package} (par défaut : @var{exim})
15275 Package object of the Exim server.
15277 @item @code{config-file} (par défaut : @code{#f})
15278 File-like object of the Exim configuration file to use. If its value is
15279 @code{#f} then use the default configuration file from the package provided
15280 in @code{package}. The resulting configuration file is loaded after setting
15281 the @code{exim_user} and @code{exim_group} configuration variables.
15286 @subsubheading Mail Aliases Service
15288 @cindex email aliases
15289 @cindex aliases, for email addresses
15291 @deffn {Variable Scheme} mail-aliases-service-type
15292 This is the type of the service which provides @code{/etc/aliases},
15293 specifying how to deliver mail to users on this system.
15296 (service mail-aliases-service-type
15297 '(("postmaster" "bob")
15298 ("bob" "bob@@example.com" "bob@@example2.com")))
15302 The configuration for a @code{mail-aliases-service-type} service is an
15303 association list denoting how to deliver mail that comes to this
15304 system. Each entry is of the form @code{(alias addresses ...)}, with
15305 @code{alias} specifying the local alias and @code{addresses} specifying
15306 where to deliver this user's mail.
15308 The aliases aren't required to exist as users on the local system. In the
15309 above example, there doesn't need to be a @code{postmaster} entry in the
15310 @code{operating-system}'s @code{user-accounts} in order to deliver the
15311 @code{postmaster} mail to @code{bob} (which subsequently would deliver mail
15312 to @code{bob@@example.com} and @code{bob@@example2.com}).
15314 @node Services de messagerie
15315 @subsubsection Services de messagerie
15320 The @code{(gnu services messaging)} module provides Guix service definitions
15321 for messaging services: currently only Prosody is supported.
15323 @subsubheading Prosody Service
15325 @deffn {Variable Scheme} prosody-service-type
15326 This is the type for the @uref{https://prosody.im, Prosody XMPP
15327 communication server}. Its value must be a @code{prosody-configuration}
15328 record as in this example:
15331 (service prosody-service-type
15332 (prosody-configuration
15333 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
15336 (int-component-configuration
15337 (hostname "conference.example.net")
15339 (mod-muc (mod-muc-configuration)))))
15342 (virtualhost-configuration
15343 (domain "example.net"))))))
15346 See below for details about @code{prosody-configuration}.
15350 By default, Prosody does not need much configuration. Only one
15351 @code{virtualhosts} field is needed: it specifies the domain you wish
15354 You can perform various sanity checks on the generated configuration with
15355 the @code{prosodyctl check} command.
15357 Prosodyctl will also help you to import certificates from the
15358 @code{letsencrypt} directory so that the @code{prosody} user can access
15359 them. See @url{https://prosody.im/doc/letsencrypt}.
15362 prosodyctl --root cert import /etc/letsencrypt/live
15365 Les paramètres de configuration disponibles sont les suivants. Chaque
15366 définition des paramètres est précédé par son type ; par exemple,
15367 @samp{string-list foo} indique que le paramètre @code{foo} devrait être
15368 spécifié comme une liste de chaînes de caractères. Les types précédés de
15369 @code{maybe-} signifient que le paramètre n'apparaîtra pas dans
15370 @code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
15372 There is also a way to specify the configuration as a string, if you have an
15373 old @code{prosody.cfg.lua} file that you want to port over from some other
15374 system; see the end for more details.
15376 The @code{file-object} type designates either a file-like object
15377 (@pxref{G-Expressions, file-like objects}) or a file name.
15379 @c The following documentation was initially generated by
15380 @c (generate-documentation) in (gnu services messaging). Manually maintained
15381 @c documentation is better, so we shouldn't hesitate to edit below as
15382 @c needed. However if the change you want to make to this documentation
15383 @c can be done in an automated way, it's probably easier to change
15384 @c (generate-documentation) than to make it below and have to deal with
15385 @c the churn as Prosody updates.
15387 Les champs de @code{prosody-configuration} disponibles sont :
15389 @deftypevr {paramètre de @code{prosody-configuration}} package prosody
15390 The Prosody package.
15393 @deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
15394 Location of the Prosody data storage directory. See
15395 @url{https://prosody.im/doc/configure}. Defaults to
15396 @samp{"/var/lib/prosody"}.
15399 @deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
15400 Additional plugin directories. They are searched in all the specified paths
15401 in order. See @url{https://prosody.im/doc/plugins_directory}. Defaults to
15405 @deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
15406 Every virtual host and component needs a certificate so that clients and
15407 servers can securely verify its identity. Prosody will automatically load
15408 certificates/keys from the directory specified here. Defaults to
15409 @samp{"/etc/prosody/certs"}.
15412 @deftypevr {paramètre de @code{prosody-configuration}} string-list admins
15413 This is a list of accounts that are admins for the server. Note that you
15414 must create the accounts separately. See
15415 @url{https://prosody.im/doc/admins} and
15416 @url{https://prosody.im/doc/creating_accounts}. Example: @code{(admins
15417 '("user1@@example.com" "user2@@example.net"))} Defaults to @samp{()}.
15420 @deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
15421 Enable use of libevent for better performance under high load. See
15422 @url{https://prosody.im/doc/libevent}. Defaults to @samp{#f}.
15425 @deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
15426 This is the list of modules Prosody will load on startup. It looks for
15427 @code{mod_modulename.lua} in the plugins folder, so make sure that exists
15428 too. Documentation on modules can be found at:
15429 @url{https://prosody.im/doc/modules}. Defaults to @samp{("roster"
15430 "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard"
15431 "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
15434 @deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
15435 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but should
15436 you want to disable them then add them to this list. Defaults to @samp{()}.
15439 @deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
15440 Path to a text file where the shared groups are defined. If this path is
15441 empty then @samp{mod_groups} does nothing. See
15442 @url{https://prosody.im/doc/modules/mod_groups}. Defaults to
15443 @samp{"/var/lib/prosody/sharedgroups.txt"}.
15446 @deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
15447 Disable account creation by default, for security. See
15448 @url{https://prosody.im/doc/creating_accounts}. Defaults to @samp{#f}.
15451 @deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
15452 These are the SSL/TLS-related settings. Most of them are disabled so to use
15453 Prosody's defaults. If you do not completely understand these options, do
15454 not add them to your config, it is easy to lower the security of your server
15455 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
15457 Les champs de @code{ssl-configuration} disponibles sont :
15459 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
15460 This determines what handshake to use.
15463 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
15464 Path to your private key file.
15467 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
15468 Path to your certificate file.
15471 @deftypevr {paramètre de @code{ssl-configuration}} file-object capath
15472 Path to directory containing root certificates that you wish Prosody to
15473 trust when verifying the certificates of remote servers. Defaults to
15474 @samp{"/etc/ssl/certs"}.
15477 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
15478 Path to a file containing root certificates that you wish Prosody to trust.
15479 Similar to @code{capath} but with all certificates concatenated together.
15482 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
15483 A list of verification options (these mostly map to OpenSSL's
15484 @code{set_verify()} flags).
15487 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
15488 A list of general options relating to SSL/TLS. These map to OpenSSL's
15489 @code{set_options()}. For a full list of options available in LuaSec, see
15493 @deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
15494 How long a chain of certificate authorities to check when looking for a
15495 trusted root certificate.
15498 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
15499 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
15500 clients, and in what order.
15503 @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
15504 A path to a file containing parameters for Diffie-Hellman key exchange. You
15505 can create such a file with: @code{openssl dhparam -out
15506 /etc/prosody/certs/dh-2048.pem 2048}
15509 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
15510 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
15511 @samp{"secp384r1"}.
15514 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
15515 A list of "extra" verification options.
15518 @deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
15519 Password for encrypted private keys.
15524 @deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
15525 Whether to force all client-to-server connections to be encrypted or not.
15526 See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
15529 @deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
15530 Set of mechanisms that will never be offered. See
15531 @url{https://prosody.im/doc/modules/mod_saslauth}. Defaults to
15532 @samp{("DIGEST-MD5")}.
15535 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
15536 Whether to force all server-to-server connections to be encrypted or not.
15537 See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
15540 @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
15541 Whether to require encryption and certificate authentication. This provides
15542 ideal security, but requires servers you communicate with to support
15543 encryption AND present valid, trusted certificates. See
15544 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{#f}.
15547 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
15548 Many servers don't support encryption or have invalid or self-signed
15549 certificates. You can list domains here that will not be required to
15550 authenticate using certificates. They will be authenticated using DNS. See
15551 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
15554 @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
15555 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
15556 valid certificates for some domains by specifying a list here. See
15557 @url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
15560 @deftypevr {paramètre de @code{prosody-configuration}} string authentication
15561 Select the authentication backend to use. The default provider stores
15562 passwords in plaintext and uses Prosody's configured data storage to store
15563 the authentication data. If you do not trust your server please see
15564 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for
15565 information about using the hashed backend. See also
15566 @url{https://prosody.im/doc/authentication} Defaults to
15567 @samp{"internal_plain"}.
15570 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
15571 Set logging options. Advanced logging configuration is not yet supported by
15572 the GuixSD Prosody Service. See @url{https://prosody.im/doc/logging}.
15573 Defaults to @samp{"*syslog"}.
15576 @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
15577 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
15578 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
15581 @deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
15582 Maximum allowed size of the HTTP body (in bytes).
15585 @deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
15586 Some modules expose their own URL in various ways. This URL is built from
15587 the protocol, host and port used. If Prosody sits behind a proxy, the
15588 public URL will be @code{http-external-url} instead. See
15589 @url{https://prosody.im/doc/http#external_url}.
15592 @deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
15593 A host in Prosody is a domain on which user accounts can be created. For
15594 example if you want your users to have addresses like
15595 @samp{"john.smith@@example.com"} then you need to add a host
15596 @samp{"example.com"}. All options in this list will apply only to this
15599 Note: the name "virtual" host is used in configuration to avoid confusion
15600 with the actual physical host that Prosody is installed on. A single
15601 Prosody instance can serve many domains, each one defined as a VirtualHost
15602 entry in Prosody's configuration. Conversely a server that hosts a single
15603 domain would have just one VirtualHost entry.
15605 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
15607 Les champs de @code{virtualhost-configuration} disponibles sont :
15609 all these @code{prosody-configuration} fields: @code{admins},
15610 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15611 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15612 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15613 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15614 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15615 @code{authentication}, @code{log}, @code{http-max-content-size},
15616 @code{http-external-url}, @code{raw-content}, plus:
15617 @deftypevr {paramètre de @code{virtualhost-configuration}} string domain
15618 Domain you wish Prosody to serve.
15623 @deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
15624 Components are extra services on a server which are available to clients,
15625 usually on a subdomain of the main server (such as
15626 @samp{"mycomponent.example.com"}). Example components might be chatroom
15627 servers, user directories, or gateways to other protocols.
15629 Internal components are implemented with Prosody-specific plugins. To add
15630 an internal component, you simply fill the hostname field, and the plugin
15631 you wish to use for the component.
15633 See @url{https://prosody.im/doc/components}. Defaults to @samp{()}.
15635 Les champs de @code{int-component-configuration} disponibles sont :
15637 all these @code{prosody-configuration} fields: @code{admins},
15638 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15639 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15640 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15641 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15642 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15643 @code{authentication}, @code{log}, @code{http-max-content-size},
15644 @code{http-external-url}, @code{raw-content}, plus:
15645 @deftypevr {paramètre de @code{int-component-configuration}} string hostname
15646 Hostname of the component.
15649 @deftypevr {paramètre de @code{int-component-configuration}} string plugin
15650 Plugin you wish to use for the component.
15653 @deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
15654 Multi-user chat (MUC) is Prosody's module for allowing you to create hosted
15655 chatrooms/conferences for XMPP users.
15657 General information on setting up and using multi-user chatrooms can be
15658 found in the "Chatrooms" documentation
15659 (@url{https://prosody.im/doc/chatrooms}), which you should read if you are
15660 new to XMPP chatrooms.
15662 See also @url{https://prosody.im/doc/modules/mod_muc}.
15664 Les champs de @code{mod-muc-configuration} disponibles sont :
15666 @deftypevr {paramètre de @code{mod-muc-configuration}} string name
15667 The name to return in service discovery responses. Defaults to
15668 @samp{"Prosody Chatrooms"}.
15671 @deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
15672 If @samp{#t}, this will only allow admins to create new chatrooms.
15673 Otherwise anyone can create a room. The value @samp{"local"} restricts room
15674 creation to users on the service's parent domain.
15675 E.g. @samp{user@@example.com} can create rooms on @samp{rooms.example.com}.
15676 The value @samp{"admin"} restricts to service administrators only. Defaults
15680 @deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
15681 Maximum number of history messages that will be sent to the member that has
15682 just joined the room. Defaults to @samp{20}.
15689 @deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
15690 External components use XEP-0114, which most standalone components support.
15691 To add an external component, you simply fill the hostname field. See
15692 @url{https://prosody.im/doc/components}. Defaults to @samp{()}.
15694 Les champs de @code{ext-component-configuration} disponibles sont :
15696 all these @code{prosody-configuration} fields: @code{admins},
15697 @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
15698 @code{groups-file}, @code{allow-registration?}, @code{ssl},
15699 @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
15700 @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
15701 @code{s2s-insecure-domains}, @code{s2s-secure-domains},
15702 @code{authentication}, @code{log}, @code{http-max-content-size},
15703 @code{http-external-url}, @code{raw-content}, plus:
15704 @deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
15705 Password which the component will use to log in.
15708 @deftypevr {paramètre de @code{ext-component-configuration}} string hostname
15709 Hostname of the component.
15714 @deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
15715 Port(s) Prosody listens on for component connections. Defaults to
15719 @deftypevr {paramètre de @code{prosody-configuration}} string component-interface
15720 Interface Prosody listens on for component connections. Defaults to
15721 @samp{"127.0.0.1"}.
15724 @deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
15725 Raw content that will be added to the configuration file.
15728 It could be that you just want to get a @code{prosody.cfg.lua} up and
15729 running. In that case, you can pass an @code{opaque-prosody-configuration}
15730 record as the value of @code{prosody-service-type}. As its name indicates,
15731 an opaque configuration does not have easy reflective capabilities.
15732 Available @code{opaque-prosody-configuration} fields are:
15734 @deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
15735 The prosody package.
15738 @deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
15739 The contents of the @code{prosody.cfg.lua} to use.
15742 For example, if your @code{prosody.cfg.lua} is just the empty string, you
15743 could instantiate a prosody service like this:
15746 (service prosody-service-type
15747 (opaque-prosody-configuration
15748 (prosody.cfg.lua "")))
15751 @c end of Prosody auto-generated documentation
15753 @subsubheading BitlBee Service
15755 @cindex IRC (Internet Relay Chat)
15756 @cindex IRC gateway
15757 @url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC interface
15758 to a variety of messaging protocols such as XMPP.
15760 @defvr {Variable Scheme} bitlbee-service-type
15761 This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
15762 gateway daemon. Its value is a @code{bitlbee-configuration} (see below).
15764 To have BitlBee listen on port 6667 on localhost, add this line to your
15768 (service bitlbee-service-type)
15772 @deftp {Type de données} bitlbee-configuration
15773 This is the configuration for BitlBee, with the following fields:
15776 @item @code{interface} (par défaut : @code{"127.0.0.1"})
15777 @itemx @code{port} (par défaut : @code{6667})
15778 Listen on the network interface corresponding to the IP address specified in
15779 @var{interface}, on @var{port}.
15781 When @var{interface} is @code{127.0.0.1}, only local clients can connect;
15782 when it is @code{0.0.0.0}, connections can come from any networking
15785 @item @code{package} (par défaut : @code{bitlbee})
15786 Le paquet BitlBee à utiliser.
15788 @item @code{plugins} (par défaut : @code{'()})
15789 List of plugin packages to use---e.g., @code{bitlbee-discord}.
15791 @item @code{extra-settings} (par défaut : @code{""})
15792 Configuration snippet added as-is to the BitlBee configuration file.
15797 @node Services de téléphonie
15798 @subsubsection Services de téléphonie
15800 @cindex Murmur (VoIP server)
15801 @cindex VoIP server
15802 This section describes how to set up and run a Murmur server. Murmur is the
15803 server of the @uref{https://mumble.info, Mumble} voice-over-IP (VoIP) suite.
15805 @deftp {Type de données} murmur-configuration
15806 The service type for the Murmur server. An example configuration can look
15810 (service murmur-service-type
15811 (murmur-configuration
15813 "Welcome to this Mumble server running on GuixSD!")
15814 (cert-required? #t) ;disallow text password logins
15815 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
15816 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
15819 After reconfiguring your system, you can manually set the murmur
15820 @code{SuperUser} password with the command that is printed during the
15823 It is recommended to register a normal Mumble user account and grant it
15824 admin or moderator rights. You can use the @code{mumble} client to login as
15825 new normal user, register yourself, and log out. For the next step login
15826 with the name @code{SuperUser} use the @code{SuperUser} password that you
15827 set previously, and grant your newly registered mumble user administrator or
15828 moderator rights and create some channels.
15830 Les champs de @code{murmur-configuration} disponibles sont :
15833 @item @code{package} (par défaut : @code{mumble})
15834 Package that contains @code{bin/murmurd}.
15836 @item @code{user} (par défaut : @code{"murmur"})
15837 User who will run the Murmur server.
15839 @item @code{group} (par défaut : @code{"murmur"})
15840 Group of the user who will run the murmur server.
15842 @item @code{port} (par défaut : @code{64738})
15843 Port on which the server will listen.
15845 @item @code{welcome-text} (par défaut : @code{""})
15846 Welcome text sent to clients when they connect.
15848 @item @code{server-password} (par défaut : @code{""})
15849 Password the clients have to enter in order to connect.
15851 @item @code{max-users} (par défaut : @code{100})
15852 Maximum of users that can be connected to the server at once.
15854 @item @code{max-user-bandwidth} (par défaut : @code{#f})
15855 Maximum voice traffic a user can send per second.
15857 @item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
15858 File name of the sqlite database. The service's user will become the owner
15861 @item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
15862 File name of the log file. The service's user will become the owner of the
15865 @item @code{autoban-attempts} (par défaut : @code{10})
15866 Maximum number of logins a user can make in @code{autoban-timeframe} without
15867 getting auto banned for @code{autoban-time}.
15869 @item @code{autoban-timeframe} (par défaut : @code{120})
15870 Timeframe for autoban in seconds.
15872 @item @code{autoban-time} (par défaut : @code{300})
15873 Amount of time in seconds for which a client gets banned when violating the
15876 @item @code{opus-threshold} (par défaut : @code{100})
15877 Percentage of clients that need to support opus before switching over to
15880 @item @code{channel-nesting-limit} (par défaut : @code{10})
15881 How deep channels can be nested at maximum.
15883 @item @code{channelname-regex} (par défaut : @code{#f})
15884 A string in from of a Qt regular expression that channel names must conform
15887 @item @code{username-regex} (par défaut : @code{#f})
15888 A string in from of a Qt regular expression that user names must conform to.
15890 @item @code{text-message-length} (par défaut : @code{5000})
15891 Maximum size in bytes that a user can send in one text chat message.
15893 @item @code{image-message-length} (par défaut : @code{(* 128 1024)})
15894 Maximum size in bytes that a user can send in one image message.
15896 @item @code{cert-required?} (par défaut : @code{#f})
15897 If it is set to @code{#t} clients that use weak password authentification
15898 will not be accepted. Users must have completed the certificate wizard to
15901 @item @code{remember-channel?} (defualt @code{#f})
15902 Should murmur remember the last channel each user was in when they
15903 disconnected and put them into the remembered channel when they rejoin.
15905 @item @code{allow-html?} (par défaut : @code{#f})
15906 Should html be allowed in text messages, user comments, and channel
15909 @item @code{allow-ping?} (par défaut : @code{#f})
15910 Setting to true exposes the current user count, the maximum user count, and
15911 the server's maximum bandwidth per client to unauthenticated users. In the
15912 Mumble client, this information is shown in the Connect dialog.
15914 Disabling this setting will prevent public listing of the server.
15916 @item @code{bonjour?} (par défaut : @code{#f})
15917 Should the server advertise itself in the local network through the bonjour
15920 @item @code{send-version?} (par défaut : @code{#f})
15921 Should the murmur server version be exposed in ping requests.
15923 @item @code{log-days} (par défaut : @code{31})
15924 Murmur also stores logs in the database, which are accessible via RPC. The
15925 default is 31 days of months, but you can set this setting to 0 to keep logs
15926 forever, or -1 to disable logging to the database.
15928 @item @code{obfuscate-ips?} (par défaut : @code{#t})
15929 Should logged ips be obfuscated to protect the privacy of users.
15931 @item @code{ssl-cert} (par défaut : @code{#f})
15932 File name of the SSL/TLS certificate used for encrypted connections.
15935 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
15937 @item @code{ssl-key} (par défaut : @code{#f})
15938 Filepath to the ssl private key used for encrypted connections.
15940 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
15943 @item @code{ssl-dh-params} (par défaut : @code{#f})
15944 File name of a PEM-encoded file with Diffie-Hellman parameters for the
15945 SSL/TLS encryption. Alternatively you set it to @code{"@@ffdhe2048"},
15946 @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"} or
15947 @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
15949 @item @code{ssl-ciphers} (par défaut : @code{#f})
15950 The @code{ssl-ciphers} option chooses the cipher suites to make available
15951 for use in SSL/TLS.
15953 This option is specified using
15954 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
15955 OpenSSL cipher list notation}.
15957 It is recommended that you try your cipher string using 'openssl ciphers
15958 <string>' before setting it here, to get a feel for which cipher suites you
15959 will get. After setting this option, it is recommend that you inspect your
15960 Murmur log to ensure that Murmur is using the cipher suites that you
15963 Note: Changing this option may impact the backwards compatibility of your
15964 Murmur server, and can remove the ability for older Mumble clients to be
15965 able to connect to it.
15967 @item @code{public-registration} (par défaut : @code{#f})
15968 Must be a @code{<murmur-public-registration-configuration>} record or
15971 You can optionally register your server in the public server list that the
15972 @code{mumble} client shows on startup. You cannot register your server if
15973 you have set a @code{server-password}, or set @code{allow-ping} to
15976 It might take a few hours until it shows up in the public list.
15978 @item @code{file} (par défaut : @code{#f})
15979 Optional alternative override for this configuration.
15983 @deftp {Type de données} murmur-public-registration-configuration
15984 Configuration for public registration of a murmur service.
15988 This is a display name for your server. Not to be confused with the
15991 @item @code{password}
15992 A password to identify your registration. Subsequent updates will need the
15993 same password. Don't lose your password.
15996 This should be a @code{http://} or @code{https://} link to your web site.
15998 @item @code{hostname} (par défaut : @code{#f})
15999 By default your server will be listed by its IP address. If it is set your
16000 server will be linked by this host name instead.
16006 @node Services de surveillance
16007 @subsubsection Services de surveillance
16009 @subsubheading Tailon Service
16011 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
16012 viewing and searching log files.
16014 The following example will configure the service with default values. By
16015 default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
16018 (service tailon-service-type)
16021 The following example customises more of the Tailon configuration, adding
16022 @command{sed} to the list of allowed commands.
16025 (service tailon-service-type
16026 (tailon-configuration
16028 (tailon-configuration-file
16029 (allowed-commands '("tail" "grep" "awk" "sed"))))))
16033 @deftp {Type de données} tailon-configuration
16034 Data type representing the configuration of Tailon. This type has the
16035 following parameters:
16038 @item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
16039 The configuration file to use for Tailon. This can be set to a
16040 @dfn{tailon-configuration-file} record value, or any gexp
16041 (@pxref{G-Expressions}).
16043 For example, to instead use a local file, the @code{local-file} function can
16047 (service tailon-service-type
16048 (tailon-configuration
16049 (config-file (local-file "./my-tailon.conf"))))
16052 @item @code{package} (par défaut : @code{tailon})
16053 Le paquet tailon à utiliser.
16058 @deftp {Type de données} tailon-configuration-file
16059 Data type representing the configuration options for Tailon. This type has
16060 the following parameters:
16063 @item @code{files} (par défaut : @code{(list "/var/log")})
16064 List of files to display. The list can include strings for a single file or
16065 directory, or a list, where the first item is the name of a subsection, and
16066 the remaining items are the files or directories in that subsection.
16068 @item @code{bind} (par défaut : @code{"localhost:8080"})
16069 Address and port to which Tailon should bind on.
16071 @item @code{relative-root} (par défaut : @code{#f})
16072 URL path to use for Tailon, set to @code{#f} to not use a path.
16074 @item @code{allow-transfers?} (par défaut : @code{#t})
16075 Allow downloading the log files in the web interface.
16077 @item @code{follow-names?} (par défaut : @code{#t})
16078 Allow tailing of not-yet existent files.
16080 @item @code{tail-lines} (par défaut : @code{200})
16081 Number of lines to read initially from each file.
16083 @item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
16084 Commands to allow running. By default, @code{sed} is disabled.
16086 @item @code{debug?} (par défaut : @code{#f})
16087 Set @code{debug?} to @code{#t} to show debug messages.
16089 @item @code{wrap-lines} (par défaut : @code{#t})
16090 Initial line wrapping state in the web interface. Set to @code{#t} to
16091 initially wrap lines (the default), or to @code{#f} to initially not wrap
16094 @item @code{http-auth} (par défaut : @code{#f})
16095 HTTP authentication type to use. Set to @code{#f} to disable authentication
16096 (the default). Supported values are @code{"digest"} or @code{"basic"}.
16098 @item @code{users} (par défaut : @code{#f})
16099 If HTTP authentication is enabled (see @code{http-auth}), access will be
16100 restricted to the credentials provided here. To configure users, use a list
16101 of pairs, where the first element of the pair is the username, and the 2nd
16102 element of the pair is the password.
16105 (tailon-configuration-file
16106 (http-auth "basic")
16107 (users '(("user1" . "password1")
16108 ("user2" . "password2"))))
16115 @subsubheading Darkstat Service
16117 Darkstat is a packet sniffer that captures network traffic, calculates
16118 statistics about usage, and serves reports over HTTP.
16120 @defvar {Variable Scheme} darkstat-service-type
16121 This is the service type for the @uref{https://unix4lyfe.org/darkstat/,
16122 darkstat} service, its value must be a @code{darkstat-configuration} record
16123 as in this example:
16126 (service darkstat-service-type
16127 (darkstat-configuration
16128 (interface "eno1")))
16132 @deftp {Type de données} darkstat-configuration
16133 Data type representing the configuration of @command{darkstat}.
16136 @item @code{package} (par défaut : @code{darkstat})
16137 Le paquet darkstat à utiliser.
16139 @item @code{interface}
16140 Capture traffic on the specified network interface.
16142 @item @code{port} (par défaut : @code{"667"})
16143 Bind the web interface to the specified port.
16145 @item @code{bind-address} (par défaut : @code{"127.0.0.1"})
16146 Bind the web interface to the specified address.
16148 @item @code{base} (par défaut : @code{"/"})
16149 Specify the path of the base URL. This can be useful if @command{darkstat}
16150 is accessed via a reverse proxy.
16155 @subsubheading Prometheus Node Exporter Service
16157 @cindex prometheus-node-exporter
16158 The Prometheus ``node exporter'' makes hardware and operating system
16159 statistics provided by the Linux kernel available for the Prometheus
16160 monitoring system. This service should be deployed on all physical nodes
16161 and virtual machines, where monitoring these statistics is desirable.
16163 @defvar {Scheme variable} prometheus-node-exporter-service-type
16164 This is the service type for the
16165 @uref{https://github.com/prometheus/node_exporter/,
16166 prometheus-node-exporter} service, its value must be a
16167 @code{prometheus-node-exporter-configuration} record as in this example:
16170 (service prometheus-node-exporter-service-type
16171 (prometheus-node-exporter-configuration
16172 (web-listen-address ":9100")))
16176 @deftp {Data Type} prometheus-node-exporter-configuration
16177 Data type representing the configuration of @command{node_exporter}.
16180 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
16181 The prometheus-node-exporter package to use.
16183 @item @code{web-listen-address} (default: @code{":9100"})
16184 Bind the web interface to the specified address.
16189 @node Services Kerberos
16190 @subsubsection Services Kerberos
16193 The @code{(gnu services kerberos)} module provides services relating to the
16194 authentication protocol @dfn{Kerberos}.
16196 @subsubheading Krb5 Service
16198 Programs using a Kerberos client library normally expect a configuration
16199 file in @file{/etc/krb5.conf}. This service generates such a file from a
16200 definition provided in the operating system declaration. It does not cause
16201 any daemon to be started.
16203 No ``keytab'' files are provided by this service---you must explicitly
16204 create them. This service is known to work with the MIT client library,
16205 @code{mit-krb5}. Other implementations have not been tested.
16207 @defvr {Variable Scheme} krb5-service-type
16208 A service type for Kerberos 5 clients.
16212 Here is an example of its use:
16214 (service krb5-service-type
16215 (krb5-configuration
16216 (default-realm "EXAMPLE.COM")
16217 (allow-weak-crypto? #t)
16220 (name "EXAMPLE.COM")
16221 (admin-server "groucho.example.com")
16222 (kdc "karl.example.com"))
16225 (admin-server "kerb-admin.argrx.edu")
16226 (kdc "keys.argrx.edu"))))))
16230 This example provides a Kerberos@tie{}5 client configuration which:
16232 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
16233 of which have distinct administration servers and key distribution centers;
16234 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
16235 specified by clients;
16236 @item Accepts services which only support encryption types known to be weak.
16239 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
16240 Only the most commonly used ones are described here. For a full list, and
16241 more detailed explanation of each, see the MIT
16242 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
16246 @deftp {Type de données} krb5-realm
16247 @cindex realm, kerberos
16250 This field is a string identifying the name of the realm. A common
16251 convention is to use the fully qualified DNS name of your organization,
16252 converted to upper case.
16254 @item @code{admin-server}
16255 This field is a string identifying the host where the administration server
16259 This field is a string identifying the key distribution center for the
16264 @deftp {Type de données} krb5-configuration
16267 @item @code{allow-weak-crypto?} (par défaut : @code{#f})
16268 If this flag is @code{#t} then services which only offer encryption
16269 algorithms known to be weak will be accepted.
16271 @item @code{default-realm} (par défaut : @code{#f})
16272 This field should be a string identifying the default Kerberos realm for the
16273 client. You should set this field to the name of your Kerberos realm. If
16274 this value is @code{#f} then a realm must be specified with every Kerberos
16275 principal when invoking programs such as @command{kinit}.
16277 @item @code{realms}
16278 This should be a non-empty list of @code{krb5-realm} objects, which clients
16279 may access. Normally, one of them will have a @code{name} field matching
16280 the @code{default-realm} field.
16285 @subsubheading PAM krb5 Service
16288 The @code{pam-krb5} service allows for login authentication and password
16289 management via Kerberos. You will need this service if you want PAM enabled
16290 applications to authenticate users using Kerberos.
16292 @defvr {Variable Scheme} pam-krb5-service-type
16293 A service type for the Kerberos 5 PAM module.
16296 @deftp {Type de données} pam-krb5-configuration
16297 Data type representing the configuration of the Kerberos 5 PAM module This
16298 type has the following parameters:
16300 @item @code{pam-krb5} (par défaut : @code{pam-krb5})
16301 Le paquet pam-krb5 à utiliser.
16303 @item @code{minimum-uid} (par défaut : @code{1000})
16304 The smallest user ID for which Kerberos authentications should be
16305 attempted. Local accounts with lower values will silently fail to
16312 @subsubsection Services web
16317 The @code{(gnu services web)} module provides the Apache HTTP Server, the
16318 nginx web server, and also a fastcgi wrapper daemon.
16320 @subsubheading Apache HTTP Server
16322 @deffn {Variable Scheme} httpd-service-type
16323 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
16324 (@dfn{httpd}). The value for this service type is a
16325 @code{https-configuration} record.
16327 A simple example configuration is given below.
16330 (service httpd-service-type
16331 (httpd-configuration
16334 (server-name "www.example.com")
16335 (document-root "/srv/http/www.example.com")))))
16338 Other services can also extend the @code{httpd-service-type} to add to the
16342 (simple-service 'my-extra-server httpd-service-type
16346 (list (string-append
16347 "ServerName "www.example.com
16348 DocumentRoot \"/srv/http/www.example.com\"")))))
16352 The details for the @code{httpd-configuration}, @code{httpd-module},
16353 @code{httpd-config-file} and @code{httpd-virtualhost} record types are given
16356 @deffn {Type de données} httpd-configuration
16357 This data type represents the configuration for the httpd service.
16360 @item @code{package} (par défaut : @code{httpd})
16361 Le paquet httpd à utiliser.
16363 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
16364 The pid file used by the shepherd-service.
16366 @item @code{config} (par défaut : @code{(httpd-config-file)})
16367 The configuration file to use with the httpd service. The default value is a
16368 @code{httpd-config-file} record, but this can also be a different
16369 G-expression that generates a file, for example a @code{plain-file}. A file
16370 outside of the store can also be specified through a string.
16375 @deffn {Type de données} httpd-module
16376 This data type represents a module for the httpd service.
16380 The name of the module.
16383 The file for the module. This can be relative to the httpd package being
16384 used, the absolute location of a file, or a G-expression for a file within
16385 the store, for example @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
16390 @deffn {Type de données} httpd-config-file
16391 This data type represents a configuration file for the httpd service.
16394 @item @code{modules} (par défaut : @code{%default-httpd-modules})
16395 The modules to load. Additional modules can be added here, or loaded by
16396 additional configuration.
16398 @item @code{server-root} (par défaut : @code{httpd})
16399 The @code{ServerRoot} in the configuration file, defaults to the httpd
16400 package. Directives including @code{Include} and @code{LoadModule} are taken
16401 as relative to the server root.
16403 @item @code{server-name} (par défaut : @code{#f})
16404 The @code{ServerName} in the configuration file, used to specify the request
16405 scheme, hostname and port that the server uses to identify itself.
16407 This doesn't need to be set in the server config, and can be specifyed in
16408 virtual hosts. The default is @code{#f} to not specify a @code{ServerName}.
16410 @item @code{document-root} (par défaut : @code{"/srv/http"})
16411 The @code{DocumentRoot} from which files will be served.
16413 @item @code{listen} (par défaut : @code{'("80")})
16414 The list of values for the @code{Listen} directives in the config file. The
16415 value should be a list of strings, when each string can specify the port
16416 number to listen on, and optionally the IP address and protocol to use.
16418 @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
16419 The @code{PidFile} to use. This should match the @code{pid-file} set in the
16420 @code{httpd-configuration} so that the Shepherd service is configured
16423 @item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
16424 The @code{ErrorLog} to which the server will log errors.
16426 @item @code{user} (par défaut : @code{"httpd"})
16427 The @code{User} which the server will answer requests as.
16429 @item @code{group} (par défaut : @code{"httpd"})
16430 The @code{Group} which the server will answer requests as.
16432 @item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
16433 A flat list of strings and G-expressions which will be added to the end of
16434 the configuration file.
16436 Any values which the service is extended with will be appended to this list.
16441 @deffn {Type de données} httpd-virtualhost
16442 This data type represents a virtualhost configuration block for the httpd
16445 These should be added to the extra-config for the httpd-service.
16448 (simple-service 'my-extra-server httpd-service-type
16452 (list (string-append
16453 "ServerName "www.example.com
16454 DocumentRoot \"/srv/http/www.example.com\"")))))
16458 @item @code{addresses-and-ports}
16459 The addresses and ports for the @code{VirtualHost} directive.
16461 @item @code{contents}
16462 The contents of the @code{VirtualHost} directive, this should be a list of
16463 strings and G-expressions.
16468 @subsubheading NGINX
16470 @deffn {Variable Scheme} nginx-service-type
16471 Service type for the @uref{https://nginx.org/,NGinx} web server. The value
16472 for this service type is a @code{<nginx-configuration>} record.
16474 A simple example configuration is given below.
16477 (service nginx-service-type
16478 (nginx-configuration
16480 (list (nginx-server-configuration
16481 (server-name '("www.example.com"))
16482 (root "/srv/http/www.example.com"))))))
16485 In addition to adding server blocks to the service configuration directly,
16486 this service can be extended by other services to add server blocks, as in
16490 (simple-service 'my-extra-server nginx-service-type
16491 (list (nginx-server-configuration
16492 (root "/srv/http/extra-website")
16493 (try-files (list "$uri" "$uri/index.html")))))
16497 At startup, @command{nginx} has not yet read its configuration file, so it
16498 uses a default file to log error messages. If it fails to load its
16499 configuration file, that is where error messages are logged. After the
16500 configuration file is loaded, the default error log file changes as per
16501 configuration. In our case, startup error messages can be found in
16502 @file{/var/run/nginx/logs/error.log}, and after configuration in
16503 @file{/var/log/nginx/error.log}. The second location can be changed with
16504 the @var{log-directory} configuration option.
16506 @deffn {Type de données} nginx-configuration
16507 This data type represents the configuration for NGinx. Some configuration
16508 can be done through this and the other provided record types, or
16509 alternatively, a config file can be provided.
16512 @item @code{nginx} (par défaut : @code{nginx})
16513 Le paquet nginx à utiliser.
16515 @item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
16516 The directory to which NGinx will write log files.
16518 @item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
16519 The directory in which NGinx will create a pid file, and write temporary
16522 @item @code{server-blocks} (par défaut : @code{'()})
16523 A list of @dfn{server blocks} to create in the generated configuration file,
16524 the elements should be of type @code{<nginx-server-configuration>}.
16526 The following example would setup NGinx to serve @code{www.example.com} from
16527 the @code{/srv/http/www.example.com} directory, without using HTTPS.
16529 (service nginx-service-type
16530 (nginx-configuration
16532 (list (nginx-server-configuration
16533 (server-name '("www.example.com"))
16534 (root "/srv/http/www.example.com"))))))
16537 @item @code{upstream-blocks} (par défaut : @code{'()})
16538 A list of @dfn{upstream blocks} to create in the generated configuration
16539 file, the elements should be of type @code{<nginx-upstream-configuration>}.
16541 Configuring upstreams through the @code{upstream-blocks} can be useful when
16542 combined with @code{locations} in the @code{<nginx-server-configuration>}
16543 records. The following example creates a server configuration with one
16544 location configuration, that will proxy requests to a upstream
16545 configuration, which will handle requests with two servers.
16550 (nginx-configuration
16552 (list (nginx-server-configuration
16553 (server-name '("www.example.com"))
16554 (root "/srv/http/www.example.com")
16557 (nginx-location-configuration
16559 (body '("proxy_pass http://server-proxy;"))))))))
16561 (list (nginx-upstream-configuration
16562 (name "server-proxy")
16563 (servers (list "server1.example.com"
16564 "server2.example.com")))))))
16567 @item @code{file} (par défaut : @code{#f})
16568 If a configuration @var{file} is provided, this will be used, rather than
16569 generating a configuration file from the provided @code{log-directory},
16570 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
16571 proper operation, these arguments should match what is in @var{file} to
16572 ensure that the directories are created when the service is activated.
16574 This can be useful if you have an existing configuration file, or it's not
16575 possible to do what is required through the other parts of the
16576 nginx-configuration record.
16578 @item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
16579 Bucket size for the server names hash tables, defaults to @code{#f} to use
16580 the size of the processors cache line.
16582 @item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
16583 Maximum bucket size for the server names hash tables.
16585 @item @code{extra-content} (par défaut : @code{""})
16586 Extra content for the @code{http} block. Should be string or a string
16587 valued G-expression.
16592 @deftp {Type de données} nginx-server-configuration
16593 Data type representing the configuration of an nginx server block. This
16594 type has the following parameters:
16597 @item @code{listen} (par défaut : @code{'("80" "443 ssl")})
16598 Each @code{listen} directive sets the address and port for IP, or the path
16599 for a UNIX-domain socket on which the server will accept requests. Both
16600 address and port, or only address or only port can be specified. An address
16601 may also be a hostname, for example:
16604 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
16607 @item @code{server-name} (par défaut : @code{(list 'default)})
16608 A list of server names this server represents. @code{'default} represents
16609 the default server for connections matching no other server.
16611 @item @code{root} (par défaut : @code{"/srv/http"})
16612 Root of the website nginx will serve.
16614 @item @code{locations} (par défaut : @code{'()})
16615 A list of @dfn{nginx-location-configuration} or
16616 @dfn{nginx-named-location-configuration} records to use within this server
16619 @item @code{index} (par défaut : @code{(list "index.html")})
16620 Index files to look for when clients ask for a directory. If it cannot be
16621 found, Nginx will send the list of files in the directory.
16623 @item @code{try-files} (par défaut : @code{'()})
16624 A list of files whose existence is checked in the specified order.
16625 @code{nginx} will use the first file it finds to process the request.
16627 @item @code{ssl-certificate} (par défaut : @code{#f})
16628 Where to find the certificate for secure connections. Set it to @code{#f}
16629 if you don't have a certificate or you don't want to use HTTPS.
16631 @item @code{ssl-certificate-key} (par défaut : @code{#f})
16632 Where to find the private key for secure connections. Set it to @code{#f}
16633 if you don't have a key or you don't want to use HTTPS.
16635 @item @code{server-tokens?} (par défaut : @code{#f})
16636 Whether the server should add its configuration to response.
16638 @item @code{raw-content} (par défaut : @code{'()})
16639 A list of raw lines added to the server block.
16644 @deftp {Type de données} nginx-upstream-configuration
16645 Data type representing the configuration of an nginx @code{upstream} block.
16646 This type has the following parameters:
16650 Name for this group of servers.
16652 @item @code{servers}
16653 Specify the addresses of the servers in the group. The address can be
16654 specified as a IP address (e.g. @samp{127.0.0.1}), domain name
16655 (e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
16656 prefix @samp{unix:}. For addresses using an IP address or domain name, the
16657 default port is 80, and a different port can be specified explicitly.
16662 @deftp {Type de données} nginx-location-configuration
16663 Data type representing the configuration of an nginx @code{location} block.
16664 This type has the following parameters:
16668 URI which this location block matches.
16670 @anchor{nginx-location-configuration body}
16672 Body of the location block, specified as a list of strings. This can contain
16673 many configuration directives. For example, to pass requests to a upstream
16674 server group defined using an @code{nginx-upstream-configuration} block, the
16675 following directive would be specified in the body @samp{(list "proxy_pass
16676 http://upstream-name;")}.
16681 @deftp {Type de données} nginx-named-location-configuration
16682 Data type representing the configuration of an nginx named location block.
16683 Named location blocks are used for request redirection, and not used for
16684 regular request processing. This type has the following parameters:
16688 Name to identify this location block.
16691 @xref{nginx-location-configuration body}, as the body for named location
16692 blocks can be used in a similar way to the
16693 @code{nginx-location-configuration body}. One restriction is that the body
16694 of a named location block cannot contain location blocks.
16701 FastCGI is an interface between the front-end and the back-end of a web
16702 service. It is a somewhat legacy facility; new web services should
16703 generally just talk HTTP between the front-end and the back-end. However
16704 there are a number of back-end services such as PHP or the optimized HTTP
16705 Git repository access that use FastCGI, so we have support for it in Guix.
16707 To use FastCGI, you configure the front-end web server (e.g., nginx) to
16708 dispatch some subset of its requests to the fastcgi backend, which listens
16709 on a local TCP or UNIX socket. There is an intermediary @code{fcgiwrap}
16710 program that sits between the actual backend process and the web server.
16711 The front-end indicates which backend program to run, passing that
16712 information to the @code{fcgiwrap} process.
16714 @defvr {Variable Scheme} fcgiwrap-service-type
16715 A service type for the @code{fcgiwrap} FastCGI proxy.
16718 @deftp {Type de données} fcgiwrap-configuration
16719 Data type representing the configuration of the @code{fcgiwrap} serice.
16720 This type has the following parameters:
16722 @item @code{package} (par défaut : @code{fcgiwrap})
16723 Le paquet fcgiwrap à utiliser.
16725 @item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
16726 The socket on which the @code{fcgiwrap} process should listen, as a string.
16727 Valid @var{socket} values include @code{unix:@var{/path/to/unix/socket}},
16728 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
16729 @code{tcp6:[@var{ipv6_addr}]:port}.
16731 @item @code{user} (par défaut : @code{fcgiwrap})
16732 @itemx @code{group} (par défaut : @code{fcgiwrap})
16733 The user and group names, as strings, under which to run the @code{fcgiwrap}
16734 process. The @code{fastcgi} service will ensure that if the user asks for
16735 the specific user or group names @code{fcgiwrap} that the corresponding user
16736 and/or group is present on the system.
16738 It is possible to configure a FastCGI-backed web service to pass HTTP
16739 authentication information from the front-end to the back-end, and to allow
16740 @code{fcgiwrap} to run the back-end process as a corresponding local user.
16741 To enable this capability on the back-end., run @code{fcgiwrap} as the
16742 @code{root} user and group. Note that this capability also has to be
16743 configured on the front-end as well.
16748 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
16749 implementation with some additional features useful for sites of any size.
16751 These features include:
16753 @item Adaptive process spawning
16754 @item Basic statistics (similar to Apache's mod_status)
16755 @item Advanced process management with graceful stop/start
16756 @item Ability to start workers with different uid/gid/chroot/environment
16757 and different php.ini (replaces safe_mode)
16758 @item Stdout & stderr logging
16759 @item Emergency restart in case of accidental opcode cache destruction
16760 @item Accelerated upload support
16761 @item Support for a "slowlog"
16762 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
16763 a special function to finish request & flush all data while continuing to do
16764 something time-consuming (video converting, stats processing, etc.)
16768 @defvr {Variable Scheme} php-fpm-service-type
16769 A Service type for @code{php-fpm}.
16772 @deftp {Type de données} php-fpm-configuration
16773 Data Type for php-fpm service configuration.
16775 @item @code{php} (par défaut : @code{php})
16776 Le paquet php à utiliser.
16777 @item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
16778 The address on which to accept FastCGI requests. Valid syntaxes are:
16780 @item @code{"ip.add.re.ss:port"}
16781 Listen on a TCP socket to a specific address on a specific port.
16782 @item @code{"port"}
16783 Listen on a TCP socket to all addresses on a specific port.
16784 @item @code{"/path/to/unix/socket"}
16785 Listen on a unix socket.
16788 @item @code{user} (par défaut : @code{php-fpm})
16789 User who will own the php worker processes.
16790 @item @code{group} (par défaut : @code{php-fpm})
16791 Group of the worker processes.
16792 @item @code{socket-user} (par défaut : @code{php-fpm})
16793 User who can speak to the php-fpm socket.
16794 @item @code{socket-group} (par défaut : @code{php-fpm})
16795 Group that can speak to the php-fpm socket.
16796 @item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
16797 The process id of the php-fpm process is written to this file once the
16798 service has started.
16799 @item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
16800 Log for the php-fpm master process.
16801 @item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
16802 Detailed settings for the php-fpm process manager. Must be either:
16804 @item @code{<php-fpm-dynamic-process-manager-configuration>}
16805 @item @code{<php-fpm-static-process-manager-configuration>}
16806 @item @code{<php-fpm-on-demand-process-manager-configuration>}
16808 @item @code{display-errors} (par défaut : @code{#f})
16809 Determines whether php errors and warning should be sent to clients and
16810 displayed in their browsers. This is useful for local php development, but
16811 a security risk for public sites, as error messages can reveal passwords and
16813 @item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
16814 This file will log the @code{stderr} outputs of php worker processes. Can
16815 be set to @code{#f} to disable logging.
16816 @item @code{file} (par défaut : @code{#f})
16817 An optional override of the whole configuration. You can use the
16818 @code{mixed-text-file} function or an absolute filepath for it.
16822 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
16823 Data Type for the @code{dynamic} php-fpm process manager. With the
16824 @code{dynamic} process manager, spare worker processes are kept around based
16825 on it's configured limits.
16827 @item @code{max-children} (par défaut : @code{5})
16828 Maximum of worker processes.
16829 @item @code{start-servers} (par défaut : @code{2})
16830 How many worker processes should be started on start-up.
16831 @item @code{min-spare-servers} (par défaut : @code{1})
16832 How many spare worker processes should be kept around at minimum.
16833 @item @code{max-spare-servers} (par défaut : @code{3})
16834 How many spare worker processes should be kept around at maximum.
16838 @deftp {Data type} php-fpm-static-process-manager-configuration
16839 Data Type for the @code{static} php-fpm process manager. With the
16840 @code{static} process manager, an unchanging number of worker processes are
16843 @item @code{max-children} (par défaut : @code{5})
16844 Maximum of worker processes.
16848 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
16849 Data Type for the @code{on-demand} php-fpm process manager. With the
16850 @code{on-demand} process manager, worker processes are only created as
16853 @item @code{max-children} (par défaut : @code{5})
16854 Maximum of worker processes.
16855 @item @code{process-idle-timeout} (par défaut : @code{10})
16856 The time in seconds after which a process with no requests is killed.
16861 @deffn {Procédure Scheme} nginx-php-fpm-location @
16862 [#:nginx-package nginx] @ [socket (string-append "/var/run/php" @
16863 (version-major (package-version php)) @ "-fpm.sock")] A helper function to
16864 quickly add php to an @code{nginx-server-configuration}.
16867 A simple services setup for nginx with php can look like this:
16869 (services (cons* (dhcp-client-service)
16870 (service php-fpm-service-type)
16871 (service nginx-service-type
16872 (nginx-server-configuration
16873 (server-name '("example.com"))
16874 (root "/srv/http/")
16876 (list (nginx-php-location)))
16878 (ssl-certificate #f)
16879 (ssl-certificate-key #f)))
16883 @cindex cat-avatar-generator
16884 The cat avatar generator is a simple service to demonstrate the use of
16885 php-fpm in @code{Nginx}. It is used to generate cat avatar from a seed, for
16886 instance the hash of a user's email address.
16888 @deffn {Procédure Scheme} cat-avatar-generator-serice @
16889 [#:cache-dir "/var/cache/cat-avatar-generator"] @ [#:package
16890 cat-avatar-generator] @ [#:configuration (nginx-server-configuration)]
16891 Returns an nginx-server-configuration that inherits @code{configuration}.
16892 It extends the nginx configuration to add a server block that serves
16893 @code{package}, a version of cat-avatar-generator. During execution,
16894 cat-avatar-generator will be able to use @code{cache-dir} as its cache
16898 A simple setup for cat-avatar-generator can look like this:
16900 (services (cons* (cat-avatar-generator-service
16902 (nginx-server-configuration
16903 (server-name '("example.com"))))
16908 @subsubheading Hpcguix-web
16910 @cindex hpcguix-web
16911 The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/} program
16912 is a customizable web interface to browse Guix packages, initially designed
16913 for users of high-performance computing (HPC) clusters.
16915 @defvr {Variable Scheme} hpcguix-web-service-type
16916 The service type for @code{hpcguix-web}.
16919 @deftp {Type de données} hpcguix-web-configuration
16920 Data type for the hpcguix-web service configuration.
16924 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
16925 configuration. The main items available in this spec are:
16928 @item @code{title-prefix} (par défaut : @code{"hpcguix | "})
16929 Le préfixe du titre des pages.
16931 @item @code{guix-command} (par défaut : @code{"guix"})
16932 La commande @command{guix}
16934 @item @code{package-filter-proc} (par défaut : @code{(const #t)})
16935 Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
16937 @item @code{package-page-extension-proc} (par défaut : @code{(const '())})
16938 Extension package for @code{hpcguix-web}.
16940 @item @code{menu} (par défaut : @code{'()})
16941 Additional entry in page @code{menu}.
16944 See the hpcguix-web repository for a
16945 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
16948 @item @code{package} (par défaut : @code{hpcguix-web})
16949 Le paquet hpcguix-web à utiliser.
16953 A typical hpcguix-web service declaration looks like this:
16956 (service hpcguix-web-service-type
16957 (hpcguix-web-configuration
16959 #~(define site-config
16960 (hpcweb-configuration
16961 (title-prefix "Guix-HPC - ")
16962 (menu '(("/about" "ABOUT"))))))))
16965 @node Services de certificats
16966 @subsubsection Services de certificats
16969 @cindex HTTP, HTTPS
16970 @cindex Let's Encrypt
16971 @cindex TLS certificates
16972 The @code{(gnu services certbot)} module provides a service to automatically
16973 obtain a valid TLS certificate from the Let's Encrypt certificate
16974 authority. These certificates can then be used to serve content securely
16975 over HTTPS or other TLS-based protocols, with the knowledge that the client
16976 will be able to verify the server's authenticity.
16978 @url{https://letsencrypt.org/, Let's Encrypt} provides the @code{certbot}
16979 tool to automate the certification process. This tool first securely
16980 generates a key on the server. It then makes a request to the Let's Encrypt
16981 certificate authority (CA) to sign the key. The CA checks that the request
16982 originates from the host in question by using a challenge-response protocol,
16983 requiring the server to provide its response over HTTP. If that protocol
16984 completes successfully, the CA signs the key, resulting in a certificate.
16985 That certificate is valid for a limited period of time, and therefore to
16986 continue to provide TLS services, the server needs to periodically ask the
16987 CA to renew its signature.
16989 The certbot service automates this process: the initial key generation, the
16990 initial certification request to the Let's Encrypt service, the web server
16991 challenge/response integration, writing the certificate to disk, the
16992 automated periodic renewals, and the deployment tasks associated with the
16993 renewal (e.g. reloading services, copying keys with different permissions).
16995 Certbot is run twice a day, at a random minute within the hour. It won't do
16996 anything until your certificates are due for renewal or revoked, but running
16997 it regularly would give your service a chance of staying online in case a
16998 Let's Encrypt-initiated revocation happened for some reason.
17000 By using this service, you agree to the ACME Subscriber Agreement, which can
17001 be found there: @url{https://acme-v01.api.letsencrypt.org/directory}.
17003 @defvr {Variable Scheme} certbot-service-type
17004 A service type for the @code{certbot} Let's Encrypt client. Its value must
17005 be a @code{certbot-configuration} record as in this example:
17008 (define %nginx-deploy-hook
17010 "nginx-deploy-hook"
17011 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
17012 (kill pid SIGHUP))))
17014 (service certbot-service-type
17015 (certbot-configuration
17016 (email "foo@@example.net")
17019 (certificate-configuration
17020 (domains '("example.net" "www.example.net"))
17021 (deploy-hook %nginx-deploy-hook))
17022 (certificate-configuration
17023 (domains '("bar.example.net")))))))
17026 See below for details about @code{certbot-configuration}.
17029 @deftp {Type de données} certbot-configuration
17030 Data type representing the configuration of the @code{certbot} service.
17031 This type has the following parameters:
17034 @item @code{package} (par défaut : @code{certbot})
17035 Le paquet certbot à utiliser.
17037 @item @code{webroot} (par défaut : @code{/var/www})
17038 The directory from which to serve the Let's Encrypt challenge/response
17041 @item @code{certificates} (par défaut : @code{()})
17042 A list of @code{certificates-configuration}s for which to generate
17043 certificates and request signatures. Each certificate has a @code{name} and
17044 several @code{domains}.
17047 Mandatory email used for registration, recovery contact, and important
17048 account notifications.
17050 @item @code{rsa-key-size} (par défaut : @code{2048})
17051 Size of the RSA key.
17053 @item @code{default-location} (default: @i{see below})
17054 The default @code{nginx-location-configuration}. Because @code{certbot}
17055 needs to be able to serve challenges and responses, it needs to be able to
17056 run a web server. It does so by extending the @code{nginx} web service with
17057 an @code{nginx-server-configuration} listening on the @var{domains} on port
17058 80, and which has a @code{nginx-location-configuration} for the
17059 @code{/.well-known/} URI path subspace used by Let's Encrypt. @xref{Services web}, for more on these nginx configuration data types.
17061 Requests to other URL paths will be matched by the @code{default-location},
17062 which if present is added to all @code{nginx-server-configuration}s.
17064 By default, the @code{default-location} will issue a redirect from
17065 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
17066 you to define what to serve on your site via @code{https}.
17068 Pass @code{#f} to not issue a default location.
17072 @deftp {Type de données} certificate-configuration
17073 Data type representing the configuration of a certificate. This type has
17074 the following parameters:
17077 @item @code{name} (default: @i{see below})
17078 This name is used by Certbot for housekeeping and in file paths; it doesn't
17079 affect the content of the certificate itself. To see certificate names, run
17080 @code{certbot certificates}.
17082 Its default is the first provided domain.
17084 @item @code{domains} (par défaut : @code{()})
17085 The first domain provided will be the subject CN of the certificate, and all
17086 domains will be Subject Alternative Names on the certificate.
17088 @item @code{deploy-hook} (par défaut : @code{#f})
17089 Command to be run in a shell once for each successfully issued certificate.
17090 For this command, the shell variable @code{$RENEWED_LINEAGE} will point to
17091 the config live subdirectory (for example,
17092 @samp{"/etc/letsencrypt/live/example.com"}) containing the new certificates
17093 and keys; the shell variable @code{$RENEWED_DOMAINS} will contain a
17094 space-delimited list of renewed certificate domains (for example,
17095 @samp{"example.com www.example.com"}.
17100 For each @code{certificate-configuration}, the certificate is saved to
17101 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is saved
17102 to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
17104 @subsubsection Services DNS
17105 @cindex DNS (domain name system)
17106 @cindex domain name system (DNS)
17108 The @code{(gnu services dns)} module provides services related to the
17109 @dfn{domain name system} (DNS). It provides a server service for hosting an
17110 @emph{authoritative} DNS server for multiple zones, slave or master. This
17111 service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a caching
17112 and forwarding DNS server for the LAN, which uses
17113 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
17115 @subsubheading Service Knot
17117 An example configuration of an authoritative server for two zones, one
17118 master and one slave, is:
17121 (define-zone-entries example.org.zone
17122 ;; Name TTL Class Type Data
17123 ("@@" "" "IN" "A" "127.0.0.1")
17124 ("@@" "" "IN" "NS" "ns")
17125 ("ns" "" "IN" "A" "127.0.0.1"))
17127 (define master-zone
17128 (knot-zone-configuration
17129 (domain "example.org")
17131 (origin "example.org")
17132 (entries example.org.zone)))))
17135 (knot-zone-configuration
17136 (domain "plop.org")
17137 (dnssec-policy "default")
17138 (master (list "plop-master"))))
17140 (define plop-master
17141 (knot-remote-configuration
17143 (address (list "208.76.58.171"))))
17147 (services (cons* (service knot-service-type
17148 (knot-configuration
17149 (remotes (list plop-master))
17150 (zones (list master-zone slave-zone))))
17155 @deffn {Variable Scheme} knot-service-type
17156 This is the type for the Knot DNS server.
17158 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
17159 zones, that is to say domain names you would buy from a registrar. This
17160 server is not a resolver, meaning that it can only resolve names for which
17161 it is authoritative. This server can be configured to serve zones as a
17162 master server or a slave server as a per-zone basis. Slave zones will get
17163 their data from masters, and will serve it as an authoritative server. From
17164 the point of view of a resolver, there is no difference between master and
17167 The following data types are used to configure the Knot DNS server:
17170 @deftp {Type de données} knot-key-configuration
17171 Data type representing a key. This type has the following parameters:
17174 @item @code{id} (par défaut : @code{""})
17175 An identifier for other configuration fields to refer to this key. IDs must
17176 be unique and must not be empty.
17178 @item @code{algorithm} (par défaut : @code{#f})
17179 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
17180 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
17181 @code{'hmac-sha384} and @code{'hmac-sha512}.
17183 @item @code{secret} (par défaut : @code{""})
17184 The secret key itself.
17189 @deftp {Type de données} knot-acl-configuration
17190 Data type representing an Access Control List (ACL) configuration. This
17191 type has the following parameters:
17194 @item @code{id} (par défaut : @code{""})
17195 An identifier for ether configuration fields to refer to this key. IDs must
17196 be unique and must not be empty.
17198 @item @code{address} (par défaut : @code{'()})
17199 An ordered list of IP addresses, network subnets, or network ranges
17200 represented with strings. The query must match one of them. Empty value
17201 means that address match is not required.
17203 @item @code{key} (par défaut : @code{'()})
17204 An ordered list of references to keys represented with strings. The string
17205 must match a key ID defined in a @code{knot-key-configuration}. No key
17206 means that a key is not require to match that ACL.
17208 @item @code{action} (par défaut : @code{'()})
17209 An ordered list of actions that are permitted or forbidden by this ACL.
17210 Possible values are lists of zero or more elements from @code{'transfer},
17211 @code{'notify} and @code{'update}.
17213 @item @code{deny?} (par défaut : @code{#f})
17214 When true, the ACL defines restrictions. Listed actions are forbidden.
17215 When false, listed actions are allowed.
17220 @deftp {Type de données} zone-entry
17221 Data type represnting a record entry in a zone file. This type has the
17222 following parameters:
17225 @item @code{name} (par défaut : @code{"@@"})
17226 The name of the record. @code{"@@"} refers to the origin of the zone.
17227 Names are relative to the origin of the zone. For example, in the
17228 @code{example.org} zone, @code{"ns.example.org"} actually refers to
17229 @code{ns.example.org.example.org}. Names ending with a dot are absolute,
17230 which means that @code{"ns.example.org."} refers to @code{ns.example.org}.
17232 @item @code{ttl} (par défaut : @code{""})
17233 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
17235 @item @code{class} (par défaut : @code{"IN"})
17236 The class of the record. Knot currently supports only @code{"IN"} and
17237 partially @code{"CH"}.
17239 @item @code{type} (par défaut : @code{"A"})
17240 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
17241 address), NS (Name Server) and MX (Mail eXchange). Many other types are
17244 @item @code{data} (par défaut : @code{""})
17245 The data contained in the record. For instance an IP address associated
17246 with an A record, or a domain name associated with an NS record. Remember
17247 that domain names are relative to the origin unless they end with a dot.
17252 @deftp {Type de données} zone-file
17253 Data type representing the content of a zone file. This type has the
17254 following parameters:
17257 @item @code{entries} (par défaut : @code{'()})
17258 The list of entries. The SOA record is taken care of, so you don't need to
17259 put it in the list of entries. This list should probably contain an entry
17260 for your primary authoritative DNS server. Other than using a list of
17261 entries directly, you can use @code{define-zone-entries} to define a object
17262 containing the list of entries more easily, that you can later pass to the
17263 @code{entries} field of the @code{zone-file}.
17265 @item @code{origin} (par défaut : @code{""})
17266 The name of your zone. This parameter cannot be empty.
17268 @item @code{ns} (par défaut : @code{"ns"})
17269 The domain of your primary authoritative DNS server. The name is relative
17270 to the origin, unless it ends with a dot. It is mandatory that this primary
17271 DNS server corresponds to an NS record in the zone and that it is associated
17272 to an IP address in the list of entries.
17274 @item @code{mail} (par défaut : @code{"hostmaster"})
17275 An email address people can contact you at, as the owner of the zone. This
17276 is translated as @code{<mail>@@<origin>}.
17278 @item @code{serial} (par défaut : @code{1})
17279 The serial number of the zone. As this is used to keep track of changes by
17280 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
17281 Always increment it when you make a change in your zone.
17283 @item @code{refresh} (par défaut : @code{(* 2 24 3600)})
17284 The frequency at which slaves will do a zone transfer. This value is a
17285 number of seconds. It can be computed by multiplications or with
17286 @code{(string->duration)}.
17288 @item @code{retry} (par défaut : @code{(* 15 60)})
17289 The period after which a slave will retry to contact its master when it
17290 fails to do so a first time.
17292 @item @code{expiry} (par défaut : @code{(* 14 24 3600)})
17293 Default TTL of records. Existing records are considered correct for at most
17294 this amount of time. After this period, resolvers will invalidate their
17295 cache and check again that it still exists.
17297 @item @code{nx} (par défaut : @code{3600})
17298 Default TTL of inexistant records. This delay is usually short because you
17299 want your new domains to reach everyone quickly.
17304 @deftp {Type de données} knot-remote-configuration
17305 Data type representing a remote configuration. This type has the following
17309 @item @code{id} (par défaut : @code{""})
17310 An identifier for other configuration fields to refer to this remote. IDs
17311 must be unique and must not be empty.
17313 @item @code{address} (par défaut : @code{'()})
17314 An ordered list of destination IP addresses. Addresses are tried in
17315 sequence. An optional port can be given with the @@ separator. For
17316 instance: @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
17318 @item @code{via} (par défaut : @code{'()})
17319 An ordered list of source IP addresses. An empty list will have Knot choose
17320 an appropriate source IP. An optional port can be given with the @@
17321 separator. The default is to choose at random.
17323 @item @code{key} (par défaut : @code{#f})
17324 A reference to a key, that is a string containing the identifier of a key
17325 defined in a @code{knot-key-configuration} field.
17330 @deftp {Type de données} knot-keystore-configuration
17331 Data type representing a keystore to hold dnssec keys. This type has the
17332 following parameters:
17335 @item @code{id} (par défaut : @code{""})
17336 The id of the keystore. It must not be empty.
17338 @item @code{backend} (par défaut : @code{'pem})
17339 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
17341 @item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
17342 The configuration string of the backend. An example for the PKCS#11 is:
17343 @code{"pkcs11:token=knot;pin-value=1234
17344 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}. For the pem backend, the string
17345 reprensents a path in the file system.
17350 @deftp {Type de données} knot-policy-configuration
17351 Data type representing a dnssec policy. Knot DNS is able to automatically
17352 sign your zones. It can either generate and manage your keys automatically
17353 or use keys that you generate.
17355 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that
17356 is used to sign the second, and a Zone Signing Key (ZSK) that is used to
17357 sign the zone. In order to be trusted, the KSK needs to be present in the
17358 parent zone (usually a top-level domain). If your registrar supports
17359 dnssec, you will have to send them your KSK's hash so they can add a DS
17360 record in their zone. This is not automated and need to be done each time
17361 you change your KSK.
17363 The policy also defines the lifetime of keys. Usually, ZSK can be changed
17364 easily and use weaker cryptographic functions (they use lower parameters) in
17365 order to sign records quickly, so they are changed often. The KSK however
17366 requires manual interaction with the registrar, so they are changed less
17367 often and use stronger parameters because they sign only one record.
17369 This type has the following parameters:
17372 @item @code{id} (par défaut : @code{""})
17373 The id of the policy. It must not be empty.
17375 @item @code{keystore} (par défaut : @code{"default"})
17376 A reference to a keystore, that is a string containing the identifier of a
17377 keystore defined in a @code{knot-keystore-configuration} field. The
17378 @code{"default"} identifier means the default keystore (a kasp database that
17379 was setup by this service).
17381 @item @code{manual?} (par défaut : @code{#f})
17382 Whether the key management is manual or automatic.
17384 @item @code{single-type-signing?} (par défaut : @code{#f})
17385 When @code{#t}, use the Single-Type Signing Scheme.
17387 @item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
17388 An algorithm of signing keys and issued signatures.
17390 @item @code{ksk-size} (par défaut : @code{256})
17391 The length of the KSK. Note that this value is correct for the default
17392 algorithm, but would be unsecure for other algorithms.
17394 @item @code{zsk-size} (par défaut : @code{256})
17395 The length of the ZSK. Note that this value is correct for the default
17396 algorithm, but would be unsecure for other algorithms.
17398 @item @code{dnskey-ttl} (par défaut : @code{'default})
17399 The TTL value for DNSKEY records added into zone apex. The special
17400 @code{'default} value means same as the zone SOA TTL.
17402 @item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
17403 The period between ZSK publication and the next rollover initiation.
17405 @item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
17406 An extra delay added for each key rollover step. This value should be high
17407 enough to cover propagation of data from the master server to all slaves.
17409 @item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
17410 A validity period of newly issued signatures.
17412 @item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
17413 A period how long before a signature expiration the signature will be
17416 @item @code{nsec3?} (par défaut : @code{#f})
17417 When @code{#t}, NSEC3 will be used instead of NSEC.
17419 @item @code{nsec3-iterations} (par défaut : @code{5})
17420 The number of additional times the hashing is performed.
17422 @item @code{nsec3-salt-length} (par défaut : @code{8})
17423 The length of a salt field in octets, which is appended to the original
17424 owner name before hashing.
17426 @item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
17427 The validity period of newly issued salt field.
17432 @deftp {Type de données} knot-zone-configuration
17433 Data type representing a zone served by Knot. This type has the following
17437 @item @code{domain} (par défaut : @code{""})
17438 The domain served by this configuration. It must not be empty.
17440 @item @code{file} (par défaut : @code{""})
17441 The file where this zone is saved. This parameter is ignored by master
17442 zones. Empty means default location that depends on the domain name.
17444 @item @code{zone} (par défaut : @code{(zone-file)})
17445 The content of the zone file. This parameter is ignored by slave zones. It
17446 must contain a zone-file record.
17448 @item @code{master} (par défaut : @code{'()})
17449 A list of master remotes. When empty, this zone is a master. When set,
17450 this zone is a slave. This is a list of remotes identifiers.
17452 @item @code{ddns-master} (par défaut : @code{#f})
17453 The main master. When empty, it defaults to the first master in the list of
17456 @item @code{notify} (par défaut : @code{'()})
17457 A list of slave remote identifiers.
17459 @item @code{acl} (par défaut : @code{'()})
17460 A list of acl identifiers.
17462 @item @code{semantic-checks?} (par défaut : @code{#f})
17463 When set, this adds more semantic checks to the zone.
17465 @item @code{disable-any?} (par défaut : @code{#f})
17466 When set, this forbids queries of the ANY type.
17468 @item @code{zonefile-sync} (par défaut : @code{0})
17469 The delay between a modification in memory and on disk. 0 means immediate
17472 @item @code{serial-policy} (par défaut : @code{'increment})
17473 A policy between @code{'increment} and @code{'unixtime}.
17478 @deftp {Type de données} knot-configuration
17479 Data type representing the Knot configuration. This type has the following
17483 @item @code{knot} (par défaut : @code{knot})
17486 @item @code{run-directory} (par défaut : @code{"/var/run/knot"})
17487 The run directory. This directory will be used for pid file and sockets.
17489 @item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
17490 An ip address on which to listen.
17492 @item @code{listen-v6} (par défaut : @code{"::"})
17493 An ip address on which to listen.
17495 @item @code{listen-port} (par défaut : @code{53})
17496 A port on which to listen.
17498 @item @code{keys} (par défaut : @code{'()})
17499 The list of knot-key-configuration used by this configuration.
17501 @item @code{acls} (par défaut : @code{'()})
17502 The list of knot-acl-configuration used by this configuration.
17504 @item @code{remotes} (par défaut : @code{'()})
17505 The list of knot-remote-configuration used by this configuration.
17507 @item @code{zones} (par défaut : @code{'()})
17508 The list of knot-zone-configuration used by this configuration.
17513 @subsubheading Services Dnsmasq
17515 @deffn {Variable Scheme} dnsmasq-service-type
17516 This is the type of the dnsmasq service, whose value should be an
17517 @code{dnsmasq-configuration} object as in this example:
17520 (service dnsmasq-service-type
17521 (dnsmasq-configuration
17523 (servers '("192.168.1.1"))))
17527 @deftp {Type de données} dnsmasq-configuration
17528 Type de données qui représente la configuration de dnsmasq.
17531 @item @code{package} (par défaut : @var{dnsmasq})
17532 Package object of the dnsmasq server.
17534 @item @code{no-hosts?} (par défaut : @code{#f})
17535 When true, don't read the hostnames in /etc/hosts.
17537 @item @code{port} (par défaut : @code{53})
17538 The port to listen on. Setting this to zero completely disables DNS
17539 funtion, leaving only DHCP and/or TFTP.
17541 @item @code{local-service?} (par défaut : @code{#t})
17542 Accept DNS queries only from hosts whose address is on a local subnet, ie a
17543 subnet for which an interface exists on the server.
17545 @item @code{listen-addresses} (par défaut : @code{'()})
17546 Listen on the given IP addresses.
17548 @item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
17549 The file to read the IP address of the upstream nameservers from.
17551 @item @code{no-resolv?} (par défaut : @code{#f})
17552 When true, don't read @var{resolv-file}.
17554 @item @code{servers} (par défaut : @code{'()})
17555 Specify IP address of upstream servers directly.
17557 @item @code{cache-size} (par défaut : @code{150})
17558 Set the size of dnsmasq's cache. Setting the cache size to zero disables
17561 @item @code{negative-cache?} (par défaut : @code{#t})
17562 When false, disable negative caching.
17568 @subsubsection Services VPN
17569 @cindex VPN (virtual private network)
17570 @cindex virtual private network (VPN)
17572 The @code{(gnu services vpn)} module provides services related to
17573 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service
17574 for your machine to connect to a VPN, and a @emph{servire} service for your
17575 machine to host a VPN. Both services use @uref{https://openvpn.net/,
17578 @deffn {Procédure Scheme} openvpn-client-service @
17579 [#:config (openvpn-client-configuration)]
17581 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
17584 @deffn {Procédure Scheme} openvpn-server-service @
17585 [#:config (openvpn-server-configuration)]
17587 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
17589 Both can be run simultaneously.
17592 @c %automatically generated documentation
17594 Les champs de @code{openvpn-client-configuration} disponibles sont :
17596 @deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
17597 The OpenVPN package.
17601 @deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
17602 The OpenVPN pid file.
17604 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
17608 @deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
17609 The protocol (UDP or TCP) used to open a channel between clients and
17612 La valeur par défaut est @samp{udp}.
17616 @deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
17617 The device type used to represent the VPN connection.
17619 La valeur par défaut est @samp{tun}.
17623 @deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
17624 The certificate authority to check connections against.
17626 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
17630 @deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
17631 The certificate of the machine the daemon is running on. It should be
17632 signed by the authority given in @code{ca}.
17634 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
17638 @deftypevr {paramètre de @code{openvpn-client-configuration}} string key
17639 The key of the machine the daemon is running on. It must be the key whose
17640 certificate is @code{cert}.
17642 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
17646 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
17647 Whether to use the lzo compression algorithm.
17649 La valeur par défaut est @samp{#t}.
17653 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
17654 Don't re-read key files across SIGUSR1 or --ping-restart.
17656 La valeur par défaut est @samp{#t}.
17660 @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
17661 Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
17662 or --ping-restart restarts.
17664 La valeur par défaut est @samp{#t}.
17668 @deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
17671 La valeur par défaut est @samp{3}.
17675 @deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
17676 Add an additional layer of HMAC authentication on top of the TLS control
17677 channel to protect against DoS attacks.
17679 La valeur par défaut est @samp{#f}.
17683 @deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
17684 Whether to check the server certificate has server usage extension.
17686 La valeur par défaut est @samp{#t}.
17690 @deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
17691 Bind to a specific local port number.
17693 La valeur par défaut est @samp{#f}.
17697 @deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
17698 Retry resolving server address.
17700 La valeur par défaut est @samp{#t}.
17704 @deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
17705 A list of remote servers to connect to.
17707 La valeur par défaut est @samp{()}.
17709 Les champs de @code{openvpn-remote-configuration} disponibles sont :
17711 @deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
17714 La valeur par défaut est @samp{"my-server"}.
17718 @deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
17719 Port number the server listens to.
17721 La valeur par défaut est @samp{1194}.
17726 @c %end of automatic openvpn-client documentation
17728 @c %automatically generated documentation
17730 Les champs de @code{openvpn-server-configuration} disponibles sont :
17732 @deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
17733 The OpenVPN package.
17737 @deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
17738 The OpenVPN pid file.
17740 La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
17744 @deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
17745 The protocol (UDP or TCP) used to open a channel between clients and
17748 La valeur par défaut est @samp{udp}.
17752 @deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
17753 The device type used to represent the VPN connection.
17755 La valeur par défaut est @samp{tun}.
17759 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
17760 The certificate authority to check connections against.
17762 La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
17766 @deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
17767 The certificate of the machine the daemon is running on. It should be
17768 signed by the authority given in @code{ca}.
17770 La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
17774 @deftypevr {paramètre de @code{openvpn-server-configuration}} string key
17775 The key of the machine the daemon is running on. It must be the key whose
17776 certificate is @code{cert}.
17778 La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
17782 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
17783 Whether to use the lzo compression algorithm.
17785 La valeur par défaut est @samp{#t}.
17789 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
17790 Don't re-read key files across SIGUSR1 or --ping-restart.
17792 La valeur par défaut est @samp{#t}.
17796 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
17797 Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
17798 or --ping-restart restarts.
17800 La valeur par défaut est @samp{#t}.
17804 @deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
17807 La valeur par défaut est @samp{3}.
17811 @deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
17812 Add an additional layer of HMAC authentication on top of the TLS control
17813 channel to protect against DoS attacks.
17815 La valeur par défaut est @samp{#f}.
17819 @deftypevr {paramètre de @code{openvpn-server-configuration}} number port
17820 Specifies the port number on which the server listens.
17822 La valeur par défaut est @samp{1194}.
17826 @deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
17827 An ip and mask specifying the subnet inside the virtual network.
17829 La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
17833 @deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
17834 A CIDR notation specifying the IPv6 subnet inside the virtual network.
17836 La valeur par défaut est @samp{#f}.
17840 @deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
17841 The Diffie-Hellman parameters file.
17843 La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
17847 @deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
17848 The file that records client IPs.
17850 La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
17854 @deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
17855 When true, the server will act as a gateway for its clients.
17857 La valeur par défaut est @samp{#f}.
17861 @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
17862 When true, clients are allowed to talk to each other inside the VPN.
17864 La valeur par défaut est @samp{#f}.
17868 @deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
17869 Causes ping-like messages to be sent back and forth over the link so that
17870 each side knows when the other side has gone down. @code{keepalive}
17871 requires a pair. The first element is the period of the ping sending, and
17872 the second element is the timeout before considering the other side down.
17876 @deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
17877 The maximum number of clients.
17879 La valeur par défaut est @samp{100}.
17883 @deftypevr {paramètre de @code{openvpn-server-configuration}} string status
17884 The status file. This file shows a small report on current connection. It
17885 is truncated and rewritten every minute.
17887 La valeur par défaut est @samp{"/var/run/openvpn/status"}.
17891 @deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
17892 The list of configuration for some clients.
17894 La valeur par défaut est @samp{()}.
17896 Les champs de @code{openvpn-ccd-configuration} disponibles sont :
17898 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
17901 La valeur par défaut est @samp{"client"}.
17905 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
17908 La valeur par défaut est @samp{#f}.
17912 @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
17915 La valeur par défaut est @samp{#f}.
17922 @c %end of automatic openvpn-server documentation
17925 @node Système de fichiers en réseau
17926 @subsubsection Système de fichiers en réseau
17929 The @code{(gnu services nfs)} module provides the following services, which
17930 are most commonly used in relation to mounting or exporting directory trees
17931 as @dfn{network file systems} (NFS).
17933 @subsubheading RPC Bind Service
17936 The RPC Bind service provides a facility to map program numbers into
17937 universal addresses. Many NFS related services use this facility. Hence it
17938 is automatically started when a dependent service starts.
17940 @defvr {Variable Scheme} rpcbind-service-type
17941 A service type for the RPC portmapper daemon.
17945 @deftp {Type de données} rpcbind-configuration
17946 Data type representing the configuration of the RPC Bind Service. This type
17947 has the following parameters:
17949 @item @code{rpcbind} (par défaut : @code{rpcbind})
17950 Le paquet rpcbind à utiliser.
17952 @item @code{warm-start?} (par défaut : @code{#t})
17953 If this parameter is @code{#t}, then the daemon will read a state file on
17954 startup thus reloading state information saved by a previous instance.
17959 @subsubheading Pipefs Pseudo File System
17963 The pipefs file system is used to transfer NFS related data between the
17964 kernel and user space programs.
17966 @defvr {Variable Scheme} pipefs-service-type
17967 A service type for the pipefs pseudo file system.
17970 @deftp {Type de données} pipefs-configuration
17971 Data type representing the configuration of the pipefs pseudo file system
17972 service. This type has the following parameters:
17974 @item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
17975 The directory to which the file system is to be attached.
17980 @subsubheading GSS Daemon Service
17983 @cindex global security system
17985 The @dfn{global security system} (GSS) daemon provides strong security for
17986 RPC based protocols. Before exchanging RPC requests an RPC client must
17987 establish a security context. Typically this is done using the Kerberos
17988 command @command{kinit} or automatically at login time using PAM services
17989 (@pxref{Services Kerberos}).
17991 @defvr {Variable Scheme} gss-service-type
17992 A service type for the Global Security System (GSS) daemon.
17995 @deftp {Type de données} gss-configuration
17996 Data type representing the configuration of the GSS daemon service. This
17997 type has the following parameters:
17999 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
18000 The package in which the @command{rpc.gssd} command is to be found.
18002 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
18003 The directory where the pipefs file system is mounted.
18009 @subsubheading IDMAP Daemon Service
18011 @cindex name mapper
18013 The idmap daemon service provides mapping between user IDs and user names.
18014 Typically it is required in order to access file systems mounted via NFSv4.
18016 @defvr {Variable Scheme} idmap-service-type
18017 A service type for the Identity Mapper (IDMAP) daemon.
18020 @deftp {Type de données} idmap-configuration
18021 Data type representing the configuration of the IDMAP daemon service. This
18022 type has the following parameters:
18024 @item @code{nfs-utils} (par défaut : @code{nfs-utils})
18025 The package in which the @command{rpc.idmapd} command is to be found.
18027 @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
18028 The directory where the pipefs file system is mounted.
18030 @item @code{domain} (par défaut : @code{#f})
18031 The local NFSv4 domain name. This must be a string or @code{#f}. If it is
18032 @code{#f} then the daemon will use the host's fully qualified domain name.
18037 @node Intégration continue
18038 @subsubsection Intégration continue
18040 @cindex continuous integration
18041 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
18042 continuous integration tool for Guix. It can be used both for development
18043 and for providing substitutes to others (@pxref{Substituts}).
18045 The @code{(gnu services cuirass)} module provides the following service.
18047 @defvr {Procédure Scheme} cuirass-service-type
18048 The type of the Cuirass service. Its value must be a
18049 @code{cuirass-configuration} object, as described below.
18052 To add build jobs, you have to set the @code{specifications} field of the
18053 configuration. Here is an example of a service defining a build job based
18054 on a specification that can be found in Cuirass source tree. This service
18055 polls the Guix repository and builds a subset of the Guix packages, as
18056 prescribed in the @file{gnu-system.scm} example spec:
18059 (let ((spec #~((#:name . "guix")
18060 (#:url . "git://git.savannah.gnu.org/guix.git")
18061 (#:load-path . ".")
18062 (#:file . "build-aux/cuirass/gnu-system.scm")
18063 (#:proc . cuirass-jobs)
18064 (#:arguments (subset . "hello"))
18065 (#:branch . "master"))))
18066 (service cuirass-service-type
18067 (cuirass-configuration
18068 (specifications #~(list '#$spec)))))
18071 While information related to build jobs is located directly in the
18072 specifications, global settings for the @command{cuirass} process are
18073 accessible in other @code{cuirass-configuration} fields.
18075 @deftp {Type de données} cuirass-configuration
18076 Data type representing the configuration of Cuirass.
18079 @item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
18080 Location of the log file.
18082 @item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
18083 Location of the repository cache.
18085 @item @code{user} (par défaut : @code{"cuirass"})
18086 Owner of the @code{cuirass} process.
18088 @item @code{group} (par défaut : @code{"cuirass"})
18089 Owner's group of the @code{cuirass} process.
18091 @item @code{interval} (par défaut : @code{60})
18092 Number of seconds between the poll of the repositories followed by the
18095 @item @code{database} (par défaut : @code{"/var/run/cuirass/cuirass.db"})
18096 Location of sqlite database which contains the build results and previously
18097 added specifications.
18099 @item @code{port} (par défaut : @code{8081})
18100 Port number used by the HTTP server.
18102 @item --listen=@var{hôte}
18103 Listen on the network interface for @var{host}. The default is to accept
18104 connections from localhost.
18106 @item @code{specifications} (par défaut : @code{#~'()})
18107 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
18108 where a specification is an association list (@pxref{Associations Lists,,,
18109 guile, GNU Guile Reference Manual}) whose keys are keywords
18110 (@code{#:keyword-example}) as shown in the example above.
18112 @item @code{use-substitutes?} (par défaut : @code{#f})
18113 This allows using substitutes to avoid building every dependencies of a job
18116 @item @code{one-shot?} (par défaut : @code{#f})
18117 Only evaluate specifications and build derivations once.
18119 @item @code{fallback?} (par défaut : @code{#f})
18120 When substituting a pre-built binary fails, fall back to building packages
18123 @item @code{cuirass} (par défaut : @code{cuirass})
18124 Le paquet Cuirass à utiliser.
18128 @node Power Management Services
18129 @subsubsection Power Management Services
18132 @cindex power management with TLP
18133 @subsubheading TLP daemon
18135 The @code{(gnu services pm)} module provides a Guix service definition for
18136 the Linux power management tool TLP.
18138 TLP enables various powersaving modes in userspace and kernel. Contrary to
18139 @code{upower-service}, it is not a passive, monitoring tool, as it will
18140 apply custom settings each time a new power source is detected. More
18141 information can be found at @uref{http://linrunner.de/en/tlp/tlp.html, TLP
18144 @deffn {Variable Scheme} tlp-service-type
18145 The service type for the TLP tool. Its value should be a valid TLP
18146 configuration (see below). To use the default settings, simply write:
18148 (service tlp-service-type)
18152 By default TLP does not need much configuration but most TLP parameters can
18153 be tweaked using @code{tlp-configuration}.
18155 Each parameter definition is preceded by its type; for example,
18156 @samp{boolean foo} indicates that the @code{foo} parameter should be
18157 specified as a boolean. Types starting with @code{maybe-} denote parameters
18158 that won't show up in TLP config file when their value is @code{'disabled}.
18160 @c The following documentation was initially generated by
18161 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
18162 @c documentation is better, so we shouldn't hesitate to edit below as
18163 @c needed. However if the change you want to make to this documentation
18164 @c can be done in an automated way, it's probably easier to change
18165 @c (generate-documentation) than to make it below and have to deal with
18166 @c the churn as TLP updates.
18168 Les champs de @code{tlp-configuration} disponibles sont :
18170 @deftypevr {paramètre de @code{tlp-configuration}} package tlp
18175 @deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
18176 Set to true if you wish to enable TLP.
18178 La valeur par défaut est @samp{#t}.
18182 @deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
18183 Default mode when no power supply can be detected. Alternatives are AC and
18186 La valeur par défaut est @samp{"AC"}.
18190 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
18191 Number of seconds Linux kernel has to wait after the disk goes idle, before
18194 La valeur par défaut est @samp{0}.
18198 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
18199 Same as @code{disk-idle-ac} but on BAT mode.
18201 La valeur par défaut est @samp{2}.
18205 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
18206 Dirty pages flushing periodicity, expressed in seconds.
18208 La valeur par défaut est @samp{15}.
18212 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
18213 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
18215 La valeur par défaut est @samp{60}.
18219 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
18220 CPU frequency scaling governor on AC mode. With intel_pstate driver,
18221 alternatives are powersave and performance. With acpi-cpufreq driver,
18222 alternatives are ondemand, powersave, performance and conservative.
18224 La valeur par défaut est @samp{disabled}.
18228 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
18229 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
18231 La valeur par défaut est @samp{disabled}.
18235 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
18236 Set the min available frequency for the scaling governor on AC.
18238 La valeur par défaut est @samp{disabled}.
18242 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
18243 Set the max available frequency for the scaling governor on AC.
18245 La valeur par défaut est @samp{disabled}.
18249 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
18250 Set the min available frequency for the scaling governor on BAT.
18252 La valeur par défaut est @samp{disabled}.
18256 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
18257 Set the max available frequency for the scaling governor on BAT.
18259 La valeur par défaut est @samp{disabled}.
18263 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
18264 Limit the min P-state to control the power dissipation of the CPU, in AC
18265 mode. Values are stated as a percentage of the available performance.
18267 La valeur par défaut est @samp{disabled}.
18271 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
18272 Limit the max P-state to control the power dissipation of the CPU, in AC
18273 mode. Values are stated as a percentage of the available performance.
18275 La valeur par défaut est @samp{disabled}.
18279 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
18280 Same as @code{cpu-min-perf-on-ac} on BAT mode.
18282 La valeur par défaut est @samp{disabled}.
18286 @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
18287 Same as @code{cpu-max-perf-on-ac} on BAT mode.
18289 La valeur par défaut est @samp{disabled}.
18293 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
18294 Enable CPU turbo boost feature on AC mode.
18296 La valeur par défaut est @samp{disabled}.
18300 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
18301 Same as @code{cpu-boost-on-ac?} on BAT mode.
18303 La valeur par défaut est @samp{disabled}.
18307 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
18308 Allow Linux kernel to minimize the number of CPU cores/hyper-threads used
18309 under light load conditions.
18311 La valeur par défaut est @samp{#f}.
18315 @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
18316 Same as @code{sched-powersave-on-ac?} but on BAT mode.
18318 La valeur par défaut est @samp{#t}.
18322 @deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
18323 Enable Linux kernel NMI watchdog.
18325 La valeur par défaut est @samp{#f}.
18329 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
18330 For Linux kernels with PHC patch applied, change CPU voltages. An example
18331 value would be @samp{"F:V F:V F:V F:V"}.
18333 La valeur par défaut est @samp{disabled}.
18337 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
18338 Set CPU performance versus energy saving policy on AC. Alternatives are
18339 performance, normal, powersave.
18341 La valeur par défaut est @samp{"performance"}.
18345 @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
18346 Same as @code{energy-perf-policy-ac} but on BAT mode.
18348 La valeur par défaut est @samp{"powersave"}.
18352 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
18357 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
18358 Hard disk advanced power management level.
18362 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
18363 Same as @code{disk-apm-bat} but on BAT mode.
18367 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
18368 Hard disk spin down timeout. One value has to be specified for each
18369 declared hard disk.
18371 La valeur par défaut est @samp{disabled}.
18375 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
18376 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
18378 La valeur par défaut est @samp{disabled}.
18382 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
18383 Select IO scheduler for disk devices. One value has to be specified for
18384 each declared hard disk. Example alternatives are cfq, deadline and noop.
18386 La valeur par défaut est @samp{disabled}.
18390 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
18391 SATA aggressive link power management (ALPM) level. Alternatives are
18392 min_power, medium_power, max_performance.
18394 La valeur par défaut est @samp{"max_performance"}.
18398 @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
18399 Same as @code{sata-linkpwr-ac} but on BAT mode.
18401 La valeur par défaut est @samp{"min_power"}.
18405 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
18406 Exclude specified SATA host devices for link power management.
18408 La valeur par défaut est @samp{disabled}.
18412 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
18413 Enable Runtime Power Management for AHCI controller and disks on AC mode.
18415 La valeur par défaut est @samp{disabled}.
18419 @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
18420 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
18422 La valeur par défaut est @samp{disabled}.
18426 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
18427 Seconds of inactivity before disk is suspended.
18429 La valeur par défaut est @samp{15}.
18433 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
18434 PCI Express Active State Power Management level. Alternatives are default,
18435 performance, powersave.
18437 La valeur par défaut est @samp{"performance"}.
18441 @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
18442 Same as @code{pcie-aspm-ac} but on BAT mode.
18444 La valeur par défaut est @samp{"powersave"}.
18448 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
18449 Radeon graphics clock speed level. Alternatives are low, mid, high, auto,
18452 La valeur par défaut est @samp{"high"}.
18456 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
18457 Same as @code{radeon-power-ac} but on BAT mode.
18459 La valeur par défaut est @samp{"low"}.
18463 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
18464 Radeon dynamic power management method (DPM). Alternatives are battery,
18467 La valeur par défaut est @samp{"performance"}.
18471 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
18472 Same as @code{radeon-dpm-state-ac} but on BAT mode.
18474 La valeur par défaut est @samp{"battery"}.
18478 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
18479 Radeon DPM performance level. Alternatives are auto, low, high.
18481 La valeur par défaut est @samp{"auto"}.
18485 @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
18486 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
18488 La valeur par défaut est @samp{"auto"}.
18492 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
18493 Wifi power saving mode.
18495 La valeur par défaut est @samp{#f}.
18499 @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
18500 Same as @code{wifi-power-ac?} but on BAT mode.
18502 La valeur par défaut est @samp{#t}.
18506 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
18507 Disable wake on LAN.
18509 La valeur par défaut est @samp{#t}.
18513 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
18514 Timeout duration in seconds before activating audio power saving on Intel
18515 HDA and AC97 devices. A value of 0 disables power saving.
18517 La valeur par défaut est @samp{0}.
18521 @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
18522 Same as @code{sound-powersave-ac} but on BAT mode.
18524 La valeur par défaut est @samp{1}.
18528 @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
18529 Disable controller in powersaving mode on Intel HDA devices.
18531 La valeur par défaut est @samp{#t}.
18535 @deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
18536 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be powered
18537 on again by releasing (and reinserting) the eject lever or by pressing the
18538 disc eject button on newer models.
18540 La valeur par défaut est @samp{#f}.
18544 @deftypevr {paramètre de @code{tlp-configuration}} string bay-device
18545 Name of the optical drive device to power off.
18547 La valeur par défaut est @samp{"sr0"}.
18551 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
18552 Runtime Power Management for PCI(e) bus devices. Alternatives are on and
18555 La valeur par défaut est @samp{"on"}.
18559 @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
18560 Same as @code{runtime-pm-ac} but on BAT mode.
18562 La valeur par défaut est @samp{"auto"}.
18566 @deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
18567 Runtime Power Management for all PCI(e) bus devices, except blacklisted
18570 La valeur par défaut est @samp{#t}.
18574 @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
18575 Exclude specified PCI(e) device addresses from Runtime Power Management.
18577 La valeur par défaut est @samp{disabled}.
18581 @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
18582 Exclude PCI(e) devices assigned to the specified drivers from Runtime Power
18587 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
18588 Enable USB autosuspend feature.
18590 La valeur par défaut est @samp{#t}.
18594 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
18595 Exclude specified devices from USB autosuspend.
18597 La valeur par défaut est @samp{disabled}.
18601 @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
18602 Exclude WWAN devices from USB autosuspend.
18604 La valeur par défaut est @samp{#t}.
18608 @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
18609 Include specified devices into USB autosuspend, even if they are already
18610 excluded by the driver or via @code{usb-blacklist-wwan?}.
18612 La valeur par défaut est @samp{disabled}.
18616 @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
18617 Enable USB autosuspend before shutdown.
18619 La valeur par défaut est @samp{disabled}.
18623 @deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
18624 Restore radio device state (bluetooth, wifi, wwan) from previous shutdown on
18627 La valeur par défaut est @samp{#f}.
18632 @cindex CPU frequency scaling with thermald
18633 @subsubheading Thermald daemon
18635 The @code{(gnu services pm)} module provides an interface to thermald, a CPU
18636 frequency scaling service which helps prevent overheating.
18638 @defvr {Variable Scheme} thermald-service-type
18639 This is the service type for @uref{https://01.org/linux-thermal-daemon/,
18640 thermald}, the Linux Thermal Daemon, which is responsible for controlling
18641 the thermal state of processors and preventing overheating.
18644 @deftp {Type de données} thermald-configuration
18645 Data type representing the configuration of @code{thermald-service-type}.
18648 @item @code{ignore-cpuid-check?} (par défaut : @code{#f})
18649 Ignore cpuid check for supported CPU models.
18651 @item @code{thermald} (par défaut : @var{thermald})
18652 Package object of thermald.
18657 @node Services audio
18658 @subsubsection Services audio
18660 The @code{(gnu services audio)} module provides a service to start MPD (the
18661 Music Player Daemon).
18664 @subsubheading Music Player Daemon
18666 The Music Player Daemon (MPD) is a service that can play music while being
18667 controlled from the local machine or over the network by a variety of
18670 The following example shows how one might run @code{mpd} as user
18671 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
18674 (service mpd-service-type
18680 @defvr {Variable Scheme} mpd-service-type
18681 The service type for @command{mpd}
18684 @deftp {Type de données} mpd-configuration
18685 Data type representing the configuration of @command{mpd}.
18688 @item @code{user} (par défaut : @code{"mpd"})
18689 The user to run mpd as.
18691 @item @code{music-dir} (par défaut : @code{"~/Music"})
18692 The directory to scan for music files.
18694 @item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
18695 The directory to store playlists.
18697 @item @code{port} (par défaut : @code{"6600"})
18698 The port to run mpd on.
18700 @item @code{address} (par défaut : @code{"any"})
18701 The address that mpd will bind to. To use a Unix domain socket, an absolute
18702 path can be specified here.
18707 @node Services de virtualisation
18708 @subsubsection Virtualization services
18710 The @code{(gnu services virtualization)} module provides services for the
18711 libvirt and virtlog daemons, as well as other virtualization-related
18714 @subsubheading Libvirt daemon
18715 @code{libvirtd} is the server side daemon component of the libvirt
18716 virtualization management system. This daemon runs on host servers and
18717 performs required management tasks for virtualized guests.
18719 @deffn {Variable Scheme} libvirt-service-type
18720 This is the type of the @uref{https://libvirt.org, libvirt daemon}. Its
18721 value must be a @code{libvirt-configuration}.
18724 (service libvirt-service-type
18725 (libvirt-configuration
18726 (unix-sock-group "libvirt")
18727 (tls-port "16555")))
18731 @c Auto-generated with (generate-libvirt-documentation)
18732 Les champs de @code{libvirt-configuration} disponibles sont :
18734 @deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
18739 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
18740 Flag listening for secure TLS connections on the public TCP/IP port. must
18741 set @code{listen} for this to have any effect.
18743 It is necessary to setup a CA and issue server certificates before using
18746 La valeur par défaut est @samp{#t}.
18750 @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
18751 Listen for unencrypted TCP connections on the public TCP/IP port. must set
18752 @code{listen} for this to have any effect.
18754 Using the TCP socket requires SASL authentication by default. Only SASL
18755 mechanisms which support data encryption are allowed. This is DIGEST_MD5
18756 and GSSAPI (Kerberos5)
18758 La valeur par défaut est @samp{#f}.
18762 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
18763 Port for accepting secure TLS connections This can be a port number, or
18766 La valeur par défaut est @samp{"16514"}.
18770 @deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
18771 Port for accepting insecure TCP connections This can be a port number, or
18774 La valeur par défaut est @samp{"16509"}.
18778 @deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
18779 IP address or hostname used for client connections.
18781 La valeur par défaut est @samp{"0.0.0.0"}.
18785 @deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
18786 Flag toggling mDNS advertisement of the libvirt service.
18788 Alternatively can disable for all services on a host by stopping the Avahi
18791 La valeur par défaut est @samp{#f}.
18795 @deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
18796 Default mDNS advertisement name. This must be unique on the immediate
18799 La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
18803 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
18804 UNIX domain socket group ownership. This can be used to allow a 'trusted'
18805 set of users access to management capabilities without becoming root.
18807 La valeur par défaut est @samp{"root"}.
18811 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
18812 UNIX socket permissions for the R/O socket. This is used for monitoring VM
18815 La valeur par défaut est @samp{"0777"}.
18819 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
18820 UNIX socket permissions for the R/W socket. Default allows only root. If
18821 PolicyKit is enabled on the socket, the default will change to allow
18822 everyone (eg, 0777)
18824 La valeur par défaut est @samp{"0770"}.
18828 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
18829 UNIX socket permissions for the admin socket. Default allows only owner
18830 (root), do not change it unless you are sure to whom you are exposing the
18833 La valeur par défaut est @samp{"0777"}.
18837 @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
18838 The directory in which sockets will be found/created.
18840 La valeur par défaut est @samp{"/var/run/libvirt"}.
18844 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
18845 Authentication scheme for UNIX read-only sockets. By default socket
18846 permissions allow anyone to connect
18848 La valeur par défaut est @samp{"polkit"}.
18852 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
18853 Authentication scheme for UNIX read-write sockets. By default socket
18854 permissions only allow root. If PolicyKit support was compiled into
18855 libvirt, the default will be to use 'polkit' auth.
18857 La valeur par défaut est @samp{"polkit"}.
18861 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
18862 Authentication scheme for TCP sockets. If you don't enable SASL, then all
18863 TCP traffic is cleartext. Don't do this outside of a dev/test scenario.
18865 La valeur par défaut est @samp{"sasl"}.
18869 @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
18870 Authentication scheme for TLS sockets. TLS sockets already have encryption
18871 provided by the TLS layer, and limited authentication is done by
18874 It is possible to make use of any SASL authentication mechanism as well, by
18875 using 'sasl' for this option
18877 La valeur par défaut est @samp{"none"}.
18881 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
18882 API access control scheme.
18884 By default an authenticated user is allowed access to all APIs. Access
18885 drivers can place restrictions on this.
18887 La valeur par défaut est @samp{()}.
18891 @deftypevr {paramètre de @code{libvirt-configuration}} string key-file
18892 Server key file path. If set to an empty string, then no private key is
18895 La valeur par défaut est @samp{""}.
18899 @deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
18900 Server key file path. If set to an empty string, then no certificate is
18903 La valeur par défaut est @samp{""}.
18907 @deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
18908 Server key file path. If set to an empty string, then no CA certificate is
18911 La valeur par défaut est @samp{""}.
18915 @deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
18916 Certificate revocation list path. If set to an empty string, then no CRL is
18919 La valeur par défaut est @samp{""}.
18923 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
18924 Disable verification of our own server certificates.
18926 When libvirtd starts it performs some sanity checks against its own
18929 La valeur par défaut est @samp{#f}.
18933 @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
18934 Disable verification of client certificates.
18936 Client certificate verification is the primary authentication mechanism.
18937 Any client which does not present a certificate signed by the CA will be
18940 La valeur par défaut est @samp{#f}.
18944 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
18945 Whitelist of allowed x509 Distinguished Name.
18947 La valeur par défaut est @samp{()}.
18951 @deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
18952 Whitelist of allowed SASL usernames. The format for username depends on the
18953 SASL authentication mechanism.
18955 La valeur par défaut est @samp{()}.
18959 @deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
18960 Override the compile time default TLS priority string. The default is
18961 usually "NORMAL" unless overridden at build time. Only set this is it is
18962 desired for libvirt to deviate from the global default settings.
18964 La valeur par défaut est @samp{"NORMAL"}.
18968 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
18969 Maximum number of concurrent client connections to allow over all sockets
18972 La valeur par défaut est @samp{5000}.
18976 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
18977 Maximum length of queue of connections waiting to be accepted by the
18978 daemon. Note, that some protocols supporting retransmission may obey this
18979 so that a later reattempt at connection succeeds.
18981 La valeur par défaut est @samp{1000}.
18985 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
18986 Maximum length of queue of accepted but not yet authenticated clients. Set
18987 this to zero to turn this feature off
18989 La valeur par défaut est @samp{20}.
18993 @deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
18994 Number of workers to start up initially.
18996 La valeur par défaut est @samp{5}.
19000 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
19001 Maximum number of worker threads.
19003 If the number of active clients exceeds @code{min-workers}, then more
19004 threads are spawned, up to max_workers limit. Typically you'd want
19005 max_workers to equal maximum number of clients allowed.
19007 La valeur par défaut est @samp{20}.
19011 @deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
19012 Number of priority workers. If all workers from above pool are stuck, some
19013 calls marked as high priority (notably domainDestroy) can be executed in
19016 La valeur par défaut est @samp{5}.
19020 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
19021 Total global limit on concurrent RPC calls.
19023 La valeur par défaut est @samp{20}.
19027 @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
19028 Limit on concurrent requests from a single client connection. To avoid one
19029 client monopolizing the server this should be a small fraction of the global
19030 max_requests and max_workers parameter.
19032 La valeur par défaut est @samp{5}.
19036 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
19037 Same as @code{min-workers} but for the admin interface.
19039 La valeur par défaut est @samp{1}.
19043 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
19044 Same as @code{max-workers} but for the admin interface.
19046 La valeur par défaut est @samp{5}.
19050 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
19051 Same as @code{max-clients} but for the admin interface.
19053 La valeur par défaut est @samp{5}.
19057 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
19058 Same as @code{max-queued-clients} but for the admin interface.
19060 La valeur par défaut est @samp{5}.
19064 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
19065 Same as @code{max-client-requests} but for the admin interface.
19067 La valeur par défaut est @samp{5}.
19071 @deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
19072 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19074 La valeur par défaut est @samp{3}.
19078 @deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
19081 A filter allows to select a different logging level for a given category of
19082 logs The format for a filter is one of:
19093 where @code{name} is a string which is matched against the category given in
19094 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
19095 "remote", "qemu", or "util.json" (the name in the filter can be a substring
19096 of the full category name, in order to match multiple similar categories),
19097 the optional "+" prefix tells libvirt to log stack trace for each message
19098 matching name, and @code{x} is the minimal level where matching messages
19116 Multiple filters can be defined in a single filters statement, they just
19117 need to be separated by spaces.
19119 La valeur par défaut est @samp{"3:remote 4:event"}.
19123 @deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
19126 An output is one of the places to save logging information The format for an
19131 output goes to stderr
19133 @item x:syslog:name
19134 use syslog for the output and use the given name as the ident
19136 @item x:file:file_path
19137 output to a file, with the given filepath
19140 output to journald logging system
19144 In all case the x prefix is the minimal level, acting as a filter
19161 Multiple outputs can be defined, they just need to be separated by spaces.
19163 La valeur par défaut est @samp{"3:stderr"}.
19167 @deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
19168 Allows usage of the auditing subsystem to be altered
19172 0: disable all auditing
19175 1: enable auditing, only if enabled on host
19178 2: enable auditing, and exit if disabled on host.
19182 La valeur par défaut est @samp{1}.
19186 @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
19187 Send audit messages via libvirt logging infrastructure.
19189 La valeur par défaut est @samp{#f}.
19193 @deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
19194 Host UUID. UUID must not have all digits be the same.
19196 La valeur par défaut est @samp{""}.
19200 @deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
19201 Source to read host UUID.
19205 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
19208 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
19212 If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
19215 La valeur par défaut est @samp{"smbios"}.
19219 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
19220 A keepalive message is sent to a client after @code{keepalive_interval}
19221 seconds of inactivity to check if the client is still responding. If set to
19222 -1, libvirtd will never send keepalive requests; however clients can still
19223 send them and the daemon will send responses.
19225 La valeur par défaut est @samp{5}.
19229 @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
19230 Maximum number of keepalive messages that are allowed to be sent to the
19231 client without getting any response before the connection is considered
19234 In other words, the connection is automatically closed approximately after
19235 @code{keepalive_interval * (keepalive_count + 1)} seconds since the last
19236 message received from the client. When @code{keepalive-count} is set to 0,
19237 connections will be automatically closed after @code{keepalive-interval}
19238 seconds of inactivity without sending any keepalive messages.
19240 La valeur par défaut est @samp{5}.
19244 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
19245 Same as above but for admin interface.
19247 La valeur par défaut est @samp{5}.
19251 @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
19252 Same as above but for admin interface.
19254 La valeur par défaut est @samp{5}.
19258 @deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
19259 Timeout for Open vSwitch calls.
19261 The @code{ovs-vsctl} utility is used for the configuration and its timeout
19262 option is set by default to 5 seconds to avoid potential infinite waits
19265 La valeur par défaut est @samp{5}.
19269 @c %end of autogenerated docs
19271 @subsubheading Virtlog daemon
19272 The virtlogd service is a server side daemon component of libvirt that is
19273 used to manage logs from virtual machine consoles.
19275 This daemon is not used directly by libvirt client applications, rather it
19276 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
19277 standalone daemon, the main @code{libvirtd} daemon can be restarted without
19278 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
19279 itself upon receiving @code{SIGUSR1}, to allow live upgrades without
19282 @deffn {Variable Scheme} virtlog-service-type
19283 This is the type of the virtlog daemon. Its value must be a
19284 @code{virtlog-configuration}.
19287 (service virtlog-service-type
19288 (virtlog-configuration
19289 (max-clients 1000)))
19293 @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
19294 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19296 La valeur par défaut est @samp{3}.
19300 @deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
19303 A filter allows to select a different logging level for a given category of
19304 logs The format for a filter is one of:
19315 where @code{name} is a string which is matched against the category given in
19316 the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
19317 "remote", "qemu", or "util.json" (the name in the filter can be a substring
19318 of the full category name, in order to match multiple similar categories),
19319 the optional "+" prefix tells libvirt to log stack trace for each message
19320 matching name, and @code{x} is the minimal level where matching messages
19338 Multiple filters can be defined in a single filters statement, they just
19339 need to be separated by spaces.
19341 La valeur par défaut est @samp{"3:remote 4:event"}.
19345 @deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
19348 An output is one of the places to save logging information The format for an
19353 output goes to stderr
19355 @item x:syslog:name
19356 use syslog for the output and use the given name as the ident
19358 @item x:file:file_path
19359 output to a file, with the given filepath
19362 output to journald logging system
19366 In all case the x prefix is the minimal level, acting as a filter
19383 Multiple outputs can be defined, they just need to be separated by spaces.
19385 La valeur par défaut est @samp{"3:stderr"}.
19389 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
19390 Maximum number of concurrent client connections to allow over all sockets
19393 La valeur par défaut est @samp{1024}.
19397 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
19398 Maximum file size before rolling over.
19400 Defaults to @samp{2MB}
19404 @deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
19405 Maximum number of backup files to keep.
19407 Defaults to @samp{3}
19411 @subsubheading Transparent Emulation with QEMU
19414 @cindex @code{binfmt_misc}
19415 @code{qemu-binfmt-service-type} provides support for transparent emulation
19416 of program binaries built for different architectures---e.g., it allows you
19417 to transparently execute an ARMv7 program on an x86_64 machine. It achieves
19418 this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
19419 @code{binfmt_misc} feature of the kernel Linux.
19421 @defvr {Variable Scheme} qemu-binfmt-service-type
19422 This is the type of the QEMU/binfmt service for transparent emulation. Its
19423 value must be a @code{qemu-binfmt-configuration} object, which specifies the
19424 QEMU package to use as well as the architecture we want to emulated:
19427 (service qemu-binfmt-service-type
19428 (qemu-binfmt-configuration
19429 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
19432 In this example, we enable transparent emulation for the ARM and aarch64
19433 platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
19434 @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
19435 @command{herd} command,, shepherd, The GNU Shepherd Manual}).
19438 @deftp {Type de données} qemu-binfmt-configuration
19439 This is the configuration for the @code{qemu-binfmt} service.
19442 @item @code{platforms} (par défaut : @code{'()})
19443 The list of emulated QEMU platforms. Each item must be a @dfn{platform
19444 object} as returned by @code{lookup-qemu-platforms} (see below).
19446 @item @code{guix-support?} (par défaut : @code{#f})
19447 When it is true, QEMU and all its dependencies are added to the build
19448 environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon,
19449 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
19450 handlers to be used within the build environment, which in turn means that
19451 you can transparently build programs for another architecture.
19453 For example, let's suppose you're on an x86_64 machine and you have this
19457 (service qemu-binfmt-service-type
19458 (qemu-binfmt-configuration
19459 (platforms (lookup-qemu-platforms "arm"))
19460 (guix-support? #t)))
19466 guix build -s armhf-linux inkscape
19470 and it will build Inkscape for ARMv7 @emph{as if it were a native build},
19471 transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
19472 like to test a package build for an architecture you don't have access to!
19474 @item @code{qemu} (par défaut : @code{qemu})
19475 Le paquet QEMU à utiliser.
19479 @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
19480 Return the list of QEMU platform objects corresponding to
19481 @var{platforms}@dots{}. @var{platforms} must be a list of strings
19482 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
19483 @code{"mips64el"}, and so on.
19486 @deffn {Procédure Scheme} qemu-platform? @var{obj}
19487 Return true if @var{obj} is a platform object.
19490 @deffn {Procédure Scheme} qemu-platform-name @var{platform}
19491 Return the name of @var{platform}---a string such as @code{"arm"}.
19494 @node Services de contrôle de version
19495 @subsubsection Services de contrôle de version
19497 The @code{(gnu services version-control)} module provides a service to allow
19498 remote access to local Git repositories. There are three options: the
19499 @code{git-daemon-service}, which provides access to repositories via the
19500 @code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
19501 server to proxy some requests to @code{git-http-backend}, or providing a web
19502 interface with @code{cgit-service-type}.
19504 @deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
19506 Return a service that runs @command{git daemon}, a simple TCP server to
19507 expose repositories over the Git protocol for anonymous access.
19509 The optional @var{config} argument should be a
19510 @code{<git-daemon-configuration>} object, by default it allows read-only
19511 access to exported@footnote{By creating the magic file
19512 "git-daemon-export-ok" in the repository directory.} repositories under
19517 @deftp {Type de données} git-daemon-configuration
19518 Data type representing the configuration for @code{git-daemon-service}.
19521 @item @code{package} (par défaut : @var{git})
19522 Package object of the Git distributed version control system.
19524 @item @code{export-all?} (par défaut : @var{#f})
19525 Whether to allow access for all Git repositories, even if they do not have
19526 the @file{git-daemon-export-ok} file.
19528 @item @code{base-path} (default: @file{/srv/git})
19529 Whether to remap all the path requests as relative to the given path. If
19530 you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
19531 you later try to pull @code{git://example.com/hello.git}, git daemon will
19532 interpret the path as @code{/srv/git/hello.git}.
19534 @item @code{user-path} (par défaut : @var{#f})
19535 Whether to allow @code{~user} notation to be used in requests. When
19536 specified with empty string, requests to @code{git://host/~alice/foo} is
19537 taken as a request to access @code{foo} repository in the home directory of
19538 user @code{alice}. If @var{(user-path "path")} is specified, the same
19539 request is taken as a request to access @code{path/foo} repository in the
19540 home directory of user @code{alice}.
19542 @item @code{listen} (par défaut : @var{'()})
19543 Whether to listen on specific IP addresses or hostnames, defaults to all.
19545 @item @code{port} (par défaut : @var{#f})
19546 Whether to listen on an alternative port, which defaults to 9418.
19548 @item @code{whitelist} (par défaut : @var{'()})
19549 If not empty, only allow access to this list of directories.
19551 @item @code{extra-options} (par défaut : @var{'()})
19552 Extra options will be passed to @code{git daemon}, please run @command{man
19553 git-daemon} for more information.
19558 The @code{git://} protocol lacks authentication. When you pull from a
19559 repository fetched via @code{git://}, you don't know that the data you
19560 receive was modified is really coming from the specified host, and you have
19561 your connection is subject to eavesdropping. It's better to use an
19562 authenticated and encrypted transport, such as @code{https}. Although Git
19563 allows you to serve repositories using unsophisticated file-based web
19564 servers, there is a faster protocol implemented by the
19565 @code{git-http-backend} program. This program is the back-end of a proper
19566 Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon.
19568 Guix has a separate configuration data type for serving Git repositories
19571 @deftp {Type de données} git-http-configuration
19572 Data type representing the configuration for @code{git-http-service}.
19575 @item @code{package} (par défaut : @var{git})
19576 Package object of the Git distributed version control system.
19578 @item @code{git-root} (default: @file{/srv/git})
19579 Directory containing the Git repositories to expose to the world.
19581 @item @code{export-all?} (par défaut : @var{#f})
19582 Whether to expose access for all Git repositories in @var{git-root}, even if
19583 they do not have the @file{git-daemon-export-ok} file.
19585 @item @code{uri-path} (default: @file{/git/})
19586 Path prefix for Git access. With the default @code{/git/} prefix, this will
19587 map @code{http://@var{server}/git/@var{repo}.git} to
19588 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
19589 this prefix are not passed on to this Git instance.
19591 @item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
19592 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}.
19596 There is no @code{git-http-service-type}, currently; instead you can create
19597 an @code{nginx-location-configuration} from a @code{git-http-configuration}
19598 and then add that location to a web server.
19600 @deffn {Procédure Scheme} git-http-nginx-location-configuration @
19601 [config=(git-http-configuration)] Compute an
19602 @code{nginx-location-configuration} that corresponds to the given Git http
19603 configuration. An example nginx service definition to serve the default
19604 @file{/srv/git} over HTTPS might be:
19607 (service nginx-service-type
19608 (nginx-configuration
19611 (nginx-server-configuration
19612 (listen '("443 ssl"))
19613 (server-name "git.my-host.org")
19615 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
19616 (ssl-certificate-key
19617 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
19620 (git-http-nginx-location-configuration
19621 (git-http-configuration (uri-path "/"))))))))))
19624 This example assumes that you are using Let's Encrypt to get your TLS
19625 certificate. @xref{Services de certificats}. The default @code{certbot}
19626 service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
19627 You will also need to add an @code{fcgiwrap} proxy to your system services.
19628 @xref{Services web}.
19631 @subsubheading Cgit Service
19633 @cindex Cgit service
19634 @cindex Git, web interface
19635 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
19636 repositories written in C.
19638 The following example will configure the service with default values. By
19639 default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
19642 (service cgit-service-type)
19645 The @code{file-object} type designates either a file-like object
19646 (@pxref{G-Expressions, file-like objects}) or a string.
19648 @c %start of fragment
19650 Les champs de @code{cgit-configuration} disponibles sont :
19652 @deftypevr {paramètre de @code{cgit-configuration}} package package
19657 @deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
19658 NGINX configuration.
19662 @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
19663 Specifies a command which will be invoked to format the content of about
19664 pages (both top-level and for each repository).
19666 La valeur par défaut est @samp{""}.
19670 @deftypevr {paramètre de @code{cgit-configuration}} string agefile
19671 Specifies a path, relative to each repository path, which can be used to
19672 specify the date and time of the youngest commit in the repository.
19674 La valeur par défaut est @samp{""}.
19678 @deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
19679 Specifies a command that will be invoked for authenticating repository
19682 La valeur par défaut est @samp{""}.
19686 @deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
19687 Flag which, when set to @samp{age}, enables date ordering in the branch ref
19688 list, and when set @samp{name} enables ordering by branch name.
19690 La valeur par défaut est @samp{"name"}.
19694 @deftypevr {paramètre de @code{cgit-configuration}} string cache-root
19695 Path used to store the cgit cache entries.
19697 La valeur par défaut est @samp{"/var/cache/cgit"}.
19701 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
19702 Number which specifies the time-to-live, in minutes, for the cached version
19703 of repository pages accessed with a fixed SHA1.
19705 La valeur par défaut est @samp{-1}.
19709 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
19710 Number which specifies the time-to-live, in minutes, for the cached version
19711 of repository pages accessed without a fixed SHA1.
19713 La valeur par défaut est @samp{5}.
19717 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
19718 Number which specifies the time-to-live, in minutes, for the cached version
19719 of the repository summary page.
19721 La valeur par défaut est @samp{5}.
19725 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
19726 Number which specifies the time-to-live, in minutes, for the cached version
19727 of the repository index page.
19729 La valeur par défaut est @samp{5}.
19733 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
19734 Number which specifies the time-to-live, in minutes, for the result of
19735 scanning a path for Git repositories.
19737 La valeur par défaut est @samp{15}.
19741 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
19742 Number which specifies the time-to-live, in minutes, for the cached version
19743 of the repository about page.
19745 La valeur par défaut est @samp{15}.
19749 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
19750 Number which specifies the time-to-live, in minutes, for the cached version
19753 La valeur par défaut est @samp{5}.
19757 @deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
19758 The maximum number of entries in the cgit cache. When set to @samp{0},
19759 caching is disabled.
19761 La valeur par défaut est @samp{0}.
19765 @deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
19766 Sort items in the repo list case sensitively.
19768 La valeur par défaut est @samp{#t}.
19772 @deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
19773 List of common prefixes which, when combined with a repository URL,
19774 generates valid clone URLs for the repository.
19776 La valeur par défaut est @samp{()}.
19780 @deftypevr {paramètre de @code{cgit-configuration}} list clone-url
19781 List of @code{clone-url} templates.
19783 La valeur par défaut est @samp{()}.
19787 @deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
19788 Command which will be invoked to format commit messages.
19790 La valeur par défaut est @samp{""}.
19794 @deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
19795 Flag which, when set to @samp{date}, enables strict date ordering in the
19796 commit log, and when set to @samp{topo} enables strict topological ordering.
19798 La valeur par défaut est @samp{"git log"}.
19802 @deftypevr {paramètre de @code{cgit-configuration}} file-object css
19803 URL which specifies the css document to include in all cgit pages.
19805 La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
19809 @deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
19810 Specifies a command which will be invoked to format names and email address
19811 of committers, authors, and taggers, as represented in various places
19812 throughout the cgit interface.
19814 La valeur par défaut est @samp{""}.
19818 @deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
19819 Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
19820 suitable for embedding in other HTML pages.
19822 La valeur par défaut est @samp{#f}.
19826 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
19827 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
19828 history graph to the left of the commit messages in the repository log page.
19830 La valeur par défaut est @samp{#f}.
19834 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
19835 Flag which, when set to @samp{#t}, allows all filter settings to be
19836 overridden in repository-specific cgitrc files.
19838 La valeur par défaut est @samp{#f}.
19842 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
19843 Flag which, when set to @samp{#t}, allows users to follow a file in the log
19846 La valeur par défaut est @samp{#f}.
19850 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
19851 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
19853 La valeur par défaut est @samp{#t}.
19857 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
19858 Flag which, when set to @samp{#t}, will make cgit generate extra links
19859 "summary", "commit", "tree" for each repo in the repository index.
19861 La valeur par défaut est @samp{#f}.
19865 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
19866 Flag which, when set to @samp{#t}, will make cgit display the owner of each
19867 repo in the repository index.
19869 La valeur par défaut est @samp{#t}.
19873 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
19874 Flag which, when set to @samp{#t}, will make cgit print the number of
19875 modified files for each commit on the repository log page.
19877 La valeur par défaut est @samp{#f}.
19881 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
19882 Flag which, when set to @samp{#t}, will make cgit print the number of added
19883 and removed lines for each commit on the repository log page.
19885 La valeur par défaut est @samp{#f}.
19889 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
19890 Flag which, when set to @code{#t}, will make cgit display remote branches in
19891 the summary and refs views.
19893 La valeur par défaut est @samp{#f}.
19897 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
19898 Flag which, when set to @code{1}, will make cgit use the subject of the
19899 parent commit as link text when generating links to parent commits in commit
19902 La valeur par défaut est @samp{#f}.
19906 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
19907 Flag which, when set to @samp{#t}, will make cgit use the subject of the
19908 parent commit as link text when generating links to parent commits in commit
19911 La valeur par défaut est @samp{#f}.
19915 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
19916 Flag which, when set to @samp{#t}, will make cgit generate linenumber links
19917 for plaintext blobs printed in the tree view.
19919 La valeur par défaut est @samp{#t}.
19923 @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
19924 Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
19925 any repo specific settings.
19927 La valeur par défaut est @samp{#f}.
19931 @deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
19932 URL used as link to a shortcut icon for cgit.
19934 La valeur par défaut est @samp{"/favicon.ico"}.
19938 @deftypevr {paramètre de @code{cgit-configuration}} string footer
19939 The content of the file specified with this option will be included verbatim
19940 at the bottom of all pages (i.e. it replaces the standard "generated by..."
19943 La valeur par défaut est @samp{""}.
19947 @deftypevr {paramètre de @code{cgit-configuration}} string head-include
19948 The content of the file specified with this option will be included verbatim
19949 in the HTML HEAD section on all pages.
19951 La valeur par défaut est @samp{""}.
19955 @deftypevr {paramètre de @code{cgit-configuration}} string header
19956 The content of the file specified with this option will be included verbatim
19957 at the top of all pages.
19959 La valeur par défaut est @samp{""}.
19963 @deftypevr {paramètre de @code{cgit-configuration}} file-object include
19964 Name of a configfile to include before the rest of the current config- file
19967 La valeur par défaut est @samp{""}.
19971 @deftypevr {paramètre de @code{cgit-configuration}} string index-header
19972 The content of the file specified with this option will be included verbatim
19973 above the repository index.
19975 La valeur par défaut est @samp{""}.
19979 @deftypevr {paramètre de @code{cgit-configuration}} string index-info
19980 The content of the file specified with this option will be included verbatim
19981 below the heading on the repository index page.
19983 La valeur par défaut est @samp{""}.
19987 @deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
19988 Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
19989 the servers timezone.
19991 La valeur par défaut est @samp{#f}.
19995 @deftypevr {paramètre de @code{cgit-configuration}} file-object logo
19996 URL which specifies the source of an image which will be used as a logo on
19999 La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
20003 @deftypevr {paramètre de @code{cgit-configuration}} string logo-link
20004 URL loaded when clicking on the cgit logo image.
20006 La valeur par défaut est @samp{""}.
20010 @deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
20011 Command which will be invoked to format the Owner column of the main page.
20013 La valeur par défaut est @samp{""}.
20017 @deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
20018 Number of items to display in atom feeds view.
20020 La valeur par défaut est @samp{10}.
20024 @deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
20025 Number of entries to list per page in "log" view.
20027 La valeur par défaut est @samp{50}.
20031 @deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
20032 Number of commit message characters to display in "log" view.
20034 La valeur par défaut est @samp{80}.
20038 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
20039 Specifies the number of entries to list per page on the repository index
20042 La valeur par défaut est @samp{50}.
20046 @deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
20047 Specifies the maximum number of repo description characters to display on
20048 the repository index page.
20050 La valeur par défaut est @samp{80}.
20054 @deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
20055 Specifies the maximum size of a blob to display HTML for in KBytes.
20057 La valeur par défaut est @samp{0}.
20061 @deftypevr {paramètre de @code{cgit-configuration}} string max-stats
20062 Maximum statistics period. Valid values are @samp{week},@samp{month},
20063 @samp{quarter} and @samp{year}.
20065 La valeur par défaut est @samp{""}.
20069 @deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
20070 Mimetype for the specified filename extension.
20072 La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
20073 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
20074 (svg "image/svg+xml"))}.
20078 @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
20079 Specifies the file to use for automatic mimetype lookup.
20081 La valeur par défaut est @samp{""}.
20085 @deftypevr {paramètre de @code{cgit-configuration}} string module-link
20086 Text which will be used as the formatstring for a hyperlink when a submodule
20087 is printed in a directory listing.
20089 La valeur par défaut est @samp{""}.
20093 @deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
20094 If set to the value @samp{#t} caching will be disabled.
20096 La valeur par défaut est @samp{#f}.
20100 @deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
20101 If set to @samp{#t} showing full author email addresses will be disabled.
20103 La valeur par défaut est @samp{#f}.
20107 @deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
20108 Flag which, when set to @samp{#t}, will make cgit omit the standard header
20111 La valeur par défaut est @samp{#f}.
20115 @deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
20116 A list of subdirectories inside of @code{repository-directory}, relative to
20117 it, that should loaded as Git repositories. An empty list means that all
20118 subdirectories will be loaded.
20120 La valeur par défaut est @samp{()}.
20124 @deftypevr {paramètre de @code{cgit-configuration}} file-object readme
20125 Text which will be used as default value for @code{cgit-repo-readme}.
20127 La valeur par défaut est @samp{""}.
20131 @deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
20132 If set to @code{#t} and @code{repository-directory} is enabled, if any
20133 repositories are found with a suffix of @code{.git}, this suffix will be
20134 removed for the URL and name.
20136 La valeur par défaut est @samp{#f}.
20140 @deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
20141 Maximum number of files to consider when detecting renames.
20143 La valeur par défaut est @samp{-1}.
20147 @deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
20148 The way in which repositories in each section are sorted.
20150 La valeur par défaut est @samp{""}.
20154 @deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
20155 Text used as content for the @code{robots} meta-tag.
20157 La valeur par défaut est @samp{("noindex" "nofollow")}.
20161 @deftypevr {paramètre de @code{cgit-configuration}} string root-desc
20162 Text printed below the heading on the repository index page.
20164 La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
20168 @deftypevr {paramètre de @code{cgit-configuration}} string root-readme
20169 The content of the file specified with this option will be included verbatim
20170 below thef "about" link on the repository index page.
20172 La valeur par défaut est @samp{""}.
20176 @deftypevr {paramètre de @code{cgit-configuration}} string root-title
20177 Text printed as heading on the repository index page.
20179 La valeur par défaut est @samp{""}.
20183 @deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
20184 If set to @samp{#t} and repository-directory is enabled,
20185 repository-directory will recurse into directories whose name starts with a
20186 period. Otherwise, repository-directory will stay away from such
20187 directories, considered as "hidden". Note that this does not apply to the
20188 ".git" directory in non-bare repos.
20190 La valeur par défaut est @samp{#f}.
20194 @deftypevr {paramètre de @code{cgit-configuration}} list snapshots
20195 Text which specifies the default set of snapshot formats that cgit generates
20198 La valeur par défaut est @samp{()}.
20202 @deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
20203 Name of the directory to scan for repositories (represents
20206 La valeur par défaut est @samp{"/srv/git"}.
20210 @deftypevr {paramètre de @code{cgit-configuration}} string section
20211 The name of the current repository section - all repositories defined after
20212 this option will inherit the current section name.
20214 La valeur par défaut est @samp{""}.
20218 @deftypevr {paramètre de @code{cgit-configuration}} string section-sort
20219 Flag which, when set to @samp{1}, will sort the sections on the repository
20222 La valeur par défaut est @samp{""}.
20226 @deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
20227 A number which, if defined prior to repository-directory, specifies how many
20228 path elements from each repo path to use as a default section name.
20230 La valeur par défaut est @samp{0}.
20234 @deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
20235 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
20238 La valeur par défaut est @samp{#f}.
20242 @deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
20243 Specifies a command which will be invoked to format plaintext blobs in the
20246 La valeur par défaut est @samp{""}.
20250 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
20251 Specifies the number of branches to display in the repository "summary"
20254 La valeur par défaut est @samp{10}.
20258 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
20259 Specifies the number of log entries to display in the repository "summary"
20262 La valeur par défaut est @samp{10}.
20266 @deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
20267 Specifies the number of tags to display in the repository "summary" view.
20269 La valeur par défaut est @samp{10}.
20273 @deftypevr {paramètre de @code{cgit-configuration}} string strict-export
20274 Filename which, if specified, needs to be present within the repository for
20275 cgit to allow access to that repository.
20277 La valeur par défaut est @samp{""}.
20281 @deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
20282 URL which, if specified, will be used as root for all cgit links.
20284 La valeur par défaut est @samp{"/"}.
20288 @deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
20289 A list of @dfn{cgit-repo} records to use with config.
20291 La valeur par défaut est @samp{()}.
20293 Les champs de @code{repository-cgit-configuration} disponibles sont :
20295 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
20296 A mask of snapshot formats for this repo that cgit generates links for,
20297 restricted by the global @code{snapshots} setting.
20299 La valeur par défaut est @samp{()}.
20303 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
20304 Override the default @code{source-filter}.
20306 La valeur par défaut est @samp{""}.
20310 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
20311 The relative URL used to access the repository.
20313 La valeur par défaut est @samp{""}.
20317 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
20318 Override the default @code{about-filter}.
20320 La valeur par défaut est @samp{""}.
20324 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
20325 Flag which, when set to @samp{age}, enables date ordering in the branch ref
20326 list, and when set to @samp{name} enables ordering by branch name.
20328 La valeur par défaut est @samp{""}.
20332 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
20333 A list of URLs which can be used to clone repo.
20335 La valeur par défaut est @samp{()}.
20339 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
20340 Override the default @code{commit-filter}.
20342 La valeur par défaut est @samp{""}.
20346 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
20347 Flag which, when set to @samp{date}, enables strict date ordering in the
20348 commit log, and when set to @samp{topo} enables strict topological ordering.
20350 La valeur par défaut est @samp{""}.
20354 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
20355 The name of the default branch for this repository. If no such branch
20356 exists in the repository, the first branch name (when sorted) is used as
20357 default instead. By default branch pointed to by HEAD, or "master" if there
20358 is no suitable HEAD.
20360 La valeur par défaut est @samp{""}.
20364 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
20365 The value to show as repository description.
20367 La valeur par défaut est @samp{""}.
20371 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
20372 The value to show as repository homepage.
20374 La valeur par défaut est @samp{""}.
20378 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
20379 Override the default @code{email-filter}.
20381 La valeur par défaut est @samp{""}.
20385 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
20386 A flag which can be used to disable the global setting
20387 @code{enable-commit-graph?}.
20389 La valeur par défaut est @samp{disabled}.
20393 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
20394 A flag which can be used to disable the global setting
20395 @code{enable-log-filecount?}.
20397 La valeur par défaut est @samp{disabled}.
20401 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
20402 A flag which can be used to disable the global setting
20403 @code{enable-log-linecount?}.
20405 La valeur par défaut est @samp{disabled}.
20409 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
20410 Flag which, when set to @code{#t}, will make cgit display remote branches in
20411 the summary and refs views.
20413 La valeur par défaut est @samp{disabled}.
20417 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
20418 A flag which can be used to override the global setting
20419 @code{enable-subject-links?}.
20421 La valeur par défaut est @samp{disabled}.
20425 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
20426 A flag which can be used to override the global setting
20427 @code{enable-html-serving?}.
20429 La valeur par défaut est @samp{disabled}.
20433 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
20434 Flag which, when set to @code{#t}, hides the repository from the repository
20437 La valeur par défaut est @samp{#f}.
20441 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
20442 Flag which, when set to @samp{#t}, ignores the repository.
20444 La valeur par défaut est @samp{#f}.
20448 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
20449 URL which specifies the source of an image which will be used as a logo on
20452 La valeur par défaut est @samp{""}.
20456 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
20457 URL loaded when clicking on the cgit logo image.
20459 La valeur par défaut est @samp{""}.
20463 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
20464 Override the default @code{owner-filter}.
20466 La valeur par défaut est @samp{""}.
20470 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
20471 Text which will be used as the formatstring for a hyperlink when a submodule
20472 is printed in a directory listing. The arguments for the formatstring are
20473 the path and SHA1 of the submodule commit.
20475 La valeur par défaut est @samp{""}.
20479 @deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
20480 Text which will be used as the formatstring for a hyperlink when a submodule
20481 with the specified subdirectory path is printed in a directory listing.
20483 La valeur par défaut est @samp{()}.
20487 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
20488 Override the default maximum statistics period.
20490 La valeur par défaut est @samp{""}.
20494 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
20495 The value to show as repository name.
20497 La valeur par défaut est @samp{""}.
20501 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
20502 A value used to identify the owner of the repository.
20504 La valeur par défaut est @samp{""}.
20508 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
20509 An absolute path to the repository directory.
20511 La valeur par défaut est @samp{""}.
20515 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
20516 A path (relative to repo) which specifies a file to include verbatim as the
20517 "About" page for this repo.
20519 La valeur par défaut est @samp{""}.
20523 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
20524 The name of the current repository section - all repositories defined after
20525 this option will inherit the current section name.
20527 La valeur par défaut est @samp{""}.
20531 @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
20532 Extra options will be appended to cgitrc file.
20534 La valeur par défaut est @samp{()}.
20540 @deftypevr {paramètre de @code{cgit-configuration}} list extra-options
20541 Extra options will be appended to cgitrc file.
20543 La valeur par défaut est @samp{()}.
20548 @c %end of fragment
20550 However, it could be that you just want to get a @code{cgitrc} up and
20551 running. In that case, you can pass an @code{opaque-cgit-configuration} as
20552 a record to @code{cgit-service-type}. As its name indicates, an opaque
20553 configuration does not have easy reflective capabilities.
20555 Les champs de @code{opaque-cgit-configuration} disponibles sont :
20557 @deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
20561 @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
20562 The contents of the @code{cgitrc}, as a string.
20565 For example, if your @code{cgitrc} is just the empty string, you could
20566 instantiate a cgit service like this:
20569 (service cgit-service-type
20570 (opaque-cgit-configuration
20575 @node Services de jeu
20576 @subsubsection Services de jeu
20578 @subsubheading The Battle for Wesnoth Service
20580 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based
20581 tactical strategy game, with several single player campaigns, and
20582 multiplayer games (both networked and local).
20584 @defvar {Variable Scheme} wesnothd-service-type
20585 Service type for the wesnothd service. Its value must be a
20586 @code{wesnothd-configuration} object. To run wesnothd in the default
20587 configuration, instantiate it as:
20590 (service wesnothd-service-type)
20594 @deftp {Type de données} wesnothd-configuration
20595 Data type representing the configuration of @command{wesnothd}.
20598 @item @code{package} (par défaut : @code{wesnoth-server})
20599 The wesnoth server package to use.
20601 @item @code{port} (par défaut : @code{15000})
20602 The port to bind the server to.
20606 @node Services divers
20607 @subsubsection Services divers
20609 @cindex fingerprint
20610 @subsubheading Fingerprint Service
20612 The @code{(gnu services fingerprint)} module provides a DBus service to read
20613 and identify fingerprints via a fingerprint sensor.
20615 @defvr {Scheme Variable} fprintd-service-type
20616 The service type for @command{fprintd}, which provides the fingerprint
20617 reading capability.
20620 (service fprintd-service-type)
20625 @subsubheading System Control Service
20627 The @code{(gnu services sysctl)} provides a service to configure kernel
20628 parameters at boot.
20630 @defvr {Variable Scheme} sysctl-service-type
20631 The service type for @command{sysctl}, which modifies kernel parameters
20632 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
20636 (service sysctl-service-type
20637 (sysctl-configuration
20638 (settings '(("net.ipv4.ip_forward" . "1")))))
20642 @deftp {Type de données} sysctl-configuration
20643 The data type representing the configuration of @command{sysctl}.
20646 @item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
20647 The @command{sysctl} executable to use.
20649 @item @code{settings} (par défaut : @code{'()})
20650 An association list specifies kernel parameters and their values.
20655 @subsubheading PC/SC Smart Card Daemon Service
20657 The @code{(gnu services security-token)} module provides the following
20658 service to run @command{pcscd}, the PC/SC Smart Card Daemon.
20659 @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
20660 framework. It is a resource manager that coordinates communications with
20661 smart card readers, smart cards and cryptographic tokens that are connected
20664 @defvr {Scheme Variable} pcscd-service-type
20665 Service type for the @command{pcscd} service. Its value must be a
20666 @code{pcscd-configuration} object. To run pcscd in the default
20667 configuration, instantiate it as:
20670 (service pcscd-service-type)
20674 @deftp {Data Type} pcscd-configuration
20675 The data type representing the configuration of @command{pcscd}.
20678 @item @code{pcsc-lite} (default: @code{pcsc-lite})
20679 The pcsc-lite package that provides pcscd.
20680 @item @code{usb-drivers} (default: @code{(list ccid)})
20681 List of packages that provide USB drivers to pcscd. Drivers are expected to
20682 be under @file{pcsc/drivers} in the store directory of the package.
20687 @subsubheading Lirc Service
20689 The @code{(gnu services lirc)} module provides the following service.
20691 @deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
20692 [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
20693 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
20694 decodes infrared signals from remote controls.
20696 Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
20697 file name) may be specified. See @command{lircd} manual for details.
20699 Finally, @var{extra-options} is a list of additional command-line options
20700 passed to @command{lircd}.
20704 @subsubheading Spice Service
20706 The @code{(gnu services spice)} module provides the following service.
20708 @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
20709 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
20710 daemon that enables sharing the clipboard with a vm and setting the guest
20711 display resolution when the graphical console window resizes.
20714 @subsubsection Dictionary Services
20716 The @code{(gnu services dict)} module provides the following service:
20718 @deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
20719 Return a service that runs the @command{dicod} daemon, an implementation of
20720 DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
20722 The optional @var{config} argument specifies the configuration for
20723 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
20724 default it serves the GNU Collaborative International Dictonary of English.
20726 You can add @command{open localhost} to your @file{~/.dico} file to make
20727 @code{localhost} the default server for @command{dico} client
20728 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
20731 @deftp {Type de données} dicod-configuration
20732 Data type representing the configuration of dicod.
20735 @item @code{dico} (par défaut : @var{dico})
20736 Package object of the GNU Dico dictionary server.
20738 @item @code{interfaces} (par défaut : @var{'("localhost")})
20739 This is the list of IP addresses and ports and possibly socket file names to
20740 listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
20743 @item @code{handlers} (par défaut : @var{'()})
20744 List of @code{<dicod-handler>} objects denoting handlers (module instances).
20746 @item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
20747 List of @code{<dicod-database>} objects denoting dictionaries to be served.
20751 @deftp {Type de données} dicod-handler
20752 Data type representing a dictionary handler (module instance).
20756 Name of the handler (module instance).
20758 @item @code{module} (par défaut : @var{#f})
20759 Name of the dicod module of the handler (instance). If it is @code{#f}, the
20760 module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico
20763 @item @code{options}
20764 List of strings or gexps representing the arguments for the module handler
20768 @deftp {Type de données} dicod-database
20769 Data type representing a dictionary database.
20773 Name of the database, will be used in DICT commands.
20775 @item @code{handler}
20776 Name of the dicod handler (module instance) used by this database
20777 (@pxref{Handlers,,, dico, GNU Dico Manual}).
20779 @item @code{complex?} (par défaut : @var{#f})
20780 Whether the database configuration complex. The complex configuration will
20781 need a corresponding @code{<dicod-handler>} object, otherwise not.
20783 @item @code{options}
20784 List of strings or gexps representing the arguments for the database
20785 (@pxref{Databases,,, dico, GNU Dico Manual}).
20789 @defvr {Variable Scheme} %dicod-database:gcide
20790 A @code{<dicod-database>} object serving the GNU Collaborative International
20791 Dictionary of English using the @code{gcide} package.
20794 The following is an example @code{dicod-service} configuration.
20797 (dicod-service #:config
20798 (dicod-configuration
20799 (handlers (list (dicod-handler
20803 (list #~(string-append "dbdir=" #$wordnet))))))
20804 (databases (list (dicod-database
20807 (handler "wordnet")
20808 (options '("database=wn")))
20809 %dicod-database:gcide))))
20812 @node Programmes setuid
20813 @subsection Programmes setuid
20815 @cindex setuid programs
20816 Some programs need to run with ``root'' privileges, even when they are
20817 launched by unprivileged users. A notorious example is the @command{passwd}
20818 program, which users can run to change their password, and which needs to
20819 access the @file{/etc/passwd} and @file{/etc/shadow} files---something
20820 normally restricted to root, for obvious security reasons. To address that,
20821 these executables are @dfn{setuid-root}, meaning that they always run with
20822 root privileges (@pxref{How Change Persona,,, libc, The GNU C Library
20823 Reference Manual}, for more info about the setuid mechanism.)
20825 The store itself @emph{cannot} contain setuid programs: that would be a
20826 security issue since any user on the system can write derivations that
20827 populate the store (@pxref{Le dépôt}). Thus, a different mechanism is
20828 used: instead of changing the setuid bit directly on files that are in the
20829 store, we let the system administrator @emph{declare} which programs should
20832 The @code{setuid-programs} field of an @code{operating-system} declaration
20833 contains a list of G-expressions denoting the names of programs to be
20834 setuid-root (@pxref{Utiliser le système de configuration}). For instance, the
20835 @command{passwd} program, which is part of the Shadow package, can be
20836 designated by this G-expression (@pxref{G-Expressions}):
20839 #~(string-append #$shadow "/bin/passwd")
20842 A default set of setuid programs is defined by the @code{%setuid-programs}
20843 variable of the @code{(gnu system)} module.
20845 @defvr {Variable Scheme} %setuid-programs
20846 A list of G-expressions denoting common programs that are setuid-root.
20848 The list includes commands such as @command{passwd}, @command{ping},
20849 @command{su}, and @command{sudo}.
20852 Under the hood, the actual setuid programs are created in the
20853 @file{/run/setuid-programs} directory at system activation time. The files
20854 in this directory refer to the ``real'' binaries, which are in the store.
20856 @node Certificats X.509
20857 @subsection Certificats X.509
20859 @cindex HTTPS, certificates
20860 @cindex X.509 certificates
20862 Web servers available over HTTPS (that is, HTTP over the transport-layer
20863 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
20864 that the client can then use to @emph{authenticate} the server. To do that,
20865 clients verify that the server's certificate is signed by a so-called
20866 @dfn{certificate authority} (CA). But to verify the CA's signature, clients
20867 must have first acquired the CA's certificate.
20869 Web browsers such as GNU@tie{}IceCat include their own set of CA
20870 certificates, such that they are able to verify CA signatures
20873 However, most other programs that can talk HTTPS---@command{wget},
20874 @command{git}, @command{w3m}, etc.---need to be told where CA certificates
20877 @cindex @code{nss-certs}
20878 In GuixSD, this is done by adding a package that provides certificates to
20879 the @code{packages} field of the @code{operating-system} declaration
20880 (@pxref{Référence de système d'exploitation}). GuixSD includes one such package,
20881 @code{nss-certs}, which is a set of CA certificates provided as part of
20882 Mozilla's Network Security Services.
20884 Note that it is @emph{not} part of @var{%base-packages}, so you need to
20885 explicitly add it. The @file{/etc/ssl/certs} directory, which is where most
20886 applications and libraries look for certificates by default, points to the
20887 certificates installed globally.
20889 Unprivileged users, including users of Guix on a foreign distro, can also
20890 install their own certificate package in their profile. A number of
20891 environment variables need to be defined so that applications and libraries
20892 know where to find them. Namely, the OpenSSL library honors the
20893 @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications
20894 add their own environment variables; for instance, the Git version control
20895 system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO}
20896 environment variable. Thus, you would typically run something like:
20899 $ guix package -i nss-certs
20900 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
20901 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20902 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
20905 As another example, R requires the @code{CURL_CA_BUNDLE} environment
20906 variable to point to a certificate bundle, so you would have to run
20907 something like this:
20910 $ guix package -i nss-certs
20911 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
20914 For other applications you may want to look up the required environment
20915 variable in the relevant documentation.
20918 @node Name Service Switch
20919 @subsection Name Service Switch
20921 @cindex name service switch
20923 The @code{(gnu system nss)} module provides bindings to the configuration
20924 file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS
20925 Configuration File,,, libc, The GNU C Library Reference Manual}). In a
20926 nutshell, the NSS is a mechanism that allows libc to be extended with new
20927 ``name'' lookup methods for system databases, which includes host names,
20928 service names, user accounts, and more (@pxref{Name Service Switch, System
20929 Databases and Name Service Switch,, libc, The GNU C Library Reference
20932 The NSS configuration specifies, for each system database, which lookup
20933 method is to be used, and how the various methods are chained together---for
20934 instance, under which circumstances NSS should try the next method in the
20935 list. The NSS configuration is given in the @code{name-service-switch}
20936 field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
20939 @cindex .local, host name lookup
20940 As an example, the declaration below configures the NSS to use the
20941 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
20942 back-end}, which supports host name lookups over multicast DNS (mDNS) for
20943 host names ending in @code{.local}:
20946 (name-service-switch
20947 (hosts (list %files ;first, check /etc/hosts
20949 ;; If the above did not succeed, try
20950 ;; with 'mdns_minimal'.
20952 (name "mdns_minimal")
20954 ;; 'mdns_minimal' is authoritative for
20955 ;; '.local'. When it returns "not found",
20956 ;; no need to try the next methods.
20957 (reaction (lookup-specification
20958 (not-found => return))))
20960 ;; Then fall back to DNS.
20964 ;; Finally, try with the "full" 'mdns'.
20969 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
20970 contains this configuration, so you will not have to type it if all you want
20971 is to have @code{.local} host lookup working.
20973 Note that, in this case, in addition to setting the
20974 @code{name-service-switch} of the @code{operating-system} declaration, you
20975 also need to use @code{avahi-service} (@pxref{Services réseau,
20976 @code{avahi-service}}), or @var{%desktop-services}, which includes it
20977 (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
20978 the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
20980 For convenience, the following variables provide typical NSS configurations.
20982 @defvr {Variable Scheme} %default-nss
20983 This is the default name service switch configuration, a
20984 @code{name-service-switch} object.
20987 @defvr {Variable Scheme} %mdns-host-lookup-nss
20988 This is the name service switch configuration with support for host name
20989 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
20992 The reference for name service switch configuration is given below. It is a
20993 direct mapping of the configuration file format of the C library , so please
20994 refer to the C library manual for more information (@pxref{NSS Configuration
20995 File,,, libc, The GNU C Library Reference Manual}). Compared to the
20996 configuration file format of libc NSS, it has the advantage not only of
20997 adding this warm parenthetic feel that we like, but also static checks: you
20998 will know about syntax errors and typos as soon as you run @command{guix
21001 @deftp {Type de données} name-service-switch
21003 This is the data type representation the configuration of libc's name
21004 service switch (NSS). Each field below represents one of the supported
21021 The system databases handled by the NSS. Each of these fields must be a
21022 list of @code{<name-service>} objects (see below).
21026 @deftp {Type de données} name-service
21028 This is the data type representing an actual name service and the associated
21033 A string denoting the name service (@pxref{Services in the NSS
21034 configuration,,, libc, The GNU C Library Reference Manual}).
21036 Note that name services listed here must be visible to nscd. This is
21037 achieved by passing the @code{#:name-services} argument to
21038 @code{nscd-service} the list of packages providing the needed name services
21039 (@pxref{Services de base, @code{nscd-service}}).
21042 An action specified using the @code{lookup-specification} macro
21043 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
21044 Reference Manual}). For example:
21047 (lookup-specification (unavailable => continue)
21048 (success => return))
21053 @node Disque de RAM initial
21054 @subsection Disque de RAM initial
21057 @cindex disque de RAM initial
21058 For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial
21059 RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system
21060 as well as an initialization script. The latter is responsible for mounting
21061 the real root file system, and for loading any kernel modules that may be
21062 needed to achieve that.
21064 The @code{initrd-modules} field of an @code{operating-system} declaration
21065 allows you to specify Linux-libre kernel modules that must be available in
21066 the initrd. In particular, this is where you would list modules needed to
21067 actually drive the hard disk where your root partition is---although the
21068 default value of @code{initrd-modules} should cover most use cases. For
21069 example, assuming you need the @code{megaraid_sas} module in addition to the
21070 default modules to be able to access your root file system, you would write:
21075 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
21078 @defvr {Variable Scheme} %base-initrd-modules
21079 This is the list of kernel modules included in the initrd by default.
21082 Furthermore, if you need lower-level customization, the @code{initrd} field
21083 of an @code{operating-system} declaration allows you to specify which initrd
21084 you would like to use. The @code{(gnu system linux-initrd)} module provides
21085 three ways to build an initrd: the high-level @code{base-initrd} procedure
21086 and the low-level @code{raw-initrd} and @code{expression->initrd}
21089 The @code{base-initrd} procedure is intended to cover most common uses. For
21090 example, if you want to add a bunch of kernel modules to be loaded at boot
21091 time, you can define the @code{initrd} field of the operating system
21092 declaration like this:
21095 (initrd (lambda (file-systems . rest)
21096 ;; Create a standard initrd but set up networking
21097 ;; with the parameters QEMU expects by default.
21098 (apply base-initrd file-systems
21099 #:qemu-networking? #t
21103 The @code{base-initrd} procedure also handles common use cases that involves
21104 using the system as a QEMU guest, or as a ``live'' system with volatile root
21107 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
21108 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
21109 such as trying to guess which kernel modules and packages should be included
21110 to the initrd. An example use of @code{raw-initrd} is when a user has a
21111 custom Linux kernel configuration and default kernel modules included by
21112 @code{base-initrd} are not available.
21114 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
21115 honors several options passed on the Linux kernel command line (that is,
21116 arguments passed @i{via} the @code{linux} command of GRUB, or the
21117 @code{-append} option of QEMU), notably:
21120 @item --load=@var{boot}
21121 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
21122 program, once it has mounted the root file system.
21124 GuixSD uses this option to yield control to a boot program that runs the
21125 service activation programs and then spawns the GNU@tie{}Shepherd, the
21126 initialization system.
21128 @item --root=@var{root}
21129 Mount @var{root} as the root file system. @var{root} can be a device name
21130 like @code{/dev/sda1}, a file system label, or a file system UUID.
21132 @item --system=@var{système}
21133 Have @file{/run/booted-system} and @file{/run/current-system} point to
21136 @item modprobe.blacklist=@var{modules}@dots{}
21137 @cindex module, black-listing
21138 @cindex black list, of kernel modules
21139 Instruct the initial RAM disk as well as the @command{modprobe} command
21140 (from the kmod package) to refuse to load @var{modules}. @var{modules} must
21141 be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}.
21144 Start a read-eval-print loop (REPL) from the initial RAM disk before it
21145 tries to load kernel modules and to mount the root file system. Our
21146 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love
21147 it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual},
21148 for more information on Guile's REPL.
21152 Now that you know all the features that initial RAM disks produced by
21153 @code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
21154 customize it further.
21157 @cindex disque de RAM initial
21158 @deffn {Monadic Procedure} raw-initrd @var{file-systems} @
21159 [#:linux-modules '()] [#:mapped-devices '()] @ [#:helper-packages '()]
21160 [#:qemu-networking? #f] [#:volatile-root? #f] Return a monadic derivation
21161 that builds a raw initrd. @var{file-systems} is a list of file systems to
21162 be mounted by the initrd, possibly in addition to the root file system
21163 specified on the kernel command line via @code{--root}. @var{linux-modules}
21164 is a list of kernel modules to be loaded at boot time. @var{mapped-devices}
21165 is a list of device mappings to realize before @var{file-systems} are
21166 mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of
21167 packages to be copied in the initrd. It may include @code{e2fsck/static} or
21168 other packages needed by the initrd to check the root file system.
21170 When @var{qemu-networking?} is true, set up networking with the standard
21171 QEMU parameters. When @var{virtio?} is true, load additional modules so
21172 that the initrd can be used as a QEMU guest with para-virtualized I/O
21175 When @var{volatile-root?} is true, the root file system is writable but any
21176 changes to it are lost.
21179 @deffn {Monadic Procedure} base-initrd @var{file-systems} @
21180 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
21181 [#:linux-modules '()] Return a monadic derivation that builds a generic
21182 initrd, with kernel modules taken from @var{linux}. @var{file-systems} is a
21183 list of file-systems to be mounted by the initrd, possibly in addition to
21184 the root file system specified on the kernel command line via
21185 @code{--root}. @var{mapped-devices} is a list of device mappings to realize
21186 before @var{file-systems} are mounted.
21188 @var{qemu-networking?} and @var{volatile-root?} behaves as in
21191 The initrd is automatically populated with all the kernel modules necessary
21192 for @var{file-systems} and for the given options. Additional kernel modules
21193 can be listed in @var{linux-modules}. They will be added to the initrd, and
21194 loaded at boot time in the order in which they appear.
21197 Needless to say, the initrds we produce and use embed a statically-linked
21198 Guile, and the initialization program is a Guile program. That gives a lot
21199 of flexibility. The @code{expression->initrd} procedure builds such an
21200 initrd, given the program to run in that initrd.
21202 @deffn {Monadic Procedure} expression->initrd @var{exp} @
21203 [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return a derivation
21204 that builds a Linux initrd (a gzipped cpio archive) containing @var{guile}
21205 and that evaluates @var{exp}, a G-expression, upon booting. All the
21206 derivations referenced by @var{exp} are automatically copied to the initrd.
21209 @node Configuration du chargeur d'amorçage
21210 @subsection Configuration du chargeur d'amorçage
21213 @cindex boot loader
21215 The operating system supports multiple bootloaders. The bootloader is
21216 configured using @code{bootloader-configuration} declaration. All the
21217 fields of this structure are bootloader agnostic except for one field,
21218 @code{bootloader} that indicates the bootloader to be configured and
21221 Some of the bootloaders do not honor every field of
21222 @code{bootloader-configuration}. For instance, the extlinux bootloader does
21223 not support themes and thus ignores the @code{theme} field.
21225 @deftp {Type de données} bootloader-configuration
21226 The type of a bootloader configuration declaration.
21230 @item @code{bootloader}
21231 @cindex EFI, bootloader
21232 @cindex UEFI, bootloader
21233 @cindex BIOS, bootloader
21234 The bootloader to use, as a @code{bootloader} object. For now
21235 @code{grub-bootloader}, @code{grub-efi-bootloader},
21236 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
21238 @vindex grub-efi-bootloader
21239 @code{grub-efi-bootloader} allows to boot on modern systems using the
21240 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
21241 use if the installation image contains a @file{/sys/firmware/efi} directory
21242 when you boot it on your system.
21244 @vindex grub-bootloader
21245 @code{grub-bootloader} allows you to boot in particular Intel-based machines
21246 in ``legacy'' BIOS mode.
21248 @cindex ARM, bootloaders
21249 @cindex AArch64, bootloaders
21250 Available bootloaders are described in @code{(gnu bootloader @dots{})}
21251 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
21252 of bootloaders for a wide range of ARM and AArch64 systems, using the
21253 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
21255 @item @code{target}
21256 This is a string denoting the target onto which to install the bootloader.
21258 The interpretation depends on the bootloader in question. For
21259 @code{grub-bootloader}, for example, it should be a device name understood
21260 by the bootloader @command{installer} command, such as @code{/dev/sda} or
21261 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
21262 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
21263 system, usually @file{/boot/efi}.
21265 @item @code{menu-entries} (par défaut : @code{()})
21266 A possibly empty list of @code{menu-entry} objects (see below), denoting
21267 entries to appear in the bootloader menu, in addition to the current system
21268 entry and the entry pointing to previous system generations.
21270 @item @code{default-entry} (par défaut : @code{0})
21271 The index of the default boot menu entry. Index 0 is for the entry of the
21274 @item @code{timeout} (par défaut : @code{5})
21275 The number of seconds to wait for keyboard input before booting. Set to 0
21276 to boot immediately, and to -1 to wait indefinitely.
21278 @item @code{theme} (par défaut : @var{#f})
21279 The bootloader theme object describing the theme to use. If no theme is
21280 provided, some bootloaders might use a default theme, that's true for GRUB.
21282 @item @code{terminal-outputs} (par défaut : @code{'gfxterm})
21283 The output terminals used for the bootloader boot menu, as a list of
21284 symbols. GRUB accepts the values: @code{console}, @code{serial},
21285 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
21286 @code{morse}, and @code{pkmodem}. This field corresponds to the GRUB
21287 variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,,
21288 grub,GNU GRUB manual}).
21290 @item @code{terminal-inputs} (par défaut : @code{'()})
21291 The input terminals used for the bootloader boot menu, as a list of
21292 symbols. For GRUB, the default is the native platform terminal as
21293 determined at run-time. GRUB accepts the values: @code{console},
21294 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
21295 @code{usb_keyboard}. This field corresponds to the GRUB variable
21296 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
21299 @item @code{serial-unit} (par défaut : @code{#f})
21300 The serial unit used by the bootloader, as an integer from 0 to 3. For
21301 GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds
21302 to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21304 @item @code{serial-speed} (par défaut : @code{#f})
21305 The speed of the serial interface, as an integer. For GRUB, the default
21306 value is chosen at run-time; currently GRUB chooses 9600@tie{}bps
21307 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
21314 Should you want to list additional boot menu entries @i{via} the
21315 @code{menu-entries} field above, you will need to create them with the
21316 @code{menu-entry} form. For example, imagine you want to be able to boot
21317 another distro (hard to imagine!), you can define a menu entry along these
21322 (label "The Other Distro")
21323 (linux "/boot/old/vmlinux-2.6.32")
21324 (linux-arguments '("root=/dev/sda2"))
21325 (initrd "/boot/old/initrd"))
21330 @deftp {Type de données} menu-entry
21331 The type of an entry in the bootloader menu.
21336 The label to show in the menu---e.g., @code{"GNU"}.
21339 The Linux kernel image to boot, for example:
21342 (file-append linux-libre "/bzImage")
21345 For GRUB, it is also possible to specify a device explicitly in the file
21346 path using GRUB's device naming convention (@pxref{Naming convention,,,
21347 grub, GNU GRUB manual}), for example:
21350 "(hd0,msdos1)/boot/vmlinuz"
21353 If the device is specified explicitly as above, then the @code{device} field
21354 is ignored entirely.
21356 @item @code{linux-arguments} (par défaut : @code{()})
21357 The list of extra Linux kernel command-line arguments---e.g.,
21358 @code{("console=ttyS0")}.
21360 @item @code{initrd}
21361 A G-Expression or string denoting the file name of the initial RAM disk to
21362 use (@pxref{G-Expressions}).
21363 @item @code{device} (par défaut : @code{#f})
21364 The device where the kernel and initrd are to be found---i.e., for GRUB,
21365 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
21367 This may be a file system label (a string), a file system UUID (a
21368 bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the
21369 bootloader will search the device containing the file specified by the
21370 @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must
21371 @emph{not} be an OS device name such as @file{/dev/sda1}.
21376 @c FIXME: Write documentation once it's stable.
21377 Fow now only GRUB has theme support. GRUB themes are created using the
21378 @code{grub-theme} form, which is not documented yet.
21380 @defvr {Variable Scheme} %default-theme
21381 This is the default GRUB theme used by the operating system if no
21382 @code{theme} field is specified in @code{bootloader-configuration} record.
21384 It comes with a fancy background image displaying the GNU and Guix logos.
21388 @node Invoquer guix system
21389 @subsection Invoquer @code{guix system}
21391 Once you have written an operating system declaration as seen in the
21392 previous section, it can be @dfn{instantiated} using the @command{guix
21393 system} command. The synopsis is:
21396 guix system @var{options}@dots{} @var{action} @var{file}
21399 @var{file} must be the name of a file containing an @code{operating-system}
21400 declaration. @var{action} specifies how the operating system is
21401 instantiated. Currently the following values are supported:
21405 Display available service type definitions that match the given regular
21406 expressions, sorted by relevance:
21409 $ guix system search console font
21410 name: console-fonts
21411 location: gnu/services/base.scm:729:2
21412 extends: shepherd-root
21413 description: Install the given fonts on the specified ttys (fonts are
21414 + per virtual console on GNU/Linux). The value of this service is a list
21415 + of tty/font pairs like:
21417 + '(("tty1" . "LatGrkCyr-8x16"))
21421 location: gnu/services/base.scm:1048:2
21422 extends: shepherd-root
21423 description: Provide console login using the `mingetty' program.
21427 location: gnu/services/base.scm:775:2
21429 description: Provide a console log-in service as specified by its
21430 + configuration value, a `login-configuration' object.
21436 As for @command{guix package --search}, the result is written in
21437 @code{recutils} format, which makes it easy to filter the output
21438 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
21441 Build the operating system described in @var{file}, activate it, and switch
21442 to it@footnote{This action (and the related actions @code{switch-generation}
21443 and @code{roll-back}) are usable only on systems already running GuixSD.}.
21445 This effects all the configuration specified in @var{file}: user accounts,
21446 system services, global package list, setuid programs, etc. The command
21447 starts system services specified in @var{file} that are not currently
21448 running; if a service is currently running, it does not attempt to upgrade
21449 it since this would not be possible without stopping it first.
21451 This command creates a new generation whose number is one greater than the
21452 current generation (as reported by @command{guix system list-generations}).
21453 If that generation already exists, it will be overwritten. This behavior
21454 mirrors that of @command{guix package} (@pxref{Invoquer guix package}).
21456 It also adds a bootloader menu entry for the new OS configuration, ---unless
21457 @option{--no-bootloader} is passed. For GRUB, it moves entries for older
21458 configurations to a submenu, allowing you to choose an older system
21459 generation at boot time should you need it.
21461 @quotation Remarque
21462 @c The paragraph below refers to the problem discussed at
21463 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
21464 It is highly recommended to run @command{guix pull} once before you run
21465 @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
21466 @command{reconfigure} has completed.
21469 @item switch-generation
21470 @cindex générations
21471 Switch to an existing system generation. This action atomically switches
21472 the system profile to the specified system generation. It also rearranges
21473 the system's existing bootloader menu entries. It makes the menu entry for
21474 the specified system generation the default, and it moves the entries for
21475 the other generatiors to a submenu, if supported by the bootloader being
21476 used. The next time the system boots, it will use the specified system
21479 The bootloader itself is not being reinstalled when using this command.
21480 Thus, the installed bootloader is used with an updated configuration file.
21482 The target generation can be specified explicitly by its generation number.
21483 For example, the following invocation would switch to system generation 7:
21486 guix system switch-generation 7
21489 The target generation can also be specified relative to the current
21490 generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3
21491 generations ahead of the current generation,'' and @code{-1} means ``1
21492 generation prior to the current generation.'' When specifying a negative
21493 value such as @code{-1}, you must precede it with @code{--} to prevent it
21494 from being parsed as an option. For example:
21497 guix system switch-generation -- -1
21500 Currently, the effect of invoking this action is @emph{only} to switch the
21501 system profile to an existing generation and rearrange the bootloader menu
21502 entries. To actually start using the target system generation, you must
21503 reboot after running this action. In the future, it will be updated to do
21504 the same things as @command{reconfigure}, like activating and deactivating
21507 This action will fail if the specified generation does not exist.
21510 @cindex revenir en arrière
21511 Switch to the preceding system generation. The next time the system boots,
21512 it will use the preceding system generation. This is the inverse of
21513 @command{reconfigure}, and it is exactly the same as invoking
21514 @command{switch-generation} with an argument of @code{-1}.
21516 Currently, as with @command{switch-generation}, you must reboot after
21517 running this action to actually start using the preceding system generation.
21520 Build the derivation of the operating system, which includes all the
21521 configuration files and programs needed to boot and run the system. This
21522 action does not actually install anything.
21525 Populate the given directory with all the files necessary to run the
21526 operating system specified in @var{file}. This is useful for first-time
21527 installations of GuixSD. For instance:
21530 guix system init my-os-config.scm /mnt
21533 copies to @file{/mnt} all the store items required by the configuration
21534 specified in @file{my-os-config.scm}. This includes configuration files,
21535 packages, and so on. It also creates other essential files needed for the
21536 system to operate correctly---e.g., the @file{/etc}, @file{/var}, and
21537 @file{/run} directories, and the @file{/bin/sh} file.
21539 This command also installs bootloader on the target specified in
21540 @file{my-os-config}, unless the @option{--no-bootloader} option was passed.
21543 @cindex virtual machine
21545 @anchor{guix system vm}
21546 Build a virtual machine that contains the operating system declared in
21547 @var{file}, and return a script to run that virtual machine (VM). Arguments
21548 given to the script are passed to QEMU as in the example below, which
21549 enables networking and requests 1@tie{}GiB of RAM for the emulated machine:
21552 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
21555 The VM shares its store with the host system.
21557 Additional file systems can be shared between the host and the VM using the
21558 @code{--share} and @code{--expose} command-line options: the former
21559 specifies a directory to be shared with write access, while the latter
21560 provides read-only access to the shared directory.
21562 The example below creates a VM in which the user's home directory is
21563 accessible read-only, and where the @file{/exchange} directory is a
21564 read-write mapping of @file{$HOME/tmp} on the host:
21567 guix system vm my-config.scm \
21568 --expose=$HOME --share=$HOME/tmp=/exchange
21571 On GNU/Linux, the default is to boot directly to the kernel; this has the
21572 advantage of requiring only a very tiny root disk image since the store of
21573 the host can then be mounted.
21575 The @code{--full-boot} option forces a complete boot sequence, starting with
21576 the bootloader. This requires more disk space since a root image containing
21577 at least the kernel, initrd, and bootloader data files must be created. The
21578 @code{--image-size} option can be used to specify the size of the image.
21580 @cindex System images, creation in various formats
21581 @cindex Creating system images in various formats
21584 @itemx docker-image
21585 Return a virtual machine, disk image, or Docker image of the operating
21586 system declared in @var{file} that stands alone. By default, @command{guix
21587 system} estimates the size of the image needed to store the system, but you
21588 can use the @option{--image-size} option to specify a value. Docker images
21589 are built to contain exactly what they need, so the @option{--image-size}
21590 option is ignored in the case of @code{docker-image}.
21592 You can specify the root file system type by using the
21593 @option{--file-system-type} option. It defaults to @code{ext4}.
21595 When using @code{vm-image}, the returned image is in qcow2 format, which the
21596 QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more
21597 information on how to run the image in a virtual machine.
21599 When using @code{disk-image}, a raw disk image is produced; it can be copied
21600 as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device
21601 corresponding to a USB stick, one can copy the image to it using the
21605 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
21608 When using @code{docker-image}, a Docker image is produced. Guix builds the
21609 image from scratch, not from a pre-existing Docker base image. As a result,
21610 it contains @emph{exactly} what you define in the operating system
21611 configuration file. You can then load the image and launch a Docker
21612 container using commands like the following:
21615 image_id="$(docker load < guixsd-docker-image.tar.gz)"
21616 docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
21617 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
21618 $image_id /var/guix/profiles/system/boot
21621 This command starts a new Docker container from the specified image. It
21622 will boot the GuixSD system in the usual manner, which means it will start
21623 any services you have defined in the operating system configuration.
21624 Depending on what you run in the Docker container, it may be necessary to
21625 give the container additional permissions. For example, if you intend to
21626 build software using Guix inside of the Docker container, you may need to
21627 pass the @option{--privileged} option to @code{docker run}.
21630 Return a script to run the operating system declared in @var{file} within a
21631 container. Containers are a set of lightweight isolation mechanisms
21632 provided by the kernel Linux-libre. Containers are substantially less
21633 resource-demanding than full virtual machines since the kernel, shared
21634 objects, and other resources can be shared with the host system; this also
21635 means they provide thinner isolation.
21637 Currently, the script must be run as root in order to support more than a
21638 single user and group. The container shares its store with the host system.
21640 As with the @code{vm} action (@pxref{guix system vm}), additional file
21641 systems to be shared between the host and container can be specified using
21642 the @option{--share} and @option{--expose} options:
21645 guix system container my-config.scm \
21646 --expose=$HOME --share=$HOME/tmp=/exchange
21649 @quotation Remarque
21650 This option requires Linux-libre 3.19 or newer.
21655 @var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the
21659 @item --expression=@var{expr}
21660 @itemx -e @var{expr}
21661 Consider the operating-system @var{expr} evaluates to. This is an
21662 alternative to specifying a file which evaluates to an operating system.
21663 This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}).
21665 @item --system=@var{système}
21666 @itemx -s @var{système}
21667 Attempt to build for @var{system} instead of the host system type. This
21668 works as per @command{guix build} (@pxref{Invoquer guix build}).
21672 Return the derivation file name of the given operating system without
21675 @item --file-system-type=@var{type}
21676 @itemx -t @var{type}
21677 For the @code{disk-image} action, create a file system of the given
21678 @var{type} on the image.
21680 When this option is omitted, @command{guix system} uses @code{ext4}.
21682 @cindex ISO-9660 format
21683 @cindex CD image format
21684 @cindex DVD image format
21685 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for
21686 burning on CDs and DVDs.
21688 @item --image-size=@var{size}
21689 For the @code{vm-image} and @code{disk-image} actions, create an image of
21690 the given @var{size}. @var{size} may be a number of bytes, or it may
21691 include a unit as a suffix (@pxref{Block size, size specifications,,
21692 coreutils, GNU Coreutils}).
21694 When this option is omitted, @command{guix system} computes an estimate of
21695 the image size as a function of the size of the system declared in
21698 @item --root=@var{fichier}
21699 @itemx -r @var{fichier}
21700 Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
21701 en tant que racine du ramasse-miettes.
21703 @item --skip-checks
21704 Skip pre-installation safety checks.
21706 By default, @command{guix system init} and @command{guix system reconfigure}
21707 perform safety checks: they make sure the file systems that appear in the
21708 @code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}),
21709 and that any Linux kernel modules that may be needed at boot time are listed
21710 in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option
21711 skips these tests altogether.
21713 @item --on-error=@var{strategy}
21714 Apply @var{strategy} when an error occurs when reading @var{file}.
21715 @var{strategy} may be one of the following:
21718 @item nothing-special
21719 Report the error concisely and exit. This is the default strategy.
21722 Likewise, but also display a backtrace.
21725 Report the error and enter Guile's debugger. From there, you can run
21726 commands such as @code{,bt} to get a backtrace, @code{,locals} to display
21727 local variable values, and more generally inspect the state of the program.
21728 @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of
21729 available debugging commands.
21733 @quotation Remarque
21734 All the actions above, except @code{build} and @code{init}, can use KVM
21735 support in the Linux-libre kernel. Specifically, if the machine has
21736 hardware virtualization support, the corresponding KVM kernel module should
21737 be loaded, and the @file{/dev/kvm} device node must exist and be readable
21738 and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
21741 Once you have built, configured, re-configured, and re-re-configured your
21742 GuixSD installation, you may find it useful to list the operating system
21743 generations available on disk---and that you can choose from the bootloader
21748 @item list-generations
21749 List a summary of each generation of the operating system available on disk,
21750 in a human-readable way. This is similar to the @option{--list-generations}
21751 option of @command{guix package} (@pxref{Invoquer guix package}).
21753 Optionally, one can specify a pattern, with the same syntax that is used in
21754 @command{guix package --list-generations}, to restrict the list of
21755 generations displayed. For instance, the following command displays
21756 generations that are up to 10 days old:
21759 $ guix system list-generations 10d
21764 The @command{guix system} command has even more to offer! The following
21765 sub-commands allow you to visualize how your system services relate to each
21768 @anchor{system-extension-graph}
21771 @item extension-graph
21772 Emit in Dot/Graphviz format to standard output the @dfn{service extension
21773 graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.)
21778 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
21781 produces a PDF file showing the extension relations among services.
21783 @anchor{system-shepherd-graph}
21784 @item shepherd-graph
21785 Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of
21786 shepherd services of the operating system defined in @var{file}.
21787 @xref{Services Shepherd}, for more information and for an example graph.
21791 @node Lancer GuixSD dans une VM
21792 @subsection Running GuixSD in a Virtual Machine
21794 @cindex virtual machine
21795 To run GuixSD in a virtual machine (VM), one can either use the pre-built
21796 GuixSD VM image distributed at
21797 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
21798 , or build their own virtual machine image using @command{guix system
21799 vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
21800 format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
21804 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
21805 it. When invoking QEMU, you must choose a system emulator that is suitable
21806 for your hardware platform. Here is a minimal QEMU invocation that will
21807 boot the result of @command{guix system vm-image} on x86_64 hardware:
21810 $ qemu-system-x86_64 \
21811 -net user -net nic,model=virtio \
21812 -enable-kvm -m 256 /tmp/qemu-image
21815 Here is what each of these options means:
21818 @item qemu-system-x86_64
21819 This specifies the hardware platform to emulate. This should match the
21823 Enable the unprivileged user-mode network stack. The guest OS can access
21824 the host but not vice versa. This is the simplest way to get the guest OS
21827 @item -net nic,model=virtio
21828 You must create a network interface of a given model. If you do not create
21829 a NIC, the boot will fail. Assuming your hardware platform is x86_64, you
21830 can get a list of available NIC models by running
21831 @command{qemu-system-x86_64 -net nic,model=help}.
21834 If your system has hardware virtualization extensions, enabling the virtual
21835 machine support (KVM) of the Linux kernel will make things run faster.
21838 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
21839 which may be insufficient for some operations.
21841 @item /tmp/qemu-image
21842 The file name of the qcow2 image.
21845 The default @command{run-vm.sh} script that is returned by an invocation of
21846 @command{guix system vm} does not add a @command{-net user} flag by
21847 default. To get network access from within the vm add the
21848 @code{(dhcp-client-service)} to your system definition and start the VM
21849 using @command{`guix system vm config.scm` -net user}. An important caveat
21850 of using @command{-net user} for networking is that @command{ping} will not
21851 work, because it uses the ICMP protocol. You'll have to use a different
21852 command to check for network connectivity, for example @command{guix
21855 @subsubsection Connecting Through SSH
21858 @cindex serveur SSH
21859 To enable SSH inside a VM you need to add a SSH server like
21860 @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The
21861 @code{(lsh-service}) doesn't currently boot unsupervised. It requires you
21862 to type some characters to initialize the randomness generator. In addition
21863 you need to forward the SSH port, 22 by default, to the host. You can do
21867 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
21870 To connect to the VM you can run
21873 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
21876 The @command{-p} tells @command{ssh} the port you want to connect to.
21877 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from
21878 complaining every time you modify your @command{config.scm} file and the
21879 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
21880 connection to an unknown host every time you connect.
21882 @subsubsection Using @command{virt-viewer} with Spice
21884 As an alternative to the default @command{qemu} graphical client you can use
21885 the @command{remote-viewer} from the @command{virt-viewer} package. To
21886 connect pass the @command{-spice port=5930,disable-ticketing} flag to
21887 @command{qemu}. See previous section for further information on how to do
21890 Spice also allows you to do some nice stuff like share your clipboard with
21891 your VM. To enable that you'll also have to pass the following flags to
21895 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
21896 -chardev spicevmc,name=vdagent,id=vdagent
21897 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
21898 name=com.redhat.spice.0
21901 You'll also need to add the @pxref{Services divers, Spice service}.
21903 @node Définir des services
21904 @subsection Définir des services
21906 The previous sections show the available services and how one can combine
21907 them in an @code{operating-system} declaration. But how do we define them
21908 in the first place? And what is a service anyway?
21911 * Composition de services:: Le modèle de composition des services.
21912 * Types service et services:: Types et services.
21913 * Référence de service:: Référence de l'API@.
21914 * Services Shepherd:: Un type de service particulier.
21917 @node Composition de services
21918 @subsubsection Composition de services
21922 Here we define a @dfn{service} as, broadly, something that extends the
21923 functionality of the operating system. Often a service is a process---a
21924 @dfn{daemon}---started when the system boots: a secure shell server, a Web
21925 server, the Guix build daemon, etc. Sometimes a service is a daemon whose
21926 execution can be triggered by another daemon---e.g., an FTP server started
21927 by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}.
21928 Occasionally, a service does not map to a daemon. For instance, the
21929 ``account'' service collects user accounts and makes sure they exist when
21930 the system runs; the ``udev'' service collects device management rules and
21931 makes them available to the eudev daemon; the @file{/etc} service populates
21932 the @file{/etc} directory of the system.
21934 @cindex service extensions
21935 GuixSD services are connected by @dfn{extensions}. For instance, the secure
21936 shell service @emph{extends} the Shepherd---the GuixSD initialization
21937 system, running as PID@tie{}1---by giving it the command lines to start and
21938 stop the secure shell daemon (@pxref{Services réseau,
21939 @code{lsh-service}}); the UPower service extends the D-Bus service by
21940 passing it its @file{.service} specification, and extends the udev service
21941 by passing it device management rules (@pxref{Services de bureaux,
21942 @code{upower-service}}); the Guix daemon service extends the Shepherd by
21943 passing it the command lines to start and stop the daemon, and extends the
21944 account service by passing it a list of required build user accounts
21945 (@pxref{Services de base}).
21947 All in all, services and their ``extends'' relations form a directed acyclic
21948 graph (DAG). If we represent services as boxes and extensions as arrows, a
21949 typical system might provide something like this:
21951 @image{images/service-graph,,5in,Typical service extension graph.}
21953 @cindex system service
21954 At the bottom, we see the @dfn{system service}, which produces the directory
21955 containing everything to run and boot the system, as returned by the
21956 @command{guix system build} command. @xref{Référence de service}, to learn
21957 about the other service types shown here. @xref{system-extension-graph, the
21958 @command{guix system extension-graph} command}, for information on how to
21959 generate this representation for a particular operating system definition.
21961 @cindex service types
21962 Technically, developers can define @dfn{service types} to express these
21963 relations. There can be any number of services of a given type on the
21964 system---for instance, a system running two instances of the GNU secure
21965 shell server (lsh) has two instances of @var{lsh-service-type}, with
21966 different parameters.
21968 The following section describes the programming interface for service types
21971 @node Types service et services
21972 @subsubsection Types service et services
21974 A @dfn{service type} is a node in the DAG described above. Let us start
21975 with a simple example, the service type for the Guix build daemon
21976 (@pxref{Invoquer guix-daemon}):
21979 (define guix-service-type
21983 (list (service-extension shepherd-root-service-type guix-shepherd-service)
21984 (service-extension account-service-type guix-accounts)
21985 (service-extension activation-service-type guix-activation)))
21986 (default-value (guix-configuration))))
21990 It defines three things:
21994 A name, whose sole purpose is to make inspection and debugging easier.
21997 A list of @dfn{service extensions}, where each extension designates the
21998 target service type and a procedure that, given the parameters of the
21999 service, returns a list of objects to extend the service of that type.
22001 Every service type has at least one service extension. The only exception
22002 is the @dfn{boot service type}, which is the ultimate service.
22005 Optionally, a default value for instances of this type.
22008 In this example, @var{guix-service-type} extends three services:
22011 @item shepherd-root-service-type
22012 The @var{guix-shepherd-service} procedure defines how the Shepherd service
22013 is extended. Namely, it returns a @code{<shepherd-service>} object that
22014 defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
22016 @item account-service-type
22017 This extension for this service is computed by @var{guix-accounts}, which
22018 returns a list of @code{user-group} and @code{user-account} objects
22019 representing the build user accounts (@pxref{Invoquer guix-daemon}).
22021 @item activation-service-type
22022 Here @var{guix-activation} is a procedure that returns a gexp, which is a
22023 code snippet to run at ``activation time''---e.g., when the service is
22027 A service of this type is instantiated like this:
22030 (service guix-service-type
22031 (guix-configuration
22033 (use-substitutes? #f)))
22036 The second argument to the @code{service} form is a value representing the
22037 parameters of this specific service instance.
22038 @xref{guix-configuration-type, @code{guix-configuration}}, for information
22039 about the @code{guix-configuration} data type. When the value is omitted,
22040 the default value specified by @code{guix-service-type} is used:
22043 (service guix-service-type)
22046 @var{guix-service-type} is quite simple because it extends other services
22047 but is not extensible itself.
22049 @c @subsubsubsection Extensible Service Types
22051 The service type for an @emph{extensible} service looks like this:
22054 (define udev-service-type
22055 (service-type (name 'udev)
22057 (list (service-extension shepherd-root-service-type
22058 udev-shepherd-service)))
22060 (compose concatenate) ;concatenate the list of rules
22061 (extend (lambda (config rules)
22063 (($ <udev-configuration> udev initial-rules)
22064 (udev-configuration
22065 (udev udev) ;the udev package to use
22066 (rules (append initial-rules rules)))))))))
22069 This is the service type for the
22070 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
22071 daemon}. Compared to the previous example, in addition to an extension of
22072 @var{shepherd-root-service-type}, we see two new fields:
22076 This is the procedure to @dfn{compose} the list of extensions to services of
22079 Services can extend the udev service by passing it lists of rules; we
22080 compose those extensions simply by concatenating them.
22083 This procedure defines how the value of the service is @dfn{extended} with
22084 the composition of the extensions.
22086 Udev extensions are composed into a list of rules, but the udev service
22087 value is itself a @code{<udev-configuration>} record. So here, we extend
22088 that record by appending the list of rules it contains to the list of
22092 This is a string giving an overview of the service type. The string can
22093 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
22094 @command{guix system search} command searches these strings and displays
22095 them (@pxref{Invoquer guix system}).
22098 There can be only one instance of an extensible service type such as
22099 @var{udev-service-type}. If there were more, the @code{service-extension}
22100 specifications would be ambiguous.
22102 Still here? The next section provides a reference of the programming
22103 interface for services.
22105 @node Référence de service
22106 @subsubsection Référence de service
22108 We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services
22109 and service types. This interface is provided by the @code{(gnu services)}
22112 @deffn {Procédure Scheme} service @var{type} [@var{value}]
22113 Return a new service of @var{type}, a @code{<service-type>} object (see
22114 below.) @var{value} can be any object; it represents the parameters of this
22115 particular service instance.
22117 When @var{value} is omitted, the default value specified by @var{type} is
22118 used; if @var{type} does not specify a default value, an error is raised.
22120 For instance, this:
22123 (service openssh-service-type)
22127 is equivalent to this:
22130 (service openssh-service-type
22131 (openssh-configuration))
22134 In both cases the result is an instance of @code{openssh-service-type} with
22135 the default configuration.
22138 @deffn {Procédure Scheme} service? @var{obj}
22139 Return true if @var{obj} is a service.
22142 @deffn {Procédure Scheme} service-kind @var{service}
22143 Return the type of @var{service}---i.e., a @code{<service-type>} object.
22146 @deffn {Procédure Scheme} service-value @var{service}
22147 Return the value associated with @var{service}. It represents its
22151 Here is an example of how a service is created and manipulated:
22155 (service nginx-service-type
22156 (nginx-configuration
22158 (log-directory log-directory)
22159 (run-directory run-directory)
22160 (file config-file))))
22165 (eq? (service-kind s) nginx-service-type)
22169 The @code{modify-services} form provides a handy way to change the
22170 parameters of some of the services of a list such as @var{%base-services}
22171 (@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
22172 services. Of course, you could always use standard list combinators such as
22173 @code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
22174 GNU Guile Reference Manual}); @code{modify-services} simply provides a more
22175 concise form for this common pattern.
22177 @deffn {Scheme Syntax} modify-services @var{services} @
22178 (@var{type} @var{variable} => @var{body}) @dots{}
22180 Modify the services listed in @var{services} according to the given
22181 clauses. Each clause has the form:
22184 (@var{type} @var{variable} => @var{body})
22187 where @var{type} is a service type---e.g., @code{guix-service-type}---and
22188 @var{variable} is an identifier that is bound within the @var{body} to the
22189 service parameters---e.g., a @code{guix-configuration} instance---of the
22190 original service of that @var{type}.
22192 The @var{body} should evaluate to the new service parameters, which will be
22193 used to configure the new service. This new service will replace the
22194 original in the resulting list. Because a service's service parameters are
22195 created using @code{define-record-type*}, you can write a succinct
22196 @var{body} that evaluates to the new service parameters by using the
22197 @code{inherit} feature that @code{define-record-type*} provides.
22199 @xref{Utiliser le système de configuration}, for example usage.
22203 Next comes the programming interface for service types. This is something
22204 you want to know when writing new service definitions, but not necessarily
22205 when simply looking for ways to customize your @code{operating-system}
22208 @deftp {Type de données} service-type
22209 @cindex service type
22210 This is the representation of a @dfn{service type} (@pxref{Types service et services}).
22214 This is a symbol, used only to simplify inspection and debugging.
22216 @item @code{extensions}
22217 A non-empty list of @code{<service-extension>} objects (see below).
22219 @item @code{compose} (par défaut : @code{#f})
22220 If this is @code{#f}, then the service type denotes services that cannot be
22221 extended---i.e., services that do not receive ``values'' from other
22224 Otherwise, it must be a one-argument procedure. The procedure is called by
22225 @code{fold-services} and is passed a list of values collected from
22226 extensions. It may return any single value.
22228 @item @code{extend} (par défaut : @code{#f})
22229 If this is @code{#f}, services of this type cannot be extended.
22231 Otherwise, it must be a two-argument procedure: @code{fold-services} calls
22232 it, passing it the initial value of the service as the first argument and
22233 the result of applying @code{compose} to the extension values as the second
22234 argument. It must return a value that is a valid parameter value for the
22238 @xref{Types service et services}, for examples.
22241 @deffn {Procédure Scheme} service-extension @var{target-type} @
22242 @var{compute} Return a new extension for services of type
22243 @var{target-type}. @var{compute} must be a one-argument procedure:
22244 @code{fold-services} calls it, passing it the value associated with the
22245 service that provides the extension; it must return a valid value for the
22249 @deffn {Procédure Scheme} service-extension? @var{obj}
22250 Return true if @var{obj} is a service extension.
22253 Occasionally, you might want to simply extend an existing service. This
22254 involves creating a new service type and specifying the extension of
22255 interest, which can be verbose; the @code{simple-service} procedure provides
22256 a shorthand for this.
22258 @deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
22259 Return a service that extends @var{target} with @var{value}. This works by
22260 creating a singleton service type @var{name}, of which the returned service
22263 For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
22267 (simple-service 'my-mcron-job mcron-service-type
22268 #~(job '(next-hour (3)) "guix gc -F 2G"))
22272 At the core of the service abstraction lies the @code{fold-services}
22273 procedure, which is responsible for ``compiling'' a list of services down to
22274 a single directory that contains everything needed to boot and run the
22275 system---the directory shown by the @command{guix system build} command
22276 (@pxref{Invoquer guix system}). In essence, it propagates service
22277 extensions down the service graph, updating each node parameters on the way,
22278 until it reaches the root node.
22280 @deffn {Procédure Scheme} fold-services @var{services} @
22281 [#:target-type @var{system-service-type}] Fold @var{services} by propagating
22282 their extensions down to the root of type @var{target-type}; return the root
22283 service adjusted accordingly.
22286 Lastly, the @code{(gnu services)} module also defines several essential
22287 service types, some of which are listed below.
22289 @defvr {Variable Scheme} system-service-type
22290 This is the root of the service graph. It produces the system directory as
22291 returned by the @command{guix system build} command.
22294 @defvr {Variable Scheme} boot-service-type
22295 The type of the ``boot service'', which produces the @dfn{boot script}. The
22296 boot script is what the initial RAM disk runs when booting.
22299 @defvr {Variable Scheme} etc-service-type
22300 The type of the @file{/etc} service. This service is used to create files
22301 under @file{/etc} and can be extended by passing it name/file tuples such
22305 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
22308 In this example, the effect would be to add an @file{/etc/issue} file
22309 pointing to the given file.
22312 @defvr {Variable Scheme} setuid-program-service-type
22313 Type for the ``setuid-program service''. This service collects lists of
22314 executable file names, passed as gexps, and adds them to the set of
22315 setuid-root programs on the system (@pxref{Programmes setuid}).
22318 @defvr {Variable Scheme} profile-service-type
22319 Type of the service that populates the @dfn{system profile}---i.e., the
22320 programs under @file{/run/current-system/profile}. Other services can
22321 extend it by passing it lists of packages to add to the system profile.
22325 @node Services Shepherd
22326 @subsubsection Services Shepherd
22328 @cindex shepherd services
22330 @cindex init system
22331 The @code{(gnu services shepherd)} module provides a way to define services
22332 managed by the GNU@tie{}Shepherd, which is the GuixSD initialization
22333 system---the first process that is started when the system boots, also known
22334 as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
22336 Services in the Shepherd can depend on each other. For instance, the SSH
22337 daemon may need to be started after the syslog daemon has been started,
22338 which in turn can only happen once all the file systems have been mounted.
22339 The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this:
22341 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
22343 You can actually generate such a graph for any operating system definition
22344 using the @command{guix system shepherd-graph} command
22345 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
22347 The @var{%shepherd-root-service} is a service object representing
22348 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by
22349 passing it lists of @code{<shepherd-service>} objects.
22351 @deftp {Type de données} shepherd-service
22352 The data type representing a service managed by the Shepherd.
22355 @item @code{provision}
22356 This is a list of symbols denoting what the service provides.
22358 These are the names that may be passed to @command{herd start},
22359 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
22360 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
22361 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
22363 @item @code{requirements} (par défaut : @code{'()})
22364 List of symbols denoting the Shepherd services this one depends on.
22366 @item @code{respawn?} (par défaut : @code{#t})
22367 Whether to restart the service when it stops, for instance when the
22368 underlying process dies.
22371 @itemx @code{stop} (par défaut : @code{#~(const #f)})
22372 The @code{start} and @code{stop} fields refer to the Shepherd's facilities
22373 to start and stop processes (@pxref{Service De- and Constructors,,,
22374 shepherd, The GNU Shepherd Manual}). They are given as G-expressions that
22375 get expanded in the Shepherd configuration file (@pxref{G-Expressions}).
22377 @item @code{actions} (default: @code{'()})
22378 @cindex actions, of Shepherd services
22379 This is a list of @code{shepherd-action} objects (see below) defining
22380 @dfn{actions} supported by the service, in addition to the standard
22381 @code{start} and @code{stop} actions. Actions listed here become available
22382 as @command{herd} sub-commands:
22385 herd @var{action} @var{service} [@var{arguments}@dots{}]
22388 @item @code{documentation}
22389 A documentation string, as shown when running:
22392 herd doc @var{service-name}
22395 where @var{service-name} is one of the symbols in @var{provision}
22396 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
22398 @item @code{modules} (par défaut : @var{%default-modules})
22399 This is the list of modules that must be in scope when @code{start} and
22400 @code{stop} are evaluated.
22405 @deftp {Data Type} shepherd-action
22406 This is the data type that defines additional actions implemented by a
22407 Shepherd service (see above).
22411 Symbol naming the action.
22413 @item documentation
22414 This is a documentation string for the action. It can be viewed by running:
22417 herd doc @var{service} action @var{action}
22421 This should be a gexp that evaluates to a procedure of at least one
22422 argument, which is the ``running value'' of the service (@pxref{Slots of
22423 services,,, shepherd, The GNU Shepherd Manual}).
22426 The following example defines an action called @code{say-hello} that kindly
22432 (documentation "Say hi!")
22433 (procedure #~(lambda (running . args)
22434 (format #t "Hello, friend! arguments: ~s\n"
22439 Assuming this action is added to the @code{example} service, then you can
22443 # herd say-hello example
22444 Hello, friend! arguments: ()
22445 # herd say-hello example a b c
22446 Hello, friend! arguments: ("a" "b" "c")
22449 This, as you can see, is a fairly sophisticated way to say hello.
22450 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
22454 @defvr {Variable Scheme} shepherd-root-service-type
22455 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
22457 This is the service type that extensions target when they want to create
22458 shepherd services (@pxref{Types service et services}, for an example).
22459 Each extension must pass a list of @code{<shepherd-service>}.
22462 @defvr {Variable Scheme} %shepherd-root-service
22463 This service represents PID@tie{}1.
22467 @node Documentation
22468 @section Documentation
22470 @cindex documentation, searching for
22471 @cindex searching for documentation
22472 @cindex Info, documentation format
22474 @cindex manual pages
22475 In most cases packages installed with Guix come with documentation. There
22476 are two main documentation formats: ``Info'', a browseable hypertext format
22477 used for GNU software, and ``manual pages'' (or ``man pages''), the linear
22478 documentation format traditionally found on Unix. Info manuals are accessed
22479 with the @command{info} command or with Emacs, and man pages are accessed
22480 using @command{man}.
22482 You can look for documentation of software installed on your system by
22483 keyword. For example, the following command searches for information about
22484 ``TLS'' in Info manuals:
22488 "(emacs)Network Security" -- STARTTLS
22489 "(emacs)Network Security" -- TLS
22490 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
22491 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
22496 The command below searches for the same keyword in man pages:
22500 SSL (7) - OpenSSL SSL/TLS library
22501 certtool (1) - GnuTLS certificate tool
22505 These searches are purely local to your computer so you have the guarantee
22506 that documentation you find corresponds to what you have actually installed,
22507 you can access it off-line, and your privacy is respected.
22509 Once you have these results, you can view the relevant documentation by
22513 $ info "(gnutls)Core TLS API"
22523 Info manuals contain sections and indices as well as hyperlinks like those
22524 found in Web pages. The @command{info} reader (@pxref{Top, Info reader,,
22525 info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc
22526 Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to
22527 navigate manuals. @xref{Getting Started,,, info, Info: An Introduction},
22528 for an introduction to Info navigation.
22530 @node Installer les fichiers de débogage
22531 @section Installer les fichiers de débogage
22533 @cindex debugging files
22534 Program binaries, as produced by the GCC compilers for instance, are
22535 typically written in the ELF format, with a section containing
22536 @dfn{debugging information}. Debugging information is what allows the
22537 debugger, GDB, to map binary code to source code; it is required to debug a
22538 compiled program in good conditions.
22540 Le problème avec les informations de débogage est qu'elles prennent pas mal
22541 de place sur le disque. Par exemple, les informations de débogage de la
22542 bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
22543 garder toutes les informations de débogage de tous les programmes installés
22544 n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
22545 pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
22546 faciliter pour ses utilisateurs l'exercice de leurs libertés
22547 (@pxref{Distribution GNU}).
22549 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism
22550 that allows users to get the best of both worlds: debugging information can
22551 be stripped from the binaries and stored in separate files. GDB is then
22552 able to load debugging information from those files, when they are available
22553 (@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
22555 The GNU distribution takes advantage of this by storing debugging
22556 information in the @code{lib/debug} sub-directory of a separate package
22557 output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package
22558 when they need it. For instance, the following command installs the
22559 debugging information for the GNU C Library and for GNU Guile:
22562 guix package -i glibc:debug guile:debug
22565 GDB must then be told to look for debug files in the user's profile, by
22566 setting the @code{debug-file-directory} variable (consider setting it from
22567 the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}):
22570 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
22573 From there on, GDB will pick up debugging information from the @code{.debug}
22574 files under @file{~/.guix-profile/lib/debug}.
22576 In addition, you will most likely want GDB to be able to show the source
22577 code being debugged. To do that, you will have to unpack the source code of
22578 the package of interest (obtained with @code{guix build --source},
22579 @pxref{Invoquer guix build}), and to point GDB to that source directory
22580 using the @code{directory} command (@pxref{Source Path, @code{directory},,
22581 gdb, Debugging with GDB}).
22583 @c XXX: keep me up-to-date
22584 The @code{debug} output mechanism in Guix is implemented by the
22585 @code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is
22586 opt-in---debugging information is available only for the packages with
22587 definitions explicitly declaring a @code{debug} output. This may be changed
22588 to opt-out in the future if our build farm servers can handle the load. To
22589 check whether a package has a @code{debug} output, use @command{guix package
22590 --list-available} (@pxref{Invoquer guix package}).
22593 @node Mises à jour de sécurité
22594 @section Mises à jour de sécurité
22596 @cindex security updates
22597 @cindex vulnérabilités
22598 Occasionally, important security vulnerabilities are discovered in software
22599 packages and must be patched. Guix developers try hard to keep track of
22600 known vulnerabilities and to apply fixes as soon as possible in the
22601 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
22602 containing only security updates.) The @command{guix lint} tool helps
22603 developers find out about vulnerable versions of software packages in the
22608 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
22609 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
22610 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
22614 @xref{Invoquer guix lint}, for more information.
22616 @quotation Remarque
22617 As of version @value{VERSION}, the feature described below is considered
22621 Guix suit une discipline de gestion de paquets fonctionnelle
22622 (@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
22623 @emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
22624 peut grandement ralentir le déploiement de corrections dans les paquets du
22625 cœur comme libc ou bash comme presque toute la distribution aurait besoin
22626 d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
22627 (@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
22631 To address this, Guix implements @dfn{grafts}, a mechanism that allows for
22632 fast deployment of critical updates without the costs associated with a
22633 whole-distribution rebuild. The idea is to rebuild only the package that
22634 needs to be patched, and then to ``graft'' it onto packages explicitly
22635 installed by the user and that were previously referring to the original
22636 package. The cost of grafting is typically very low, and order of
22637 magnitudes lower than a full rebuild of the dependency chain.
22639 @cindex replacements of packages, for grafts
22640 For instance, suppose a security update needs to be applied to Bash. Guix
22641 developers will provide a package definition for the ``fixed'' Bash, say
22642 @var{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
22643 original package definition is augmented with a @code{replacement} field
22644 pointing to the package containing the bug fix:
22651 (replacement bash-fixed)))
22654 From there on, any package depending directly or indirectly on Bash---as
22655 reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
22656 is installed is automatically ``rewritten'' to refer to @var{bash-fixed}
22657 instead of @var{bash}. This grafting process takes time proportional to the
22658 size of the package, usually less than a minute for an ``average'' package
22659 on a recent machine. Grafting is recursive: when an indirect dependency
22660 requires grafting, then grafting ``propagates'' up to the package that the
22661 user is installing.
22663 Currently, the length of the name and version of the graft and that of the
22664 package it replaces (@var{bash-fixed} and @var{bash} in the example above)
22665 must be equal. This restriction mostly comes from the fact that grafting
22666 works by patching files, including binary files, directly. Other
22667 restrictions may apply: for instance, when adding a graft to a package
22668 providing a shared library, the original shared library and its replacement
22669 must have the same @code{SONAME} and be binary-compatible.
22671 The @option{--no-grafts} command-line option allows you to forcefully avoid
22672 grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
22676 guix build bash --no-grafts
22680 returns the store file name of the original Bash, whereas:
22687 returns the store file name of the ``fixed'', replacement Bash. This allows
22688 you to distinguish between the two variants of Bash.
22690 To verify which Bash your whole profile refers to, you can run
22691 (@pxref{Invoquer guix gc}):
22694 guix gc -R `readlink -f ~/.guix-profile` | grep bash
22698 @dots{} and compare the store file names that you get with those above.
22699 Likewise for a complete GuixSD system generation:
22702 guix gc -R `guix system build my-config.scm` | grep bash
22705 Lastly, to check which Bash running processes are using, you can use the
22706 @command{lsof} command:
22709 lsof | grep /gnu/store/.*bash
22713 @node Modules de paquets
22714 @section Modules de paquets
22716 From a programming viewpoint, the package definitions of the GNU
22717 distribution are provided by Guile modules in the @code{(gnu packages
22718 @dots{})} name space@footnote{Note that packages under the @code{(gnu
22719 packages @dots{})} module name space are not necessarily ``GNU packages''.
22720 This module naming scheme follows the usual Guile module naming convention:
22721 @code{gnu} means that these modules are distributed as part of the GNU
22722 system, and @code{packages} identifies modules that define packages.}
22723 (@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For
22724 instance, the @code{(gnu packages emacs)} module exports a variable named
22725 @code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}).
22727 The @code{(gnu packages @dots{})} module name space is automatically scanned
22728 for packages by the command-line tools. For instance, when running
22729 @code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules
22730 are scanned until one that exports a package object whose name is
22731 @code{emacs} is found. This package search facility is implemented in the
22732 @code{(gnu packages)} module.
22734 @cindex personnalisation, des paquets
22735 @cindex package module search path
22736 Users can store package definitions in modules with different names---e.g.,
22737 @code{(my-packages emacs)}@footnote{Note that the file name and module name
22738 must match. For instance, the @code{(my-packages emacs)} module must be
22739 stored in a @file{my-packages/emacs.scm} file relative to the load path
22740 specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}.
22741 @xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for
22742 details.}. These package definitions will not be visible by default. Users
22743 can invoke commands such as @command{guix package} and @command{guix build}
22744 with the @code{-e} option so that they know where to find the package.
22745 Better yet, they can use the @code{-L} option of these commands to make
22746 those modules visible (@pxref{Invoquer guix build, @code{--load-path}}), or
22747 define the @code{GUIX_PACKAGE_PATH} environment variable. This environment
22748 variable makes it easy to extend or customize the distribution and is
22749 honored by all the user interfaces.
22751 @defvr {Environment Variable} GUIX_PACKAGE_PATH
22752 This is a colon-separated list of directories to search for additional
22753 package modules. Directories listed in this variable take precedence over
22754 the own modules of the distribution.
22757 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each
22758 package is built based solely on other packages in the distribution. The
22759 root of this dependency graph is a small set of @dfn{bootstrap binaries},
22760 provided by the @code{(gnu packages bootstrap)} module. For more
22761 information on bootstrapping, @pxref{Bootstrapping}.
22763 @node Consignes d'empaquetage
22764 @section Consignes d'empaquetage
22766 @cindex packages, creating
22767 The GNU distribution is nascent and may well lack some of your favorite
22768 packages. This section describes how you can help make the distribution
22769 grow. @xref{Contribuer}, for additional information on how you can help.
22771 Free software packages are usually distributed in the form of @dfn{source
22772 code tarballs}---typically @file{tar.gz} files that contain all the source
22773 files. Adding a package to the distribution means essentially two things:
22774 adding a @dfn{recipe} that describes how to build the package, including a
22775 list of other packages required to build it, and adding @dfn{package
22776 metadata} along with that recipe, such as a description and licensing
22779 In Guix all this information is embodied in @dfn{package definitions}.
22780 Package definitions provide a high-level view of the package. They are
22781 written using the syntax of the Scheme programming language; in fact, for
22782 each package we define a variable bound to the package definition, and
22783 export that variable from a module (@pxref{Modules de paquets}). However,
22784 in-depth Scheme knowledge is @emph{not} a prerequisite for creating
22785 packages. For more information on package definitions, @pxref{Définition des paquets}.
22787 Once a package definition is in place, stored in a file in the Guix source
22788 tree, it can be tested using the @command{guix build} command
22789 (@pxref{Invoquer guix build}). For example, assuming the new package is
22790 called @code{gnew}, you may run this command from the Guix build tree
22791 (@pxref{Lancer Guix avant qu'il ne soit installé}):
22794 ./pre-inst-env guix build gnew --keep-failed
22797 Using @code{--keep-failed} makes it easier to debug build failures since it
22798 provides access to the failed build tree. Another useful command-line
22799 option when debugging is @code{--log-file}, to access the build log.
22801 If the package is unknown to the @command{guix} command, it may be that the
22802 source file contains a syntax error, or lacks a @code{define-public} clause
22803 to export the package variable. To figure it out, you may load the module
22804 from Guile to get more information about the actual error:
22807 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
22810 Once your package builds correctly, please send us a patch
22811 (@pxref{Contribuer}). Well, if you need help, we will be happy to help
22812 you too. Once the patch is committed in the Guix repository, the new
22813 package automatically gets built on the supported platforms by
22814 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
22817 @cindex substituter
22818 On peut obtenir la nouvelle définition du paquet simplement en lançant
22819 @command{guix pull} (@pxref{Invoquer guix pull}). Lorsque
22820 @code{hydra.gnu.org} a fini de construire le paquet, l'installation du
22821 paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La
22822 seule intervention humaine requise est pendant la revue et l'application du
22827 * Liberté logiciel:: Ce que la distribution peut contenir.
22828 * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
22829 * Numéros de version:: Lorsque le nom n'est pas suffisant.
22830 * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
22832 * Modules python:: Un peu de comédie anglaise.
22833 * Modules perl:: Petites perles.
22834 * Paquets java:: Pause café.
22835 * Polices de caractères:: À fond les fontes.
22838 @node Liberté logiciel
22839 @subsection Liberté logiciel
22841 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
22842 @cindex free software
22843 The GNU operating system has been developed so that users can have freedom
22844 in their computing. GNU is @dfn{free software}, meaning that users have the
22845 @url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to
22846 run the program, to study and change the program in source code form, to
22847 redistribute exact copies, and to distribute modified versions. Packages
22848 found in the GNU distribution provide only software that conveys these four
22851 In addition, the GNU distribution follow the
22852 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
22853 software distribution guidelines}. Among other things, these guidelines
22854 reject non-free firmware, recommendations of non-free software, and discuss
22855 ways to deal with trademarks and patents.
22857 Some otherwise free upstream package sources contain a small and optional
22858 subset that violates the above guidelines, for instance because this subset
22859 is itself non-free code. When that happens, the offending items are removed
22860 with appropriate patches or code snippets in the @code{origin} form of the
22861 package (@pxref{Définition des paquets}). This way, @code{guix build --source}
22862 returns the ``freed'' source rather than the unmodified upstream source.
22865 @node Conventions de nommage
22866 @subsection Conventions de nommage
22868 @cindex package name
22869 A package has actually two names associated with it: First, there is the
22870 name of the @emph{Scheme variable}, the one following @code{define-public}.
22871 By this name, the package can be made known in the Scheme code, for instance
22872 as input to another package. Second, there is the string in the @code{name}
22873 field of a package definition. This name is used by package management
22874 commands such as @command{guix package} and @command{guix build}.
22876 Both are usually the same and correspond to the lowercase conversion of the
22877 project name chosen upstream, with underscores replaced with hyphens. For
22878 instance, GNUnet is available as @code{gnunet}, and SDL_net as
22881 We do not add @code{lib} prefixes for library packages, unless these are
22882 already part of the official project name. But @pxref{Modules python} and
22883 @ref{Modules perl} for special rules concerning modules for the Python and
22886 Font package names are handled differently, @pxref{Polices de caractères}.
22889 @node Numéros de version
22890 @subsection Numéros de version
22892 @cindex package version
22893 We usually package only the latest version of a given free software
22894 project. But sometimes, for instance for incompatible library versions, two
22895 (or more) versions of the same package are needed. These require different
22896 Scheme variable names. We use the name as defined in @ref{Conventions de nommage}
22897 for the most recent version; previous versions use the same name, suffixed
22898 by @code{-} and the smallest prefix of the version number that may
22899 distinguish the two versions.
22901 The name inside the package definition is the same for all versions of a
22902 package and does not contain any version number.
22904 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as
22908 (define-public gtk+
22913 (define-public gtk+-2
22916 (version "2.24.20")
22919 If we also wanted GTK+ 3.8.2, this would be packaged as
22921 (define-public gtk+-3.8
22928 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
22929 @c for a discussion of what follows.
22930 @cindex version number, for VCS snapshots
22931 Occasionally, we package snapshots of upstream's version control system
22932 (VCS) instead of formal releases. This should remain exceptional, because
22933 it is up to upstream developers to clarify what the stable release is. Yet,
22934 it is sometimes necessary. So, what should we put in the @code{version}
22937 Clearly, we need to make the commit identifier of the VCS snapshot visible
22938 in the version string, but we also need to make sure that the version string
22939 is monotonically increasing so that @command{guix package --upgrade} can
22940 determine which version is newer. Since commit identifiers, notably with
22941 Git, are not monotonically increasing, we add a revision number that we
22942 increase each time we upgrade to a newer snapshot. The resulting version
22943 string looks like this:
22948 | | `-- upstream commit ID
22950 | `--- Guix package revision
22952 latest upstream version
22955 It is a good idea to strip commit identifiers in the @code{version} field
22956 to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics
22957 have a role to play here) as well as problems related to OS limits such as
22958 the maximum shebang length (127 bytes for the Linux kernel.) It is best to
22959 use the full commit identifiers in @code{origin}s, though, to avoid
22960 ambiguities. A typical package definition may look like this:
22964 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
22965 (revision "1")) ;révision du paquet Guix
22967 (version (git-version "0.9" revision commit))
22970 (uri (git-reference
22971 (url "git://example.org/my-package.git")
22973 (sha256 (base32 "1mbikn@dots{}"))
22974 (file-name (git-file-name name version))))
22979 @node Synopsis et descriptions
22980 @subsection Synopsis et descriptions
22982 @cindex package description
22983 @cindex package synopsis
22984 As we have seen before, each package in GNU@tie{}Guix includes a synopsis
22985 and a description (@pxref{Définition des paquets}). Synopses and descriptions
22986 are important: They are what @command{guix package --search} searches, and a
22987 crucial piece of information to help users determine whether a given package
22988 suits their needs. Consequently, packagers should pay attention to what
22991 Synopses must start with a capital letter and must not end with a period.
22992 They must not start with ``a'' or ``the'', which usually does not bring
22993 anything; for instance, prefer ``File-frobbing tool'' over ``A tool that
22994 frobs files''. The synopsis should say what the package is---e.g., ``Core
22995 GNU utilities (file, text, shell)''---or what it is used for---e.g., the
22996 synopsis for GNU@tie{}grep is ``Print lines matching a pattern''.
22998 Keep in mind that the synopsis must be meaningful for a very wide audience.
22999 For example, ``Manipulate alignments in the SAM format'' might make sense
23000 for a seasoned bioinformatics researcher, but might be fairly unhelpful or
23001 even misleading to a non-specialized audience. It is a good idea to come up
23002 with a synopsis that gives an idea of the application domain of the
23003 package. In this example, this might give something like ``Manipulate
23004 nucleotide sequence alignments'', which hopefully gives the user a better
23005 idea of whether this is what they are looking for.
23007 Descriptions should take between five and ten lines. Use full sentences,
23008 and avoid using acronyms without first introducing them. Please avoid
23009 marketing phrases such as ``world-leading'', ``industrial-strength'', and
23010 ``next-generation'', and avoid superlatives like ``the most
23011 advanced''---they are not helpful to users looking for a package and may
23012 even sound suspicious. Instead, try to be factual, mentioning use cases and
23015 @cindex Texinfo markup, in package descriptions
23016 Descriptions can include Texinfo markup, which is useful to introduce
23017 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks
23018 (@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful
23019 when using some characters for example @samp{@@} and curly braces which are
23020 the basic special characters in Texinfo (@pxref{Special Characters,,,
23021 texinfo, GNU Texinfo}). User interfaces such as @command{guix package
23022 --show} take care of rendering it appropriately.
23024 Synopses and descriptions are translated by volunteers
23025 @uref{http://translationproject.org/domain/guix-packages.html, at the
23026 Translation Project} so that as many users as possible can read them in
23027 their native language. User interfaces search them and display them in the
23028 language specified by the current locale.
23030 To allow @command{xgettext} to extract them as translatable strings,
23031 synopses and descriptions @emph{must be literal strings}. This means that
23032 you cannot use @code{string-append} or @code{format} to construct these
23038 (synopsis "This is translatable")
23039 (description (string-append "This is " "*not*" " translatable.")))
23042 Translation is a lot of work so, as a packager, please pay even more
23043 attention to your synopses and descriptions as every change may entail
23044 additional work for translators. In order to help them, it is possible to
23045 make recommendations or instructions visible to them by inserting special
23046 comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}):
23049 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
23050 (description "ARandR is designed to provide a simple visual front end
23051 for the X11 resize-and-rotate (RandR) extension. @dots{}")
23055 @node Modules python
23056 @subsection Modules python
23059 We currently package Python 2 and Python 3, under the Scheme variable names
23060 @code{python-2} and @code{python} as explained in @ref{Numéros de version}. To
23061 avoid confusion and naming clashes with other programming languages, it
23062 seems desirable that the name of a package for a Python module contains the
23063 word @code{python}.
23065 Some modules are compatible with only one version of Python, others with
23066 both. If the package Foo compiles only with Python 3, we name it
23067 @code{python-foo}; if it compiles only with Python 2, we name it
23068 @code{python2-foo}. If it is compatible with both versions, we create two
23069 packages with the corresponding names.
23071 If a project already contains the word @code{python}, we drop this; for
23072 instance, the module python-dateutil is packaged under the names
23073 @code{python-dateutil} and @code{python2-dateutil}. If the project name
23074 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
23077 @subsubsection Specifying Dependencies
23078 @cindex inputs, for Python packages
23080 Dependency information for Python packages is usually available in the
23081 package source tree, with varying degrees of accuracy: in the
23082 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
23084 Your mission, when writing a recipe for a Python package, is to map these
23085 dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet,
23086 inputs}). Although the @code{pypi} importer normally does a good job
23087 (@pxref{Invoquer guix import}), you may want to check the following check
23088 list to determine which dependency goes where.
23093 We currently package Python 2 with @code{setuptools} and @code{pip}
23094 installed like Python 3.4 has per default. Thus you don't need to specify
23095 either of these as an input. @command{guix lint} will warn you if you do.
23098 Python dependencies required at run time go into @code{propagated-inputs}.
23099 They are typically defined with the @code{install_requires} keyword in
23100 @file{setup.py}, or in the @file{requirements.txt} file.
23103 Python packages required only at build time---e.g., those listed with the
23104 @code{setup_requires} keyword in @file{setup.py}---or only for
23105 testing---e.g., those in @code{tests_require}---go into
23106 @code{native-inputs}. The rationale is that (1) they do not need to be
23107 propagated because they are not needed at run time, and (2) in a
23108 cross-compilation context, it's the ``native'' input that we'd want.
23110 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
23111 frameworks. Of course if any of these packages is also required at
23112 run-time, it needs to go to @code{propagated-inputs}.
23115 Anything that does not fall in the previous categories goes to
23116 @code{inputs}, for example programs or C libraries required for building
23117 Python packages containing C extensions.
23120 If a Python package has optional dependencies (@code{extras_require}), it is
23121 up to you to decide whether to add them or not, based on their
23122 usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}).
23128 @subsection Modules perl
23131 Perl programs standing for themselves are named as any other package, using
23132 the lowercase upstream name. For Perl packages containing a single class,
23133 we use the lowercase class name, replace all occurrences of @code{::} by
23134 dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser}
23135 becomes @code{perl-xml-parser}. Modules containing several classes keep
23136 their lowercase upstream name and are also prepended by @code{perl-}. Such
23137 modules tend to have the word @code{perl} somewhere in their name, which
23138 gets dropped in favor of the prefix. For instance, @code{libwww-perl}
23139 becomes @code{perl-libwww}.
23143 @subsection Paquets java
23146 Java programs standing for themselves are named as any other package, using
23147 the lowercase upstream name.
23149 To avoid confusion and naming clashes with other programming languages, it
23150 is desirable that the name of a package for a Java package is prefixed with
23151 @code{java-}. If a project already contains the word @code{java}, we drop
23152 this; for instance, the package @code{ngsjava} is packaged under the name
23155 For Java packages containing a single class or a small class hierarchy, we
23156 use the lowercase class name, replace all occurrences of @code{.} by dashes
23157 and prepend the prefix @code{java-}. So the class @code{apache.commons.cli}
23158 becomes package @code{java-apache-commons-cli}.
23161 @node Polices de caractères
23162 @subsection Polices de caractères
23165 For fonts that are in general not installed by a user for typesetting
23166 purposes, or that are distributed as part of a larger software package, we
23167 rely on the general packaging rules for software; for instance, this applies
23168 to the fonts delivered as part of the X.Org system or fonts that are part of
23171 To make it easier for a user to search for fonts, names for other packages
23172 containing only fonts are constructed as follows, independently of the
23173 upstream package name.
23175 The name of a package containing only one font family starts with
23176 @code{font-}; it is followed by the foundry name and a dash @code{-} if the
23177 foundry is known, and the font family name, in which spaces are replaced by
23178 dashes (and as usual, all upper case letters are transformed to lower
23179 case). For example, the Gentium font family by SIL is packaged under the
23180 name @code{font-sil-gentium}.
23182 For a package containing several font families, the name of the collection
23183 is used in the place of the font family name. For instance, the Liberation
23184 fonts consist of three families, Liberation Sans, Liberation Serif and
23185 Liberation Mono. These could be packaged separately under the names
23186 @code{font-liberation-sans} and so on; but as they are distributed together
23187 under a common name, we prefer to package them together as
23188 @code{font-liberation}.
23190 In the case where several formats of the same font family or font collection
23191 are packaged separately, a short form of the format, prepended by a dash, is
23192 added to the package name. We use @code{-ttf} for TrueType fonts,
23193 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
23198 @node Bootstrapping
23199 @section Bootstrapping
23201 @c Adapted from the ELS 2013 paper.
23203 @cindex bootstrapping
23205 Bootstrapping in our context refers to how the distribution gets built
23206 ``from nothing''. Remember that the build environment of a derivation
23207 contains nothing but its declared inputs (@pxref{Introduction}). So there's
23208 an obvious chicken-and-egg problem: how does the first package get built?
23209 How does the first compiler get compiled? Note that this is a question of
23210 interest only to the curious hacker, not to the regular user, so you can
23211 shamelessly skip this section if you consider yourself a ``regular user''.
23213 @cindex bootstrap binaries
23214 The GNU system is primarily made of C code, with libc at its core. The GNU
23215 build system itself assumes the availability of a Bourne shell and
23216 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
23217 `grep'. Furthermore, build programs---programs that run @code{./configure},
23218 @code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}).
23219 Consequently, to be able to build anything at all, from scratch, Guix relies
23220 on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages
23221 mentioned above---the @dfn{bootstrap binaries}.
23223 These bootstrap binaries are ``taken for granted'', though we can also
23224 re-create them if needed (more on that later).
23226 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
23228 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
23229 @c large image, it's hard to scroll. Oh well.
23230 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap
23233 The figure above shows the very beginning of the dependency graph of the
23234 distribution, corresponding to the package definitions of the @code{(gnu
23235 packages bootstrap)} module. A similar figure can be generated with
23236 @command{guix graph} (@pxref{Invoquer guix graph}), along the lines of:
23239 guix graph -t derivation \
23240 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
23244 At this level of detail, things are slightly complex. First, Guile itself
23245 consists of an ELF executable, along with many source and compiled Scheme
23246 files that are dynamically loaded when it runs. This gets stored in the
23247 @file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part
23248 of Guix's ``source'' distribution, and gets inserted into the store with
23249 @code{add-to-store} (@pxref{Le dépôt}).
23251 But how do we write a derivation that unpacks this tarball and adds it to
23252 the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
23253 derivation---the first one that gets built---uses @code{bash} as its
23254 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
23255 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz},
23256 and @file{mkdir} are statically-linked binaries, also part of the Guix
23257 source distribution, whose sole purpose is to allow the Guile tarball to be
23260 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile
23261 that can be used to run subsequent build programs. Its first task is to
23262 download tarballs containing the other pre-built binaries---this is what the
23263 @code{.tar.xz.drv} derivations do. Guix modules such as
23264 @code{ftp-client.scm} are used for this purpose. The
23265 @code{module-import.drv} derivations import those modules in a directory in
23266 the store, using the original layout. The @code{module-import-compiled.drv}
23267 derivations compile those modules, and write them in an output directory
23268 with the right layout. This corresponds to the @code{#:modules} argument of
23269 @code{build-expression->derivation} (@pxref{Dérivations}).
23271 Finally, the various tarballs are unpacked by the derivations
23272 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which
23273 point we have a working C tool chain.
23276 @unnumberedsubsec Building the Build Tools
23278 Bootstrapping is complete when we have a full tool chain that does not
23279 depend on the pre-built bootstrap tools discussed above. This no-dependency
23280 requirement is verified by checking whether the files of the final tool
23281 chain contain references to the @file{/gnu/store} directories of the
23282 bootstrap inputs. The process that leads to this ``final'' tool chain is
23283 described by the package definitions found in the @code{(gnu packages
23284 commencement)} module.
23286 The @command{guix graph} command allows us to ``zoom out'' compared to the
23287 graph above, by looking at the level of package objects instead of
23288 individual derivations---remember that a package may translate to several
23289 derivations, typically one derivation to download its source, one to build
23290 the Guile modules it needs, and one to actually build the package from
23291 source. The command:
23294 guix graph -t bag \
23295 -e '(@@@@ (gnu packages commencement)
23296 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
23300 produces the dependency graph leading to the ``final'' C
23301 library@footnote{You may notice the @code{glibc-intermediate} label,
23302 suggesting that it is not @emph{quite} final, but as a good approximation,
23303 we will consider it final.}, depicted below.
23305 @image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
23308 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
23309 The first tool that gets built with the bootstrap binaries is
23310 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for
23311 all the following packages. From there Findutils and Diffutils get built.
23313 Then come the first-stage Binutils and GCC, built as pseudo cross
23314 tools---i.e., with @code{--target} equal to @code{--host}. They are used to
23315 build libc. Thanks to this cross-build trick, this libc is guaranteed not
23316 to hold any reference to the initial tool chain.
23318 From there the final Binutils and GCC (not shown above) are built. GCC uses
23319 @code{ld} from the final Binutils, and links programs against the just-built
23320 libc. This tool chain is used to build the other packages used by Guix and
23321 by the GNU Build System: Guile, Bash, Coreutils, etc.
23323 And voilà! At this point we have the complete set of build tools that the
23324 GNU Build System expects. These are in the @code{%final-inputs} variable of
23325 the @code{(gnu packages commencement)} module, and are implicitly used by
23326 any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction,
23327 @code{gnu-build-system}}).
23330 @unnumberedsubsec Building the Bootstrap Binaries
23332 @cindex bootstrap binaries
23333 Because the final tool chain does not depend on the bootstrap binaries,
23334 those rarely need to be updated. Nevertheless, it is useful to have an
23335 automated way to produce them, should an update occur, and this is what the
23336 @code{(gnu packages make-bootstrap)} module provides.
23338 The following command builds the tarballs containing the bootstrap binaries
23339 (Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils
23340 and other basic command-line tools):
23343 guix build bootstrap-tarballs
23346 The generated tarballs are those that should be referred to in the
23347 @code{(gnu packages bootstrap)} module mentioned at the beginning of this
23350 Still here? Then perhaps by now you've started to wonder: when do we reach a
23351 fixed point? That is an interesting question! The answer is unknown, but if
23352 you would like to investigate further (and have significant computational
23353 and storage resources to do so), then let us know.
23355 @unnumberedsubsec Reducing the Set of Bootstrap Binaries
23357 Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of
23358 binary code! Why is that a problem? It's a problem because these big chunks
23359 of binary code are practically non-auditable, which makes it hard to
23360 establish what source code produced them. Every unauditable binary also
23361 leaves us vulnerable to compiler backdoors as described by Ken Thompson in
23362 the 1984 paper @emph{Reflections on Trusting Trust}.
23364 This is mitigated by the fact that our bootstrap binaries were generated
23365 from an earlier Guix revision. Nevertheless it lacks the level of
23366 transparency that we get in the rest of the package dependency graph, where
23367 Guix always gives us a source-to-binary mapping. Thus, our goal is to
23368 reduce the set of bootstrap binaries to the bare minimum.
23370 The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
23371 on-going projects to do that. One of these is about replacing the bootstrap
23372 GCC with a sequence of assemblers, interpreters, and compilers of increasing
23373 complexity, which could be built from source starting from a simple and
23374 auditable assembler. Your help is welcome!
23378 @section Porter vers une nouvelle plateforme
23380 As discussed above, the GNU distribution is self-contained, and
23381 self-containment is achieved by relying on pre-built ``bootstrap binaries''
23382 (@pxref{Bootstrapping}). These binaries are specific to an operating system
23383 kernel, CPU architecture, and application binary interface (ABI). Thus, to
23384 port the distribution to a platform that is not yet supported, one must
23385 build those bootstrap binaries, and update the @code{(gnu packages
23386 bootstrap)} module to use them on that platform.
23388 Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When
23389 everything goes well, and assuming the GNU tool chain supports the target
23390 platform, this can be as simple as running a command like this one:
23393 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
23396 For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu
23397 packages bootstrap)} must be augmented to return the right file name for
23398 libc's dynamic linker on that platform; likewise,
23399 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
23400 taught about the new platform.
23402 Once these are built, the @code{(gnu packages bootstrap)} module needs to be
23403 updated to refer to these binaries on the target platform. That is, the
23404 hashes and URLs of the bootstrap tarballs for the new platform must be added
23405 alongside those of the currently supported platforms. The bootstrap Guile
23406 tarball is treated specially: it is expected to be available locally, and
23407 @file{gnu/local.mk} has rules do download it for the supported
23408 architectures; a rule for the new platform must be added as well.
23410 In practice, there may be some complications. First, it may be that the
23411 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
23412 above) is not recognized by all the GNU tools. Typically, glibc recognizes
23413 some of these, whereas GCC uses an extra @code{--with-abi} configure flag
23414 (see @code{gcc.scm} for examples of how to handle this). Second, some of
23415 the required packages could fail to build for that platform. Lastly, the
23416 generated binaries could be broken for some reason.
23418 @c *********************************************************************
23419 @include contributing.fr.texi
23421 @c *********************************************************************
23422 @node Remerciements
23423 @chapter Remerciements
23425 Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
23426 Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
23427 personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
23428 gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
23429 comme les mises à jour de paquets transactionnelles et les retours en
23430 arrière, les profils par utilisateurs et les processus de constructions
23431 transparents pour les références. Sans ce travail, Guix n'existerait pas.
23433 Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
23434 été une inspiration pour Guix.
23436 GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
23437 grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
23438 plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
23439 liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
23440 de l'infrastructure, en fournissant des images et des thèmes, en faisant des
23441 suggestions et bien plus. Merci !
23444 @c *********************************************************************
23445 @node La licence GNU Free Documentation
23446 @appendix La licence GNU Free Documentation
23447 @cindex license, GNU Free Documentation License
23448 @include fdl-1.3.texi
23450 @c *********************************************************************
23451 @node Index des concepts
23452 @unnumbered Index des concepts
23455 @node Index de programmation
23456 @unnumbered Index de programmation
23457 @syncodeindex tp fn
23458 @syncodeindex vr fn
23463 @c Local Variables:
23464 @c ispell-local-dictionary: "american";