summaryrefslogtreecommitdiff
path: root/doc/guix.fr.texi
diff options
context:
space:
mode:
authorMiguel Ángel Arruga Vivas <rosen644835@gmail.com>2019-04-23 11:30:32 +0200
committerJulien Lepiller <julien@lepiller.eu>2019-04-26 11:21:32 +0200
commit9ca5ff882e2ac4eaab02eb0fde545bd784af478b (patch)
treed90dbbd89461422e407a9c6974ed046e16ba0617 /doc/guix.fr.texi
parent7342923d98cbefec61c2d67ce916d83d42f4bc3e (diff)
bootstrap: Break automake dependency on generated files.
* bootstrap: Generate stub files for the manual translations whose generated files are not included in the VCS. * doc/contributing.de.texi: Remove file. * doc/contributing.es.texi: Remove file. * doc/contributing.fr.texi: Remove file. * doc/contributing.zh_CN.texi: Remove file. * doc/guix.de.texi: Remove file. * doc/guix.es.texi: Remove file. * doc/guix.fr.texi: Remove file. * doc/guix.zh_CN.texi: Remove file. * .gitignore: Add them. Signed-off-by: Julien Lepiller <julien@lepiller.eu>
Diffstat (limited to 'doc/guix.fr.texi')
-rw-r--r--doc/guix.fr.texi26504
1 files changed, 0 insertions, 26504 deletions
diff --git a/doc/guix.fr.texi b/doc/guix.fr.texi
deleted file mode 100644
index d961625d728..00000000000
--- a/doc/guix.fr.texi
+++ /dev/null
@@ -1,26504 +0,0 @@
1\input texinfo
2@c ===========================================================================
3@c
4@c This file was generated with po4a. Translate the source file.
5@c
6@c ===========================================================================
7@c -*-texinfo-*-
8
9@c %**start of header
10@setfilename guix.fr.info
11@documentencoding UTF-8
12@documentlanguage fr
13@frenchspacing on
14@settitle Manuel de référence de GNU Guix
15@c %**end of header
16
17@include version-fr.texi
18
19@c Identifier of the OpenPGP key used to sign tarballs and such.
20@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
21@set KEY-SERVER pool.sks-keyservers.net
22
23@c The official substitute server used by default.
24@set SUBSTITUTE-SERVER ci.guix.fr.info
25
26@copying
27Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019
28Ludovic Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
29Copyright @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014,
302015, 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
31Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
322015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
33Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo
34Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
352016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018,
362019 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@*
37Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017,
382018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
39Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016,
402017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018
41Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
42Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
432018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
44Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
45Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
46Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
47Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
48Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
49Andy Wingo@* Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@* Copyright
50@copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
51Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
52Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
53@copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
54Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
552018 Alex Vong@*
56
57Vous avez la permission de copier, distribuer ou modifier ce document sous
58les termes de la Licence GNU Free Documentation, version 1.3 ou toute
59version ultérieure publiée par la Free Software Foundation ; sans section
60invariante, texte de couverture et sans texte de quatrième de couverture.
61Une copie de la licence est incluse dans la section intitulée « GNU Free
62Documentation License ».
63@end copying
64
65@dircategory Administration système
66@direntry
67* Guix: (guix.fr). Gérer les logiciels installés et la
68 configuration du système.
69* guix package : (guix.fr)Invoquer guix package. Installer, supprimer et
70 mettre à jour des
71 paquets.
72* guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
73 inutilisé.
74* guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
75 paquets disponibles.
76* guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
77 système d'exploitation.
78@end direntry
79
80@dircategory Développement logiciel
81@direntry
82* guix environment : (guix.fr)Invoquer guix environment. Construire des
83 environnements
84 de construction
85 avec Guix.
86* guix build : (guix.fr)Invoquer guix build. Construire des paquets.
87* guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
88@end direntry
89
90@titlepage
91@title Manuel de référence de GNU Guix
92@subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
93@author Les développeurs de GNU Guix
94
95@page
96@vskip 0pt plus 1filll
97Édition @value{EDITION} @* @value{UPDATED} @*
98
99@insertcopying
100@end titlepage
101
102@contents
103
104@c *********************************************************************
105@node Top
106@top GNU Guix
107
108Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
109gestion de paquets fonctionnel écrit pour le système GNU@.
110
111@c TRANSLATORS: You can replace the following paragraph with information on
112@c how to join your own translation team and how to report issues with the
113@c translation.
114Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
115Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
116zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
117français, vous pouvez nous rejoindre sur le
118@uref{https://translationproject.org/domain/guix-manual.html, projet de
119traduction} et sur la liste de diffusion
120@uref{https://listes.traduc.org/mailman/listinfo/traduc/,
121traduc@@traduc.org}.
122
123@menu
124* Introduction:: Qu'est-ce que Guix ?
125* Installation:: Installer Guix.
126* Installation du système:: Installer le système d'exploitation complet.
127* Gestion de paquets:: Installation des paquets, mises à jour, etc.
128* Développement:: Développement logiciel simplifié par Guix.
129* Interface de programmation:: Utiliser Guix en Scheme.
130* Utilitaires:: Commandes de gestion de paquets.
131* Configuration système:: Configurer le système d'exploitation.
132* Documentation:: Visualiser les manuels d'utilisateur des
133 logiciels.
134* Installer les fichiers de débogage:: Nourrir le débogueur.
135* Mises à jour de sécurité:: Déployer des correctifs de sécurité
136 rapidement.
137* Bootstrapping:: GNU/Linux depuis zéro.
138* Porter:: Cibler une autre plateforme ou un autre noyau.
139* Contribuer:: Nous avons besoin de votre aide !
140
141* Remerciements:: Merci !
142* La licence GNU Free Documentation:: La licence de ce manuel.
143* Index des concepts:: Les concepts.
144* Index de programmation:: Types de données, fonctions et variables.
145
146@detailmenu
147 --- Liste détaillée des nœuds ---
148
149
150
151Introduction
152
153
154
155* Gérer ses logiciels avec Guix:: Ce qui est spécial.
156* Distribution GNU:: Les paquets et les outils.
157
158Installation
159
160
161
162* Installation binaire:: Commencer à utiliser Guix en un rien de temps
163 !
164* Prérequis:: Logiciels requis pour construire et lancer
165 Guix.
166* Lancer la suite de tests:: Tester Guix.
167* Paramétrer le démon:: Préparer l'environnement du démon de
168 construction.
169* Invoquer guix-daemon:: Lancer le démon de construction.
170* Réglages applicatifs:: Réglages spécifiques pour les application.
171
172Paramétrer le démon
173
174
175
176* Réglages de l'environnement de construction:: Préparer l'environnement
177 de construction isolé.
178* Réglages du délestage du démon:: Envoyer des constructions à des
179 machines distantes.
180* Support de SELinux:: Utiliser une politique SELinux pour le démon.
181
182Installation du système
183
184
185
186* Limitations:: Ce à quoi vous attendre.
187* Considérations matérielles:: Matériel supporté.
188* Installation depuis une clef USB ou un DVD:: Préparer le média
189 d'installation.
190* Préparer l'installation:: Réseau, partitionnement, etc.
191* Installation graphique guidée:: Installation graphique facile.
192* Installation manuelle:: Installation manuelle pour les sorciers.
193* Après l'installation du système:: Une fois que l'installation a
194 réussi.
195* Installer Guix dans une VM:: Jouer avec le système Guix.
196* Construire l'image d'installation:: D'où vient tout cela.
197
198Installation manuelle
199
200
201
202* Disposition du clavier réseau et partitionnement:: Paramètres initiaux.
203* Effectuer l'installation:: Installer.
204
205Gestion de paquets
206
207
208
209* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
210* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
211* Substituts:: Télécharger des binaire déjà construits.
212* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
213 résultats.
214* Invoquer guix gc:: Lancer le ramasse-miettes.
215* Invoquer guix pull:: Récupérer la dernière version de Guix et de
216 la distribution.
217* Canaux:: Personnaliser la collection des paquets.
218* Inférieurs:: Interagir avec une autre révision de Guix.
219* Invoquer guix describe:: Affiche des informations sur la révision Guix
220 actuelle.
221* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
222
223Substituts
224
225
226
227* Serveur de substituts officiel:: Une source particulière de substituts.
228* Autoriser un serveur de substituts:: Comment activer ou désactiver les
229 substituts.
230* Authentification des substituts:: Comment Guix vérifie les substituts.
231* Paramètres de serveur mandataire:: Comment récupérer des substituts à
232 travers un serveur mandataire.
233* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
234* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
235 un paquet binaire ?
236
237Développement
238
239
240
241* Invoquer guix environment:: Mettre en place des environnements de
242 développement.
243* Invoquer guix pack:: Créer des lots de logiciels.
244
245Interface de programmation
246
247
248
249* Modules de paquets:: Les paquets du point de vu du programmeur.
250* Définition des paquets:: Définir de nouveaux paquets.
251* Systèmes de construction:: Spécifier comment construire les paquets.
252* Le dépôt:: Manipuler le dépôt de paquets.
253* Dérivations:: Interface de bas-niveau avec les dérivations
254 de paquets.
255* La monade du dépôt:: Interface purement fonctionnelle avec le
256 dépôt.
257* G-Expressions:: Manipuler les expressions de construction.
258* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
259
260Définition des paquets
261
262
263
264* Référence des paquets:: Le type de donnée des paquets.
265* Référence des origines:: Le type de données d'origine.
266
267Utilitaires
268
269
270
271* Invoquer guix build:: Construire des paquets depuis la ligne de
272 commande.
273* Invoquer guix edit:: Modifier les définitions de paquets.
274* Invoquer guix download:: Télécharger un fichier et afficher son hash.
275* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
276* Invoquer guix import:: Importer des définitions de paquets.
277* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
278* Invoquer guix lint:: Trouver des erreurs dans les définitions de
279 paquets.
280* Invoquer guix size:: Profiler l'utilisation du disque.
281* Invoquer guix graph:: Visualiser le graphe des paquets.
282* Invoquer guix publish:: Partager des substituts.
283* Invoquer guix challenge:: Défier les serveurs de substituts.
284* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
285* Invoquer guix container:: Isolation de processus.
286* Invoquer guix weather:: Mesurer la disponibilité des substituts.
287* Invoquer guix processes:: Lister les processus clients.
288
289Invoquer @command{guix build}
290
291
292
293* Options de construction communes:: Options de construction pour la
294 plupart des commandes.
295* Options de transformation de paquets:: Créer des variantes de paquets.
296* Options de construction supplémentaires:: Options spécifiques à «
297 guix build ».
298* Débogage des échecs de construction:: La vie d'un empaqueteur.
299
300Configuration système
301
302
303
304* Utiliser le système de configuration:: Personnaliser votre système
305 GNU@.
306* Référence de système d'exploitation:: Détail sur la déclaration de
307 système d'exploitation.
308* Systèmes de fichiers:: Configurer les montages de systèmes de
309 fichiers.
310* Périphériques mappés:: Gestion des périphériques de bloc.
311* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
312* Disposition du clavier:: La manière dont le système interprète les
313 touches du clavier.
314* Régionalisation:: Paramétrer la langue et les conventions
315 culturelles.
316* Services:: Spécifier les services du système.
317* Programmes setuid:: Programmes tournant avec les privilèges root.
318* Certificats X.509:: Authentifier les serveurs HTTPS@.
319* Name Service Switch:: Configurer le « name service switch » de la
320 libc.
321* Disque de RAM initial:: Démarrage de Linux-Libre.
322* Configuration du chargeur d'amorçage:: Configurer le chargeur
323 d'amorçage.
324* Invoquer guix system:: Instantier une configuration du système.
325* Lancer Guix dans une VM:: Comment lancer Guix dans une machine virtuelle.
326* Définir des services:: Ajouter de nouvelles définitions de services.
327
328Services
329
330
331
332* Services de base:: Services systèmes essentiels.
333* Exécution de tâches planifiées:: Le service mcron.
334* Rotation des journaux:: Le service rottlog.
335* Services réseau:: Paramètres réseau, démon SSH, etc.
336* Système de fenêtrage X:: Affichage graphique.
337* Services d'impression:: Support pour les imprimantes locales et
338 distantes.
339* Services de bureaux:: D-Bus et les services de bureaux.
340* Services de son:: Services ALSA et Pulseaudio.
341* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
342* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
343* Services de messagerie:: Services de messagerie.
344* Services de téléphonie:: Services de téléphonie.
345* Services de surveillance:: Services de surveillance.
346* Services Kerberos:: Services Kerberos.
347* Services web:: Services web.
348* Services de certificats:: Certificats TLS via Let's Encrypt.
349* Services DNS:: Démons DNS@.
350* Services VPN:: Démons VPN.
351* Système de fichiers en réseau:: Services liés à NFS@.
352* Intégration continue:: Le service Cuirass.
353* Services de gestion de l'énergie:: Augmenter la durée de vie de la
354 batterie.
355* Services audio:: MPD@.
356* Services de virtualisation:: Services de virtualisation.
357* Services de contrôle de version:: Fournit des accès distants à des
358 dépôts Git.
359* Services de jeu:: Serveurs de jeu.
360* Services divers:: D'autres services.
361
362Définir des services
363
364
365
366* Composition de services:: Le modèle de composition des services.
367* Types service et services:: Types et services.
368* Référence de service:: Référence de l'API@.
369* Services Shepherd:: Un type de service particulier.
370
371@end detailmenu
372@end menu
373
374@c *********************************************************************
375@node Introduction
376@chapter Introduction
377
378@cindex but
379GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
380« s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
381outil de gestion de paquets et une distribution pour le système GNU@. Guix
382facilite pour les utilisateurs non privilégiés l'installation, la mise à
383jour et la suppression de paquets, la restauration à un ensemble de paquets
384précédent, la construction de paquets depuis les sources et plus
385généralement aide à la création et à la maintenance d'environnements
386logiciels.
387
388@cindex Système Guix
389@cindex GuixSD, maintenant le système Guix
390@cindex Distribution Système Guix, maintenant le système Guix
391Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
392compléter les outils disponibles sans interférence (@pxref{Installation}) ou
393vous pouvez l'utiliser comme distribution système indépendante, @dfn{Guix
394System}@footnote{Nous appelions le système Guix « la distribution système
395Guix » ou « GuixSD ». nous considérons maintenant qu'il est plus pertinent
396de regrouper tout sous la bannière de « Guix » comme, après tout, Guix
397System est directement disponible sous la commande @command{guix system},
398meme si vous utilisez une autre distro en dessous !}. @xref{Distribution GNU}.
399
400@menu
401* Gérer ses logiciels avec Guix:: Ce qui est spécial.
402* Distribution GNU:: Les paquets et les outils.
403@end menu
404
405@node Gérer ses logiciels avec Guix
406@section Gérer ses logiciels avec Guix
407
408@cindex interfaces utilisateurs
409Guix fournit une interface de gestion des paquets par la ligne de commande
410(@pxref{Gestion de paquets}), des outils pour aider au développement
411logiciel (@pxref{Développement}), des utilitaires en ligne de commande pour
412des utilisations plus avancées (@pxref{Utilitaires}) ainsi que des interfaces
413de programmation Scheme (@pxref{Interface de programmation}).
414@cindex démon de construction
415Son @dfn{démon de construction} est responsable de la construction des
416paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
417téléchargement des binaires pré-construits depuis les sources autorisées
418(@pxref{Substituts}).
419
420@cindex extensibilité de la distribution
421@cindex personnalisation, des paquets
422Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
423respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
424libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
425peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
426indépendants (@pxref{Modules de paquets}). Il est aussi
427@emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
428définitions de paquets spécialisées à partir de définitions existantes, même
429depuis la ligne de commande (@pxref{Options de transformation de paquets}).
430
431@cindex gestion de paquet fonctionnelle
432@cindex isolation
433Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
434fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
435processus de construction et d'installation des paquets est vu comme une
436@emph{fonction} dans le sens mathématique du terme. Cette fonction a des
437entrées (comme des scripts de construction, un compilateur et des
438bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
439son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
440faire référence à des logiciels ou des scripts qui n'ont pas été
441explicitement passés en entrée. Une fonction de construction produit
442toujours le même résultat quand on lui donne le même ensemble d'entrée.
443Elle ne peut pas modifier l'environnement du système en cours d'exécution
444d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
445des fichiers en dehors de ses répertoires de construction et
446d'installation. Ce résultat s'obtient en lançant les processus de
447construction dans des environnements isolés (ou des @dfn{conteneurs}) où
448seules les entrées explicites sont visibles.
449
450@cindex dépôt
451Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
452dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
453(@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
454dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
455contient un hash de toutes les entrées utilisées pour construire le paquet ;
456ainsi, changer une entrée donnera un nom de répertoire différent.
457
458Cette approche est le fondement des fonctionnalités les plus importante de
459Guix : le support des mises à jour des paquets et des retours en arrière
460transactionnels, l'installation différenciée par utilisateur et le ramassage
461de miettes pour les paquets (@pxref{Fonctionnalités}).
462
463
464@node Distribution GNU
465@section Distribution GNU
466
467@cindex Système Guix
468Guix fournit aussi une distribution du système GNU contenant uniquement des
469logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
470@url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
471l'utilisateur de ces logiciels}.}. On peut installer la distribution
472elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
473comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
474(@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
475distribution autonome le « système Guix » ou Guix@tie{}System.
476
477La distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
478Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
479complète des paquets disponibles se trouve
480@url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
481@command{guix package} (@pxref{Invoquer guix package}) :
482
483@example
484guix package --list-available
485@end example
486
487Notre but est de fournir une distribution logicielle entièrement libre de
488GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
489et l'intégration étroite des composants GNU en insistant sur les programmes
490et les outils qui aident l'utilisateur à exercer ses libertés.
491
492Les paquets sont actuellement disponibles pour les plateformes suivantes :
493
494@table @code
495
496@item x86_64-linux
497l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
498
499@item i686-linux
500l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
501
502@item armhf-linux
503l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
504NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
505Linux-libre ;
506
507@item aarch64-linux
508les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
509Le support est actuellement expérimental et limité. @xref{Contribuer},
510pour savoir comment aider !
511
512@item mips64el-linux
513les processeurs MIPS 64-bits little-endian, spécifiquement la série
514Loongson, ABI n32, avec le noyau Linux-libre.
515
516@end table
517
518Avec Guix@tie{}System, vous @emph{déclarez} tous les aspects de la
519configuration du système d'exploitation et guix s'occupe d'instancier la
520configuration de manière transactionnelle, reproductible et sans état
521(@pxref{Configuration système}). Guix System utilise le noyau Linux-libre,
522le système d'initialisation Shepherd (@pxref{Introduction,,, shepherd, The
523GNU Shepherd Manual}), les outils GNU et la chaîne d'outils familière ainsi
524que l'environnement graphique et les services systèmes de votre choix.
525
526Guix System est disponible sur toutes les plateformes ci-dessus à part
527@code{mips64el-linux}.
528
529@noindent
530Pour des informations sur comment porter vers d'autres architectures et
531d'autres noyau, @pxref{Porter}.
532
533La construction de cette distribution est un effort collaboratif et nous
534vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
535sur la manière de nous aider.
536
537
538@c *********************************************************************
539@node Installation
540@chapter Installation
541
542@cindex installer Guix
543
544@quotation Remarque
545Nous vous recommandons d'utiliser ce
546@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
547script shell d'installation} pour installer Guix sur un système GNU/Linux
548fonctionnel, que nous appelons une @dfn{distro externe}@footnote{Cette
549section s'occupe de l'installation du gestionnaire de paquet, ce qui peut se
550faire sur un système GNU/Linux existant. Si vous voulez plutôt installer le
551système d'exploitation GNU complet, @pxref{Installation du système}.}. Le
552script automatise le téléchargement, l'installation et la configuration
553initiale de Guix. Vous devez l'exécuter en tant qu'utilisateur root.
554@end quotation
555
556@cindex distro externe
557@cindex répertoires liés aux distro externes
558Lorsqu'il est installé sur une distro externe, GNU@tie{}Guix complète les
559outils disponibles sans interférence. Ses données se trouvent exclusivement
560dans deux répertoires, typiquement @file{/gnu/store} et @file{/var/guix} ;
561les autres fichiers de votre système comme @file{/etc} sont laissés intacts.
562
563Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
564(@pxref{Invoquer guix pull}).
565
566Si vous préférez effectuer les étapes d'installation manuellement ou si vous
567voulez les personnaliser, vous trouverez les sections suivantes utile.
568Elles décrivent les prérequis logiciels pour Guix, ainsi que la manière de
569l'installer manuellement et de se préparer à l'utiliser.
570
571@menu
572* Installation binaire:: Commencer à utiliser Guix en un rien de temps
573 !
574* Prérequis:: Logiciels requis pour construire et lancer
575 Guix.
576* Lancer la suite de tests:: Tester Guix.
577* Paramétrer le démon:: Préparer l'environnement du démon de
578 construction.
579* Invoquer guix-daemon:: Lancer le démon de construction.
580* Réglages applicatifs:: Réglages spécifiques pour les application.
581@end menu
582
583@node Installation binaire
584@section Installation binaire
585
586@cindex installer Guix depuis les binaires
587@cindex script d'installation
588Cette section décrit comment installer Guix sur un système quelconque depuis
589un archive autonome qui fournit les binaires pour Guix et toutes ses
590dépendances. C'est souvent plus rapide que d'installer depuis les sources,
591ce qui est décrit dans les sections suivantes. Le seul prérequis est
592d'avoir GNU@tie{}tar et Xz.
593
594L'installation se comme ceci :
595
596@enumerate
597@item
598@cindex téléchargement du Guix binaire
599Téléchargez l'archive binaire depuis
600@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
601où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
602laquelle tourne déjà le noyau Linux, etc.
603
604@c The following is somewhat duplicated in ``System Installation''.
605Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
606l'authenticité de l'archive avec, comme ceci :
607
608@example
609$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
610$ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
611@end example
612
613Si cette commande échoue parce que vous n'avez pas la clef publique requise,
614lancez cette commande pour l'importer :
615
616@example
617$ gpg --keyserver @value{KEY-SERVER} \
618 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
619@end example
620
621@noindent
622@c end authentication part
623et relancez la commande @code{gpg --verify}.
624
625@item
626Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
627votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
628tant que @code{root}, lancez :
629
630@example
631# cd /tmp
632# tar --warning=no-timestamp -xf \
633 guix-binary-@value{VERSION}.@var{système}.tar.xz
634# mv var/guix /var/ && mv gnu /
635@end example
636
637Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
638deuxième dossier contient un profil prêt à être utilisé pour @code{root}
639(voir les étapes suivantes).
640
641Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
642écraserait ses propres fichiers essentiels.
643
644L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
645pas d'avertissement disant que « l'horodatage est trop vieux pour être
646plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
647précédents ; les versions récentes n'ont pas ce problème). Cela vient du
648fait que les fichiers de l'archive ont pour date de modification zéro (ce
649qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
650contenu de l'archive ne dépende pas de la date de création, ce qui la rend
651reproductible.
652
653@item
654Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
655l'emplacement où @command{guix pull} installera les mises à jour
656(@pxref{Invoquer guix pull}) :
657
658@example
659# mkdir -p ~root/.config/guix
660# ln -sf /var/guix/profiles/per-user/root/current-guix \
661 ~root/.config/guix/current
662@end example
663
664Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
665variables d'environnement nécessaires :
666
667@example
668# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
669 source $GUIX_PROFILE/etc/profile
670@end example
671
672@item
673Créez le groupe et les comptes utilisateurs pour les utilisateurs de
674construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
675
676@item
677Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
678
679Si votre distribution hôte utilise le système d'initialisation systemd, cela
680peut se faire avec ces commandes :
681
682@c Versions of systemd that supported symlinked service files are not
683@c yet widely deployed, so we should suggest that users copy the service
684@c files into place.
685@c
686@c See this thread for more information:
687@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
688
689@example
690# cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
691 /etc/systemd/system/
692# systemctl start guix-daemon && systemctl enable guix-daemon
693@end example
694
695Si votre distribution hôte utilise le système d'initialisation Upstart :
696
697@example
698# initctl reload-configuration
699# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
700 /etc/init/
701# start guix-daemon
702@end example
703
704Sinon, vous pouvez toujours démarrer le démon manuellement avec :
705
706@example
707# ~root/.config/guix/current/bin/guix-daemon \
708 --build-users-group=guixbuild
709@end example
710
711@item
712Rendez la commande @command{guix} disponible pour les autres utilisateurs
713sur la machine, par exemple avec :
714
715@example
716# mkdir -p /usr/local/bin
717# cd /usr/local/bin
718# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
719@end example
720
721C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
722ici :
723
724@example
725# mkdir -p /usr/local/share/info
726# cd /usr/local/share/info
727# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
728 do ln -s $i ; done
729@end example
730
731Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
732de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
733Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
734changer le chemin de recherche de Info).
735
736@item
737@cindex substituts, autorisations
738Pour utiliser les substituts de @code{@value{SUBSTITUTE-SERVER}} ou l'un de
739ses miroirs (@pxref{Substituts}), autorisez-les :
740
741@example
742# guix archive --authorize < \
743 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
744@end example
745
746@item
747Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
748pour que leur environnement Guix soit prêt à être utilisé,
749@pxref{Réglages applicatifs}.
750@end enumerate
751
752Voilà, l'installation est terminée !
753
754Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
755dans le profil de root :
756
757@example
758# guix package -i hello
759@end example
760
761Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
762ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
763retrouveriez gravement handicapé par l'absence de la commande
764@command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
765@code{guix package -r guix}.
766
767L'archive d'installation binaire peut être (re)produite et vérifiée
768simplement en lançant la commande suivante dans l'arborescence des sources
769de Guix :
770
771@example
772make guix-binary.@var{system}.tar.xz
773@end example
774
775@noindent
776…@: ce qui à son tour lance :
777
778@example
779guix pack -s @var{system} --localstatedir \
780 --profile-name=current-guix guix
781@end example
782
783@xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
784
785@node Prérequis
786@section Prérequis
787
788Cette section dresse la liste des prérequis pour la construction de Guix
789depuis les sources. La procédure de construction pour Guix est la même que
790pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
791fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
792Guix pour plus de détails.
793
794@cindex site officiel
795GNU Guix est disponible au téléchargement depuis son site web sur
796@url{http://www.gnu.org/software/guix/}.
797
798GNU Guix dépend des paquets suivants :
799
800@itemize
801@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.2.x,
802@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
8030.1.0 ou supérieure,
804@item
805@uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
806(@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
807gnutls-guile, GnuTLS-Guile}),
808@item
809@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
810version 0.1.0 ou supérieure,
811@item
812@c FIXME: Specify a version number once a release has been made.
813@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
814ultérieur,
815@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON},
816@item @url{http://zlib.net, zlib},
817@item @url{http://www.gnu.org/software/make/, GNU Make}.
818@end itemize
819
820Les dépendances suivantes sont facultatives :
821
822@itemize
823@item
824@c Note: We need at least 0.10.2 for 'channel-send-eof'.
825Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
826et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
827@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
8280.10.2 ou ultérieure.
829
830@item
831Lorsque @url{http://www.bzip.org, libbz2} est disponible,
832@command{guix-daemon} peut l'utiliser pour compresser les journaux de
833construction.
834@end itemize
835
836À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
837paquets suivants sont aussi requis :
838
839@itemize
840@item @url{http://gnupg.org/, GNU libgcrypt},
841@item @url{http://sqlite.org, SQLite 3},
842@item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
843standard C++11.
844@end itemize
845
846@cindex répertoire d'état
847Lorsque vous configurez Guix sur un système qui a déjà une installation de
848Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
849existante avec l'option @code{--localstatedir} du script @command{configure}
850(@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
851Standards}). Le script @command{configure} vous protège des mauvaises
852configurations involontaires de @var{localstatedir} pour éviter que vous ne
853corrompiez votre dépôt (@pxref{Le dépôt}).
854
855@cindex Nix, compatibilité
856Lorsque vous avez une installation fonctionnelle du
857@url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
858configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
859trois dépendances au dessus.
860
861Guix est compatible avec Nix, donc il est possible de partager le même dépôt
862entre les deux. Pour cela, vous devez passer à @command{configure} non
863seulement la même valeur de @code{--with-store-dir} mais aussi la même
864valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
865spécifie l'emplacement de la base de données qui stocke les métadonnées sur
866le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
867@code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
868Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
869partager le dépôt avec Nix.
870
871@node Lancer la suite de tests
872@section Lancer la suite de tests
873
874@cindex suite de tests
875Après avoir lancé @command{configure} et @code{make} correctement, c'est une
876bonne idée de lancer la suite de tests. Elle peut aider à trouver des
877erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
878lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
879d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
880
881@example
882make check
883@end example
884
885Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
886l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
887lancement peut prendre plusieurs minutes sur une machine récente ; les
888lancements suivants seront plus rapides car le dépôt créé pour les tests
889aura déjà plusieurs choses en cache.
890
891Il est aussi possible de lancer un sous-ensemble des tests en définissant la
892variable makefile @code{TESTS} comme dans cet exemple :
893
894@example
895make check TESTS="tests/store.scm tests/cpio.scm"
896@end example
897
898Par défaut, les résultats des tests sont affichés au niveau du fichier.
899Pour voir les détails de chaque cas de test individuel, il est possible de
900définir la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
901exemple :
902
903@example
904make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
905@end example
906
907Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
908le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
909ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
910dans votre message.
911
912Guix possède aussi une suite de tests de systèmes complets qui test des
913instances complètes du système Guix. Elle ne peut être lancée qui sur un
914système où Guix est déjà installé, avec :
915
916@example
917make check-system
918@end example
919
920@noindent
921ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
922des tests à lancer :
923
924@example
925make check-system TESTS="basic mcron"
926@end example
927
928Ces tests systèmes sont définis dans les modules @code{(gnu tests
929@dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
930avec une instrumentation légère dans une machine virtuelle (VM). Ils
931peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
932la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
933Certains requièrent beaucoup d'espace disque pour contenir les images des
934VM@.
935
936De nouveau, en cas d'échec, envoyez tous les détails à
937@email{bug-guix@@gnu.org}.
938
939@node Paramétrer le démon
940@section Paramétrer le démon
941
942@cindex démon
943Les opérations comme la construction d'un paquet ou le lancement du
944ramasse-miettes sont toutes effectuées par un processus spécialisé, le
945@dfn{démon de construction}, pour le compte des clients. Seul le démon peut
946accéder au dépôt et à sa base de données associée. Ainsi, toute opération
947manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
948commande comme @command{guix package} et @command{guix build} communiquent
949avec le démon (@i{via} des appels de procédures distantes) pour lui dire
950quoi faire.
951
952Les sections suivantes expliquent comment préparer l'environnement du démon
953de construction. Voir aussi @ref{Substituts} pour apprendre comment
954permettre le téléchargement de binaires pré-construits.
955
956@menu
957* Réglages de l'environnement de construction:: Préparer l'environnement
958 de construction isolé.
959* Réglages du délestage du démon:: Envoyer des constructions à des
960 machines distantes.
961* Support de SELinux:: Utiliser une politique SELinux pour le démon.
962@end menu
963
964@node Réglages de l'environnement de construction
965@subsection Réglages de l'environnement de construction
966
967@cindex environnement de construction
968Dans une installation standard multi-utilisateurs, Guix et son démon — le
969programme @command{guix-daemon} — sont installé par l'administrateur système
970; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
971lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
972outils Guix pour construire des paquets ou accéder au dépôt et le démon le
973fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
974permet le partage des paquets déjà construits entre les utilisateurs.
975
976@cindex utilisateurs de construction
977Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
978forcément envie que les processus de construction de paquets tournent aussi
979en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
980vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
981que les processus de construction démarrés par le démon utiliseront. Ces
982utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
983personnel ; ils seront seulement utilisés quand le démon délaissera ses
984privilèges @code{root} dans les processus de construction. En ayant
985plusieurs de ces utilisateurs, vous permettez au démon de lancer des
986processus de construction distincts sous des UID différent, ce qui garanti
987qu'aucune interférence n'ait lieu entre les uns et les autres — une
988fonctionnalité essentielle puisque les constructions sont supposées être des
989fonctions pures (@pxref{Introduction}).
990
991Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
992construction comme ceci (avec la syntaxe Bash et les commandes
993@code{shadow}) :
994
995@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
996@c for why `-G' is needed.
997@example
998# groupadd --system guixbuild
999# for i in `seq -w 1 10`;
1000 do
1001 useradd -g guixbuild -G guixbuild \
1002 -d /var/empty -s `which nologin` \
1003 -c "Utilisateur de construction Guix $i" --system \
1004 guixbuilder$i;
1005 done
1006@end example
1007
1008@noindent
1009Le nombre d'utilisateurs de construction détermine le nombre de tâches de
1010constructions qui peuvent tourner en parallèle, tel que spécifié par
1011l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
1012@option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
1013commandes liées, vous devrez ajouter les utilisateurs de construction au
1014groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
1015@code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
1016
1017Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
1018la commande suivante@footnote{Si votre machine utilise le système
1019d'initialisation systemd, copiez le fichier
1020@file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
1021@file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
1022démarré automatiquement. De même, si votre machine utilise le système
1023d'initialisation Upstart, copiez le fichier
1024@file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
1025@file{/etc/init}.} :
1026
1027@example
1028# guix-daemon --build-users-group=guixbuild
1029@end example
1030
1031@cindex chroot
1032@noindent
1033De cette façon, le démon démarre les processus de construction dans un
1034chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
1035défaut, l'environnement chroot ne contient rien d'autre que :
1036
1037@c Keep this list in sync with libstore/build.cc! -----------------------
1038@itemize
1039@item
1040un répertoire @code{/dev} minimal, créé presque indépendamment du
1041@code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
1042fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
1043l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
1044a pas.} ;
1045
1046@item
1047le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
1048on utilise une espace de nom séparé pour les PID ;
1049
1050@item
1051@file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
1052pour l'utilisateur @file{nobody} ;
1053
1054@item
1055@file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
1056
1057@item
1058@file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
1059@code{127.0.0.1} ;
1060
1061@item
1062un répertoire @file{/tmp} inscriptible.
1063@end itemize
1064
1065Vous pouvez influencer le répertoire où le démon stocke les arbres de
1066construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
1067l'arbre de construction dans le chroot sera toujours appelé
1068@file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
1069dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
1070@code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
1071ce qui évite des différences lorsque le processus de construction retient le
1072nom de leur répertoire de construction.
1073
1074@vindex http_proxy
1075Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
1076pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
1077fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
1078
1079Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
1080toujours possible de lancer @command{guix-daemon} si vous passez
1081@code{--disable-chroot}. Cependant, les processus de construction ne seront
1082pas isolés les uns des autres ni du reste du système. Ainsi les processus
1083de construction peuvent interférer les uns avec les autres, et peuvent
1084accéder à des programmes, des bibliothèques et d'autres fichiers présents
1085sur le système — ce qui rend plus difficile de les voir comme des fonctions
1086@emph{pures}.
1087
1088
1089@node Réglages du délestage du démon
1090@subsection Utiliser le dispositif de déchargement
1091
1092@cindex déchargement
1093@cindex crochet de construction
1094Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
1095constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
1096de construction} @code{offload}@footnote{Cette fonctionnalité n'est
1097disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
1098Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
1099lit une liste de machines de constructions spécifiée par l'utilisateur dans
1100@file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
1101demandée, par exemple par @code{guix build}, le démon essaie de la décharger
1102sur une des machines qui satisfont les contraintes de la dérivation, en
1103particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
1104prérequis manquants pour la construction sont copiés par SSH sur la machine
1105de construction qui procède ensuite à la construction ; si elle réussi, les
1106sorties de la construction sont copiés vers la machine de départ.
1107
1108Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
1109
1110@example
1111(list (build-machine
1112 (name "eightysix.example.org")
1113 (system "x86_64-linux")
1114 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1115 (user "bob")
1116 (speed 2.)) ;très rapide !
1117
1118 (build-machine
1119 (name "meeps.example.org")
1120 (system "mips64el-linux")
1121 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1122 (user "alice")
1123 (private-key
1124 (string-append (getenv "HOME")
1125 "/.ssh/identity-for-guix"))))
1126@end example
1127
1128@noindent
1129Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
1130construction, une pour l'architecture @code{x86_64} et une pour
1131l'architecture @code{mips64el}.
1132
1133En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
1134fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
1135valeur de retour doit être une liste d'objets @code{build-machine}. Même si
1136cet exemple montre une liste fixée de machines de construction, on pourrait
1137imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
1138constructions potentielles découvertes sur le réseau local
1139(@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
1140Programs}). Le type de données @code{build-machine} est détaillé plus bas.
1141
1142@deftp {Type de données} build-machine
1143Ce type de données représente les machines de construction sur lesquelles le
1144démon peut décharger des constructions. Les champs importants sont :
1145
1146@table @code
1147
1148@item name
1149Le nom d'hôte de la machine distante.
1150
1151@item system
1152Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
1153
1154@item user
1155Le compte utilisateur à utiliser lors de la connexion à la machine distante
1156par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
1157protégée par mot de passe pour permettre des connexions non-interactives.
1158
1159@item host-key
1160Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
1161OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
1162connexion. C'est une longue chaîne qui ressemble à cela :
1163
1164@example
1165ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1166@end example
1167
1168Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
1169trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1170
1171Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
1172@file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
1173convertie au format OpenSSH avec @command{lsh-export-key}
1174(@pxref{Converting keys,,, lsh, LSH Manual}) :
1175
1176@example
1177$ lsh-export-key --openssh < /etc/lsh/host-key.pub
1178ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1179@end example
1180
1181@end table
1182
1183Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
1184
1185@table @asis
1186
1187@item @code{port} (par défaut : @code{22})
1188Numéro de port du serveur SSH sur la machine.
1189
1190@item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
1191Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
1192au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
1193passe.
1194
1195Remarquez que la valeur par défaut est la clef privée @emph{du compte
1196root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
1197
1198@item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
1199@itemx @code{compression-level} (par défaut : @code{3})
1200Les méthodes de compression au niveau SSH et le niveau de compression
1201demandé.
1202
1203Remarquez que le déchargement utilise la compression SSH pour réduire la
1204bande passante utilisée lors du transfert vers et depuis les machines de
1205construction.
1206
1207@item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
1208Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
1209écoute sur cette machine.
1210
1211@item @code{parallel-builds} (par défaut : @code{1})
1212Le nombre de constructions qui peuvent tourner simultanément sur la machine.
1213
1214@item @code{speed} (par défaut : @code{1.0})
1215Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
1216à préférer les machines avec un plus grand facteur de vitesse.
1217
1218@item @code{features} (par défaut : @code{'()})
1219Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
1220par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
1221module Linux KVM et le support matériel correspondant. Les dérivations
1222peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
1223les machines de construction correspondantes.
1224
1225@end table
1226@end deftp
1227
1228La commande @code{guix} doit être dans le chemin de recherche des machines
1229de construction. Vous pouvez vérifier si c'est le cas en lançant :
1230
1231@example
1232ssh build-machine guix repl --version
1233@end example
1234
1235Il reste une dernière chose à faire maintenant que @file{machines.scm} est
1236en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
1237transférés entre les dépôts des machines. Pour que cela fonctionne, vous
1238devez d'abord générer une paire de clef sur chaque machine pour permettre au
1239démon d'exporter des archives signées des fichiers de son dépôt
1240(@pxref{Invoquer guix archive}) :
1241
1242@example
1243# guix archive --generate-key
1244@end example
1245
1246@noindent
1247Chaque machine de construction doit autoriser la clef de la machine
1248maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
1249
1250@example
1251# guix archive --authorize < master-public-key.txt
1252@end example
1253
1254@noindent
1255De même, la machine maîtresse doit autoriser les clefs de chaque machine de
1256construction.
1257
1258Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
1259deux-à-deux entre le maître et les machines de construction. Concrètement,
1260lorsque le maître reçoit des fichiers d'une machine de construction (et
1261vice-versa), son démon de construction s'assure qu'ils sont authentiques,
1262n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
1263autorisée.
1264
1265@cindex test du déchargement
1266Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
1267nœud maître :
1268
1269@example
1270# guix offload test
1271@end example
1272
1273Cela essaiera de se connecter à toutes les machines de construction
1274spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
1275modules Guix sont disponibles sur toutes les machines et tentera d'exporter
1276vers la machine et d'importer depuis elle, et rapportera toute erreur
1277survenu pendant le processus.
1278
1279Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
1280la ligne de commande :
1281
1282@example
1283# guix offload test machines-qualif.scm
1284@end example
1285
1286Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
1287correspond à une expression rationnelle comme ceci :
1288
1289@example
1290# guix offload test machines.scm '\.gnu\.org$'
1291@end example
1292
1293@cindex statut du déchargement
1294Pour afficher la charge actuelle de tous les hôtes de construction, lancez
1295cette commande sur le nœud principal :
1296
1297@example
1298# guix offload status
1299@end example
1300
1301
1302@node Support de SELinux
1303@subsection Support de SELinux
1304
1305@cindex SELinux, politique du démon
1306@cindex contrôle d'accès obligatoire, SELinux
1307@cindex sécurité, guix-daemon
1308Guix inclus un fichier de politique SELinux dans @file{etc/guix-daemon.cil}
1309qui peut être installé sur un système où SELinux est activé pour que les
1310fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
1311démon. Comme Guix System ne fournit pas de politique SELinux de base, la
1312politique du démon ne peut pas être utilisée sur le système Guix.
1313
1314@subsubsection Installer la politique SELinux
1315@cindex SELinux, installation de la politique
1316Pour installer la politique, lancez cette commande en root :
1317
1318@example
1319semodule -i etc/guix-daemon.cil
1320@end example
1321
1322Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
1323mécanisme différent fournit par votre système.
1324
1325Une fois la politique installée, le système de fichier ré-étiqueté et le
1326démon redémarré, il devrait être lancé dans le contexte
1327@code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
1328
1329@example
1330ps -Zax | grep guix-daemon
1331@end example
1332
1333Surveillez les fichiers journaux de SELinux pendant que vous lancez une
1334commande comme @code{guix build hello} pour vous convaincre que SELniux
1335permet toutes les opérations nécessaires.
1336
1337@subsubsection Limitations
1338@cindex SELinux, limites
1339
1340La politique n'est pas parfaite. Voici une liste de limitations et de
1341bizarreries qui vous devriez prendre en compte avant de déployer la
1342politique SELinux fournie pour le démon Guix.
1343
1344@enumerate
1345@item
1346@code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
1347opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
1348soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
1349une étiquette inutilisée, mais il serait préférable de définir des règles
1350sur les sockets uniquement pour cette étiquette.
1351
1352@item
1353@code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
1354Par conception, l'étiquette de fichier de la destination d'un lien
1355symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
1356les profils sous $localstatedir aient une étiquette, les liens vers ces
1357profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
1358Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
1359Mais pour les liens du répertoire personnel de l'utilisateur root, ou
1360@file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
1361fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
1362ces liens.
1363
1364@item
1365La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
1366fonctionner. Cela demande des règles supplémentaires car SELinux traite les
1367sockets réseau différemment des fichiers.
1368
1369@item
1370Actuellement tous les fichiers qui correspondent à l'expression rationnelle
1371@code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
1372@code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
1373nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
1374@code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
1375un paquet qui fournit cet exécutable et convaincre un utilisateur de
1376l'installer et de le lancer, ce qui l'élève dans le domaine
1377@code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
1378d'accéder à des fichiers autorisés pour les processus de ce domaine.
1379
1380Nous pourrions générer une politique bien plus restrictive à l'installation,
1381pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
1382@code{guix-daemon} actuellement installé soit étiqueté avec
1383@code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
1384plus large. L'inconvénient c'est que root devrait installer ou mettre à
1385jour la politique à l'installation à chaque fois que le paquet Guix qui
1386fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
1387jour.
1388@end enumerate
1389
1390@node Invoquer guix-daemon
1391@section Invoquer @command{guix-daemon}
1392
1393Le programme @command{guix-daemon} implémente toutes les fonctionnalités
1394d'accès au dépôt. Cela inclus le lancement des processus de construction,
1395le lancement du ramasse-miettes, la demande de disponibilité des résultats
1396de construction, etc. Il tourne normalement en @code{root} comme ceci :
1397
1398@example
1399# guix-daemon --build-users-group=guixbuild
1400@end example
1401
1402@noindent
1403Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
1404
1405@cindex chroot
1406@cindex conteneur, environnement de construction
1407@cindex environnement de construction
1408@cindex constructions reproductibles
1409Par défaut, @command{guix-daemon} lance les processus de construction sous
1410différents UID récupérés depuis le groupe de construction spécifié avec
1411@code{--build-users-group}. En plus, chaque processus de construction est
1412lancé dans un environnement chroot qui ne contient que le sous-ensemble du
1413dépôt dont le processus de construction dépend, tel que spécifié par sa
1414dérivation (@pxref{Interface de programmation, dérivation}), plus un
1415ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
1416contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
1417l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
1418propre arborescence du système de fichier, elle a un espace de montage
1419séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
1420obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
1421
1422Lorsque le démon effectue une construction pour le compte de l'utilisateur,
1423il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
1424variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
1425conteneur pendant la durée de la construction, bien que dans le conteneur,
1426l'arborescence de construction est toujours appelée
1427@file{/tmp/guix-build-@var{name}.drv-0}.
1428
1429Le répertoire de construction est automatiquement supprimé à la fin, à moins
1430que la construction n'ait échoué et que le client ait spécifié
1431@option{--keep-failed} (@pxref{Invoquer guix build,
1432@option{--keep-failed}}).
1433
1434Le démon écoute les connexions et démarre un sous-processus pour chaque
1435session démarrée par un client (l'une des sous-commandes de
1436@command{guix}). La commande @command{guix processes} vous permet d'obtenir
1437un aperçu de l'activité sur votre système en affichant chaque session et
1438client actif. @xref{Invoquer guix processes} pour plus d'informations.
1439
1440Les options en ligne de commande suivantes sont disponibles :
1441
1442@table @code
1443@item --build-users-group=@var{groupe}
1444Prendre les utilisateurs de @var{group} pour lancer les processus de
1445construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
1446
1447@item --no-substitutes
1448@cindex substituts
1449Ne pas utiliser de substitut pour les résultats de la construction.
1450C'est-à-dire, toujours construire localement plutôt que de permettre le
1451téléchargement de binaires pré-construits (@pxref{Substituts}).
1452
1453Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
1454toujours activer explicitement la substitution @i{via} l'appel de procédure
1455distante @code{set-build-options} (@pxref{Le dépôt}).
1456
1457@item --substitute-urls=@var{urls}
1458@anchor{daemon-substitute-urls}
1459Considérer @var{urls} comme la liste séparée par des espaces des URL des
1460sources de substituts par défaut. Lorsque cette option est omise,
1461@indicateurl{https://@value{SUBSTITUTE-SERVER}} est utilisé.
1462
1463Cela signifie que les substituts sont téléchargés depuis les @var{urls},
1464tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
1465
1466@cindex crochet de construction
1467@item --no-build-hook
1468Ne pas utiliser le @dfn{crochet de construction}.
1469
1470Le crochet de construction est un programme d'aide qui le démon peut
1471démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
1472utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
1473
1474@item --cache-failures
1475Mettre les échecs de construction en cache. Par défaut, seules les
1476constructions réussies sont mises en cache.
1477
1478Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
1479être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
1480échoués ; @command{guix gc --clear-failures} vide la liste des éléments
1481aillant échoué. @xref{Invoquer guix gc}.
1482
1483@item --cores=@var{n}
1484@itemx -c @var{n}
1485Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
1486signifie autant que possible.
1487
1488La valeur par défaut est @code{0}, mais elle peut être modifiée par les
1489clients comme avec l'option @code{--cores} de @command{guix build}
1490(@pxref{Invoquer guix build}).
1491
1492L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
1493dans le processus de construction, qui peut ensuite l'utiliser pour
1494exploiter le parallélisme en interne — par exemple en lançant @code{make
1495-j$NIX_BUILD_CORES}.
1496
1497@item --max-jobs=@var{n}
1498@itemx -M @var{n}
1499Permettre au plus @var{n} travaux de construction en parallèle. La valeur
1500par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
1501construction ne sera effectuée localement ; à la place, le démon déchargera
1502les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
1503
1504@item --max-silent-time=@var{secondes}
1505Lorsque le processus de construction ou de substitution restent silencieux
1506pendant plus de @var{secondes}, le terminer et rapporter une erreur de
1507construction.
1508
1509La valeur par défaut est @code{0}, ce qui désactive le délai.
1510
1511La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
1512
1513@item --timeout=@var{secondes}
1514De même, lorsque le processus de construction ou de substitution dure plus
1515de @var{secondes}, le terminer et rapporter une erreur de construction.
1516
1517La valeur par défaut est @code{0}, ce qui désactive le délai.
1518
1519La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
1520
1521@item --rounds=@var{N}
1522Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
1523si les résultats de construction consécutifs ne sont pas identiques
1524bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
1525comme @command{guix build} (@pxref{Invoquer guix build}).
1526
1527Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
1528dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
1529l'étude des différences entre les deux résultats.
1530
1531@item --debug
1532Produire une sortie de débogage.
1533
1534Cela est utile pour déboguer des problèmes de démarrage du démon, mais
1535ensuite elle peut être modifiée par les clients, par exemple par l'option
1536@code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
1537
1538@item --chroot-directory=@var{rép}
1539Ajouter @var{rép} au chroot de construction.
1540
1541Cela peut changer le résultat d'un processus de construction — par exemple
1542s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
1543est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
1544d'utiliser cette option. À la place, assurez-vous que chaque dérivation
1545déclare toutes les entrées dont elle a besoin.
1546
1547@item --disable-chroot
1548Désactive les constructions dans un chroot.
1549
1550Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
1551processus de construction d'accéder à des dépendances non déclarées. Elle
1552est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
1553qu'utilisateur non privilégié.
1554
1555@item --log-compression=@var{type}
1556Compresser les journaux de construction suivant le @var{type}, parmi
1557@code{gzip}, @code{bzip2} ou @code{none}.
1558
1559À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
1560construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
1561le démon les compresse automatiquement avec bzip2 par défaut.
1562
1563@item --disable-deduplication
1564@cindex déduplication
1565Désactiver la « déduplication » automatique des fichiers dans le dépôt.
1566
1567Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
1568» : si un nouveau fichier est identique à un autre fichier trouvé dans le
1569dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
1570considérablement l'utilisation de l'espace disque au prix d'une charge en
1571entrée/sortie plus grande à la fin d'un processus de construction. Cette
1572option désactive cette optimisation.
1573
1574@item --gc-keep-outputs[=yes|no]
1575Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
1576utilisées.
1577
1578@cindex racines du GC
1579@cindex racines du ramasse-miettes
1580Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
1581dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
1582valeur par défaut est « no », ce qui signifie que les sorties des
1583dérivations ne sont gardées que si elles sont accessibles à partir d'une
1584racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
1585racines du GC.
1586
1587@item --gc-keep-derivations[=yes|no]
1588Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
1589des sorties utilisées.
1590
1591Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
1592dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
1593leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
1594trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
1595peu d'espace disque.
1596
1597De cette manière, avec @code{--gc-keep-derivations} à « yes »,
1598l'accessibilité des sorties s'étend des sorties aux dérivations et avec
1599@code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
1600sorties. Quand les deux options sont à « yes », le GC gardera tous les
1601prérequis de construction (les sources, le compilateur, les bibliothèques,
1602et les autres outils de construction) des objets accessibles dans le dépôt,
1603indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
1604GC. Cela est pratique pour les développeurs car ça leur fait gagner du
1605temps de reconstruction et de téléchargement.
1606
1607@item --impersonate-linux-2.6
1608Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
1609signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
1610numéro de version.
1611
1612Cela peut être utile pour construire des programmes qui dépendent
1613(généralement sans fondement) du numéro de version du noyau.
1614
1615@item --lose-logs
1616Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
1617@code{@var{localstatedir}/guix/log}.
1618
1619@item --system=@var{système}
1620Supposer que @var{système} est le type de système actuel. Par défaut c'est
1621la paire architecture-noyau trouvée à la configuration, comme
1622@code{x86_64-linux}.
1623
1624@item --listen=@var{extrémité}
1625Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
1626comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
1627(barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
1628domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
1629
1630@table @code
1631@item --listen=/gnu/var/daemon
1632Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
1633le créant si besoin.
1634
1635@item --listen=localhost
1636@cindex démon, accès distant
1637@cindex accès distant au démon
1638@cindex démon, paramètres de grappes
1639@cindex grappes, paramètres du démon
1640Écouter les connexions TCP sur l'interface réseau correspondant à
1641@code{localhost} sur le port 44146.
1642
1643@item --listen=128.0.0.42:1234
1644Écouter les connexions TCP sur l'interface réseau correspondant à
1645@code{128.0.0.42} sur le port 1234.
1646@end table
1647
1648Cette option peut être répétée plusieurs fois, auquel cas
1649@command{guix-daemon} accepte des connexions sur toutes les extrémités
1650spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
1651extrémité se connecter en paramétrant la variable d'environnement
1652@code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
1653
1654@quotation Remarque
1655Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
1656@code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
1657grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
1658démon de construction. Dans les autres cas où l'accès à distance au démon
1659est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
1660@end quotation
1661
1662Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
1663connexions sur le socket Unix-domain situé à
1664@file{@var{localstatedir}/guix/daemon-socket/socket}.
1665@end table
1666
1667
1668@node Réglages applicatifs
1669@section Réglages applicatifs
1670
1671@cindex distro externe
1672Lorsque vous utilisez Guix par dessus une distribution GNU/Linux qui n'est
1673pas Guix System — ce qu'on appelle une @dfn{distro externe} — quelques
1674étapes supplémentaires sont requises pour que tout soit en place. En voici
1675certaines.
1676
1677@subsection Régionalisation
1678
1679@anchor{locales-and-locpath}
1680@cindex régionalisation, en dehors de Guix System
1681@vindex LOCPATH
1682@vindex GUIX_LOCPATH
1683Les paquets installés @i{via} Guix n'utiliseront pas les données de
1684régionalisation du système hôte. À la place, vous devrez d'abord installer
1685l'un des paquets linguistiques disponibles dans Guix puis définir la
1686variable d'environnement @code{GUIX_LOCPATH} :
1687
1688@example
1689$ guix package -i glibc-locales
1690$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1691@end example
1692
1693Remarquez que le paquet @code{glibc-locales} contient les données pour tous
1694les environnement linguistiques supportés par la GNU@tie{}libc et pèse
1695environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
1696petit mais limité à quelques environnements UTF-8.
1697
1698La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
1699(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1700Manual}). Il y a deux différences importantes cependant :
1701
1702@enumerate
1703@item
1704@code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
1705libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
1706vous permet de vous assurer que les programmes de la distro externe ne
1707chargeront pas de données linguistiques incompatibles.
1708
1709@item
1710La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
1711@code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
1712@code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
1713de programmes liés avec des versions différentes de la libc, chaque version
1714de la libc essaiera de charger les environnements linguistiques dans le bon
1715format.
1716@end enumerate
1717
1718Cela est important car le format des données linguistiques utilisés par
1719différentes version de la libc peuvent être incompatibles.
1720
1721@subsection Name Service Switch
1722
1723@cindex name service switch, glibc
1724@cindex NSS (name service switch), glibc
1725@cindex nscd (name service caching daemon)
1726@cindex name service caching daemon (nscd)
1727Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
1728fortement} que ce système fasse tourner le @dfn{démon de cache de service de
1729noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
1730le socket @file{/var/run/nscd/socket}. Sans cela, les applications
1731installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
1732d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
1733pourquoi.
1734
1735@cindex @file{nsswitch.conf}
1736La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
1737est un mécanisme d'extension pour les « résolutions de noms » en général :
1738résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
1739
1740@cindex Network information service (NIS)
1741@cindex NIS (Network information service)
1742Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
1743nouvelle implémentation de résolution de nom : par exemple le greffon
1744@code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
1745greffon @code{nis} permet la résolution de comptes utilisateurs avec le
1746Network Information Service (NIS), etc. Ces « services de recherches »
1747supplémentaires sont configurés au niveau du système dans
1748@file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
1749système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
1750GNU C Reference Manual})
1751
1752Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
1753appelant la fonction @code{getaddrinfo} en C — les applications essayent
1754d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
1755résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectuent
1756la résolution eux-mêmes, en changeant les service de résolution dans leur
1757propre espace d'adressage et en le lançant. Ce services de résolution de
1758noms — les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils
1759peuvent provenir de la bibliothèque C du système, plutôt que de la
1760bibliothèque C à laquelle l'application est liée (la bibliothèque C de
1761Guix).
1762
1763Et c'est là que se trouve le problème : si votre application est liée à la
1764bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
1765greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
1766glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
1767échoue de manière inattendue.
1768
1769Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
1770problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
1771chargés par le processus @command{nscd}, pas par l'application elle-même.
1772
1773@subsection Polices X11
1774
1775@cindex polices
1776La majorité des applications graphiques utilisent fontconfig pour trouver et
1777charger les police et effectuer le rendu côté client X11. Le paquet
1778@code{fontconfig} dans Guix cherche les polices dans
1779@file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
1780applications graphiques installées avec Guix d'afficher des polices, vous
1781devez aussi installer des polices avec Guix. Les paquets de polices
1782essentiels sont @code{gs-fonts}, @code{font-dejavu} et
1783@code{font-gnu-freefont-ttf}.
1784
1785Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
1786les applications graphiques, installez @code{font-adobe-source-han-sans} ou
1787@code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
1788langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
1789suivante installe les polices pour le chinois :
1790
1791@example
1792guix package -i font-adobe-source-han-sans:cn
1793@end example
1794
1795@cindex @code{xterm}
1796Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
1797s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
1798spécifier le nom complet de la police en utilisant XLFD (X Logical Font
1799Description), comme ceci :
1800
1801@example
1802-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1803@end example
1804
1805Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
1806dans votre profil Guix, vous devez étendre le chemin des polices du serveur
1807X :
1808
1809@c Note: 'xset' does not accept symlinks so the trick below arranges to
1810@c get at the real directory. See <https://bugs.gnu.org/30655>.
1811@example
1812xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1813@end example
1814
1815@cindex @code{xlsfonts}
1816Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
1817vous assurer que vos polices TrueType y sont listées.
1818
1819@cindex @code{fc-cache}
1820@cindex cache de polices
1821Après l'installation des polices vous devrez peut-être rafraîchir le cache
1822des polices pour pouvoir les utiliser dans les applications. Ça s'applique
1823aussi lorsque les applications installées avec Guix n'ont pas l'air de
1824trouver les polices. Pour forcer la reconstruction du cache de polices
1825lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
1826paquet @code{fontconfig}.
1827
1828@subsection Certificats X.509
1829
1830@cindex @code{nss-certs}
1831Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
1832programmes d'authentifier les serveurs web par HTTPS@.
1833
1834Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
1835installer ce paquet et définir les variables d'environnement adéquates pour
1836que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
1837
1838@subsection Paquets emacs
1839
1840@cindex @code{emacs}
1841Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
1842peuvent être placés soit dans
1843@file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
1844sous-répertoires de
1845@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
1846car il existe potentiellement des milliers de paquets Emacs et stocker leurs
1847fichiers dans un seul répertoire peut ne pas être fiable (à cause de
1848conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
1849bonne idée. C'est très similaire à la manière dont le système de paquet
1850d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
1851The GNU Emacs Manual}).
1852
1853Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
1854donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
1855ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
1856installés avec Guix, vous pouvez le faire en lançant Emacs avec l'option
1857@code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1858
1859@subsection La chaîne d'outils GCC
1860
1861@cindex GCC
1862@cindex ld-wrapper
1863
1864Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
1865vous avez besoin d'une chaîne de compilation complète pour compiler et lier
1866du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
1867paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
1868lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
1869symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
1870pour l'éditeur de liens.
1871
1872Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
1873passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
1874correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
1875ensemble d'arguments. Vous pouvez dire à l'enveloppe de refuser de lier les
1876programmes à des bibliothèques en dehors du dépôt en paramétrant la variable
1877d'environnement @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} sur @code{no}.
1878
1879@c TODO What else?
1880
1881@c *********************************************************************
1882@node Installation du système
1883@chapter Installation du système
1884
1885@cindex installer Guix System
1886@cindex Guix System, installation
1887Cette section explique comment installer Guix System sur une machine. Guix,
1888en tant que gestionnaire de paquets, peut aussi être installé sur un système
1889GNU/Linux déjà installé, @pxref{Installation}.
1890
1891@ifinfo
1892@quotation Remarque
1893@c This paragraph is for people reading this from tty2 of the
1894@c installation image.
1895Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
1896son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
1897ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
1898Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
1899
1900Autrement, lancez @command{info info} dans un autre tty pour garder ce
1901manuel ouvert.
1902@end quotation
1903@end ifinfo
1904
1905@menu
1906* Limitations:: Ce à quoi vous attendre.
1907* Considérations matérielles:: Matériel supporté.
1908* Installation depuis une clef USB ou un DVD:: Préparer le média
1909 d'installation.
1910* Préparer l'installation:: Réseau, partitionnement, etc.
1911* Installation graphique guidée:: Installation graphique facile.
1912* Installation manuelle:: Installation manuelle pour les sorciers.
1913* Après l'installation du système:: Une fois que l'installation a
1914 réussi.
1915* Installer Guix dans une VM:: Jouer avec le système Guix.
1916* Construire l'image d'installation:: D'où vient tout cela.
1917@end menu
1918
1919@node Limitations
1920@section Limitations
1921
1922We consider Guix System to be ready for a wide range of ``desktop'' and
1923server use cases. The reliability guarantees it provides---transactional
1924upgrades and rollbacks, reproducibility---make it a solid foundation.
1925
1926Nevertheless, before you proceed with the installation, be aware of the
1927following noteworthy limitations applicable to version @value{VERSION}:
1928
1929@itemize
1930@item
1931LVM (gestionnaire de volumes logiques) n'est pas supporté.
1932
1933@item
1934De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
1935certains manquent toujours cruellement.
1936
1937@item
1938GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Services de bureaux}), as well as a number of X11 window managers. However, KDE is
1939currently missing.
1940@end itemize
1941
1942More than a disclaimer, this is an invitation to report issues (and success
1943stories!), and to join us in improving it. @xref{Contribuer}, for more
1944info.
1945
1946
1947@node Considérations matérielles
1948@section Considérations matérielles
1949
1950@cindex prise en charge du matériel sur Guix System
1951GNU@tie{}Guix se concentre sur le respect des libertés de ses utilisateurs.
1952Il est construit autour du noyau Linux-libre, ce qui signifie que seuls les
1953matériels pour lesquels des pilotes logiciels et des microgiciels libres
1954sont disponibles sont pris en charge. De nos jours, une grande gamme de
1955matériel qu'on peut acheter est prise en charge par GNU/Linux-libre — des
1956claviers aux cartes graphiques en passant par les scanners et les
1957contrôleurs Ethernet. Malheureusement, il reste des produit dont les
1958fabricants refusent de laisser le contrôle aux utilisateurs sur leur propre
1959utilisation de l'ordinateur, et ces matériels ne sont pas pris en charge par
1960Guix System.
1961
1962@cindex WiFi, support matériel
1963One of the main areas where free drivers or firmware are lacking is WiFi
1964devices. WiFi devices known to work include those using Atheros chips
1965(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
1966driver, and those using Broadcom/AirForce chips (BCM43xx with Wireless-Core
1967Revision 5), which corresponds to the @code{b43-open} Linux-libre driver.
1968Free firmware exists for both and is available out-of-the-box on Guix
1969System, as part of @code{%base-firmware} (@pxref{Référence de système d'exploitation,
1970@code{firmware}}).
1971
1972@cindex RYF, Respects Your Freedom
1973La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
1974certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
1975Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
1976votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
1977Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
1978
1979Une autre ressource utile est le site web @uref{https://www.h-node.org/,
1980H-Node}. Il contient un catalogue d'appareils avec des informations sur
1981leur support dans GNU/Linux.
1982
1983
1984@node Installation depuis une clef USB ou un DVD
1985@section Installation depuis une clef USB ou un DVD
1986
1987Une image d'installation ISO-9660 téléchargeable depuis
1988@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{système}.iso.xz}
1989peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
1990l'une de ces valeurs :
1991
1992@table @code
1993@item x86_64-linux
1994pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
1995
1996@item i686-linux
1997pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
1998@end table
1999
2000@c start duplication of authentication part from ``Binary Installation''
2001Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
2002l'authenticité de l'image avec, de cette manière :
2003
2004@example
2005$ wget https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
2006$ gpg --verify guix-system-install-@value{VERSION}.@var{system}.iso.xz.sig
2007@end example
2008
2009Si cette commande échoue parce que vous n'avez pas la clef publique requise,
2010lancez cette commande pour l'importer :
2011
2012@example
2013$ gpg --keyserver @value{KEY-SERVER} \
2014 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
2015@end example
2016
2017@noindent
2018@c end duplication
2019et relancez la commande @code{gpg --verify}.
2020
2021Cette image contient les outils nécessaires à l'installation. Elle est
2022faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
2023un DVD.
2024
2025@unnumberedsubsec Copie sur une clef USB
2026
2027Pour copier l'image sur une clef USB, suivez ces étapes :
2028
2029@enumerate
2030@item
2031Décompressez l'image avec la commande @command{xz} :
2032
2033@example
2034xz -d guix-system-install-@value{VERSION}.@var{système}.iso.xz
2035@end example
2036
2037@item
2038Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
2039son nom d'appareil. En supposant que la clef usb est connue sous le nom de
2040@file{/dev/sdX}, copiez l'image avec :
2041
2042@example
2043dd if=guix-system-install-@value{VERSION}.@var{système}.iso of=/dev/sdX
2044sync
2045@end example
2046
2047Accéder à @file{/dev/sdX} requiert généralement les privilèges
2048super-utilisateur.
2049@end enumerate
2050
2051@unnumberedsubsec Graver sur un DVD
2052
2053Pour copier l'image sur un DVD, suivez ces étapes :
2054
2055@enumerate
2056@item
2057Décompressez l'image avec la commande @command{xz} :
2058
2059@example
2060xz -d guix-system-install-@value{VERSION}.@var{système}.iso.xz
2061@end example
2062
2063@item
2064Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
2065En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
2066l'image avec :
2067
2068@example
2069growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{système}.iso
2070@end example
2071
2072Accéder à @file{/dev/srX} requiert généralement les privilèges
2073super-utilisateur.
2074@end enumerate
2075
2076@unnumberedsubsec Démarrage
2077
2078Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
2079démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
2080entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
2081démarrer sur la clef USB.
2082
2083@xref{Installer Guix dans une VM}, si, à la place, vous souhaitez installer
2084Guix System dans une machine virtuelle (VM).
2085
2086
2087@node Préparer l'installation
2088@section Préparer l'installation
2089
2090Une fois que vous avez démarré, vous pouvez utiliser l'installateur
2091graphique, qui rend facile la prise en main (@pxref{Installation graphique guidée}). Autrement, si vous êtes déjà familier avec GNU/Linux et que
2092vous voulez plus de contrôle que ce que l'installateur graphique ne fournit,
2093vous pouvez choisir le processus d'installation « manuel » (@pxref{Installation manuelle}).
2094
2095L'installateur graphique est disponible sur le TTY1. Vous pouvez obtenir
2096des shells root sur les TTY 3 à 6 en tapant @kbd{ctrl-alt-f3},
2097@kbd{ctrl-alt-f4} etc. Le TTY2 affiche cette documentation que vous pouvez
2098atteindre avec @kbd{ctrl-alt-f2}. On peut naviguer dans la documentation
2099avec les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
2100Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
2101vous permet de sélectionner du texte avec le bouton gauche de la souris et
2102de le coller en appuyant sur la molette.
2103
2104@quotation Remarque
2105L'installation nécessite un accès au réseau pour que les dépendances
2106manquantes de votre configuration système puissent être téléchargées. Voyez
2107la section « réseau » plus bas.
2108@end quotation
2109
2110@node Installation graphique guidée
2111@section Installation graphique guidée
2112
2113L'installateur graphique est une interface utilisateur en mode texte. Il
2114vous guidera, avec des boîtes de dialogue, le long des étapes requises pour
2115installer GNU@tie{}Guix System.
2116
2117La première boîte de dialogue vous permet de paramétrer le système comme
2118vous le souhaitez pendant l'installation : vous pouvez choisir la langue, la
2119disposition du clavier et paramétrer le réseau, qui sera utilisé pendant
2120l'installation. L'image ci-dessous montre le dialogue pour le réseau.
2121
2122@image{images/installer-network,5in,, paramétrage du réseau avec
2123l'installateur graphique}
2124
2125Les étapes suivantes vous permettent de partitionner votre disque dur, comme
2126le montre l'image ci-dessous, de choisir si vous voulez ou non utiliser des
2127systèmes de fichiers chiffrés, de saisir le nom d'hôte et le mot de passe
2128root et de créer un compte supplémentaire, entre autres choses.
2129
2130@image{images/installer-partitions,5in,, partitionnement du disque avec
2131l'installateur graphique}
2132
2133Remarquez que, à tout moment, l'installateur vous permet de sortir de
2134l'étape d'installation actuelle et de recommencer une étape précédente,
2135comme le montre l'image ci-dessous.
2136
2137@image{images/installer-resume,5in,, reprise du processus d'installation}
2138
2139Une fois que vous avez fini, l'installateur produit une configuration de
2140système d'exploitation et vous la montre (@pxref{Utiliser le système de configuration}). À ce moment, vous pouvez appuyer sur « OK » et l'installation
2141continuera. Lorsqu'elle aura réussi, vous pourrez redémarrer sur le nouveau
2142système et vous amuser. @xref{Après l'installation du système}, pour la suite des
2143festivités !
2144
2145
2146@node Installation manuelle
2147@section Installation manuelle
2148
2149Cette section décrit comme vous pourriez installe « manuellement »
2150GNU@tie{}Guix System sur votre machine. Cette option nécessite que vous
2151soyez familier avec GNU/Linux, le shell et avec les outils d'administration
2152usuels. Si vous pensez que ce n'est pas pour vous, pensez à utiliser
2153l'installateur graphique (@pxref{Installation graphique guidée}).
2154
2155Le système d'installation fournit des shells root sur les TTY 3 à 6 ;
2156appuyez sur @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4} etc pour y accéder. Il
2157inclus plusieurs outils usuels pour requis pour cette tâche. Mais c'est
2158aussi un système Guix complet, ce qui signifie que vous pouvez installer des
2159paquets supplémentaires si vous en avez besoin, avec @command{guix package}
2160(@pxref{Invoquer guix package}).
2161
2162@menu
2163* Disposition du clavier réseau et partitionnement:: Paramètres initiaux.
2164* Effectuer l'installation:: Installer.
2165@end menu
2166
2167@node Disposition du clavier réseau et partitionnement
2168@subsection Disposition du clavier réseau et partitionnement
2169
2170Avant que vous ne puissiez installer le système, vous voudrez sans doute
2171ajuster la disposition du clavier, paramétrer le réseau et partitionner le
2172disque dur cible. Cette section vous guidera à travers tout cela.
2173
2174@subsubsection Disposition du clavier
2175
2176@cindex disposition du clavier
2177L'image d'installation utilise la disposition clavier qwerty (US). Si vous
2178voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
2179exemple, la commande suivante sélectionne la disposition Dvorak :
2180
2181@example
2182loadkeys dvorak
2183@end example
2184
2185Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
2186pour trouver une liste des dispositions disponibles. Lancez @command{man
2187loadkey} pour plus d'informations.
2188
2189@subsubsection Réseau
2190
2191Lancez la commande suivante pour voir comment vos interfaces réseau sont
2192appelées :
2193
2194@example
2195ifconfig -a
2196@end example
2197
2198@noindent
2199@dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
2200
2201@example
2202ip a
2203@end example
2204
2205@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2206Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
2207l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
2208est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
2209@samp{w}, comme @samp{w1p2s0}.
2210
2211@table @asis
2212@item Connexion filaire
2213Pour configure une connexion filaire, lancez la commande suivante, en
2214remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
2215utiliser.
2216
2217@example
2218ifconfig @var{interface} up
2219@end example
2220
2221@item Connexion sans-fil
2222@cindex sans-fil
2223@cindex WiFi
2224Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
2225configuration pour l'outil de configuration @command{wpa_supplicant} (son
2226emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
2227@command{nano} :
2228
2229@example
2230nano wpa_supplicant.conf
2231@end example
2232
2233Par exemple, la déclaration qui suit peut aller dans ce fichier et
2234fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
2235la phrase de passe pour le réseau auquel vous vous connectez :
2236
2237@example
2238network=@{
2239 ssid="@var{mon-ssid}"
2240 key_mgmt=WPA-PSK
2241 psk="la phrase de passe secrète du réseau"
2242@}
2243@end example
2244
2245Démarrez le service sans-fil et lancez-le en tache de fond avec la commande
2246suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
2247vous voulez utiliser) :
2248
2249@example
2250wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
2251@end example
2252
2253Lancez @command{man wpa_supplicant} pour plus d'informations.
2254@end table
2255
2256@cindex DHCP
2257À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
2258où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
2259
2260@example
2261dhclient -v @var{interface}
2262@end example
2263
2264Essayez de pinger un serveur pour voir si le réseau fonctionne :
2265
2266@example
2267ping -c 3 gnu.org
2268@end example
2269
2270Mettre en place un accès réseau est presque toujours une nécessité parce que
2271l'image ne contient pas tous les logiciels et les outils dont vous pourriez
2272avoir besoin.
2273
2274@cindex installer par SSH
2275Si vous le souhaitez, vous pouvez continuer l'installation à distance en
2276démarrant un serveur SSH :
2277
2278@example
2279herd start ssh-daemon
2280@end example
2281
2282Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
2283configurer l'authentification par clef OpenSSH avant de vous connecter.
2284
2285@subsubsection Partitionnement
2286
2287À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
2288partitionner le disque puis à formater les partitions cibles.
2289
2290L'image d'installation inclus plusieurs outils de partitionnement, dont
2291Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2292@command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
2293disque avec le partitionnement qui vous convient :
2294
2295@example
2296cfdisk
2297@end example
2298
2299Si votre disque utilise le format des tables de partitions GUID (GPT) et que
2300vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
2301défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
2302disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
2303
2304@cindex EFI, installation
2305@cindex UEFI, installation
2306@cindex ESP, partition système EFI
2307Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
2308avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition peut
2309être montée dans @file{/boot/efi} par exemple et doit avoir le drapeau
2310@code{esp}. P.@: ex.@: pour @command{parted} :
2311
2312@example
2313parted /dev/sda set 1 esp on
2314@end example
2315
2316@quotation Remarque
2317@vindex grub-bootloader
2318@vindex grub-efi-bootloader
2319Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
2320Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
2321vous devriez probablement effectuer une installation EFI, avec
2322@code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
2323@code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
2324d'information sur le chargeur d'amorçage.
2325@end quotation
2326
2327Une fois que vous avez fini le partitionnement du disque dur cible, vous
2328devez créer un système de fichier sur les partitions@footnote{Actuellement
2329Guix System ne supporte que les systèmes de fichiers ext4 et btrfs. En
2330particulier, le code qui lit les UUID des systèmes de fichiers et les
2331étiquettes ne fonctionne que pour ces types de systèmes de fichiers.}. Pour
2332l'ESP, si vous en avez une et en supposant que ce soit @file{/dev/sda1},
2333lancez :
2334
2335@example
2336mkfs.fat -F32 /dev/sda1
2337@end example
2338
2339Préférez assigner une étiquette au système de fichier pour que vous puissiez
2340vous y référer de manière fiable dans la déclaration @code{file-system}
2341(@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
2342de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
2343partition racine soit sur @file{/dev/sda2}, on peut créer un système de
2344fichier avec pour étiquette @code{my-root} avec :
2345
2346@example
2347mkfs.ext4 -L my-root /dev/sda2
2348@end example
2349
2350@cindex chiffrement du disque
2351Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
2352utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
2353@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2354@code{man cryptsetup}} pour plus d'informations). En supposant que vous
2355voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
2356commandes suivante vous mènerait à ce résultat :
2357
2358@example
2359cryptsetup luksFormat /dev/sda2
2360cryptsetup open --type luks /dev/sda2 my-partition
2361mkfs.ext4 -L my-root /dev/mapper/my-partition
2362@end example
2363
2364Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
2365avec une commande comme (de nouveau, en supposant que @code{my-root} est
2366l'étiquette du système de fichiers racine) :
2367
2368@example
2369mount LABEL=my-root /mnt
2370@end example
2371
2372Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
2373système cible relativement à ce chemin. Si vous avez choisi d'avoir un
2374@file{/boot/efi} comme point de montage EFI par exemple, montez-la sur
2375@file{/mnt/boot/efi} maintenant pour qu'elle puisse être trouvée par
2376@code{guix system init} ensuite.
2377
2378Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
2379(@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
2380Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
2381supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
2382pouvez lancer :
2383
2384@example
2385mkswap /dev/sda3
2386swapon /dev/sda3
2387@end example
2388
2389Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
2390supposant que dans le nouveau système vous voulez utiliser le fichier
2391@file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
2392fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
2393Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
2394(COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
2395détails, regardez les pages de manuel de @command{mkswap} et
2396@command{swapon}.} :
2397
2398@example
2399# Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
2400dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2401# Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
2402chmod 600 /mnt/swapfile
2403mkswap /mnt/swapfile
2404swapon /mnt/swapfile
2405@end example
2406
2407Remarquez que si vous avez chiffré la partition racine et créé un fichier
2408d'échange dans son système de fichier comme décrit ci-dessus, alors le
2409chiffrement protégera aussi le fichier d'échange, comme n'importe quel
2410fichier de ce système de fichiers.
2411
2412@node Effectuer l'installation
2413@subsection Effectuer l'installation
2414
2415Lorsque la partition cible est prête et que les autres partitions sont
2416montées, on est prêt à commencer l'installation. Commencez par :
2417
2418@example
2419herd start cow-store /mnt
2420@end example
2421
2422Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
2423sorte que les paquets ajoutés pendant l'installation sont écrits sur le
2424disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
2425nécessaire parce que la première phase de la commande @command{guix system
2426init} (voir plus bas) implique de télécharger ou de construire des éléments
2427de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
2428
2429Ensuite, vous devrez modifier un fichier et fournir la déclaration du
2430système à installer. Pour cela, le système d'installation propose trois
2431éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
2432Manual}), qui supporte la coloration syntaxique la correspondance de
2433parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
2434(un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
2435vivement de stocker ce fichier sur le système de fichier racine cible,
2436disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
2437fichier de configuration une fois que vous aurez redémarré sur votre nouveau
2438système.
2439
2440@xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
2441fichier de configuration. Les exemples de configuration dont on parle dans
2442cette section sont disponibles dans @file{/etc/configuration} sur l'image
2443d'installation. Ainsi, pour commencer avec une configuration du système qui
2444fournit un serveur d'affichage graphique (un système de « bureau »), vous
2445pouvez lancer ce qui suit :
2446
2447@example
2448# mkdir /mnt/etc
2449# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2450# nano /mnt/etc/config.scm
2451@end example
2452
2453Vous devriez faire attention à ce que contient votre fichier de
2454configuration, en particulier :
2455
2456@itemize
2457@item
2458Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
2459cible où vous voulez installer GRUB. Elle devrait aussi mentionner
2460@code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
2461ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
2462anciens systèmes, le champs @code{target} contient un périphérique comme
2463@code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
2464partition EFI montée, comme @code{/boot/efi}, et assurez-vous bien que ce
2465chemin est monté et qu'il y a une entrée @code{file-system} dans votre
2466configuration.
2467
2468@item
2469Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
2470aux valeurs de leur champs @code{device} dans votre configuration
2471@code{file-system}, en supposant que la configuration @code{file-system}
2472utilise la procédure @code{file-system-label} dans son champ @code{device}.
2473
2474@item
2475Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
2476champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
2477@end itemize
2478
2479Une fois que vous avez fini les préparatifs sur le fichier de configuration,
2480le nouveau système peut être initialisé (rappelez-vous que le système de
2481fichiers racine cible est dans @file{/mnt}) :
2482
2483@example
2484guix system init /mnt/etc/config.scm /mnt
2485@end example
2486
2487@noindent
2488Cela copie tous les fichiers nécessaires et installe GRUB sur
2489@file{/dev/sdX} à moins que vous ne passiez l'option
2490@option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
2491constructions pour les paquets manquants, ce qui peut prendre du temps.
2492
2493Une fois que cette commande a terminé — et on l'espère réussi ! — vous
2494pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
2495mot de passe @code{root} est d'abord vide ; les mots de passe des autres
2496utilisateurs doivent être initialisés avec la commande @command{passwd} en
2497tant que @code{root}, à mois que votre configuration ne spécifie autre chose
2498(@pxref{user-account-password, mot de passe des comptes utilisateurs}).
2499@xref{Après l'installation du système}, pour la suite !
2500
2501
2502@node Après l'installation du système
2503@section Après l'installation du système
2504
2505Bravo ! Vous avez maintenant redémarré sur votre système Guix ! À partir
2506de maintenant, vous pouvez mettre à jour le système quand vous voudrez, avec
2507:
2508
2509@example
2510guix pull
2511sudo guix system reconfigure /etc/config.scm
2512@end example
2513
2514@noindent
2515Cela crée une nouvelle génération du système avec les derniers paquets et
2516services (@pxref{Invoquer guix system}). Nous vous recommandons de le faire
2517régulièrement pour que votre système inclue les dernières misse à jour de
2518sécurité (@pxref{Mises à jour de sécurité}).
2519
2520@c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2521@quotation Remarque
2522@cindex sudo vs.@: @command{guix pull}
2523Remarquez que @command{sudo guix} exécute la commande @command{guix} de
2524votre utilisateur et @emph{non} celle de root, parce que @command{sudo} ne
2525change pas @code{PATH}. Pour utiliser explicitement le @command{guix} de
2526root, tapez @command{sudo -i guix @dots{}}.
2527@end quotation
2528
2529Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
2530@file{guix-devel@@gnu.org} pour partager votre expérience !
2531
2532
2533@node Installer Guix dans une VM
2534@section Installer Guix sur une machine virtuelle
2535
2536@cindex machine virtuelle, installation de Guix System
2537@cindex serveur privé virtuel (VPS)
2538@cindex VPS (serveur privé virtuel)
2539Si vous souhaitez installer Guix System sur une machine virtuelle (VM) ou un
2540serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
2541section est faite pour vous.
2542
2543Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer Guix System
2544sur une image disque, suivez ces étapes :
2545
2546@enumerate
2547@item
2548Tout d'abord récupérez et décompressez l'image d'installation du système
2549Guix comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
2550
2551@item
2552Créez une image disque qui contiendra le système installé. Pour créer une
2553image qcow2, utilise la commande @command{qemu-img} :
2554
2555@example
2556qemu-img create -f qcow2 guixsd.img 50G
2557@end example
2558
2559Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
2560moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
2561grossira.
2562
2563@item
2564Démarrez l'image d'installation USB dans une VM :
2565
2566@example
2567qemu-system-x86_64 -m 1024 -smp 1 \
2568 -net user -net nic,model=virtio -boot menu=on \
2569 -drive file=guix-system-install-@value{VERSION}.@var{système}.iso \
2570 -drive file=guixsd.img
2571@end example
2572
2573L'ordre des périphérique est important.
2574
2575Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
2576le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
2577pour valider votre choix.
2578
2579@item
2580Vous êtes maintenant root dans la VM, continuez en suivant la procédure
2581d'installation. @xref{Préparer l'installation}, et suivez les
2582instructions.
2583@end enumerate
2584
2585Une fois l'installation terminée, vous pouvez démarrer le système dans votre
2586image @file{guixsd.img}. @xref{Lancer Guix dans une VM}, pour une manière de
2587faire.
2588
2589@node Construire l'image d'installation
2590@section Construire l'image d'installation
2591
2592@cindex image d'installation
2593L'image d'installation décrite plus haut a été construite avec la commande
2594@command{guix system}, plus précisément :
2595
2596@example
2597guix system disk-image --file-system-type=iso9660 \
2598 gnu/system/install.scm
2599@end example
2600
2601Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
2602sources et regardez aussi @ref{Invoquer guix system} pour plus
2603d'informations sur l'image d'installation.
2604
2605@section Construire l'image d'installation pour les cartes ARM
2606
2607De nombreuses cartes ARM requièrent une variante spécifique du chargeur
2608d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
2609
2610Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
2611disponible autrement (sur un autre périphérique d'amorçage etc), il est
2612recommandé de construire une image qui inclus le chargeur d'amorçage, plus
2613précisément :
2614
2615@example
2616guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2617@end example
2618
2619@code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
2620carte invalide, une liste de cartes possibles sera affichée.
2621
2622@c *********************************************************************
2623@node Gestion de paquets
2624@chapter Gestion de paquets
2625
2626@cindex paquets
2627Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
2628jour et supprimer facilement des paquets logiciels sans devoir connaître
2629leur procédure de construction ou leurs dépendances. Guix va aussi plus
2630loin que ces fonctionnalités évidentes.
2631
2632Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
2633outils de gestion des paquets qu'il fournit. En plus de l'interface en
2634ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
2635@code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
2636(@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
2637avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
2638guix-help} pour le démarrer) :
2639
2640@example
2641guix package -i emacs-guix
2642@end example
2643
2644@menu
2645* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
2646* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
2647* Substituts:: Télécharger des binaire déjà construits.
2648* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
2649 résultats.
2650* Invoquer guix gc:: Lancer le ramasse-miettes.
2651* Invoquer guix pull:: Récupérer la dernière version de Guix et de
2652 la distribution.
2653* Canaux:: Personnaliser la collection des paquets.
2654* Inférieurs:: Interagir avec une autre révision de Guix.
2655* Invoquer guix describe:: Affiche des informations sur la révision Guix
2656 actuelle.
2657* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
2658@end menu
2659
2660@node Fonctionnalités
2661@section Fonctionnalités
2662
2663Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
2664paquets}, dans son propre répertoire — quelque chose comme
2665@file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
2666
2667Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
2668propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
2669utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
2670utilisateur dans @code{$HOME/.guix-profile}.
2671
2672Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
2673@file{/home/alice/.guix-profile/bin/gcc} pointe vers
2674@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
2675machine, @code{bob} a déjà installé GCC 4.8.0. Le profil de @code{bob}
2676continue simplement de pointer vers
2677@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
2678GCC coexistent surs le même système sans aucune interférence.
2679
2680La commande @command{guix package} est l'outil central pour gérer les
2681paquets (@pxref{Invoquer guix package}). Il opère sur les profils
2682utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
2683normaux}.
2684
2685@cindex transactions
2686La commande fournit les opérations évidentes d'installation, de suppression
2687et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
2688soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
2689processus @command{guix package} est terminé pendant la transaction ou si
2690une panne de courant arrive pendant la transaction, le profil de
2691l'utilisateur reste dans son état précédent et reste utilisable.
2692
2693En plus, il est possible @emph{d'annuler} toute transaction sur les
2694paquets. Donc si par exemple un mise à jour installe une nouvelle version
2695d'un paquet qui révèle un bogue sérieux, vous pouvez revenir en arrière à
2696l'instance précédente de votre profil que vous saviez bien fonctionner. De
2697même, la configuration globale du système dans Guix est sujette aux mises à
2698jour transactionnelles et aux annulations (@pxref{Utiliser le système de configuration}).
2699
2700Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
2701déterminer quels paquets sont toujours référencés par les profils des
2702utilisateurs et supprimer ceux qui ne sont plus référencés de manière
2703prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
2704explicitement supprimer les anciennes générations de leur profil pour que
2705les paquets auxquels elles faisaient référence puissent être glanés.
2706
2707@cindex reproductibilité
2708@cindex constructions reproductibles
2709Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
2710paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
2711Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
2712de toutes les entrées qui ont été utilisées pendant la construction de ce
2713paquet — le compilateur, les bibliothèques, les scripts de construction,
2714etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
2715l'installation d'un paquet donné correspond à l'état actuel de leur
2716distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
2717aux environnements de construction utilisés, une construction donnée à de
2718forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
2719effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
2720container}).
2721
2722@cindex substituts
2723Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
2724binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
2725@file{/gnu/store} est disponible depuis une source externe (un
2726@dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
2727il construit le paquet depuis les sources localement (@pxref{Substituts}).
2728Comme les résultats des constructions sont généralement reproductibles au
2729bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
2730fournissent les substituts : vous pouvez forcer une construction locale et
2731@emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
2732
2733Le contrôle de l'environnement de construction est aussi une fonctionnalité
2734utile pour les développeurs. La commande @command{guix environment} permet
2735aux développeurs d'un paquet de mettre en place rapidement le bon
2736environnement de développement pour leur paquet, sans avoir à installer
2737manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
2738
2739@cindex réplication, des environnements logiciels
2740@cindex suivi de la provenance, des artefacts logiciels
2741La totalité de Guix et des définitions de paquets sont placés sous contrôle
2742de version, et @command{guix pull} vous permet de « voyager dans le temps »
2743de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
2744rend possible la réplication d'une instance Guix sur une machine différente
2745ou plus tard, ce qui vous permet de @emph{répliquer des environnements
2746logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
2747précis des logiciels.
2748
2749@node Invoquer guix package
2750@section Invoquer @command{guix package}
2751
2752@cindex installer des paquets
2753@cindex supprimer des paquets
2754@cindex installation de paquets
2755@cindex suppression de paquets
2756La commande @command{guix package} est l'outil qui permet d'installer,
2757mettre à jour et supprimer les paquets ainsi que de revenir à une
2758configuration précédente. Elle n'opère que dans le profil de l'utilisateur
2759et fonctionne avec les privilèges utilisateurs normaux
2760(@pxref{Fonctionnalités}). Sa syntaxe est :
2761
2762@example
2763guix package @var{options}
2764@end example
2765@cindex transactions
2766@var{options} spécifie d'abord les opérations à effectuer pendant la
2767transaction. À la fin, une nouvelle génération du profil est créée mais les
2768@dfn{générations} précédentes du profil restent disponibles si l'utilisateur
2769souhaite y revenir.
2770
2771Par exemple, pour supprimer @code{lua} et installer @code{guile} et
2772@code{guile-cairo} en une seule transaction :
2773
2774@example
2775guix package -r lua -i guile guile-cairo
2776@end example
2777
2778@command{guix package} supporte aussi une @dfn{approche déclarative} où
2779l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
2780disponibles le passe @i{via} l'option @option{--manifest}
2781(@pxref{profile-manifest, @option{--manifest}}).
2782
2783@cindex profil
2784Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
2785utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
2786lien symbolique pointe toujours vers la génération actuelle du profil par
2787défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
2788@file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
2789etc.
2790@cindex chemins de recherche
2791Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
2792les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
2793Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
2794ensuite aient les bonnes définitions des variables d'environnement :
2795
2796@example
2797GUIX_PROFILE="$HOME/.guix-profile" ; \
2798source "$HOME/.guix-profile/etc/profile"
2799@end example
2800
2801Dans un environnement multi-utilisateur, les profils utilisateurs sont
2802stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
2803@file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
2804normalement
2805@code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
2806@var{localstatedir} est la valeur passée à @code{configure} avec
2807@code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
2808répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
2809démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
2810package}.
2811
2812Les @var{options} peuvent être les suivante :
2813
2814@table @code
2815
2816@item --install=@var{paquet} @dots{}
2817@itemx -i @var{paquet} @dots{}
2818Installer les @var{paquet}s spécifiés.
2819
2820Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
2821@code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
2822version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
2823dernier cas, la version la plus récente commençant par @code{1.8} est
2824utilisée).
2825
2826Si aucun numéro de version n'est spécifié, la version la plus récente
2827disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
2828suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
2829@code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
2830paquets avec un nom correspondant et (éventuellement une version) sont
2831recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
2832
2833@cindex entrées propagées
2834Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
2835dépendances qui sont installées automatiquement avec le paquet demandé
2836(@pxref{package-propagated-inputs, @code{propagated-inputs} in
2837@code{package} objects} pour plus d'informations sur les entrées propagées
2838dans les définitions des paquets).
2839
2840@anchor{package-cmd-propagated-inputs}
2841Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
2842réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
2843ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
2844bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
2845MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
2846installés explicitement par l'utilisateur.
2847
2848D'autre part, les paquets dépendent parfois de la définition de variables
2849d'environnement pour leur chemin de recherche (voir les explications sur
2850@code{--search-paths} plus bas). Toute définition de variable
2851d'environnement manquante ou possiblement incorrecte est rapportée ici.
2852
2853@item --install-from-expression=@var{exp}
2854@itemx -e @var{exp}
2855Installer le paquet évalué par @var{exp}
2856
2857@var{exp} doit être une expression Scheme qui s'évalue en un objet
2858@code{<package>}. Cette option est notamment utile pour distinguer les
2859variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
2860(gnu packages base) guile-final)}.
2861
2862Remarquez que cette option installe la première sortie du paquet, ce qui
2863peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
2864paquet à plusieurs sorties.
2865
2866@item --install-from-file=@var{fichier}
2867@itemx -f @var{fichier}
2868Installer le paquet évalué par le code dans le @var{fichier}.
2869
2870Par exemple, @var{fichier} peut contenir une définition comme celle-ci
2871(@pxref{Définition des paquets}) :
2872
2873@example
2874@verbatiminclude package-hello.scm
2875@end example
2876
2877Les développeurs peuvent trouver utile d'inclure un tel fichier
2878@file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
2879pourrait être utilisé pour tester des versions de développement et créer des
2880environnements de développement reproductibles (@pxref{Invoquer guix environment}).
2881
2882@item --remove=@var{paquet} @dots{}
2883@itemx -r @var{paquet} @dots{}
2884Supprimer les @var{paquet}s spécifiés.
2885
2886Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
2887version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
2888glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
2889
2890@item --upgrade[=@var{regexp} @dots{}]
2891@itemx -u [@var{regexp} @dots{}]
2892@cindex mettre à jour des paquets
2893Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
2894spécifiée, la mise à jour n'installera que les paquets dont le nom
2895correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
2896dessous.
2897
2898Remarquez que cela met à jour vers la dernière version des paquets trouvée
2899dans la distribution actuellement installée. Pour mettre à jour votre
2900distribution, vous devriez lancer régulièrement @command{guix pull}
2901(@pxref{Invoquer guix pull}).
2902
2903@item --do-not-upgrade[=@var{regexp} @dots{}]
2904Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
2905mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
2906exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
2907de ceux qui contiennent la chaîne « emacs » :
2908
2909@example
2910$ guix package --upgrade . --do-not-upgrade emacs
2911@end example
2912
2913@item @anchor{profile-manifest}--manifest=@var{fichier}
2914@itemx -m @var{fichier}
2915@cindex déclaration de profil
2916@cindex manifest de profil
2917Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
2918le code Scheme dans @var{fichier}.
2919
2920Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
2921construire avec une série de @code{--install} et de commandes similaires.
2922L'avantage étant que le @var{fichier} peut être placé sous contrôle de
2923version, copié vers d'autres machines pour reproduire le même profil, etc.
2924
2925@c FIXME: Add reference to (guix profile) documentation when available.
2926@var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
2927liste de paquets :
2928
2929@findex packages->manifest
2930@example
2931(use-package-modules guile emacs)
2932
2933(packages->manifest
2934 (list emacs
2935 guile-2.0
2936 ;; Utiliser une sortie spécifique d'un paquet.
2937 (list guile-2.0 "debug")))
2938@end example
2939
2940@findex specifications->manifest
2941Dans cet exemple on doit savoir quels modules définissent les variables
2942@code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
2943@code{use-package-modules} ce qui peut être embêtant. On peut à la place
2944fournir des spécifications de paquets normales et laisser
2945@code{specifications->manifest} rechercher les objets de paquets
2946correspondants, comme ceci :
2947
2948@example
2949(specifications->manifest
2950 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2951@end example
2952
2953@item --roll-back
2954@cindex revenir en arrière
2955@cindex défaire des transactions
2956@cindex transactions, défaire
2957Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
2958dernière transaction.
2959
2960Lorsqu'elle est combinée avec des options comme @code{--install}, cette
2961option revient en arrière avant toute autre action.
2962
2963Lorsque vous revenez de la première génération qui contient des fichiers, le
2964profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
2965fichier en dehors de ses propres métadonnées.
2966
2967Après être revenu en arrière, l'installation, la suppression et la mise à
2968jour de paquets réécrit les futures générations précédentes. Ainsi,
2969l'historique des générations dans un profil est toujours linéaire.
2970
2971@item --switch-generation=@var{motif}
2972@itemx -S @var{motif}
2973@cindex générations
2974Basculer vers une génération particulière définie par le @var{motif}.
2975
2976Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
2977de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
2978d'un nombre donné de générations. Par exemple, si vous voulez retourner à
2979la dernière génération après @code{--roll-back}, utilisez
2980@code{--switch-generation=+1}.
2981
2982La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
2983que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
2984donc si la génération demandée n'existe pas la génération actuelle ne
2985changera pas.
2986
2987@item --search-paths[=@var{genre}]
2988@cindex chemins de recherche
2989Rapporter les définitions des variables d'environnement dans la syntaxe Bash
2990qui peuvent être requises pour utiliser l'ensemble des paquets installés.
2991Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
2992de recherche} de fichiers utilisés par les paquets installés.
2993
2994Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
2995@code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
2996profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
2997Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
2998installés dans le profil, alors @code{--search-paths} suggérera
2999d'initialiser ces variables à @code{@var{profil}/include} et
3000@code{@var{profil}/lib}, respectivement.
3001
3002Le cas d'utilisation typique est de définir ces variables d'environnement
3003dans le shell :
3004
3005@example
3006$ eval `guix package --search-paths`
3007@end example
3008
3009@var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
3010@code{suffix}, ce qui signifie que les définitions des variables
3011d'environnement retournées seront soit les paramètres exactes, ou placés
3012avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
3013@var{genre} a pour valeur par défaut @code{exact}.
3014
3015Cette option peut aussi être utilisé pour calculer les chemins de recherche
3016@emph{combinés} de plusieurs profils. Regardez cet exemple :
3017
3018@example
3019$ guix package -p foo -i guile
3020$ guix package -p bar -i guile-json
3021$ guix package -p foo -p bar --search-paths
3022@end example
3023
3024La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
3025bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
3026donné cette recommandation.
3027
3028
3029@item --profile=@var{profil}
3030@itemx -p @var{profil}
3031Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
3032
3033@cindex collisions, dans un profil
3034@cindex faire des collisions de paquets dans des profils
3035@cindex profil, collisions
3036@item --allow-collisions
3037Permettre des collisions de paquets dans le nouveau profil. À utiliser à
3038vos risques et périls !
3039
3040Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
3041profil comme des erreurs. Les collisions ont lieu quand deux version ou
3042variantes d'un paquet donné se retrouvent dans le profil.
3043
3044@item --bootstrap
3045Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
3046option n'est utile que pour les développeurs de la distribution.
3047
3048@end table
3049
3050En plus de ces actions, @command{guix package} supporte les options
3051suivantes pour demander l'état actuel d'un profil ou la disponibilité des
3052paquets :
3053
3054@table @option
3055
3056@item --search=@var{regexp}
3057@itemx -s @var{regexp}
3058@cindex chercher des paquets
3059Lister les paquets disponibles dont le nom, le synopsis ou la description
3060correspondent à la @var{regexp} (en étant insensible à la casse), triés par
3061pertinence. Afficher toutes les métadonnées des paquets correspondants au
3062format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils, GNU
3063recutils manual}).
3064
3065Cela permet à des champs spécifiques d'être extraits avec la commande
3066@command{recsel}, par exemple :
3067
3068@example
3069$ guix package -s malloc | recsel -p name,version,relevance
3070name: jemalloc
3071version: 4.5.0
3072relevance: 6
3073
3074name: glibc
3075version: 2.25
3076relevance: 1
3077
3078name: libgc
3079version: 7.6.0
3080relevance: 1
3081@end example
3082
3083De manière similaire, pour montrer le nom de tous les paquets disponibles
3084sous license GNU@tie{}LGPL version 3 :
3085
3086@example
3087$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3088name: elfutils
3089
3090name: gmp
3091@dots{}
3092@end example
3093
3094Il est aussi possible de raffiner les résultats de la recherche avec
3095plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
3096liste des jeux de plateau :
3097
3098@example
3099$ guix package -s '\<board\>' -s game | recsel -p name
3100name: gnubg
3101@dots{}
3102@end example
3103
3104Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
3105qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
3106les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
3107parlent de clavier (en anglais : key@emph{board}).
3108
3109Et maintenant un exemple plus élaboré. La commande suivante recherche les
3110bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
3111Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
3112
3113@example
3114$ guix package -s crypto -s library | \
3115 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3116@end example
3117
3118@noindent
3119@xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
3120d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
3121
3122@item --show=@var{paquet}
3123Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
3124au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
3125GNU recutils manual}).
3126
3127@example
3128$ guix package --show=python | recsel -p name,version
3129name: python
3130version: 2.7.6
3131
3132name: python
3133version: 3.3.5
3134@end example
3135
3136Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
3137détails concernant une version spécifique :
3138@example
3139$ guix package --show=python@@3.4 | recsel -p name,version
3140name: python
3141version: 3.4.3
3142@end example
3143
3144
3145
3146@item --list-installed[=@var{regexp}]
3147@itemx -I [@var{regexp}]
3148Liste les paquets actuellement installés dans le profil spécifié, avec les
3149paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
3150spécifié, liste uniquement les paquets installés dont le nom correspond à
3151@var{regexp}.
3152
3153Pour chaque paquet installé, affiche les éléments suivants, séparés par des
3154tabulations : le nom du paquet, sa version, la partie du paquet qui est
3155installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
3156pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
3157
3158@item --list-available[=@var{regexp}]
3159@itemx -A [@var{regexp}]
3160Lister les paquets actuellement disponibles dans la distribution pour ce
3161système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
3162liste uniquement les paquets dont le nom correspond à @var{regexp}.
3163
3164Pour chaque paquet, affiche les éléments suivants séparés par des
3165tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
3166
3167@item --list-generations[=@var{motif}]
3168@itemx -l [@var{motif}]
3169@cindex générations
3170Renvoyer la liste des générations avec leur date de création ; pour chaque
3171génération, montre les paquets installés avec les paquets installés les plus
3172récemment en dernier. Remarquez que la zéroième génération n'est jamais
3173montrée.
3174
3175Pour chaque paquet installé, afficher les éléments suivants, séparés par des
3176tabulations : le nom du paquet, sa version, la partie du paquet qui a été
3177installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
3178paquet dans le dépôt.
3179
3180Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
3181correspondantes. Les motifs valides sont :
3182
3183@itemize
3184@item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
3185à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
3186la première.
3187
3188Et @code{--list-generations=1,8,2} renvoie les trois générations dans
3189l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
3190
3191@item @emph{Des intervalles}. @code{--list-generations=2..9} affiche les
3192générations demandées et tout ce qui se trouvent entre elles. Remarquez que
3193le début d'un intervalle doit être plus petit que sa fin.
3194
3195Il est aussi possible d'omettre le numéro final. Par exemple,
3196@code{--list-generations=2..} renvoie toutes les générations à partir de la
3197deuxième.
3198
3199@item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
3200ou moins en passant un entier avec la première lettre de la durée (en
3201anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
3202générations qui sont âgées d'au plus 20 jours.
3203@end itemize
3204
3205@item --delete-generations[=@var{motif}]
3206@itemx -d [@var{motif}]
3207Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
3208l'actuelle.
3209
3210Cette commande accepte les même motifs que @option{--list-generations}.
3211Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
3212Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
3213que la durée spécifiée correspondent. Par exemple
3214@code{--delete-generations=1m} supprime les générations vieilles de plus
3215d'un mois.
3216
3217Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
3218zéroième génération n'est elle non plus jamais supprimée.
3219
3220Remarquez que supprimer des générations empêche de revenir en arrière vers
3221elles. Ainsi, cette commande doit être utilisée avec précaution.
3222
3223@end table
3224
3225Enfin, comme @command{guix package} peut démarrer des processus de
3226construction, elle supporte les options de construction communes
3227(@pxref{Options de construction communes}). Elle supporte aussi les options de
3228transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
3229paquets sont perdues à la mise à jour ; pour les préserver à travers les
3230mises à jours, vous devriez définir vos propres variantes des paquets dans
3231une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
3232
3233@node Substituts
3234@section Substituts
3235
3236@cindex substituts
3237@cindex binaires pré-construits
3238Guix gère le déploiement depuis des binaires ou des sources de manière
3239transparente ce qui signifie qu'il peut aussi bien construire localement que
3240télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
3241appelons ces éléments pré-construits des @dfn{substituts} — ils se
3242substituent aux résultats des constructions locales. Dans la plupart des
3243cas, télécharger un substitut est bien plus rapide que de construire les
3244choses localement.
3245
3246Les substituts peuvent être tout ce qui résulte d'une construction de
3247dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
3248de paquets binaires pré-construits, mais les archives des sources par
3249exemple résultent aussi de la construction d'une dérivation qui peut aussi
3250être disponible en tant que substitut.
3251
3252@menu
3253* Serveur de substituts officiel:: Une source particulière de substituts.
3254* Autoriser un serveur de substituts:: Comment activer ou désactiver les
3255 substituts.
3256* Authentification des substituts:: Comment Guix vérifie les substituts.
3257* Paramètres de serveur mandataire:: Comment récupérer des substituts à
3258 travers un serveur mandataire.
3259* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
3260* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
3261 un paquet binaire ?
3262@end menu
3263
3264@node Serveur de substituts officiel
3265@subsection Serveur de substituts officiel
3266
3267@cindex hydra
3268@cindex ferme de construction
3269Le serveur @code{@value{SUBSTITUTE-SERVER}} est une interface à la ferme de
3270construction officielle qui construit des paquets pour Guix continuellement
3271pour certaines architectures et les rend disponibles en tant que
3272substituts. C'est la source par défaut des substituts ; elle peut être
3273modifiée en passant l'option @option{--substitute-urls} soit à
3274@command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
3275--substitute-urls}}) soit aux outils clients comme @command{guix package}
3276(@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
3277
3278Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
3279est recommandé parce que les communications sont chiffrées ; à l'inverse
3280HTTP rend les communications visibles pour un espion qui peut utiliser les
3281informations accumulées sur vous pour déterminer par exemple si votre
3282système a des vulnérabilités de sécurités non corrigées.
3283
3284Les substituts de la ferme de construction officielle sont activés par
3285défaut dans la distribution système Guix (@pxref{Distribution GNU}).
3286Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
3287distribution externe, à moins que vous ne les ayez explicitement activés via
3288l'une des étapes d'installation recommandées (@pxref{Installation}). Les
3289paragraphes suivants décrivent comment activer ou désactiver les substituts
3290de la ferme de construction ; la même procédure peut être utilisée pour
3291activer les substituts de n'importe quel autre serveur de substituts.
3292
3293@node Autoriser un serveur de substituts
3294@subsection Autoriser un serveur de substituts
3295
3296@cindex sécurité
3297@cindex substituts, autorisations
3298@cindex liste de contrôle d'accès (ACL), pour les substituts
3299@cindex ACL (liste de contrôle d'accès), pour les substituts
3300Pour permettre à Guix de télécharger les substituts depuis
3301@code{@value{SUBSTITUTE-SERVER}} ou un miroir, vous devez ajouter sa clef
3302publique à la liste de contrôle d'accès (ACL) des imports d'archives, avec
3303la commande @command{guix archive} (@pxref{Invoquer guix archive}). Cela
3304implique que vous faîtes confiance à @code{@value{SUBSTITUTE-SERVER}} pour
3305ne pas être compromis et vous servir des substituts authentiques.
3306
3307La clef publique pour @code{@value{SUBSTITUTE-SERVER}} est installée avec
3308Guix, dans @code{@var{préfixe}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, où
3309@var{préfixe} est le préfixe d'installation de Guix. Si vous avez installé
3310Guix depuis les sources, assurez-vous d'avoir vérifié la signature GPG de
3311@file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
3312publique. Ensuite vous pouvez lancer quelque chose comme ceci :
3313
3314@example
3315# guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
3316@end example
3317
3318@quotation Remarque
3319De même, le fichier @file{hydra.gnu.org.pub} contient la clef publique d'une
3320ferme de construction indépendante qui appartient aussi au projet,
3321disponible sur @indicateurl{https://mirror.hydra.gnu.org}.
3322@end quotation
3323
3324Une fois que cela est en place, la sortie d'une commande comme @code{guix
3325build} devrait changer de quelque chose comme :
3326
3327@example
3328$ guix build emacs --dry-run
3329Les dérivations suivantes seraient construites :
3330 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3331 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3332 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3333 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3334@dots{}
3335@end example
3336
3337@noindent
3338à quelque chose comme :
3339
3340@example
3341$ guix build emacs --dry-run
3342112.3 Mo seraient téléchargés :
3343 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3344 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3345 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3346 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
3347@dots{}
3348@end example
3349
3350@noindent
3351Cela indique que les substituts de @code{@value{SUBSTITUTE-SERVER}} sont
3352utilisables et seront téléchargés, si possible, pour les futures
3353constructions.
3354
3355@cindex substituts, comment les désactiver
3356Le mécanisme de substitution peut être désactivé globalement en lançant
3357@code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
3358l'option @code{--no-substitutes} à @command{guix package}, @command{guix
3359build} et aux autres outils en ligne de commande.
3360
3361@node Authentification des substituts
3362@subsection Authentification des substituts
3363
3364@cindex signatures numériques
3365Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
3366qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
3367ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
3368
3369Il y a une exception cependant : si un serveur non autorisé fournit des
3370substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
3371serveur autorisé, alors le serveur non autorisé devient disponible pour les
3372téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
3373substituts avec cette option :
3374
3375@example
3376--substitute-urls="https://a.example.org https://b.example.org"
3377@end example
3378
3379@noindent
3380@cindex constructions reproductibles
3381Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
3382@code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
3383téléchargera les substituts de @code{a.example.org} parce qu'il vient en
3384premier dans la liste et peut être considéré comme un miroir de
3385@code{b.example.org}. En pratique, des machines de constructions produisent
3386souvent les mêmes binaires grâce à des construction reproductibles au bit
3387près (voir plus bas).
3388
3389Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
3390validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
3391à ce que des clients HTTPS comme des navigateurs web font habituellement.
3392Cela est dû au fait que Guix authentifie les informations sur les substituts
3393eux-mêmes, comme expliqué plus haut, ce dont on se soucie réellement (alors
3394que les certificats X.509 authentifie la relation entre nom de domaine et
3395clef publique).
3396
3397@node Paramètres de serveur mandataire
3398@subsection Paramètres de serveur mandataire
3399
3400@vindex http_proxy
3401Les substituts sont téléchargés par HTTP ou HTTPS. La variable
3402d'environnement @code{http_proxy} peut être initialisée dans l'environnement
3403de @command{guix-daemon} et est respectée pour le téléchargement des
3404substituts. Remarquez que la valeur de @code{http_proxy} dans
3405l'environnement où tournent @command{guix build}, @command{guix package} et
3406les autres clients n'a @emph{absolument aucun effet}.
3407
3408@node Échec de substitution
3409@subsection Échec de substitution
3410
3411Même lorsqu'un substitut pour une dérivation est disponible, la substitution
3412échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
3413substitut peut être hors ligne, le substitut a récemment été supprimé du
3414serveur, la connexion peut avoir été interrompue, etc.
3415
3416Lorsque les substituts sont activés et qu'un substitut pour une dérivation
3417est disponible, mais que la tentative de substitution échoue, Guix essaiera
3418de construire la dérivation localement si @code{--fallback} a été passé en
3419argument (@pxref{option de repli,, common build option @code{--fallback}}).
3420Plus spécifiquement, si cet option n'a pas été passée en argument, alors
3421aucune construction locale n'est effectuée et la dérivation est considérée
3422comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
3423alors Guix essaiera de construire la dérivation localement et l'échec ou le
3424succès de la dérivation dépend de l'échec ou du succès de la construction
3425locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
3426substitut n'est disponible pour la dérivation en question, une construction
3427locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
3428@code{--fallback} ait été ou non passé.
3429
3430Pour se donner une idée du nombre de substituts disponibles maintenant, vous
3431pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
3432fournis par un serveur.
3433
3434@node De la confiance en des binaires
3435@subsection De la confiance en des binaires
3436
3437@cindex confiance, en des binaires pré-construits
3438De nos jours, le contrôle individuel sur son utilisation propre de
3439l'informatique est à la merci d'institutions, de sociétés et de groupes avec
3440assez de pouvoir et de détermination pour contourner les infrastructures
3441informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
3442substituts de @code{@value{SUBSTITUTE-SERVER}} soit pratique, nous
3443encourageons les utilisateurs à construire aussi par eux-mêmes, voir à faire
3444tourner leur propre ferme de construction, pour que
3445@code{@value{SUBSTITUTE-SERVER}} devienne une cible moins intéressante. Une
3446façon d'aider est de publier les logiciels que vous construisez avec
3447@command{guix publish} pour que les autres aient plus de choix de serveurs
3448où télécharger les substituts (@pxref{Invoquer guix publish}).
3449
3450Guix possède les fondations pour maximiser la reproductibilité logicielle
3451(@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
3452indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
3453résultats identiques au bit près. Ainsi, à travers un ensemble de
3454constructions de paquets indépendantes il est possible de renforcer
3455l'intégrité du système. La commande @command{guix challenge} a pour but
3456d'aider les utilisateurs à tester les serveurs de substituts et à aider les
3457développeurs à trouver les constructions de paquets non-déterministes
3458(@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
3459@command{guix build} permet aux utilisateurs de vérifier si les substituts
3460précédemment installés sont authentiques en les reconstruisant localement
3461(@pxref{vérification de la construction, @command{guix build --check}}).
3462
3463Dans le futur, nous aimerions que Guix puisse publier et recevoir des
3464binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
3465discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
3466
3467@node Des paquets avec plusieurs résultats
3468@section Des paquets avec plusieurs résultats
3469
3470@cindex paquets avec plusieurs résultats
3471@cindex sorties de paquets
3472@cindex sorties
3473
3474Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
3475c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
3476dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
3477la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
3478@code{out} mais son nom peut être omis comme le montre cette commande. Dans
3479ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
3480fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
3481statiques, la documentation Info et les autres fichiers de support.
3482
3483Parfois il est plus approprié de séparer les divers types de fichiers
3484produits par un même paquet source en plusieurs sorties. Par exemple, la
3485bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
3486plus de 20 Mo de documentation de référence dans des pages HTML. Pour
3487préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
3488documentation va dans une sortie séparée nommée @code{doc}. Pour installer
3489la sortie principale de GLib, qui contient tout sauf la documentation, on
3490devrait lancer :
3491
3492@example
3493guix package -i glib
3494@end example
3495
3496@cindex documentation
3497La commande pour installer la documentation est :
3498
3499@example
3500guix package -i glib:doc
3501@end example
3502
3503Certains paquets installent des programmes avec des « empreintes dépendances
3504» différentes. Par exemple le paquet WordNet installe à la fois les outils
3505en ligne de commande et les interfaces graphiques (GUI). La première ne
3506dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
3507et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
3508en ligne de commande dans la sortie par défaut et l'interface graphique dans
3509une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
3510d'interface graphique de gagner de la place. La commande @command{guix
3511size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
3512
3513Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
3514D'autres noms de sorties conventionnels sont @code{lib} pour les
3515bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
3516programmes indépendants et @code{debug} pour les informations de débogage
3517(@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
3518dans la troisième colonne de la sortie de @command{guix package
3519--list-available} (@pxref{Invoquer guix package}).
3520
3521
3522@node Invoquer guix gc
3523@section Invoquer @command{guix gc}
3524
3525@cindex ramasse-miettes
3526@cindex espace disque
3527Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
3528La commande @command{guix gc} permet aux utilisateurs de lancer
3529explicitement le ramasse-miettes pour récupérer de l'espace dans le
3530répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
3531des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
3532répertoires à la main peut le casser de manière impossible à réparer !
3533
3534@cindex racines du GC
3535@cindex racines du ramasse-miettes
3536Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
3537dans @file{/gnu/store} atteignable depuis une racine est considéré comme
3538@dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
3539considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
3540racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
3541les profils par défaut des utilisateurs ; par défaut les liens symboliques
3542sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
3543racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
3544exemple (@pxref{Invoquer guix build}). La commande @command{guix gc
3545--list-roots} permet de les lister.
3546
3547Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
3548c'est souvent utile de supprimer les anciennes génération des profils
3549utilisateurs ; de cette façon les anciennes constructions de paquets
3550référencées par ces générations peuvent être glanées. Cela se fait en
3551lançant @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
3552
3553Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
3554avez besoin d'espace disque. Par exemple pour garantir qu'au moins
35555@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
3556
3557@example
3558guix gc -F 5G
3559@end example
3560
3561Il est parfaitement possible de le lancer comme une tâche périodique
3562non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
3563paramétrer une telle tâche). Lancer @command{guix gc} sans argument
3564ramassera autant de miettes que possible mais ça n'est pas le plus pratique
3565: vous pourriez vous retrouver à reconstruire ou re-télécharger des
3566logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
3567construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
3568
3569La command @command{guix gc} a trois modes d'opération : il peut être
3570utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
3571fichiers spécifiques (l'option @code{--delete}), pour afficher des
3572informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
3573options du ramasse-miettes sont :
3574
3575@table @code
3576@item --collect-garbage[=@var{min}]
3577@itemx -C [@var{min}]
3578Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
3579@file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
3580lorsqu'aucune option n'est spécifiée.
3581
3582Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
3583collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
3584d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
3585(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
3586
3587Lorsque @var{min} est omis, tout glaner.
3588
3589@item --free-space=@var{libre}
3590@itemx -F @var{libre}
3591Glaner jusqu'à ce que @var{libre} espace soit disponible dans
3592@file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
3593comme @code{500MiB} comme décrit ci-dessus.
3594
3595Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
3596faire et s'arrêter immédiatement.
3597
3598@item --delete-generations[=@var{durée}]
3599@itemx -d [@var{durée}]
3600Avant de commencer le glanage, supprimer toutes les générations plus vielles
3601que @var{durée}, pour tous les profils utilisateurs ; lorsque cela est lancé
3602en root, cela s'applique à tous les profils @emph{de tous les utilisateurs}.
3603
3604Par exemple, cette commande supprime toutes les générations de tous vos
3605profils plus vieilles que 2 mois (sauf s'il s'agit de la génération
3606actuelle) puis libère de l'espace jusqu'à atteindre au moins 10 Go d'espace
3607libre :
3608
3609@example
3610guix gc -d 2m -F 10G
3611@end example
3612
3613@item --delete
3614@itemx -D
3615Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
3616en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
3617ou s'ils sont toujours utilisés.
3618
3619@item --list-failures
3620Lister les éléments du dépôt qui correspondent à des échecs de construction.
3621
3622Cela n'affiche rien à moins que le démon n'ait été démarré avec
3623@option{--cache-failures} (@pxref{Invoquer guix-daemon,
3624@option{--cache-failures}}).
3625
3626@item --list-roots
3627Lister les racines du GC appartenant à l'utilisateur ; lorsque la commande
3628est lancée en root, lister @emph{toutes} les racines du GC.
3629
3630@item --clear-failures
3631Supprimer les éléments du dépôt spécifiés du cache des constructions
3632échouées.
3633
3634De nouveau, cette option ne fait de sens que lorsque le démon est démarré
3635avec @option{--cache-failures}. Autrement elle ne fait rien.
3636
3637@item --list-dead
3638Montrer la liste des fichiers et des répertoires inutilisés encore présents
3639dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
3640atteignables par aucune racine.
3641
3642@item --list-live
3643Montrer la liste des fichiers et des répertoires du dépôt utilisés.
3644
3645@end table
3646
3647En plus, les références entre les fichiers existants du dépôt peuvent être
3648demandés :
3649
3650@table @code
3651
3652@item --references
3653@itemx --referrers
3654@cindex dépendances des paquets
3655Lister les références (respectivement les référents) des fichiers du dépôt
3656en argument.
3657
3658@item --requisites
3659@itemx -R
3660@cindex closure
3661Lister les prérequis des fichiers du dépôt passés en argument. Les
3662prérequis sont le fichier du dépôt lui-même, leur références et les
3663références de ces références, récursivement. En d'autre termes, la liste
3664retournée est la @dfn{closure transitive} des fichiers du dépôt.
3665
3666@xref{Invoquer guix size} pour un outil pour surveiller la taille de la
3667closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
3668visualiser le graphe des références.
3669
3670@item --derivers
3671@cindex dérivation
3672Renvoie les dérivations menant aux éléments du dépôt donnés
3673(@pxref{Dérivations}).
3674
3675Par exemple cette commande :
3676
3677@example
3678guix gc --derivers `guix package -I ^emacs$ | cut -f4`
3679@end example
3680
3681@noindent
3682renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
3683votre profil.
3684
3685Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
3686ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
3687@file{.drv} correspondant à cause de dérivations à sortie fixées.
3688@end table
3689
3690Enfin, les options suivantes vous permettent de vérifier l'intégrité du
3691dépôt et de contrôler l'utilisation du disque.
3692
3693@table @option
3694
3695@item --verify[=@var{options}]
3696@cindex intégrité, du dépôt
3697@cindex vérification d'intégrité
3698Vérifier l'intégrité du dépôt.
3699
3700Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
3701dans la base de données du démon existent bien dans @file{/gnu/store}.
3702
3703Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
3704virgule de l'un ou plus parmi @code{contents} et @code{repair}.
3705
3706Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
3707contenu de chaque élément du dépôt et le compare au hash de sa base de
3708données. Les différences de hash sont rapportées comme des corruptions de
3709données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
3710commande peut prendre très longtemps pour terminer, surtout sur un système
3711avec un disque lent.
3712
3713@cindex réparer le dépôt
3714@cindex corruption, récupérer de
3715Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
3716que le démon essaie de réparer les objets du dépôt corrompus en récupérant
3717leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
3718atomique et donc potentiellement dangereuse, elle n'est disponible que pour
3719l'administrateur système. Une alternative plus légère lorsque vous
3720connaissez exactement quelle entrée est corrompue consiste à lancer
3721@command{guix build --repair} (@pxref{Invoquer guix build}).
3722
3723@item --optimize
3724@cindex déduplication
3725Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
3726@dfn{déduplication}.
3727
3728Le démon effectue une déduplication à chaque construction réussie ou import
3729d'archive à moins qu'il n'ait été démarré avec
3730@code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
3731@code{--disable-deduplication}}). Ainsi, cette option est surtout utile
3732lorsque le démon tourne avec @code{--disable-deduplication}.
3733
3734@end table
3735
3736@node Invoquer guix pull
3737@section Invoquer @command{guix pull}
3738
3739@cindex mettre à niveau Guix
3740@cindex mettre à jour Guix
3741@cindex @command{guix pull}
3742@cindex pull
3743Les paquets sont installés ou mis à jour vers la dernière version disponible
3744dans la distribution actuellement disponible sur votre machine locale. Pour
3745mettre à jour cette distribution, en même temps que les outils Guix, vous
3746devez lancer @command{guix pull} ; la commande télécharge le dernier code
3747source de Guix et des descriptions de paquets et le déploie. Le code source
3748est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
3749le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
3750
3751À la fin, @command{guix package} utilisera les paquets et les versions des
3752paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
3753toutes les commandes Guix et les modules Scheme seront aussi récupérés
3754depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
3755ajoutés par la mise à jour sont aussi maintenant disponibles.
3756
3757Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
3758pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
3759pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
3760pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
3761vice-versa.
3762
3763Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
3764disponible sous @file{~/.config/guix/current} contenant la dernière version
3765de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
3766recherche pour que vous utilisiez la dernière version. Le même conseil
3767s'applique au manuel Info (@pxref{Documentation}) :
3768
3769@example
3770export PATH="$HOME/.config/guix/current/bin:$PATH"
3771export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
3772@end example
3773
3774L'option @code{--list-generations} ou @code{-l} liste les anciennes
3775générations produites par @command{guix pull}, avec des détails sur leur
3776origine :
3777
3778@example
3779$ guix pull -l
3780Génération 1 10 juin 2018 00:18:18
3781 guix 65956ad
3782 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3783 branche : origin/master
3784 commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
3785
3786Génération 2 11 juin 2018 11:02:49
3787 guix e0cc7f6
3788 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3789 branche : origin/master
3790 commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
3791 2 nouveaux paquets : keepalived, libnfnetlink
3792 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
3793 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
3794 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
3795
3796Génération 3 13 juin 2018 23:31:07 (actuelle)
3797 guix 844cc1c
3798 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3799 branche : origin/master
3800 commit : 844cc1c8f394f03b404c5bb3aee086922373490c
3801 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
3802 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
3803@end example
3804
3805@xref{Invoquer guix describe, @command{guix describe}}, pour d'autres
3806manières de décrire le statut actuel de Guix.
3807
3808Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
3809créés par @command{guix package} (@pxref{Invoquer guix package}).
3810C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
3811une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
3812
3813@example
3814$ guix package -p ~/.config/guix/current --roll-back
3815passé de la génération 3 à 2
3816$ guix package -p ~/.config/guix/current --delete-generations=1
3817suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
3818@end example
3819
3820La commande @command{guix pull} est typiquement invoquée sans arguments mais
3821il supporte les options suivantes :
3822
3823@table @code
3824@item --url=@var{url}
3825@itemx --commit=@var{commit}
3826@itemx --branch=@var{branche}
3827Download code for the @code{guix} channel from the specified @var{url}, at
3828the given @var{commit} (a valid Git commit ID represented as a hexadecimal
3829string), or @var{branch}.
3830
3831@cindex @file{channels.scm}, fichier de configuration
3832@cindex fichier de configuration pour les canaux
3833Ces options sont fournies pour votre confort, mais vous pouvez aussi
3834spécifier votre configuration dans le fichier
3835@file{~/.config/guix/channels.scm} ou en utilisant l'option
3836@option{--channels} (voir plus bas).
3837
3838@item --channels=@var{file}
3839@itemx -C @var{file}
3840Lit la liste des canaux dans @var{file} plutôt que dans
3841@file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
3842qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
3843d'informations.
3844
3845@item --list-generations[=@var{motif}]
3846@itemx -l [@var{motif}]
3847Liste toutes les générations de @file{~/.config/guix/current} ou, si
3848@var{motif} est fournit, le sous-ensemble des générations qui correspondent
3849à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
3850package --list-generations} (@pxref{Invoquer guix package}).
3851
3852@xref{Invoquer guix describe}, pour une manière d'afficher des informations
3853sur la génération actuelle uniquement.
3854
3855@item --profile=@var{profil}
3856@itemx -p @var{profil}
3857Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
3858
3859@item --dry-run
3860@itemx -n
3861Montrer quels commits des canaux seraient utilisés et ce qui serait
3862construit ou substitué mais ne pas le faire vraiment.
3863
3864@item --system=@var{système}
3865@itemx -s @var{système}
3866Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
3867plutôt que pour le type de système de l'hôte de construction.
3868
3869@item --verbose
3870Produire une sortie verbeuse, en écrivant les journaux de construction sur
3871la sortie d'erreur standard.
3872
3873@item --bootstrap
3874Utiliser le programme d'amorçage Guile pour construire la dernière version
3875de Guix. Cette option n'est utile que pour les développeurs de Guix.
3876@end table
3877
3878Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
3879répertoires et branches récupérer, ainsi que les dépôts
3880@emph{supplémentaires} contenant des modules de paquets qui devraient être
3881déployés. @xref{Canaux} pour plus d'information.
3882
3883En plus, @command{guix pull} supporte toutes les options de construction
3884communes (@pxref{Options de construction communes}).
3885
3886@node Canaux
3887@section Canaux
3888
3889@cindex canaux
3890@cindex @file{channels.scm}, fichier de configuration
3891@cindex fichier de configuration pour les canaux
3892@cindex @command{guix pull}, fichier de configuration
3893@cindex configuration de @command{guix pull}
3894Guix et sa collection de paquets sont mis à jour en lançant @command{guix
3895pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
3896télécharge et déploie Guix lui-même depuis le dépôt officiel de
3897GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
3898dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
3899et la branche d'un répertoire Git à déployer et on peut demander à
3900@command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
3901termes, les canaux peuvent être utilisés pour personnaliser et pour
3902@emph{étendre} Guix, comme on le verra plus bas.
3903
3904@subsection Utiliser un canal Guix personnalisé
3905
3906Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
3907de commande ainsi que sa collection de paquets — sera téléchargé. Par
3908exemple, supposons que vous voulez effectuer les mises à jour depuis votre
3909propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
3910depuis la branche @code{super-hacks}. Vous pouvez écrire cette
3911spécification dans @code{~/.config/guix/channels.scm} :
3912
3913@lisp
3914;; Dit à « guix pull » d'utiliser mon propre dépôt.
3915(list (channel
3916 (name 'guix)
3917 (url "https://example.org/my-guix.git")
3918 (branch "super-hacks")))
3919@end lisp
3920
3921@noindent
3922Maintenant, @command{guix pull} récupérera le code depuis la branche
3923@code{super-hacks} du dépôt sur @code{example.org}.
3924
3925@subsection Spécifier des canaux supplémentaires
3926
3927@cindex étendre la collection de paquets (canaux)
3928@cindex paquets personnels (canaux)
3929@cindex canaux, pour des paquets personnels
3930Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
3931Disons que vous avez un ensemble de paquets personnels ou de variantes
3932personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
3933mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
3934de commande. Vous écririez d'abord des modules contenant ces définitions de
3935paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
3936vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
3937supplémentaire où trouver ces paquets. Sympa, non ?
3938
3939@c What follows stems from discussions at
3940@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3941@c earlier discussions on guix-devel@gnu.org.
3942@quotation Attention
3943Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
3944@emph{super génial} ! » et que vous ne publiez vos canaux personnels
3945publiquement, nous voudrions vous donner quelques avertissements :
3946
3947@itemize
3948@item
3949Avant de publier un canal, envisagez de contribuer vos définitions de
3950paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
3951ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
3952Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
3953des processus d'assurance qualité du projet.
3954
3955@item
3956Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
3957les développeurs de Guix, considérons que @emph{la charge de la
3958compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
3959les définitions de paquets ne sont que du code Scheme qui utilise diverses
3960interfaces de programmation (API). Nous souhaitons rester libres de changer
3961ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
3962casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
3963ne nous engageons @emph{pas} à geler les API non plus.
3964
3965@item
3966Corollaire : si vous utilisez un canal externe et que le canal est cassé,
3967merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
3968Guix.
3969@end itemize
3970
3971Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
3972sont une manière pratique d'exercer votre liberté pour augmenter la
3973collection de paquets de Guix et de partager vos améliorations, qui sont les
3974principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
3975logiciel libre}. Contactez-nous par courriel sur
3976@email{guix-devel@@gnu.org} si vous souhaitez discuter à ce propos.
3977@end quotation
3978
3979Pour utiliser un canal, écrivez dans @code{~/.config/guix/channels.scm} pour
3980dire à @command{guix pull} de récupérer votre canal personnel @emph{en plus}
3981des canaux par défaut de Guix :
3982
3983@vindex %default-channels
3984@lisp
3985;; Ajouter mes paquets personnels à ceux fournis par Guix.
3986(cons (channel
3987 (name 'my-personal-packages)
3988 (url "https://example.org/personal-packages.git"))
3989 %default-channels)
3990@end lisp
3991
3992@noindent
3993Remarquez que le bout de code au-dessus est (comme toujours !)@: du code
3994Scheme ; nous utilisons @code{cons} pour ajouter un canal à la liste des
3995canaux que la variable @code{%default-channels} représente (@pxref{Pairs,
3996@code{cons} and lists,, guile, GNU Guile Reference Manual}). Avec ce
3997fichier en place, @command{guix pull} construit non seulement Guix mais
3998aussi les modules de paquets de votre propre dépôt. Le résultat dans
3999@file{~/.config/guix/current} est l'union de Guix et de vos propres modules
4000de paquets :
4001
4002@example
4003$ guix pull --list-generations
4004@dots{}
4005Génération 19 Aug 27 2018 16:20:48
4006 guix d894ab8
4007 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
4008 branche : master
4009 commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
4010 my-personal-packages dd3df5e
4011 URL du dépôt : https://example.org/personal-packages.git
4012 branche : master
4013 commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
4014 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
4015 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
4016@end example
4017
4018@noindent
4019La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
4020contient aussi bien Guix que les paquets du canal
4021@code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
4022à jour qui sont listés, certains comme @code{my-gimp} et
4023@code{my-emacs-with-cool-features} peuvent provenir de
4024@code{my-personal-packages}, tandis que d'autres viennent du canal par
4025défaut de Guix.
4026
4027Pour créer un canal, créez un dépôt Git contenant vos propres modules de
4028paquets et rendez-le disponible. Le dépôt peut contenir tout ce que vous
4029voulez, mais un canal utile contiendra des modules Guile qui exportent des
4030paquets. Une fois que vous avez démarré un canal, Guix se comportera comme
4031si le répertoire de la racine du dépôt Git de ce canal était ajouté au
4032chemin de chargement de Guile (@pxref{Load Paths,,, guile, GNU Guile
4033Reference Manual}). Par exemple, si votre canal contient un fichier
4034@file{mes-paquets/mes-outils.scm} qui définit un module Guile, le module
4035sera disponible sous le nom de @code{(mes-paquets mes-outils)} et vous
4036pourrez l'utiliser comme les autres modules (@pxref{Modules,,, guile, GNU
4037Guile Reference Manual}).
4038
4039@cindex dépendances, canaux
4040@cindex métadonnées, canaux
4041@subsection Déclarer des dépendances de canaux
4042
4043Les auteurs de canaux peuvent décider d'augmenter une collection de paquets
4044fournie par d'autres canaux. Ils peuvent déclarer leur canal comme
4045dépendant d'autres canaux dans le fichier de métadonnées
4046@file{.guix-channel} qui doit être placé à la racine de dépôt du canal.
4047
4048Le fichier de métadonnées devrait contenir une S-expression simple comme
4049cela :
4050
4051@lisp
4052(channel
4053 (version 0)
4054 (dependencies
4055 (channel
4056 (name une-collection)
4057 (url "https://exemple.org/premiere-collection.git"))
4058 (channel
4059 (name some-autre-collection)
4060 (url "https://exemple.org/deuxieme-collection.git")
4061 (branch "testing"))))
4062@end lisp
4063
4064Dans l'exemple ci-dessus, ce canal est déclaré comme dépendant de deux
4065autres canaux, qui seront récupérés automatiquement. Les modules fournis
4066par le canal seront compilés dans un environnement où les modules de tous
4067les canaux déclarés sont disponibles.
4068
4069Pour des raisons de fiabilité et de maintenabilité, vous devriez éviter
4070d'avoir des dépendances sur des canaux que vous ne maîtrisez pas et vous
4071devriez ajouter le minimum de dépendances possible.
4072
4073@subsection Répliquer Guix
4074
4075@cindex épinglage, canaux
4076@cindex répliquer Guix
4077@cindex reproductibilité, de Guix
4078La sortie de @command{guix pull --list-generations} ci-dessus montre
4079précisément quels commits ont été utilisés pour construire cette instance de
4080Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
4081fournissant une spécification de canal dans
4082@file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
4083
4084@lisp
4085;; Déployer des commits précis de mes canaux préférés.
4086(list (channel
4087 (name 'guix)
4088 (url "https://git.savannah.gnu.org/git/guix.git")
4089 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
4090 (channel
4091 (name 'my-personal-packages)
4092 (url "https://example.org/personal-packages.git")
4093 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
4094@end lisp
4095
4096La commande @command{guix describe --format=channels} peut même générer
4097cette liste de canaux directement (@pxref{Invoquer guix describe}).
4098
4099À ce moment les deux machines font tourner @emph{exactement le même Guix},
4100avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
4101build gimp} sur une machine sera exactement la même, au bit près, que la
4102sortie de la même commande sur l'autre machine. Cela signifie aussi que les
4103deux machines ont accès à tous les codes sources de Guix, et transitivement,
4104à tous les codes sources de tous les paquets qu'il définit.
4105
4106Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
4107provenance des artefacts binaires avec un grain très fin et de reproduire
4108les environnements logiciels à volonté — une sorte de capacité de «
4109méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
4110manière d'utiliser ces super-pouvoirs.
4111
4112@node Inférieurs
4113@section Inférieurs
4114
4115@c TODO: Remove this once we're more confident about API stability.
4116@quotation Remarque
4117La fonctionnalité décrite ici est un « démonstrateur technique » à la
4118version @value{VERSION}. Ainsi, l'interface est sujette à changements.
4119@end quotation
4120
4121@cindex inférieurs
4122@cindex composition de révisions de Guix
4123Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
4124avec des paquets disponibles dans une révision différente de Guix. Les
4125@dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
4126composant différentes versions de Guix de manière arbitraire.
4127
4128@cindex paquets inférieurs
4129Techniquement, un « inférieur » est surtout un processus Guix séparé
4130connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
4131inférieurs et de communiquer avec eux. Il fournit aussi une interface de
4132haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
4133inférieurs} — et les manipuler.
4134
4135Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
4136fournissent une manière simple d'interagir avec un révision de Guix
4137séparée. Par exemple, disons que vous souhaitiez installer dans votre
4138profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
4139révision de Guix — peut-être parce que la nouvelle version de
4140@code{guile-json} a une API incompatible et que vous voulez lancer du code
4141avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
4142utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
4143; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
4144Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
4145l'inférieur :
4146
4147@lisp
4148(use-modules (guix inferior) (guix channels)
4149 (srfi srfi-1)) ;pour « first »
4150
4151(define channels
4152 ;; L'ancienne révision depuis laquelle on veut
4153 ;; extraire guile-json.
4154 (list (channel
4155 (name 'guix)
4156 (url "https://git.savannah.gnu.org/git/guix.git")
4157 (commit
4158 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4159
4160(define inferior
4161 ;; Un inférieur représentant la révision ci-dessus.
4162 (inferior-for-channels channels))
4163
4164;; Maintenant on crée un manifeste avec le paquet « guile » actuel
4165;; et l'ancien paquet « guile-json ».
4166(packages->manifest
4167 (list (first (lookup-inferior-packages inferior "guile-json"))
4168 (specification->package "guile")))
4169@end lisp
4170
4171Durant la première exécution, @command{guix package --manifest} pourrait
4172avoir besoin de construire le canal que vous avez spécifié avant de créer
4173l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
4174révision de Guix sera déjà en cache.
4175
4176Le module @code{(guix inferior)} fournit les procédures suivantes pour
4177ouvrir un inférieur :
4178
4179@deffn {Procédure Scheme} inferior-for-channels @var{channels} @
4180 [#:cache-directory] [#:ttl]
4181Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
4182le cache dans @var{cache-directory}, où les entrées peuvent être glanées
4183après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
4184démon de construction.
4185
4186Elle a pour effet de bord de construire ou de substituer des binaires pour
4187@var{channels}, ce qui peut prendre du temps.
4188@end deffn
4189
4190@deffn {Procédure Scheme} open-inferior @var{directory} @
4191 [#:command "bin/guix"]
4192Ouvre le Guix inférieur dans @var{directory} et lance
4193@code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
4194si l'inférieur n'a pas pu être lancé.
4195@end deffn
4196
4197@cindex paquets inférieurs
4198Les procédures listées plus bas vous permettent d'obtenir et de manipuler
4199des paquets inférieurs.
4200
4201@deffn {Procédure Scheme} inferior-packages @var{inferior}
4202Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
4203@end deffn
4204
4205@deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
4206 [@var{version}]
4207Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
4208dans @var{inferior}, avec le plus haut numéro de version en premier. Si
4209@var{version} est vrai, renvoie seulement les paquets avec un numéro de
4210version préfixé par @var{version}.
4211@end deffn
4212
4213@deffn {Procédure Scheme} inferior-package? @var{obj}
4214Renvoie vrai si @var{obj} est un paquet inférieur.
4215@end deffn
4216
4217@deffn {Procédure Scheme} inferior-package-name @var{package}
4218@deffnx {Procédure Scheme} inferior-package-version @var{package}
4219@deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
4220@deffnx {Procédure Scheme} inferior-package-description @var{package}
4221@deffnx {Procédure Scheme} inferior-package-home-page @var{package}
4222@deffnx {Procédure Scheme} inferior-package-location @var{package}
4223@deffnx {Procédure Scheme} inferior-package-inputs @var{package}
4224@deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
4225@deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
4226@deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
4227@deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
4228@deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
4229@deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
4230Ces procédures sont la contrepartie des accesseurs des enregistrements de
4231paquets (@pxref{Référence des paquets}). La plupart fonctionne en effectuant
4232des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
4233doit toujours être disponible lorsque vous appelez ces procédures.
4234@end deffn
4235
4236Les paquets inférieurs peuvent être utilisés de manière transparente comme
4237tout autre paquet ou objet simili-fichier dans des G-expressions
4238(@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
4239la procédure @code{packages->manifest}, qui est typiquement utilisée dans
4240des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
4241de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
4242à peu près n'importe où vous utiliseriez un paquet normal : dans des
4243manifestes, dans le champ @code{packages} de votre déclaration
4244@code{operating-system}, etc.
4245
4246@node Invoquer guix describe
4247@section Invoquer @command{guix describe}
4248
4249@cindex reproductibilité
4250@cindex répliquer Guix
4251Souvent vous voudrez répondre à des questions comme « quelle révision de
4252Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
4253information utile dans de nombreuses situations : si vous voulez
4254@emph{répliquer} un environnement sur une machine différente ou un compte
4255utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
4256changement dans les canaux que vous utilisez l'a causé ou si vous voulez
4257enregistrer l'état de votre système pour le reproduire. La commande
4258@command{guix describe} répond à ces questions.
4259
4260Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
4261@command{guix pull}, @command{guix describe} affiche les canaux qui ont été
4262construits, avec l'URL de leur dépôt et l'ID de leur commit
4263(@pxref{Canaux}) :
4264
4265@example
4266$ guix describe
4267Generation 10 03 sep. 2018 17:32:44 (actuelle)
4268 guix e0fa68c
4269 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
4270 branche : master
4271 commit : e0fa68c7718fffd33d81af415279d6ddb518f727
4272@end example
4273
4274Si vous connaissez bien le système de contrôle de version Git, cela
4275ressemble en essence à @command{git describe} ; la sortie est aussi
4276similaire à celle de @command{guix pull --list-generations}, mais limitée à
4277la génération actuelle (@pxref{Invoquer guix pull, l'option
4278@option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
4279réfère sans aucune ambiguïté à un instantané de Guix, cette information est
4280tout ce dont vous avez besoin pour décrire la révision de Guix que vous
4281utilisez et pour la répliquer.
4282
4283Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
4284aussi renvoyer une liste de canaux plutôt que la description lisible par un
4285humain au-dessus :
4286
4287@example
4288$ guix describe -f channels
4289(list (channel
4290 (name 'guix)
4291 (url "https://git.savannah.gnu.org/git/guix.git")
4292 (commit
4293 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
4294@end example
4295
4296@noindent
4297Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
4298pull -C} sur une autre machine ou plus tard, ce qui instantiera
4299@emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
4300l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
4301révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
4302logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
4303espérons que vous aimerez ça aussi !
4304
4305Voici les détails des options supportées par @command{guix describe} :
4306
4307@table @code
4308@item --format=@var{format}
4309@itemx -f @var{format}
4310Produire la sortie dans le @var{format} donné, parmi :
4311
4312@table @code
4313@item human
4314produire une sortie lisible par un humain,
4315@item canaux
4316produire une liste de spécifications de canaux qui peut être passée à
4317@command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
4318(@pxref{Invoquer guix pull}),
4319@item json
4320@cindex JSON
4321produire une liste de spécifications de canaux dans le format JSON,
4322@item recutils
4323produire une liste de spécifications de canaux dans le format Recutils.
4324@end table
4325
4326@item --profile=@var{profil}
4327@itemx -p @var{profil}
4328Afficher les informations sur le @var{profil}.
4329@end table
4330
4331@node Invoquer guix archive
4332@section Invoquer @command{guix archive}
4333
4334@cindex @command{guix archive}
4335@cindex archive
4336La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
4337des fichiers du dépôt dans une simple archive puis ensuite de les
4338@dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
4339permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
4340autre machine.
4341
4342@quotation Remarque
4343Si vous chercher une manière de produire des archives dans un format adapté
4344pour des outils autres que Guix, @pxref{Invoquer guix pack}.
4345@end quotation
4346
4347@cindex exporter des éléments du dépôt
4348Pour exporter des fichiers du dépôt comme une archive sur la sortie
4349standard, lancez :
4350
4351@example
4352guix archive --export @var{options} @var{spécifications}...
4353@end example
4354
4355@var{spécifications} peut être soit des noms de fichiers soit des
4356spécifications de paquets, comme pour @command{guix package}
4357(@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
4358archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
4359principale de @code{emacs} :
4360
4361@example
4362guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4363@end example
4364
4365Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
4366les construit automatiquement. Le processus de construction peut être
4367contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
4368
4369Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
4370pourrait lancer :
4371
4372@example
4373guix archive --export -r emacs | ssh la-machine guix archive --import
4374@end example
4375
4376@noindent
4377De même, on peut transférer un profil utilisateur complet d'une machine à
4378une autre comme cela :
4379
4380@example
4381guix archive --export -r $(readlink -f ~/.guix-profile) | \
4382 ssh la-machine guix-archive --import
4383@end example
4384
4385@noindent
4386Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
4387profil ainsi que toutes leurs dépendances sont transférées (à cause de
4388@code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
4389de la machine cible. L'option @code{--missing} peut vous aider à comprendre
4390les éléments qui manquent dans le dépôt de la machine cible. La commande
4391@command{guix copy} simplifie et optimise ce processus, c'est donc ce que
4392vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
4393
4394@cindex nar, format d'archive
4395@cindex archive normalisée (nar)
4396Les archives sont stockées au format « archive normalisé » ou « nar », qui
4397est comparable dans l'esprit à « tar » mais avec des différences qui le
4398rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
4399stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
4400mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
4401les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
4402Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
4403toujours l'ordre des noms de fichier dans l'environnement linguistique C.
4404Cela rend la production des archives entièrement déterministe.
4405
4406@c FIXME: Add xref to daemon doc about signatures.
4407Lors de l'export, le démon signe numériquement le contenu de l'archive et
4408cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
4409vérifie la signature et rejette l'import en cas de signature invalide ou si
4410la clef de signature n'est pas autorisée.
4411
4412Les principales options sont :
4413
4414@table @code
4415@item --export
4416Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
4417l'archive résultante sur la sortie standard.
4418
4419Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
4420@code{--recursive} ne soit passé.
4421
4422@item -r
4423@itemx --recursive
4424En combinaison avec @code{--export}, cette option demande à @command{guix
4425archive} d'inclure les dépendances des éléments donnés dans l'archive.
4426Ainsi, l'archive résultante est autonome : elle contient la closure des
4427éléments du dépôt exportés.
4428
4429@item --import
4430Lire une archive depuis l'entrée standard et importer les fichiers inclus
4431dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
4432signée par une clef publique qui ne se trouve pas dans le clefs autorisées
4433(voir @code{--authorize} plus bas.)
4434
4435@item --missing
4436Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
4437ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
4438manquent dans le dépôt.
4439
4440@item --generate-key[=@var{paramètres}]
4441@cindex signature, archives
4442Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
4443avant que les archives ne puissent être exportées avec @code{--export}.
4444Remarquez que cette opération prend généralement du temps parce qu'elle doit
4445récupère suffisamment d'entropie pour générer la paire de clefs.
4446
4447La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
4448dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
4449privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
4450clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
4451libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
4452@var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
4453libgcrypt (@pxref{General public-key related Functions,
4454@code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
4455
4456@item --authorize
4457@cindex autorisation, archives
4458Autoriser les imports signés par la clef publique passée sur l'entrée
4459standard. La clef publique doit être au « format avancé s-expression » —
4460c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
4461
4462La liste des clefs autorisées est gardée dans un fichier modifiable par des
4463humains dans @file{/etc/guix/acl}. Le fichier contient des
4464@url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
4465avancé »} et est structuré comme une liste de contrôle d'accès dans
4466l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
4467simple (SPKI)}.
4468
4469@item --extract=@var{répertoire}
4470@itemx -x @var{répertoire}
4471Lit une archive à un seul élément telle que servie par un serveur de
4472substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
4473une opération de bas niveau requise seulement dans de rares cas d'usage ;
4474voir plus loin.
4475
4476Par exemple, la commande suivante extrait le substitut pour Emacs servi par
4477@code{@value{SUBSTITUTE-SERVER}} dans @file{/tmp/emacs} :
4478
4479@example
4480$ wget -O - \
4481 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
4482 | bunzip2 | guix archive -x /tmp/emacs
4483@end example
4484
4485Les archives à un seul élément sont différentes des archives à plusieurs
4486éléments produites par @command{guix archive --export} ; elles contiennent
4487un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
4488Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
4489devrait être considérée comme non sûre.
4490
4491Le but principal de cette opération est de faciliter l'inspection du contenu
4492des archives venant de serveurs auxquels on ne fait potentiellement pas
4493confiance.
4494
4495@end table
4496
4497
4498@c *********************************************************************
4499@node Développement
4500@chapter Développement
4501
4502@cindex développement logiciel
4503Si vous êtes développeur de logiciels, Guix fournit des outils que vous
4504devriez trouver utiles — indépendamment du langage dans lequel vous
4505développez. C'est ce dont parle ce chapitre.
4506
4507La commande @command{guix environment} permet de créer des
4508@dfn{environnements de développement} confortables contenant toutes les
4509dépendances et les outils nécessaires pour travailler sur le paquet logiciel
4510de votre choix. La commande @command{guix pack} vous permet de créer des
4511@dfn{lots applicatifs} qui peuvent facilement être distribués à des
4512utilisateurs qui n'utilisent pas Guix.
4513
4514@menu
4515* Invoquer guix environment:: Mettre en place des environnements de
4516 développement.
4517* Invoquer guix pack:: Créer des lots de logiciels.
4518@end menu
4519
4520@node Invoquer guix environment
4521@section Invoquer @command{guix environment}
4522
4523@cindex environnements de construction reproductibles
4524@cindex environnement de développement
4525@cindex @command{guix environment}
4526@cindex environnement de construction de paquets
4527Le but de @command{guix environment} est d'assister les hackers dans la
4528création d'environnements de développement reproductibles sans polluer leur
4529profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
4530paquets, construit leurs entrées et crée un environnement shell pour pouvoir
4531les utiliser.
4532
4533La syntaxe générale est :
4534
4535@example
4536guix environment @var{options} @var{paquet}@dots{}
4537@end example
4538
4539L'exemple suivant crée un nouveau shell préparé pour le développement de
4540GNU@tie{}Guile :
4541
4542@example
4543guix environment guile
4544@end example
4545
4546Si les dépendances requises ne sont pas déjà construites, @command{guix
4547environment} les construit automatiquement. L'environnement du nouveau
4548shell est une version améliorée de l'environnement dans lequel @command{guix
4549environment} a été lancé. Il contient les chemins de recherche nécessaires
4550à la construction du paquet donné en plus des variables d'environnement
4551existantes. Pour créer un environnement « pur », dans lequel les variables
4552d'environnement de départ ont été nettoyées, utilisez l'option
4553@code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
4554supplémentaires dans les variables comme @code{PATH} dans leur
4555@file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
4556Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
4557variables d'environnement. C'est une erreur de définir ces variables
4558d'environnement dans @file{.bashrc} ; à la place, elles devraient être
4559définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
4560de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
4561Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
4562
4563@vindex GUIX_ENVIRONMENT
4564@command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
4565le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
4566environnement. Cela permet aux utilisateur, disons, de définir un prompt
4567spécifique pour les environnement de développement dans leur @file{.bashrc}
4568(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
4569
4570@example
4571if [ -n "$GUIX_ENVIRONMENT" ]
4572then
4573 export PS1="\u@@\h \w [dev]\$ "
4574fi
4575@end example
4576
4577@noindent
4578…@: ou de naviguer dans le profil :
4579
4580@example
4581$ ls "$GUIX_ENVIRONMENT/bin"
4582@end example
4583
4584En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
4585des paquets données est utilisée. Par exemple, la commande ci-dessous crée
4586un shell où toutes les dépendances de Guile et Emacs sont disponibles :
4587
4588@example
4589guix environment guile emacs
4590@end example
4591
4592Parfois, une session shell interactive est inutile. On peut invoquer une
4593commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
4594du reste des arguments :
4595
4596@example
4597guix environment guile -- make -j4
4598@end example
4599
4600Dans d'autres situations, il est plus pratique de spécifier la liste des
4601paquets requis dans l'environnement. Par exemple, la commande suivante
4602lance @command{python} dans un environnement contenant Python@tie{}2.7 et
4603NumPy :
4604
4605@example
4606guix environment --ad-hoc python2-numpy python-2.7 -- python
4607@end example
4608
4609En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
4610supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
4611construction, mais qui sont utiles au développement tout de même. À cause
4612de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
4613apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
4614les dépendances seront ajoutées à l'environnement. Les paquets qui
4615apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
4616ajouter à l'environnement directement. Par exemple, la commande suivante
4617crée un environnement de développement pour Guix avec les paquets Git et
4618strace en plus :
4619
4620@example
4621guix environment guix --ad-hoc git strace
4622@end example
4623
4624Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
4625une pureté et une reproductibilité maximale. En particulier, lorsque vous
4626utilisez Guix sur une distribution hôte qui n'est pas le système Guix, il
4627est souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
4628système depuis les environnements de développement. Par exemple, la
4629commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
4630et le répertoire de travail actuel sont montés :
4631
4632@example
4633guix environment --ad-hoc --container guile -- guile
4634@end example
4635
4636@quotation Remarque
4637L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
4638@end quotation
4639
4640Les options disponibles sont résumées ci-dessous.
4641
4642@table @code
4643@item --root=@var{fichier}
4644@itemx -r @var{fichier}
4645@cindex environnement persistent
4646@cindex racine du ramasse-miettes, pour les environnements
4647Fait de @var{fichier} un lien symbolique vers le profil de cet
4648environnement, et l'enregistre comme une racine du ramasse-miettes.
4649
4650C'est utile si vous souhaitez protéger votre environnement du
4651ramasse-miettes, pour le rendre « persistent ».
4652
4653Lorsque cette option est omise, l'environnement n'est protégé du
4654ramasse-miettes que le temps de la session @command{guix environment}. Cela
4655signifie que la prochaine fois que vous créerez le même environnement, vous
4656pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
4657
4658@item --expression=@var{expr}
4659@itemx -e @var{expr}
4660Crée un environnement pour le paquet ou la liste de paquets en lesquels
4661s'évalue @var{expr}.
4662
4663Par exemple, lancer :
4664
4665@example
4666guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4667@end example
4668
4669démarre un shell avec l'environnement pour cette variante spécifique du
4670paquet PETSc.
4671
4672Lancer :
4673
4674@example
4675guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
4676@end example
4677
4678démarre un shell où tous les paquets de base du système sont disponibles.
4679
4680Les commande au-dessus n'utilisent que les sorties par défaut des paquets
4681donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
4682
4683@example
4684guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
4685@end example
4686
4687@item --load=@var{fichier}
4688@itemx -l @var{fichier}
4689Crée un environnement pour le paquet ou la liste de paquets en lesquels
4690@var{fichier} s'évalue.
4691
4692Par exemple, @var{fichier} peut contenir une définition comme celle-ci
4693(@pxref{Définition des paquets}) :
4694
4695@example
4696@verbatiminclude environment-gdb.scm
4697@end example
4698
4699@item --manifest=@var{fichier}
4700@itemx -m @var{fichier}
4701Crée un environnement pour les paquets contenus dans l'objet manifeste
4702renvoyé par le code Scheme dans @var{fichier}.
4703
4704C'est similaire à l'option de même nom de @command{guix package}
4705(@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
4706manifestes.
4707
4708@item --ad-hoc
4709Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
4710si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
4711Cette option est utile pour créer un environnement rapidement sans avoir à
4712écrire une expression de paquet contenant les entrées désirées.
4713
4714Par exemple la commande :
4715
4716@example
4717guix environment --ad-hoc guile guile-sdl -- guile
4718@end example
4719
4720lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
4721disponibles.
4722
4723Remarquez que cet exemple demande implicitement la sortie par défaut de
4724@code{guile} et @code{guile-sdl}, mais il est possible de demander une
4725sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
4726de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
4727
4728Cette option peut être composée avec le comportement par défaut de
4729@command{guix environment}. Les paquets qui apparaissent avant
4730@code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
4731seront ajoutées à l'environnement, le comportement par défaut. Les paquets
4732qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
4733ajouter à l'environnement directement.
4734
4735@item --pure
4736Nettoie les variables d'environnement existantes lors de la construction du
4737nouvel environnement, sauf celles spécifiées par @option{--preserve} (voir
4738ci-dessous). Cela a pour effet de créer un environnement dans lequel les
4739chemins de recherche ne contiennent que des entrées de paquets.
4740
4741@item --preserve=@var{regexp}
4742@itemx -E @var{regexp}
4743Lorsque vous utilisez @option{--pure}, préserver les variables
4744d'environnement qui correspondent à @var{regexp} — en d'autres termes, cela
4745les met en « liste blanche » de variables d'environnement qui doivent être
4746préservées. Cette option peut être répétée plusieurs fois.
4747
4748@example
4749guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
4750 -- mpirun @dots{}
4751@end example
4752
4753Cet exemple exécute @command{mpirun} dans un contexte où les seules
4754variables d'environnement défines sont @code{PATH}, les variables
4755d'environnement dont le nom commence par @code{SLURM}, ainsi que les
4756variables « importante » habituelles (@code{HOME}, @code{USER}, etc).
4757
4758@item --search-paths
4759Affiche les définitions des variables d'environnement qui composent
4760l'environnement.
4761
4762@item --system=@var{système}
4763@itemx -s @var{système}
4764Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
4765
4766@item --container
4767@itemx -C
4768@cindex conteneur
4769Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
4770actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
4771de le changer avec @code{--user}, un répertoire personnel fictif est créé
4772pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwd} est
4773configuré en conséquence.
4774
4775Le processus est lancé en tant que l'utilisateur actuel en dehors du
4776conteneur. Dans le conteneur, il a le même UID et GID que l'utilisateur
4777actuel, à moins que vous ne passiez @option{--user} (voir ci-dessous).
4778
4779@item --network
4780@itemx -N
4781Pour les conteneurs, partage l'espace de nom du réseau avec le système
4782hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
4783de boucle locale.
4784
4785@item --link-profile
4786@itemx -P
4787Pour les conteneurs, lie le profil de l'environnement à
4788@file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
4789commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
4790conteneur. La liaison échouera et annulera l'environnement si le répertoire
4791existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
4792invoqué dans le répertoire personnel de l'utilisateur.
4793
4794Certains paquets sont configurés pour chercher des fichiers de configuration
4795et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
4796@code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
4797des polices supplémentaires.} ; @code{--link-profile} permet à ces
4798programmes de se comporter comme attendu dans l'environnement.
4799
4800@item --user=@var{utilisateur}
4801@itemx -u @var{utilisateur}
4802Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
4803place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwd}
4804dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
4805personnel sera @file{/home/@var{utilisateur}} ; et aucune donnée GECOS ne
4806sera copiée. En plus, l'UID et le GID dans le conteneur seront 1000.
4807@var{user} n'a pas besoin d'exister sur le système.
4808
4809En plus, tous les chemins partagés ou exposés (voir @code{--share} et
4810@code{--expose} respectivement) dont la cible est dans le répertoire
4811personnel de l'utilisateur seront remontés relativement à
4812@file{/home/UTILISATEUR} ; cela comprend le montage automatique du
4813répertoire de travail actuel.
4814
4815@example
4816# exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
4817cd $HOME/wd
4818guix environment --container --user=foo \
4819 --expose=$HOME/test \
4820 --expose=/tmp/target=$HOME/target
4821@end example
4822
4823Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
4824chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
4825qu'un composant utile pour une solution d'anonymisation ou de préservation
4826de la vie privée — pas une solution en elle-même.
4827
4828@item --expose=@var{source}[=@var{cible}]
4829Pour les conteneurs, expose le système de fichiers @var{source} du système
4830hôte comme un système de fichiers en lecture seule @var{cible} dans le
4831conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
4832comme point de montage dans le conteneur.
4833
4834L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
4835répertoire personnel de l'utilisateur est accessible en lecture-seule via le
4836répertoire @file{/exchange} :
4837
4838@example
4839guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
4840@end example
4841
4842@item --share=@var{source}[=@var{cible}]
4843Pour les conteneurs, partage le système de fichiers @var{source} du système
4844hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
4845conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
4846comme point de montage dans le conteneur.
4847
4848L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
4849répertoire personnel de l'utilisateur est accessible en lecture-écriture via
4850le répertoire @file{/exchange} :
4851
4852@example
4853guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
4854@end example
4855@end table
4856
4857En plus, @command{guix environment} prend en charge toutes les options de
4858construction communes prises en charge par @command{guix build}
4859(@pxref{Options de construction communes}) et toutes les options de transformation de
4860paquets (@pxref{Options de transformation de paquets}).
4861
4862@node Invoquer guix pack
4863@section Invoquer @command{guix pack}
4864
4865Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
4866la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
4867package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
4868C'est là que @command{guix pack} entre en jeu.
4869
4870@quotation Remarque
4871Si vous cherchez comment échanger des binaires entre des machines où Guix
4872est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
4873et @ref{Invoquer guix archive}.
4874@end quotation
4875
4876@cindex pack
4877@cindex lot
4878@cindex lot d'applications
4879@cindex lot de logiciels
4880La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
4881: elle crée une archive tar ou un autre type d'archive contenant les
4882binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
4883L'archive qui en résulte peut être utilisée sur toutes les machines qui
4884n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
4885ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
4886reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
4887contient bien les résultats que vous prétendez proposer.
4888
4889Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
4890leurs dépendances, vous pouvez lancer :
4891
4892@example
4893$ guix pack guile emacs geiser
4894@dots{}
4895/gnu/store/@dots{}-pack.tar.gz
4896@end example
4897
4898Le résultat ici est une archive tar contenant un répertoire
4899@file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
4900résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
4901; le profil est le même qui celui qui aurait été créé avec @command{guix
4902package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
4903binaires indépendantes de Guix (@pxref{Installation binaire}).
4904
4905Les utilisateurs de ce pack devraient lancer
4906@file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
4907pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
4908symbolique @file{/opt/gnu/bin} vers le profil :
4909
4910@example
4911guix pack -S /opt/gnu/bin=bin guile emacs geiser
4912@end example
4913
4914@noindent
4915De cette façon, les utilisateurs peuvent joyeusement taper
4916@file{/opt/gnu/bin/guile} et profiter.
4917
4918@cindex binaires repositionnables, avec @command{guix pack}
4919Et si le destinataire de votre pack n'a pas les privilèges root sur sa
4920machine, et ne peut donc pas le décompresser dans le système de fichiers
4921racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
4922(voir plus bas). Cette option produite des @dfn{binaire repositionnables},
4923ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
4924du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
4925décompresser votre archive dans leur répertoire personnel et lancer
4926directement @file{./opt/gnu/bin/guile}.
4927
4928@cindex Docker, construire une image avec guix pack
4929Autrement, vous pouvez produire un pack au format d'image Docker avec la
4930commande suivante :
4931
4932@example
4933guix pack -f docker guile emacs geiser
4934@end example
4935
4936@noindent
4937Le résultat est une archive tar qui peut être passée à la commande
4938@command{docker load}. Voir la
4939@uref{https://docs.docker.com/engine/reference/commandline/load/,
4940documentation de Docker} pour plus d'informations.
4941
4942@cindex Singularity, construire une image avec guix pack
4943@cindex SquashFS, construire une image avec guix pack
4944Autrement, vous pouvez produire une image SquashFS avec la commande suivante
4945:
4946
4947@example
4948guix pack -f squashfs guile emacs geiser
4949@end example
4950
4951@noindent
4952Le résultat est une image de système de fichiers SquashFS qui peut soit être
4953montée directement soit être utilisée comme image de conteneur de système de
4954fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
4955conteneurisé Singularity}, avec des commandes comme @command{singularity
4956shell} ou @command{singularity exec}.
4957
4958Diverses options en ligne de commande vous permettent de personnaliser votre
4959pack :
4960
4961@table @code
4962@item --format=@var{format}
4963@itemx -f @var{format}
4964Produire un pack dans le @var{format} donné.
4965
4966Les formats disponibles sont :
4967
4968@table @code
4969@item tarball
4970C'est le format par défaut. Il produit une archive tar contenant tous les
4971binaires et les liens symboliques spécifiés.
4972
4973@item docker
4974Cela produit une archive tar qui suit la
4975@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
4976spécification des images Docker}.
4977
4978@item squashfs
4979Cela produit une image SquashFS contenant tous les binaires et liens
4980symboliques spécifiés, ainsi que des points de montages vides pour les
4981systèmes de fichiers virtuels comme procfs.
4982@end table
4983
4984@cindex binaires repositionnables
4985@item --relocatable
4986@itemx -R
4987Produire des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
4988vous pouvez placer n'importe où dans l'arborescence du système de fichiers
4989et les lancer à partir de là.
4990
4991Lorsque vous passez cette option une fois, les binaires qui en résultent
4992demandent le support des @dfn{espaces de nom utilisateurs} dans le noyau
4993Linux ; lorsque vous la passez @emph{deux} fois@footnote{Il y a une astuce
4994pour s'en rappeler : on peut envisager @code{RR}, qui ajoute le support
4995PRoot, comme étant l'abréviation de « Réellement Repositionnable ». Pas
4996mal, hein ?}, les binaires repositionnables utilisent PRoot si les espaces
4997de noms ne sont pas utilisables, et ça fonctionne partout — voir plus bas
4998pour comprendre les implications.
4999
5000Par exemple, si vous créez un pack contenant Bash avec :
5001
5002@example
5003guix pack -RR -S /mybin=bin bash
5004@end example
5005
5006@noindent
5007…@: vous pouvez copier ce pack sur une machine qui n'a pas Guix et depuis
5008votre répertoire personnel en tant qu'utilisateur non-privilégié, lancer :
5009
5010@example
5011tar xf pack.tar.gz
5012./mybin/sh
5013@end example
5014
5015@noindent
5016Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
5017@file{/gnu/store} apparaît et contient toutes les dépendances de
5018@code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
5019C'est sans doute la manière la plus simple de déployer du logiciel construit
5020avec Guix sur une machine sans Guix.
5021
5022@quotation Remarque
5023Par défaut ,les binaires repositionnables s'appuient sur les @dfn{espaces de
5024noms utilisateurs} du noyau Linux, qui permet à des utilisateurs
5025non-privilégiés d'effectuer des montages et de changer de racine. Les
5026anciennes versions de Linux ne le supportait pas et certaines distributions
5027GNU/Linux le désactive.
5028
5029Pour produire des binaires repositionnables qui fonctionnent même sans
5030espace de nom utilisateur, passez @option{--relocatable} ou @option{-R}
5031@emph{deux fois}. Dans ce cas, les binaires testeront la prise en charge
5032des espaces de noms utilisateurs et utiliseront PRoot s'ils ne sont pas pris
5033en charge.
5034
5035Le programme @uref{https://proot-me.github.io/, PRoot} fournit la prise en
5036charge nécessaire pour la virtualisation du système de fichier. Il y arrive
5037en utilisant l'appel système @code{ptrace} sur le programme. Cette approche
5038a l'avantage de fonctionner sans demander de support spécial de la part du
5039noyau, mais occasionne un coût supplémentaire en temps pour chaque appel
5040système effectué.
5041@end quotation
5042
5043@item --expression=@var{expr}
5044@itemx -e @var{expr}
5045Considérer le paquet évalué par @var{expr}.
5046
5047Cela a le même but que l'option de même nom de @command{guix build}
5048(@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
5049build}}).
5050
5051@item --manifest=@var{fichier}
5052@itemx -m @var{fichier}
5053Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
5054Scheme dans @var{fichier}
5055
5056Elle a un but similaire à l'option de même nom dans @command{guix package}
5057(@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
5058fichiers manifeste. Ils vous permettent de définir une collection de
5059paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
5060créer des archives pour des machines qui n'ont pas Guix d'installé.
5061Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
5062@emph{soit} une liste de paquet, mais pas les deux.
5063
5064@item --system=@var{système}
5065@itemx -s @var{système}
5066Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
5067plutôt que pour le type de système de l'hôte de construction.
5068
5069@item --target=@var{triplet}
5070@cindex compilation croisée
5071Effectuer une compilation croisée pour @var{triplet} qui doit être un
5072triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
5073target triplets, GNU configuration triplets,, autoconf, Autoconf}).
5074
5075@item --compression=@var{outil}
5076@itemx -C @var{outil}
5077Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
5078@code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
5079
5080@item --symlink=@var{spec}
5081@itemx -S @var{spec}
5082Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
5083option peut apparaître plusieurs fois.
5084
5085@var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
5086le lien symbolique qui sera créé et @var{cible} est la cible du lien.
5087
5088Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
5089@file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
5090
5091@item --save-provenance
5092Sauvegarder les informations de provenance des paquets passés sur la ligne
5093de commande. Les informations de provenance contiennent l'URL et le commit
5094des canaux utilisés (@pxref{Canaux}).
5095
5096Les informations de provenance sont sauvegardées dans le fichier
5097@file{/gnu/store/@dots{}-profile/manifest} du pack, avec les métadonnées de
5098paquets habituelles — le nom et la version de chaque paquet, leurs entrées
5099propagées, etc. Ce sont des informations utiles pour le destinataire du
5100pack, qui sait alors comment le pack a (normalement) été obtenu.
5101
5102Cette option n'est pas activée par défaut car, comme l'horodatage, les
5103informations de provenance ne contribuent en rien au processus de
5104construction. En d'autres termes, il y a une infinité d'URL et d'ID de
5105commit qui permettent d'obtenir le même pack. Enregistrer de telles
5106métadonnées « silencieuses » dans la sortie casse donc éventuellement la
5107propriété de reproductibilité au bit près.
5108
5109@item --localstatedir
5110@itemx --profile-name=@var{nom}
5111Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
5112résulte, et notamment le profil
5113@file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
5114@code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
5115
5116@file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
5117ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
5118fournir dans le pack signifie que le dépôt et « complet » et gérable par
5119Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
5120aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
5121
5122Un cas d'utilisation est l'archive binaire indépendante de Guix
5123(@pxref{Installation binaire}).
5124
5125@item --bootstrap
5126Utiliser les programmes d'amorçage pour construire le pack. Cette option
5127n'est utile que pour les développeurs de Guix.
5128@end table
5129
5130En plus, @command{guix pack} supporte toutes les options de construction
5131communes (@pxref{Options de construction communes}) et toutes les options de
5132transformation de paquets (@pxref{Options de transformation de paquets}).
5133
5134
5135@c *********************************************************************
5136@node Interface de programmation
5137@chapter Interface de programmation
5138
5139GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
5140définir, construire et faire des requêtes sur des paquets. La première
5141interface permet aux utilisateurs d'écrire des définitions de paquets de
5142haut-niveau. Ces définitions se réfèrent à des concepts de création de
5143paquets familiers, comme le nom et la version du paquet, son système de
5144construction et ses dépendances. Ces définitions peuvent ensuite être
5145transformées en actions concrètes lors de la construction.
5146
5147Les actions de construction sont effectuées par le démon Guix, pour le
5148compte des utilisateurs. Dans un environnement standard, le démon possède
5149les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
5150pas les utilisateurs. La configuration recommandée permet aussi au démon
5151d'effectuer la construction dans des chroots, avec un utilisateur de
5152construction spécifique pour minimiser les interférences avec le reste du
5153système.
5154
5155@cindex dérivation
5156Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
5157Pour demander au démon d'effectuer une action de construction, les
5158utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
5159une représentation à bas-niveau des actions de construction à entreprendre
5160et l'environnement dans lequel elles devraient avoir lieu — les dérivations
5161sont aux définitions de paquets ce que l'assembleur est aux programmes C.
5162Le terme de « dérivation » vient du fait que les résultats de la
5163construction en @emph{dérivent}.
5164
5165Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
5166paquets à haut-niveau.
5167
5168@menu
5169* Modules de paquets:: Les paquets du point de vu du programmeur.
5170* Définition des paquets:: Définir de nouveaux paquets.
5171* Systèmes de construction:: Spécifier comment construire les paquets.
5172* Le dépôt:: Manipuler le dépôt de paquets.
5173* Dérivations:: Interface de bas-niveau avec les dérivations
5174 de paquets.
5175* La monade du dépôt:: Interface purement fonctionnelle avec le
5176 dépôt.
5177* G-Expressions:: Manipuler les expressions de construction.
5178* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
5179@end menu
5180
5181@node Modules de paquets
5182@section Modules de paquets
5183
5184D'un point de vue programmatique, les définitions de paquets de la
5185distribution GNU sont fournies par des modules Guile dans l'espace de noms
5186@code{(gnu packages @dots{})}@footnote{Remarquez que les paquets sous
5187l'espace de nom @code{(gnu packages @dots{})} ne sont pas nécessairement des
5188« paquets GNU ». Le nom de ce module suit la convention de nommage usuelle
5189de Guile : @code{gnu} signifie que ces modules sont distribués dans le
5190système GNU, et @code{packages} identifie les modules qui définissent les
5191paquets.} (@pxref{Modules, Guile modules,, guile, GNU Guile Reference
5192Manual}). Par exemple, le module @code{(gnu packages emacs)} exporte une
5193variable nommée @code{emacs}, qui est liée à un objet @code{<package>}
5194(@pxref{Définition des paquets}).
5195
5196L'espace de nom @code{(gnu packages @dots{})} est automatiquement scanné par
5197les outils en ligne de commande. Par exemple, lorsque vous lancez
5198@code{guix package -i emacs}, tous les modules @code{(gnu packages @dots{})}
5199sont scannés jusqu'à en trouver un qui exporte un objet de paquet dont le
5200nom est @code{emacs}. Cette capacité à chercher des paquets est implémentée
5201dans le module @code{(gnu packages)}.
5202
5203@cindex personnalisation, des paquets
5204@cindex chemin de recherche des modules de paquets
5205Les utilisateurs peuvent stocker des définitions dans des modules avec des
5206noms différents — p.@: ex.@: @code{(my-packages emacs)}@footnote{Remarquez
5207que le nom de fichier et de module doivent être identiques. Par exemple, le
5208module @code{(my-packages emacs)} doit être stocké dans un fichier
5209@file{my-packages/emacs.scm} relativement au chemin de chargement spécifié
5210avec @option{--load-path} ou @code{GUIX_PACKAGE_PATH}. @xref{Modules and
5211the File System,,, guile, GNU Guile Reference Manual} pour plus de
5212détails}. Il y a deux manières de rendre ces définitions visibles aux
5213interfaces utilisateurs :
5214
5215@enumerate
5216@item
5217En ajoutant le répertoire contenant vos modules de paquets au chemin de
5218recherche avec le drapeau @code{-L} de @command{guix package} et des autres
5219commandes (@pxref{Options de construction communes}) ou en indiquant la variable
5220d'environnement @code{GUIX_PACKAGE_PATH} décrite plus bas.
5221
5222@item
5223En définissant un @dfn{canal} et en configurant @command{guix pull} pour
5224qu'il l'utilise. Un canal est essentiellement un dépôt Git contenant des
5225modules de paquets. @xref{Canaux}, pour plus d'informations sur comment
5226définir et utiliser des canaux.
5227@end enumerate
5228
5229@code{GUIX_PACKAGE_PATH} fonctionne comme les autres variables de chemins de
5230recherche :
5231
5232@defvr {Variable d'environnement} GUIX_PACKAGE_PATH
5233C'est une liste séparée par des deux-points de répertoires dans lesquels
5234trouver des modules de paquets supplémentaires. Les répertoires listés dans
5235cette variable sont prioritaires par rapport aux paquets de la distribution.
5236@end defvr
5237
5238La distribution est entièrement @dfn{bootstrappée} et @dfn{auto-contenue} :
5239chaque paquet est construit uniquement à partir d'autres paquets de la
5240distribution. La racine de ce graphe de dépendance est un petit ensemble de
5241@dfn{binaires de bootstrap} fournis par le module @code{(gnu packages
5242bootstrap)}. Pour plus d'informations sur le bootstrap,
5243@pxref{Bootstrapping}.
5244
5245@node Définition des paquets
5246@section Définition des paquets
5247
5248L'interface de haut-niveau pour les définitions de paquets est implémentée
5249dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
5250exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
5251ressemble à cela :
5252
5253@example
5254(define-module (gnu packages hello)
5255 #:use-module (guix packages)
5256 #:use-module (guix download)
5257 #:use-module (guix build-system gnu)
5258 #:use-module (guix licenses)
5259 #:use-module (gnu packages gawk))
5260
5261(define-public hello
5262 (package
5263 (name "hello")
5264 (version "2.10")
5265 (source (origin
5266 (method url-fetch)
5267 (uri (string-append "mirror://gnu/hello/hello-" version
5268 ".tar.gz"))
5269 (sha256
5270 (base32
5271 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
5272 (build-system gnu-build-system)
5273 (arguments '(#:configure-flags '("--enable-silent-rules")))
5274 (inputs `(("gawk" ,gawk)))
5275 (synopsis "Hello, GNU world: An example GNU package")
5276 (description "Guess what GNU Hello prints!")
5277 (home-page "http://www.gnu.org/software/hello/")
5278 (license gpl3+)))
5279@end example
5280
5281@noindent
5282Sans être un expert Scheme, le lecteur peut comprendre la signification des
5283différents champs présents. Cette expression lie la variable @code{hello} à
5284un objet @code{<package>}, qui est essentiellement un enregistrement
5285(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
5286peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
5287le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
5288renvoie — oh surprise ! — @code{"hello"}.
5289
5290Avec un peu de chance, vous pourrez importer tout ou partie de la définition
5291du paquet qui vous intéresse depuis un autre répertoire avec la commande
5292@code{guix import} (@pxref{Invoquer guix import}).
5293
5294Dans l'exemple précédent, @var{hello} est défini dans un module à part,
5295@code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
5296nécessaire, mais c'est pratique : tous les paquets définis dans des modules
5297sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
5298ligne de commande (@pxref{Modules de paquets}).
5299
5300Il y a quelques points à remarquer dans la définition de paquet précédente :
5301
5302@itemize
5303@item
5304Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence des origines}, pour la référence complète). Ici, on utilise la méthode
5305@code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
5306est un fichier à télécharger par FTP ou HTTP.
5307
5308Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
5309des miroirs GNU définis dans @code{(guix download)}.
5310
5311Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
5312téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
5313fichier. La forme @code{(base32 @dots{})} introduit a représentation en
5314base32 du hash. Vous pouvez obtenir cette information avec @code{guix
5315download} (@pxref{Invoquer guix download}) et @code{guix hash}
5316(@pxref{Invoquer guix hash}).
5317
5318@cindex correctifs
5319Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
5320@code{patches} qui liste les correctifs à appliquer et un champ
5321@code{snippet} qui donne une expression Scheme pour modifier le code source.
5322
5323@item
5324@cindex Système de construction GNU
5325Le champ @code{build-system} spécifie la procédure pour construire le paquet
5326(@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
5327de construction GNU familier, où les paquets peuvent être configurés,
5328construits et installés avec la séquence @code{./configure && make && make
5329check && make install} habituelle.
5330
5331@item
5332Le champ @code{arguments} spécifie des options pour le système de
5333construction (@pxref{Systèmes de construction}). Ici il est interprété par
5334@var{gnu-build-system} comme une demande de lancer @file{configure} avec le
5335drapeau @code{--enable-silent-rules}.
5336
5337@cindex quote
5338@cindex quoting
5339@findex '
5340@findex quote
5341Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
5342introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
5343@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
5344des détails. Ice la valeur du champ @code{arguments} est une liste
5345d'arguments passés au système de construction plus tard, comme avec
5346@code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
5347Reference Manual}).
5348
5349La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
5350(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
5351@code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
5352système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
5353Reference Manual}).
5354
5355@item
5356Le champ @code{inputs} spécifie les entrées du processus de construction —
5357c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
5358on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
5359@var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
5360
5361@cindex accent grave (quasiquote)
5362@findex `
5363@findex quasiquote
5364@cindex virgule (unquote)
5365@findex ,
5366@findex unquote
5367@findex ,@@
5368@findex unquote-splicing
5369De nouveau, @code{`} (un accent grave, synonyme de la fonction
5370@code{quasiquote}) nous permet d'introduire une liste littérale dans le
5371champ @code{inputs}, tandis que @code{,} (une virgule, synonyme de la
5372fonction @code{unquote}) nous permet d'insérer une valeur dans cette liste
5373(@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
5374
5375Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
5376besoin d'être spécifiés en tant qu'entrées ici. À la place, le
5377@var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
5378(@pxref{Systèmes de construction}).
5379
5380Cependant, toutes les autres dépendances doivent être spécifiées dans le
5381champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
5382simplement indisponible pour le processus de construction, ce qui peut mener
5383à un échec de la construction.
5384@end itemize
5385
5386@xref{Référence des paquets}, pour une description complète des champs
5387possibles.
5388
5389Lorsqu'une définition de paquet est en place, le paquet peut enfin être
5390construit avec l'outil en ligne de commande @code{guix build}
5391(@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
5392vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
5393aisément revenir à la définition du paquet avec la commande @command{guix
5394edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
5395d'informations sur la manière de tester des définitions de paquets et
5396@ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
5397que la définition respecte les conventions de style.
5398@vindex GUIX_PACKAGE_PATH
5399Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
5400distribution en ajoutant vos propres définitions de paquets dans un « canal
5401».
5402
5403Finalement, la mise à jour de la définition du paquet à une nouvelle version
5404amont peut en partie s'automatiser avec la commande @command{guix refresh}
5405(@pxref{Invoquer guix refresh}).
5406
5407Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
5408d'abord calculé par la procédure @code{package-derivation}. Cette
5409dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
5410Les actions de construction qu'il prescrit peuvent ensuite être réalisées
5411par la procédure @code{build-derivation} (@pxref{Le dépôt}).
5412
5413@deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
5414Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
5415(@pxref{Dérivations}).
5416
5417@var{paquet} doit être un objet @code{<package>} valide et @var{système} une
5418chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
5419pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
5420connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
5421@end deffn
5422
5423@noindent
5424@cindex compilation croisée
5425De manière identique, il est possible de calculer une dérivation qui
5426effectue une compilation croisée d'un paquet pour un autre système :
5427
5428@deffn {Procédure Scheme} package-cross-derivation @var{store} @
5429 @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
5430du @var{paquet} construit depuis @var{système} pour @var{cible}.
5431
5432@var{cible} doit être un triplet GNU valide indiquant le matériel cible et
5433le système d'exploitation, comme @code{"mips64el-linux-gnu"}
5434(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
5435Configure and Build System}).
5436@end deffn
5437
5438@cindex transformations de paquets
5439@cindex réécriture d'entrées
5440@cindex réécriture de l'arbre des dépendances
5441On peut manipuler les paquets de manière arbitraire. Une transformation
5442utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
5443dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
5444d'autres :
5445
5446@deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
5447 [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
5448paquet, remplace des dépendances directes et indirectes (mais pas ses
5449entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
5450est une liste de paires de paquets ; le premier élément de chaque pair est
5451le paquet à remplacer, le second son remplaçant.
5452
5453De manière facultative, @var{nom-réécrit} est une procédure à un argument
5454qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
5455réécrit.
5456@end deffn
5457
5458@noindent
5459Regardez cet exemple :
5460
5461@example
5462(define libressl-instead-of-openssl
5463 ;; Cette procédure remplace OPENSSL par LIBRESSL,
5464 ;; récursivement.
5465 (package-input-rewriting `((,openssl . ,libressl))))
5466
5467(define git-with-libressl
5468 (libressl-instead-of-openssl git))
5469@end example
5470
5471@noindent
5472Ici nous définissons d'abord une procédure de réécriture qui remplace
5473@var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
5474@dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
5475@var{openssl}. cela est exactement ce que l'option en ligne de commande
5476@option{--with-input} fait (@pxref{Options de transformation de paquets,
5477@option{--with-input}}).
5478
5479La variante suivante de @code{package-input-rewriting} peut repérer les
5480paquets à remplacer par nom à la place de leur identité.
5481
5482@deffn {Procédure Scheme} package-input-rewriting/spec @var{remplacements}
5483Renvoie une procédure qui, étant donné un paquet, applique les
5484@var{remplacements} à tous le graphe du paquet (en dehors des entrées
5485implicites). @var{remplacements} est une liste de paires de spécifications
5486et de procédures ; chaque spécification est une spécification de paquet
5487comme @code{"gcc"} ou @code{"guile@@2"}, et chaque procédure prend un paquet
5488correspondant et renvoie un remplaçant pour ce paquet.
5489@end deffn
5490
5491L'exemple ci-dessus pourrait être réécrit de cette manière :
5492
5493@example
5494(define libressl-instead-of-openssl
5495 ;; Remplace tous les paquets nommés « openssl » par LibreSSL.
5496 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
5497@end example
5498
5499Le différence clef est que, cette fois-ci, les paquets correspondent à la
5500spécification et non à l'identité. En d'autres termes, tout paquet dans le
5501graphe qui est appelé @code{openssl} sera remplacé.
5502
5503Une procédure plus générique pour réécrire un graphe de dépendance d'un
5504paquet est @code{package-mapping} : elle supporte n'importe quel changement
5505dans les nœuds du graphe.
5506
5507@deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
5508Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
5509paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
5510arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
5511@end deffn
5512
5513@menu
5514* Référence des paquets:: Le type de donnée des paquets.
5515* Référence des origines:: Le type de données d'origine.
5516@end menu
5517
5518
5519@node Référence des paquets
5520@subsection Référence de @code{package}
5521
5522Cette section résume toutes les options disponibles dans les déclarations
5523@code{package} (@pxref{Définition des paquets}).
5524
5525@deftp {Type de données} package
5526C'est le type de donnée représentant une recette de paquets.
5527
5528@table @asis
5529@item @code{name}
5530Le nom du paquet, comme une chaîne de caractères.
5531
5532@item @code{version}
5533La version du paquet, comme une chaîne de caractères.
5534
5535@item @code{source}
5536Un objet qui indique comment le code source du paquet devrait être
5537récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
5538fichier récupéré depuis internet (@pxref{Référence des origines}). Il peut aussi
5539s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
5540indique un fichier du système de fichier local (@pxref{G-Expressions,
5541@code{local-file}}).
5542
5543@item @code{build-system}
5544Le système de construction qui devrait être utilisé pour construire le
5545paquet (@pxref{Systèmes de construction}).
5546
5547@item @code{arguments} (par défaut : @code{'()})
5548Les arguments à passer au système de construction. C'est une liste qui
5549contient typiquement une séquence de paires de clefs-valeurs.
5550
5551@item @code{inputs} (par défaut : @code{'()})
5552@itemx @code{native-inputs} (par défaut : @code{'()})
5553@itemx @code{propagated-inputs} (par défaut : @code{'()})
5554@cindex entrées, des paquets
5555Ces champs listent les dépendances du paquet. Chacune est une liste de
5556tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
5557caractères) comme premier élément, un paquet, une origine ou une dérivation
5558comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
5559est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
5560plus d'informations sur les sorties des paquets). Par exemple, la liste
5561suivante spécifie trois entrées :
5562
5563@example
5564`(("libffi" ,libffi)
5565 ("libunistring" ,libunistring)
5566 ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
5567@end example
5568
5569@cindex compilation croisée, dépendances des paquets
5570La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
5571lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
5572les dépendances listées dans @code{inputs} sont construites pour
5573l'architecture @emph{cible} ; inversement, les dépendances listées dans
5574@code{native-inputs} sont construites pour l'architecture de la machine de
5575@emph{construction}.
5576
5577@code{native-inputs} est typiquement utilisé pour lister les outils requis à
5578la construction mais pas à l'exécution, comme Autoconf, Automake,
5579pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
5580erreurs de ce type (@pxref{Invoquer guix lint}).
5581
5582@anchor{package-propagated-inputs}
5583Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
5584paquets spécifiés seront automatiquement installés avec le paquet auquel ils
5585appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
5586package}}, pour des informations sur la manière dont @command{guix package}
5587traite les entrées propagées).
5588
5589Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
5590d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
5591pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
5592
5593Un autre exemple où @code{propagated-inputs} est utile est pour les langages
5594auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
5595cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
5596et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
5597peuvent trouver le code des bibliothèques dont elles dépendent à
5598l'exécution, les dépendances à l'exécution doivent être listées dans
5599@code{propagated-inputs} plutôt que @code{inputs}.
5600
5601@item @code{outputs} (par défaut : @code{'("out")})
5602La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
5603supplémentaires.
5604
5605@item @code{native-search-paths} (par défaut : @code{'()})
5606@itemx @code{search-paths} (par défaut : @code{'()})
5607Une liste d'objets @code{search-path-specification} décrivant les variables
5608d'environnement de recherche de chemins que ce paquet utilise.
5609
5610@item @code{replacement} (par défaut : @code{#f})
5611Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
5612comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
5613plus de détails.
5614
5615@item @code{synopsis}
5616Une description sur une ligne du paquet.
5617
5618@item @code{description}
5619Une description plus détaillée du paquet.
5620
5621@item @code{license}
5622@cindex licence, des paquets
5623La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
5624liste de ces valeurs.
5625
5626@item @code{home-page}
5627L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
5628
5629@item @code{supported-systems} (par défaut : @var{%supported-systems})
5630La liste des systèmes supportés par le paquet, comme des chaînes de
5631caractères de la forme @code{architecture-noyau}, par exemple
5632@code{"x86_64-linux"}.
5633
5634@item @code{maintainers} (par défaut : @code{'()})
5635La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
5636
5637@item @code{location} (par défaut : emplacement de la source de la forme @code{package})
5638L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
5639hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
5640corrigé.
5641@end table
5642@end deftp
5643
5644@deffn {Scheme Syntax} this-package
5645When used in the @emph{lexical scope} of a package field definition, this
5646identifier resolves to the package being defined.
5647
5648The example below shows how to add a package as a native input of itself
5649when cross-compiling:
5650
5651@example
5652(package
5653 (name "guile")
5654 ;; ...
5655
5656 ;; When cross-compiled, Guile, for example, depends on
5657 ;; a native version of itself. Add it here.
5658 (native-inputs (if (%current-target-system)
5659 `(("self" ,this-package))
5660 '())))
5661@end example
5662
5663It is an error to refer to @code{this-package} outside a package definition.
5664@end deffn
5665
5666@node Référence des origines
5667@subsection Référence de @code{origin}
5668
5669Cette section résume toutes les options disponibles dans le déclarations
5670@code{origin} (@pxref{Définition des paquets}).
5671
5672@deftp {Type de données} origin
5673C'est le type de donnée qui représente l'origine d'un code source.
5674
5675@table @asis
5676@item @code{uri}
5677Un objet contenant l'URI de la source. Le type d'objet dépend de la
5678@code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
5679de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
5680représentée par une chaîne de caractères, ou une liste de chaînes de
5681caractères.
5682
5683@item @code{method}
5684Un procédure qui gère l'URI.
5685
5686Quelques exemples :
5687
5688@table @asis
5689@item @var{url-fetch} de @code{(guix download)}
5690télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
5691champ @code{uri} ;
5692
5693@vindex git-fetch
5694@item @var{git-fetch} de @code{(guix git-download)}
5695clone le dépôt sous contrôle de version Git et récupère la révision
5696spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
5697un objet @code{git-reference} ressemble à cela :
5698
5699@example
5700(git-reference
5701 (url "git://git.debian.org/git/pkg-shadow/shadow")
5702 (commit "v4.1.5.1"))
5703@end example
5704@end table
5705
5706@item @code{sha256}
5707Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
5708@code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
5709de caractères en base-32.
5710
5711Vous pouvez obtenir cette information avec @code{guix download}
5712(@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
5713
5714@item @code{file-name} (par défaut : @code{#f})
5715Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
5716@code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
5717des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
5718fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
5719contrôle de version, il est recommandé de fournir un nom de fichier
5720explicitement parce que le nom par défaut n'est pas très descriptif.
5721
5722@item @code{patches} (par défaut : @code{'()})
5723Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
5724(@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
5725à appliquer sur la source.
5726
5727Cette liste de correctifs doit être inconditionnelle. En particulier, elle
5728ne peut pas dépendre des valeurs de @code{%current-system} ou
5729@code{%current-target-system}.
5730
5731@item @code{snippet} (par défaut : @code{#f})
5732Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
5733dans le répertoire des sources. C'est une manière pratique de modifier la
5734source, parfois plus qu'un correctif.
5735
5736@item @code{patch-flags} (par défaut : @code{'("-p1")})
5737Une liste de drapeaux à passer à la commande @code{patch}.
5738
5739@item @code{patch-inputs} (par défaut : @code{#f})
5740Paquets d'entrées ou dérivations pour le processus de correction.
5741Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
5742pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
5743
5744@item @code{modules} (par défaut : @code{'()})
5745Une liste de modules Guile qui devraient être chargés pendant le processus
5746de correction et pendant que le lancement du code du champ @code{snippet}.
5747
5748@item @code{patch-guile} (par défaut : @code{#f})
5749Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
5750à @code{#f}, une valeur par défaut raisonnable est utilisée.
5751@end table
5752@end deftp
5753
5754
5755@node Systèmes de construction
5756@section Systèmes de construction
5757
5758@cindex système de construction
5759Chaque définition de paquet définie un @dfn{système de construction} et des
5760arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
5761champ @code{build-system} représente la procédure de construction du paquet,
5762ainsi que des dépendances implicites pour cette procédure de construction.
5763
5764Les systèmes de construction sont des objets
5765@code{<build-system>}. L'interface pour les créer et les manipuler est
5766fournie par le module @code{(guix build-system)} et les systèmes de
5767construction eux-mêmes sont exportés par des modules spécifiques.
5768
5769@cindex sac (représentation à bas-niveau des paquets)
5770Sous le capot, les systèmes de construction compilent d'abord des objets
5771paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
5772décoration — en d'autres mots, un sac est une représentation à bas-niveau
5773d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
5774été implicitement ajoutées par le système de construction. Cette
5775représentation intermédiaire est ensuite compilée en une dérivation
5776(@pxref{Dérivations}).
5777
5778Les systèmes de construction acceptent une liste d'@dfn{arguments}
5779facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
5780champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
5781arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
5782Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
5783habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
5784un processus Guile lancé par le démon (@pxref{Dérivations}).
5785
5786Le système de construction principal est le @var{gnu-build-system} qui
5787implémente les procédures de construction standard pour les paquets GNU et
5788de nombreux autres. Il est fournit par le module @code{(guix build-system
5789gnu)}.
5790
5791@defvr {Variable Scheme} gnu-build-system
5792@var{gnu-build-system} représente le système de construction GNU et ses
5793variantes (@pxref{Configuration, configuration and makefile conventions,,
5794standards, GNU Coding Standards}).
5795
5796@cindex phases de construction
5797En résumé, les paquets qui l'utilisent sont configurés, construits et
5798installés avec la séquence @code{./configure && make && make check && make
5799install} habituelle. En pratique, des étapes supplémentaires sont souvent
5800requises. Toutes ces étapes sont séparées dans des @dfn{phases}
5801différentes, notamment@footnote{Regardez les modules @code{(guix build
5802gnu-build-system)} pour plus de détails sur les phases de construction.}:
5803
5804@table @code
5805@item unpack
5806Décompresse l'archive des sources et se déplace dans l'arborescence des
5807sources fraîchement extraites. Si la source est en fait un répertoire, le
5808copie dans l'arborescence de construction et entre dans ce répertoire.
5809
5810@item patch-source-shebangs
5811Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
5812réfèrent aux bons noms de fichiers. Par exemple, elle change
5813@code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
5814
5815@item configure
5816Lance le script @code{configure} avec un certain nombre d'options par
5817défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
5818spécifiées par l'argument @code{#:configure-flags}.
5819
5820@item build
5821Lance @code{make} avec la liste des drapeaux spécifiés avec
5822@code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
5823défaut), construit avec @code{make -j}.
5824
5825@item check
5826Lance @code{make check}, ou une autre cible spécifiée par
5827@code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
5828l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
5829check -j}.
5830
5831@item install
5832Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
5833
5834@item patch-shebangs
5835Corrige les shebangs des fichiers exécutables installés.
5836
5837@item strip
5838Nettoie les symboles de débogage dans les fichiers ELF (à moins que
5839@code{#:strip-binaries?} ne soit faux), les copie dans la sortie
5840@code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
5841@end table
5842
5843@vindex %standard-phases
5844Le module du côté du constructeur @code{(guix build gnu-build-system)}
5845définie @var{%standard-phases} comme la liste par défaut des phases de
5846construction. @var{%standard-phases} est une liste de paires de symboles
5847et de procédures, où la procédure implémente la phase en question.
5848
5849La liste des phases utilisées par un paquet particulier peut être modifiée
5850avec le paramètre @code{#:phases}. Par exemple, en passant :
5851
5852@example
5853#:phases (modify-phases %standard-phases (delete 'configure))
5854@end example
5855
5856signifie que toutes les procédures décrites plus haut seront utilisées, sauf
5857la phase @code{configure}.
5858
5859En plus, ce système de construction s'assure que l'environnement « standard
5860» pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
5861libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
5862@code{(guix build-system gnu)} pour une liste complète). Nous les appelons
5863les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
5864ne les mentionne pas.
5865@end defvr
5866
5867D'autres objets @code{<build-system>} sont définis pour supporter d'autres
5868conventions et outils utilisés par les paquets de logiciels libres. Ils
5869héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
5870l'ensemble des entrées implicites ajoutées au processus de construction et
5871dans la liste des phases exécutées. Certains de ces systèmes de
5872construction sont listés ci-dessous.
5873
5874@defvr {Variable Scheme} ant-build-system
5875Cette variable est exportée par @code{(guix build-system ant)}. Elle
5876implémente la procédure de construction pour les paquets Java qui peuvent
5877être construits avec @url{http://ant.apache.org/, l'outil de construction
5878Ant}.
5879
5880Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
5881(JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
5882paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
5883et @code{#:jdk} respectivement.
5884
5885Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
5886acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
5887fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
5888construire l'archive jar spécifiée. Dans ce cas, le paramètre
5889@code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
5890sources, par défaut « src ».
5891
5892Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
5893construction minimal pour spécifier la classe principale du jar. Cela rend
5894le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
5895utilisé pour spécifier la liste des tests junits à lancer. Il vaut par
5896défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
5897peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
5898@code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
5899peuvent pas être utilisées comme des tests.
5900
5901Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
5902Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
5903tâche « jar » sera lancée.
5904
5905@end defvr
5906
5907@defvr {Variable Scheme} android-ndk-build-system
5908@cindex Distribution android
5909@cindex système de construction Android NDK
5910Cette variable est exportée par @code{(guix build-system android-ndk)}.
5911Elle implémente une procédure de construction pour les paquets du NDK
5912Android (@i{native development kit}) avec des processus de construction
5913spécifiques à Guix.
5914
5915Le système de construction suppose que les paquets installent leur interface
5916publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
5917« out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
5918« out ».
5919
5920Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
5921pas de fichiers en conflit.
5922
5923Pour l'instant, la compilation croisée n'est pas supportées — donc pour
5924l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
5925des outils de l'hôte.
5926
5927@end defvr
5928
5929@defvr {Variable Scheme} asdf-build-system/source
5930@defvrx {Variable Scheme} asdf-build-system/sbcl
5931@defvrx {Variable Scheme} asdf-build-system/ecl
5932
5933Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
5934les procédures de constructions pour les paquets en Common Lisp qui
5935utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
5936un dispositif de définition de systèmes pour les programmes et les
5937bibliothèques en Common Lisp.
5938
5939Le système @code{asdf-build-system/source} installe les paquets au format
5940source qui peuvent être chargés avec n'importe quelle implémentation de
5941common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
5942installent des binaires au format qu'un implémentation particulière
5943comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
5944produire des programmes exécutables ou des images lisp qui contiennent un
5945ensemble de paquets pré-chargés.
5946
5947Le système de construction utilise des conventions de nommage. Pour les
5948paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
5949lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
5950
5951En plus, le paquet source correspondant devrait étiquetté avec la même
5952convention que les paquets python (voir @ref{Modules python}), avec le
5953préfixe @code{cl-}.
5954
5955Pour les paquets binaires, chaque système devrait être défini comme un
5956paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
5957peut créer des variantes du paquet pour construire tous les systèmes. Les
5958paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
5959contenir plusieurs systèmes.
5960
5961Pour créer des programmes exécutables et des images, les procédures côté
5962construction @code{build-program} et @code{build-image} peuvent être
5963utilisées. Elles devraient être appelées dans une phase de construction
5964après la phase @code{create-symlinks} pour que le système qui vient d'être
5965construit puisse être utilisé dans l'image créée. @code{build-program}
5966requiert une liste d'expressions Common Lisp dans l'argument
5967@code{#:entry-program}.
5968
5969Si le système n'est pas défini dans son propre fichier @code{.asd} du même
5970nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
5971spécifier dans quel fichier le système est défini. De plus, si le paquet
5972défini un système pour ses tests dans un fichier séparé, il sera chargé
5973avant que les tests ne soient lancés s'il est spécifié par le paramètre
5974@code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
5975@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
5976@code{test.asd} seront testés.
5977
5978Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
5979différente de ce que la convention de nommage suggère, le paramètre
5980@code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
5981
5982@end defvr
5983
5984@defvr {Variable Scheme} cargo-build-system
5985@cindex Langage de programmation Rust
5986@cindex Cargo (système de construction Rust)
5987Cette variable est exportée par @code{(guix build-system cargo)}. Elle
5988supporte les construction de paquets avec Cargo, le système de construction
5989du @uref{https://www.rust-lang.org, langage de programmation Rust}.
5990
5991Dans sa phase @code{configure}, ce système de construction remplace les
5992dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
5993Guix. La phase @code{install} installe les binaires et installe aussi le
5994code source et le fichier @file{Cargo.toml}.
5995@end defvr
5996
5997@cindex Clojure (langage de programmation)
5998@cindex système de construction Clojure simple
5999@defvr {Variable Scheme} clojure-build-system
6000Cette variable est exportée par @code{(guix build-system clojure)}. Elle
6001implémente une procédure de construction des paquets simple qui utilise le
6002bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
6003encore supportée.
6004
6005Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
6006entrées. Des paquets différents peuvent être spécifiés avec les paramètres
6007@code{#:clojure}, @code{#:jdk} et @code{#:zip}.
6008
6009Une liste de répertoires sources, de répertoires de tests et de noms de jar
6010peuvent être spécifiés avec les paramètres @code{#:source-dirs},
6011@code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
6012la classe principale peuvent être spécifiés avec les paramètres
6013@code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
6014documentés plus bas.
6015
6016Ce système de construction est une extension de @var{ant-build-system}, mais
6017avec les phases suivantes modifiées :
6018
6019@table @code
6020
6021@item build
6022Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
6023sources et lance @command{jar} pour créer les fichiers jar à partir des
6024fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
6025d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
6026La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
6027consistent en des symboles représentant des bibliothèque Clojure ou le mot
6028clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
6029trouvées dans les répertoires des sources. Le paramètre
6030@code{#:omit-source?} décide si les sources devraient être incluses dans les
6031fichiers jar.
6032
6033@item check
6034Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
6035spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
6036signification est analogue à celle de @code{#:aot-include} et
6037@code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
6038maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
6039tests. Le paramètre @code{#:tests?} décide si les tests devraient être
6040lancés.
6041
6042@item install
6043Cette phase installe tous les fichiers jar précédemment construits.
6044@end table
6045
6046En dehors de cela, le système de construction contient aussi la phase
6047suivante :
6048
6049@table @code
6050
6051@item install-doc
6052Cette phase installe tous les fichiers dans le répertoire de plus haut
6053niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
6054regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
6055(récursivement) dans les répertoires de documentations spécifiés dans
6056@code{#:doc-dirs} sont aussi installés.
6057@end table
6058@end defvr
6059
6060@defvr {Variable Scheme} cmake-build-system
6061Cette variable est exportée par @code{(guix build-system cmake)}. Elle
6062implémente la procédure de construction des paquets qui utilisent
6063l'@url{http://www.cmake.org, outil de construction CMake}.
6064
6065Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
6066entrées. Le paquet utilisé peut être spécifié par le paramètre
6067@code{#:cmake}.
6068
6069Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
6070passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
6071spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
6072par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
6073les informations de débogage » en plus court), ce qui signifie en gros que
6074le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
6075défaut.
6076@end defvr
6077
6078@defvr {Variable Scheme} dune-build-system
6079Cette variable est exportée par @code{(guix build-system dune)}. Elle prend
6080en charge la construction des paquets qui utilisent
6081@uref{https://dune.build/, Dune}, un outil de construction pour le langage
6082de programmation OCaml. Elle est implémentée comme une extension de
6083@code{ocaml-build-system} décrit plus bas. En tant que tel, les paramètres
6084@code{#:ocaml} et @code{#:findlib} peuvent être passés à ce système de
6085construction.
6086
6087Elle ajoute automatiquement le paquet @code{dune} à l'ensemble des entrées.
6088Le paquet utilisé peut être spécifié par le paramètre @code{#:dune}.
6089
6090Il n'y a pas de phase @code{configure} parce que les paquets dune n'ont
6091habituellement pas besoin d'être configurés. Le paramètre
6092@code{#:build-flags} est interprété comme une liste de drapeaux pour la
6093commande @code{dune} pendant la construction.
6094
6095Le paramètre @code{#:jbuild?} peut être passé pour utiliser la commande
6096@code{jbuild} à la place de la commande @code{dune} plus récente pour la
6097construction d'un paquet. Sa valeur par défaut est @code{#f}.
6098
6099Le paramètre @code{#:package} peut être passé pour spécifié un nom de
6100paquet, ce qui est utile lorsqu'un paquet contient plusieurs paquets et que
6101vous voulez n'en construire qu'un. C'est équivalent à passer l'argument
6102@code{-p} à @code{dune}.
6103@end defvr
6104
6105@defvr {Variable Scheme} go-build-system
6106Cette variable est exportée par @code{(guix build-system go)}. Elle
6107implémente la procédure pour les paquets Go utilisant les
6108@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
6109mécanismes de construction Go} standard.
6110
6111L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
6112dans certains cas, @code{#:unpack-path}. Le
6113@url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
6114correspond au chemin dans le système de fichiers attendu par le script de
6115construction du paquet et les paquets qui s'y réfèrent et fournit une
6116manière unique de se référer à un paquet Go. Il est typiquement basé sur
6117une combinaison de l'URI du code source du paquet et d'une structure
6118hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
6119le code source du paquet dans une structure de répertoires différente que
6120celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
6121utilisé dans ces cas-là.
6122
6123Les paquets qui fournissent des bibliothèques Go devraient installer leur
6124code source dans la sortie du paquet. La clef @code{#:install-source?}, qui
6125vaut @code{#t} par défaut, contrôle l'installation du code source. Elle
6126peut être mise à @code{#f} pour les paquets qui ne fournissent que des
6127fichiers exécutables.
6128@end defvr
6129
6130@defvr {Variable Scheme} glib-or-gtk-build-system
6131Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
6132Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
6133GTK+.
6134
6135Ce système de construction ajoute les deux phases suivantes à celles
6136définies par @var{gnu-build-system} :
6137
6138@table @code
6139@item glib-or-gtk-wrap
6140La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
6141@file{bin/} sont capable de trouver les « schemas » GLib et les
6142@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
6143GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
6144lancement qui initialisent correctement les variables d'environnement
6145@code{XDG_DATA_DIRS} et @code{GTK_PATH}.
6146
6147Il est possible d'exclure des sorties spécifiques de ce processus
6148d'enveloppage en listant leur nom dans le paramètre
6149@code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
6150est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
6151ajouterait une dépendance inutile vers GLib et GTK+.
6152
6153@item glib-or-gtk-compile-schemas
6154La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
6155@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
6156schémas GSettings} de GLib sont compilés. La compilation est effectuée par
6157le programme @command{glib-compile-schemas}. Il est fournit par le paquet
6158@code{glib:bin} qui est automatiquement importé par le système de
6159construction. Le paquet @code{glib} qui fournit
6160@command{glib-compile-schemas} peut être spécifié avec le paramètre
6161@code{#:glib}.
6162@end table
6163
6164Ces deux phases sont exécutées après la phase @code{install}.
6165@end defvr
6166
6167@defvr {Variable Scheme} guile-build-system
6168Ce système de construction sert aux paquets Guile qui consistent
6169exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
6170makefile, sans parler d'un script @file{configure}. Il compile le code
6171Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
6172GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
6173@file{.go} aux bons emplacements. Il installe aussi la documentation.
6174
6175Ce système de construction supporte la compilation croisée en utilisant
6176l'option @code{--target} de @command{guild compile}.
6177
6178Les paquets construits avec @code{guile-build-system} doivent fournir un
6179paquet Guile dans leur champ @code{native-inputs}.
6180@end defvr
6181
6182@defvr {Variable Scheme} minify-build-system
6183Cette variable est exportée par @code{(guix build-system minify)}. Elle
6184implémente une procédure de minification pour des paquets JavaScript
6185simples.
6186
6187Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
6188compresser tous les fichiers JavaScript du répertoire @file{src}. Un
6189minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
6190mais il est attendu que ce paquet écrive le code minifié sur la sortie
6191standard.
6192
6193Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
6194répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
6195utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
6196@end defvr
6197
6198@defvr {Variable Scheme} ocaml-build-system
6199Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
6200implémente une procédure de construction pour les paquets
6201@uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
6202commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
6203des commandes diverses pour être construit. Ce système de construction en
6204essaye certaines.
6205
6206Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
6207haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
6208setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
6209construction supposera que ces fichiers ont été générés par
6210@uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
6211d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
6212désactivés. Vous pouvez passer des drapeaux de configuration et de
6213construction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
6214@code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
6215utilisés pour activer les tests. La clef @code{#:use-make?} peut être
6216utilisée pour outrepasser ce système dans les phases de construction et
6217d'installation.
6218
6219Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
6220d'un script configure écrit à la main qui demande un format différent de
6221celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
6222la clef @code{#:configure-flags}.
6223
6224Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
6225@code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
6226construction et l'installation avec la clef @code{#:make-flags}.
6227
6228Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
6229plus ou moins standard pour leur système de construction. Dans ce cas, le
6230système de construction lancera @code{ocaml pkg/pkg.ml} ou
6231@code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
6232requis. Des drapeaux supplémentaires peuvent être passés via la clef
6233@code{#:bulid-flags}. L'installation se fait avec
6234@command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
6235ajouté au champ @code{native-inputs} de la définition du paquet.
6236
6237Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
6238dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
6239dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
6240leur propre répertoire de module, ce qui est normalement correct puisqu'il
6241s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
6242bibliothèques ne peuvent pas y être trouvées et on utilise
6243@code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
6244@file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
6245@file{.so} devraient être installées.
6246@end defvr
6247
6248@defvr {Variable Scheme} python-build-system
6249Cette variable est exportée par @code{(guix build-system python)}. Elle
6250implémente la procédure de construction plus ou moins standard utilisée pour
6251les paquets Python, qui consiste à lancer @code{python setup.py build} puis
6252@code{python setup.py install --prefix=/gnu/store/@dots{}}.
6253
6254Pour les paquets qui installent des programmes autonomes dans @code{bin/},
6255elle prend soin d'envelopper ces binaires pour que leur variable
6256d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
6257Python dont ils dépendent.
6258
6259Le paquet Python utilisé pour effectuer la construction peut être spécifié
6260avec le paramètre @code{#:python}. C'est une manière utile de forcer un
6261paquet à être construit avec une version particulière de l'interpréteur
6262python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
6263une version de l'interpréteur.
6264
6265Par défaut Guix appelle @code{setup.py} sous le contrôle de
6266@code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
6267pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
6268en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
6269@end defvr
6270
6271@defvr {Variable Scheme} perl-build-system
6272Cette variable est exportée par @code{(guix build-system perl)}. Elle
6273implémente la procédure de construction standard des paquets Perl, qui
6274consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
6275suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
6276Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
6277install}, en fonction de la présence de @code{Build.PL} ou
6278@code{Makefile.PL} dans la distribution du paquet. Le premier a la
6279préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
6280la distribution du paquet. Cette préférence peut être inversée en
6281spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
6282
6283L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
6284passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
6285@code{#:module-build-flags}, respectivement.
6286
6287Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
6288@end defvr
6289
6290@defvr {Variable Scheme} r-build-system
6291Cette variable est exportée par @code{(guix build-system r)}. Elle
6292implémente la procédure de construction utilisée par les paquets
6293@uref{http://r-project.org, R} qui consiste à lancer à peine plus que
6294@code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
6295@code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
6296sont lancés après l'installation avec la fonction R
6297@code{tools::testInstalledPackage}.
6298@end defvr
6299
6300@defvr {Variable Scheme} rakudo-build-system
6301Cette variable est exportée par @code{(guix build-system rakudo)}. Elle
6302implémente la procédure de construction utilisée par
6303@uref{https://rakudo.org/, Rakudo} pour les paquets
6304@uref{https://perl6.org/, Perl6}. Elle installe le paquet dans
6305@code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} et installe les binaires,
6306les fichiers de bibliothèques et les ressources, et enveloppe les fichiers
6307dans le répertoire @code{bin/}. Les tests peuvent être passés en indiquant
6308@code{#f} au paramètres @code{tests?}.
6309
6310Le paquet rakudo utilisé peut être spécifié avec @code{rakudo}. Le paquet
6311perl6-tap-harness utilisé pour les tests peut être spécifié avec
6312@code{#:prove6} ou supprimé en passant @code{#f} au paramètre
6313@code{with-prove6?}. Le paquet perl6-zef utilisé pour les tests et
6314l'installation peut être spécifié avec @code{#:ef} ou supprimé en passant
6315@code{#f} au paramètre @code{with-zef?}.
6316@end defvr
6317
6318@defvr {Variable Scheme} texlive-build-system
6319Cette variable est exportée par @code{(guix build-system texlive)}. Elle
6320est utilisée pour construire des paquets TeX en mode batch avec le moteur
6321spécifié. Le système de construction initialise la variable
6322@code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
6323
6324Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
6325par @code{ins}. Un moteur et un format différent peuvent être spécifiés
6326avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
6327peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
6328liste de noms de fichiers. Le système de construction ajoute uniquement
6329@code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
6330tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
6331arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
6332respectivement.
6333
6334Le paramètre @code{#:tex-directory} dit au système de construction où
6335installer les fichiers construit dans l'arbre texmf.
6336@end defvr
6337
6338@defvr {Variable Scheme} ruby-build-system
6339Cette variable est exportée par @code{(guix build-system ruby)}. Elle
6340implémenter la procédure de construction RubyGems utilisée par les paquets
6341Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
6342
6343Le champ @code{source} d'un paquet qui utilise ce système de construction
6344référence le plus souvent une archive gem, puisque c'est le format utilisé
6345par les développeurs Ruby quand ils publient leur logiciel. Le système de
6346construction décompresse l'archive gem, éventuellement en corrigeant les
6347sources, lance la suite de tests, recompresse la gemme et l'installe. En
6348plus, des répertoires et des archives peuvent être référencés pour permettre
6349de construire des gemmes qui n'ont pas été publiées depuis Git ou une
6350archive de sources traditionnelle.
6351
6352Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
6353Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
6354peut être spécifiée avec le paramètre @code{#:gem-flags}.
6355@end defvr
6356
6357@defvr {Variable Scheme} waf-build-system
6358Cette variable est exportée par @code{(guix build-system waf)}. Elle
6359implémente une procédure de construction autour du script @code{waf}. Les
6360phases usuelles — @code{configure}, @code{build} et @code{install} — sont
6361implémentée en passant leur nom en argument au script @code{waf}.
6362
6363Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
6364Python utilisé pour lancer le script peut être spécifié avec le paramètre
6365@code{#:python}.
6366@end defvr
6367
6368@defvr {Variable Scheme} scons-build-system
6369Cette variable est exportée par @code{(guix build-system scons)}. Elle
6370implémente la procédure de construction utilisée par l'outil de construction
6371SCons. Ce système de construction lance @code{scons} pour construire le
6372paquet, @code{scons test} pour lancer les tests puis @code{scons install}
6373pour installer le paquet.
6374
6375On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
6376avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
6377lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
6378avec le paramètre @code{#:scons}.
6379@end defvr
6380
6381@defvr {Variable Scheme} haskell-build-system
6382Cette variable est exportée par @code{(guix build-system haskell)}. Elle
6383implémente la procédure de construction Cabal utilisée par les paquets
6384Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
6385--prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
6386que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
6387pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
6388dépôt en lecture-seule du compilateur, le système de construction utilise
6389@code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
6390register}. En plus, le système de construction génère la documentation du
6391paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
6392@code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
6393peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
6394fichier @code{Setup.hs} n'est pas trouvé, le système de construction
6395cherchera @code{Setup.lhs} à la place.
6396
6397Le compilateur Haskell utilisé peut être spécifié avec le paramètre
6398@code{#:haskell} qui a pour valeur par défaut @code{ghc}.
6399@end defvr
6400
6401@defvr {Variable Scheme} dub-build-system
6402Cette variable est exportée par @code{(guix build-system dub)}. Elle
6403implémente la procédure de construction Dub utilisée par les paquets D qui
6404consiste à lancer @code{dub build} et @code{dub run}. L'installation est
6405effectuée en copiant les fichiers manuellement.
6406
6407Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
6408qui vaut par défaut @code{ldc}.
6409@end defvr
6410
6411@defvr {Variable Scheme} emacs-build-system
6412Cette variable est exportée par @code{(guix build-system emacs)}. Elle
6413implémente une procédure d'installation similaire au système de gestion de
6414paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6415
6416Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
6417tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
6418gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
6419dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
6420paquet est installé dans son propre répertoire dans
6421@file{share/emacs/site-lisp/guix.d}.
6422@end defvr
6423
6424@defvr {Variable Scheme} font-build-system
6425Cette variable est exportée par @code{(guix build-system font)}. Elle
6426implémente une procédure d'installation pour les paquets de polices où des
6427fichiers de polices TrueType, OpenType, etc.@: sont fournis en amont et
6428n'ont qu'à être copiés à leur emplacement final. Elle copie les fichiers de
6429polices à l'emplacement standard dans le répertoire de sortie.
6430@end defvr
6431
6432@defvr {Variable Scheme} meson-build-system
6433Cette variable est exportée par @code{(guix build-system meson)}. Elle
6434implémente la procédure de construction des paquets qui utilisent
6435@url{http://mesonbuild.com, Meson} comme système de construction.
6436
6437Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
6438l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
6439@code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
6440@code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
6441@code{RUNPATH} des binaires et les bibliothèques qu'il installe.
6442
6443Ce système de construction est une extension de @var{gnu-build-system}, mais
6444avec les phases suivantes modifiées pour Meson :
6445
6446@table @code
6447
6448@item configure
6449La phase lance @code{meson} avec les drapeaux spécifiés dans
6450@code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
6451initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
6452dans @code{#:build-type}.
6453
6454@item build
6455La phase lance @code{ninja} pour construire le paquet en parallèle par
6456défaut, mais cela peut être changé avec @code{#:parallel-build?}.
6457
6458@item check
6459La phase lance @code{ninja} avec la cible spécifiée dans
6460@code{#:test-target}, qui est @code{"test"} par défaut.
6461
6462@item install
6463La phase lance @code{ninja install} et ne peut pas être changée.
6464@end table
6465
6466En dehors de cela, le système de construction ajoute aussi la phase suivante
6467:
6468
6469@table @code
6470
6471@item fix-runpath
6472Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
6473dont ils ont besoin. Elle cherche les bibliothèques requises dans les
6474sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
6475là où c'est nécessaire. Elle supprime aussi les références aux
6476bibliothèques laissées là par la phase de construction par
6477@code{meson-for-build} comme les dépendances des tests, qui ne sont pas
6478vraiment requises pour le programme.
6479
6480@item glib-or-gtk-wrap
6481Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
6482n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
6483
6484@item glib-or-gtk-compile-schemas
6485Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
6486n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
6487@end table
6488@end defvr
6489
6490@defvr {Scheme Variable} linux-module-build-system
6491@var{linux-module-build-system} allows building Linux kernel modules.
6492
6493@cindex phases de construction
6494This build system is an extension of @var{gnu-build-system}, but with the
6495following phases changed:
6496
6497@table @code
6498
6499@item configure
6500This phase configures the environment so that the Linux kernel's Makefile
6501can be used to build the external kernel module.
6502
6503@item build
6504This phase uses the Linux kernel's Makefile in order to build the external
6505kernel module.
6506
6507@item install
6508This phase uses the Linux kernel's Makefile in order to install the external
6509kernel module.
6510@end table
6511
6512It is possible and useful to specify the Linux kernel to use for building
6513the module (in the "arguments" form of a package using the
6514linux-module-build-system, use the key #:linux to specify it).
6515@end defvr
6516
6517Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
6518système de construction « trivial » est disponible. Il est trivial dans le
6519sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
6520implicite, et n'a pas de notion de phase de construction.
6521
6522@defvr {Variable Scheme} trivial-build-system
6523Cette variable est exportée par @code{(guix build-system trivial)}.
6524
6525Ce système de construction requiert un argument @code{#:builder}. Cet
6526argument doit être une expression Scheme qui construit la sortie du paquet —
6527comme avec @code{build-expression->derivation} (@pxref{Dérivations,
6528@code{build-expression->derivation}}).
6529@end defvr
6530
6531@node Le dépôt
6532@section Le dépôt
6533
6534@cindex dépôt
6535@cindex éléments du dépôt
6536@cindex chemins dans le dépôt
6537
6538Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
6539bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
6540sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
6541parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
6542qui contient des informations comme les chemins du dépôt auxquels se
6543réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
6544@emph{valides} — les résultats d'une construction réussie. Cette base de
6545données se trouve dans @file{@var{localstatedir}/guix/db} où
6546@var{localstatedir} est le répertoire d'états spécifié @i{via} @option
6547{--localstatedir} à la configuration, typiquement @file{/var}.
6548
6549C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
6550clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
6551clients se connectent au démon par un socket Unix-domain, envoient une
6552requête dessus et lisent le résultat — ce sont des appels de procédures
6553distantes, ou RPC.
6554
6555@quotation Remarque
6556Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
6557@file{/gnu/store} directement. Cela entraînerait des incohérences et
6558casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
6559(@pxref{Introduction}).
6560
6561@xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
6562sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
6563modifications accidentelles.
6564@end quotation
6565
6566Le module @code{(guix store)} fournit des procédures pour se connecter au
6567démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
6568@code{open-connection}, et donc toutes les commandes @command{guix} se
6569connectent au démon local ou à l'URI spécifiée par la variable
6570d'environnement @code{GUIX_DAEMON_SOCKET}.
6571
6572@defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
6573Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
6574de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
6575nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
6576des noms de fichiers, les schémas d'URI supportés sont :
6577
6578@table @code
6579@item file
6580@itemx unix
6581Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
6582est équivalent à @file{/var/guix/daemon-socket/socket}.
6583
6584@item guix
6585@cindex démon, accès distant
6586@cindex accès distant au démon
6587@cindex démon, paramètres de grappes
6588@cindex grappes, paramètres du démon
6589Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
6590authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
6591éventuellement un numéro de port (par défaut 44146) :
6592
6593@example
6594guix://master.guix.example.org:1234
6595@end example
6596
6597Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
6598de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
6599construction sur @code{master.guix.example.org}.
6600
6601L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
6602dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
6603@code{--listen}}).
6604
6605@item ssh
6606@cindex accès SSH au démon de construction
6607Ces URI vous permettent de vous connecter au démon à distance à travers
6608SSH@footnote{Cette fonctionnalité requiert Guile-SSH
6609(@pxref{Prérequis}).}. Une URL typique pourrait ressembler à ceci :
6610
6611@example
6612ssh://charlie@@guix.example.org:22
6613@end example
6614
6615Comme pour @command{guix copy}, les fichiers de configuration du client
6616OpenSSH sont respectés (@pxref{Invoquer guix copy}).
6617@end table
6618
6619Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
6620
6621@c XXX: Remove this note when the protocol incurs fewer round trips
6622@c and when (guix derivations) no longer relies on file system access.
6623@quotation Remarque
6624La capacité de se connecter à un démon de construction distant est considéré
6625comme expérimental à la version @value{VERSION}. Contactez-nous pour
6626partager vos problèmes ou des suggestions que vous pourriez avoir
6627(@pxref{Contribuer}).
6628@end quotation
6629@end defvr
6630
6631@deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
6632Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
6633de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
6634réserver un peu de place supplémentaire sur le système de fichiers pour que
6635le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
6636un objet serveur.
6637
6638@var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
6639l'emplacement normal en fonction des options données à @command{configure}.
6640@end deffn
6641
6642@deffn {Procédure Scheme} close-connection @var{server}
6643Ferme la connexion au @var{serveur}.
6644@end deffn
6645
6646@defvr {Variable Scheme} current-build-output-port
6647Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
6648journaux de construction et d'erreur envoyés par le démon devraient être
6649écrits.
6650@end defvr
6651
6652Les procédures qui font des RPC prennent toutes un objet serveur comme
6653premier argument.
6654
6655@deffn {Procédure Scheme} valid-path? @var{server} @var{path}
6656@cindex éléments du dépôt invalides
6657Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
6658@code{#f} sinon (un élément invalide peut exister sur le disque mais rester
6659invalide, par exemple parce que c'est le résultat d'une construction annulée
6660ou échouée).
6661
6662Une condition @code{&store-protocol-error} est levée si @var{path} n'est pas
6663préfixée par le répertoire du dépôt (@file{/gnu/store}).
6664@end deffn
6665
6666@deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
6667Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
6668chemin. @var{references} est la liste des chemins du dépôt référencés par
6669le chemin du dépôt qui en résulte.
6670@end deffn
6671
6672@deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
6673Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
6674chemins de dérivations) et retourne quand le travailleur a fini de les
6675construire. Renvoie @code{#t} en cas de réussite.
6676@end deffn
6677
6678Remarque que le module @code{(guix monads)} fournit une monade ainsi que des
6679version monadiques des procédures précédentes, avec le but de rendre plus
6680facile de travailler avec le code qui accède au dépôt (@pxref{La monade du dépôt}).
6681
6682@c FIXME
6683@i{Cette section est actuellement incomplète.}
6684
6685@node Dérivations
6686@section Dérivations
6687
6688@cindex dérivations
6689Les actions de construction à bas-niveau et l'environnement dans lequel
6690elles sont effectuées sont représentés par des @dfn{dérivations}. Une
6691dérivation contient cet ensemble d'informations :
6692
6693@itemize
6694@item
6695Les sorties de la dérivation — les dérivations produisent au moins un
6696fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
6697
6698@item
6699@cindex dépendances à la construction
6700@cindex construction, dépendances
6701Les entrées de la dérivation — c.-à-d.@: ses dépendances à la construction —
6702qui peuvent être d'autres dérivations ou des fichiers dans le dépôt
6703(correctifs, scripts de construction, etc).
6704
6705@item
6706Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
6707
6708@item
6709Le nom de fichier d'un script de construction dans le dépôt avec les
6710arguments à lui passer.
6711
6712@item
6713Une liste de variables d'environnement à définir.
6714
6715@end itemize
6716
6717@cindex chemin de dérivation
6718Les dérivations permettent aux client du démon de communiquer des actions de
6719construction dans le dépôt. Elles existent sous deux formes : en tant que
6720représentation en mémoire, à la fois côté client et démon, et en tant que
6721fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
6722des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
6723passés à la procédure @code{build-derivations} pour effectuer les actions de
6724construction qu'ils prescrivent (@pxref{Le dépôt}).
6725
6726@cindex dérivations à sortie fixe
6727Des opérations comme le téléchargement de fichiers et la récupération de
6728sources gérés par un logiciel de contrôle de version pour lesquels le hash
6729du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
6730sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
6731dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
6732source téléchargé produit le même résultat quelque soit la méthode de
6733téléchargement utilisée.
6734
6735@cindex references
6736@cindex dépendances à l'exécution
6737@cindex exécution, dépendances
6738Les sorties des dérivations — c.-à-d.@: les résultats de la construction —
6739ont un ensemble de @dfn{références}, comme le rapporte le RPC
6740@code{references} ou la commande @command{guix gc --references}
6741(@pxref{Invoquer guix gc}). Les références sont l'ensemble des dépendances
6742à l'exécution des résultats de la construction. Les références sont un
6743sous-ensemble des entrées de la dérivation ; ce sous-ensemble est
6744automatiquement calculé par le démon de construction en scannant tous les
6745fichiers dans les sorties.
6746
6747Le module @code{(guix derivations)} fournit une représentation des
6748dérivations comme des objets Scheme, avec des procédures pour créer et
6749manipuler des dérivations. La primitive de plus bas-niveau pour créer une
6750dérivation est la procédure @code{derivation} :
6751
6752@deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
6753 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6754[#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
6755[#:system (%current-system)] [#:references-graphs #f] @
6756[#:allowed-references #f] [#:disallowed-references #f] @
6757[#:leaked-env-vars #f] [#:local-build? #f] @
6758[#:substitutable? #t] [#:properties '()]
6759Construit une dérivation avec les arguments donnés et renvoie l'objet
6760@code{<derivation>} obtenu.
6761
6762Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
6763sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
6764à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
6765@var{recursive?} est vrai, alors la sortie fixe peut être un fichier
6766exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
6767contenant la sortie.
6768
6769Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
6770paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
6771des références de chaque chemin du dépôt est exporté dans l'environnement de
6772construction dans le fichier correspondant, dans un simple format texte.
6773
6774Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
6775d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
6776peut faire référence. De même, @var{disallowed-references}, si vrai, doit
6777être une liste de choses que la sortie ne doit @emph{pas} référencer.
6778
6779Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
6780chaînes de caractères qui désignent les variables d'environnements qui
6781peuvent « fuiter » de l'environnement du démon dans l'environnement de
6782construction. Ce n'est possible que pour les dérivations à sortie fixe —
6783c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
6784permettre à des variables comme @code{http_proxy} d'être passées aux
6785dérivations qui téléchargent des fichiers.
6786
6787Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
6788bon candidat pour le déchargement et devrait plutôt être construit
6789localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
6790dérivations où le coût du transfert de données est plus important que les
6791bénéfices.
6792
6793Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
6794sortie de la dérivation ne devraient pas être utilisés
6795(@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
6796qui utilisent des détails du jeu d'instruction du CPU hôte.
6797
6798@var{properties} doit être une liste d'association décrivant les «
6799propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
6800interprétée, dans la dérivation.
6801@end deffn
6802
6803@noindent
6804Voici un exemple avec un script shell comme constructeur, en supposant que
6805@var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
6806exécutable Bash dans le dépôt :
6807
6808@lisp
6809(use-modules (guix utils)
6810 (guix store)
6811 (guix derivations))
6812
6813(let ((builder ; ajoute le script Bash au dépôt
6814 (add-text-to-store store "my-builder.sh"
6815 "echo hello world > $out\n" '())))
6816 (derivation store "foo"
6817 bash `("-e" ,builder)
6818 #:inputs `((,bash) (,builder))
6819 #:env-vars '(("HOME" . "/homeless"))))
6820@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
6821@end lisp
6822
6823Comme on pourrait s'en douter, cette primitive est difficile à utiliser
6824directement. Une meilleure approche est d'écrire les scripts de
6825construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
6826le code de construction comme une « G-expression » et de la passer à
6827@code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
6828
6829Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
6830une dérivation donc le code de construction était écrit en Scheme se faisait
6831avec @code{build-expression->derivation}, documenté plus bas. Cette
6832procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
6833est meilleure.
6834
6835@deffn {Procédure Scheme} build-expression->derivation @var{store} @
6836 @var{name} @var{exp} @
6837[#:system (%current-system)] [#:inputs '()] @
6838[#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6839[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
6840[#:references-graphs #f] [#:allowed-references #f] @
6841[#:disallowed-references #f] @
6842[#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
6843Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
6844constructeur pour la dérivation @var{name}. @var{inputs} doit être une
6845liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
6846omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
6847modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
6848compilés et rendus disponibles dans le chemin de chargement pendant
6849l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
6850gnu-build-system))}.
6851
6852@var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
6853une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
6854une liste de paires de chaînes de caractères et de chemin de sortie
6855construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
6856liste de paires de chaînes de caractères spécifiant le nom et la valeur de
6857variables d'environnement visibles pour le constructeur. Le constructeur
6858termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
6859@var{exp} renvoie @code{#f}, la construction est considérée en échec.
6860
6861@var{exp} est construite avec @var{guile-for-build} (une dérivation).
6862Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
6863@code{%guile-for-build} est utilisée à la place.
6864
6865Voir la procédure @code{derivation} pour la signification de
6866@var{references-graph}, @var{allowed-references},
6867@var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
6868@end deffn
6869
6870@noindent
6871Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
6872un fichier :
6873
6874@lisp
6875(let ((builder '(let ((out (assoc-ref %outputs "out")))
6876 (mkdir out) ; create /gnu/store/@dots{}-goo
6877 (call-with-output-file (string-append out "/test")
6878 (lambda (p)
6879 (display '(hello guix) p))))))
6880 (build-expression->derivation store "goo" builder))
6881
6882@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
6883@end lisp
6884
6885
6886@node La monade du dépôt
6887@section La monade du dépôt
6888
6889@cindex monad
6890
6891Les procédures qui travaillent sur le dépôt décrites dans les sections
6892précédentes prennent toutes une connexion ouverte au démon de construction
6893comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
6894elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
6895
6896Le premier point est embêtant : on doit se balader avec la connexion au
6897démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
6898des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
6899prennent. Le deuxième point est problématique : comme les opérations sur le
6900dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
6901être enchaînés correctement.
6902
6903@cindex valeurs monadiques
6904@cindex fonctions monadiques
6905C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
6906module fournit un cadre pour travailler avec des @dfn{monads}, en
6907particulier une monade très utile pour notre usage, la @dfn{monade du
6908dépôt}. Les monades sont des constructions qui permettent deux choses :
6909associer un « contexte » avec une valeur (dans notre cas, le contexte est le
6910dépôt) et construire une séquence de calculs (ici les calculs comprennent
6911des accès au dépôt). Les valeurs dans une monade — les valeurs qui
6912contiennent ce contexte supplémentaire — sont appelées des @dfn{valeurs
6913monadiques} ; les procédures qui renvoient ce genre de valeur sont appelées
6914des @dfn{procédures monadiques}.
6915
6916Considérez cette procédure « normale » :
6917
6918@example
6919(define (sh-symlink store)
6920 ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
6921 (let* ((drv (package-derivation store bash))
6922 (out (derivation->output-path drv))
6923 (sh (string-append out "/bin/bash")))
6924 (build-expression->derivation store "sh"
6925 `(symlink ,sh %output))))
6926@end example
6927
6928En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
6929en une fonction monadique :
6930
6931@example
6932(define (sh-symlink)
6933 ;; Pareil, mais renvoie une valeur monadique.
6934 (mlet %store-monad ((drv (package->derivation bash)))
6935 (gexp->derivation "sh"
6936 #~(symlink (string-append #$drv "/bin/bash")
6937 #$output))))
6938@end example
6939
6940Il y a plusieurs choses à remarquer avec cette deuxième version : le
6941paramètre @code{store} est maintenant implicitement « enfilé » dans les
6942appels aux procédures monadiques @code{package->derivation} et
6943@code{gexp->derivation}, et la valeur monadique renvoyée par
6944@code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
6945simple @code{let}.
6946
6947Il se trouve que l'appel à @code{package->derivation} peut même être omis
6948puisqu'il aura lieu implicitement, comme nous le verrons plus tard
6949(@pxref{G-Expressions}) :
6950
6951@example
6952(define (sh-symlink)
6953 (gexp->derivation "sh"
6954 #~(symlink (string-append #$bash "/bin/bash")
6955 #$output)))
6956@end example
6957
6958@c See
6959@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
6960@c for the funny quote.
6961L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. Comme
6962on pourrait le dire, « on sort d'une monade comme de la monarchie : en
6963l'exécutant »@footnote{NdT : il y a là un jeu de mot en anglais qui se base
6964sur un double sens de « run », qui peut se traduire par « exécuter » dans ce
6965contexte.}. Donc, pour sortir de la monade et obtenir l'effet escompté, on
6966doit utiliser @code{run-with-store}.
6967
6968@example
6969(run-with-store (open-connection) (sh-symlink))
6970@result{} /gnu/store/...-sh-symlink
6971@end example
6972
6973Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
6974de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
6975procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
6976première est utilisée pour « lancer » une seule valeur monadique à travers
6977le dépôt :
6978
6979@example
6980scheme@@(guile-user)> ,run-in-store (package->derivation hello)
6981$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6982@end example
6983
6984La deuxième entre dans une console récursive, où toutes les valeurs de
6985retour sont automatiquement lancées à travers le dépôt :
6986
6987@example
6988scheme@@(guile-user)> ,enter-store-monad
6989store-monad@@(guile-user) [1]> (package->derivation hello)
6990$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6991store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
6992$3 = "/gnu/store/@dots{}-foo"
6993store-monad@@(guile-user) [1]> ,q
6994scheme@@(guile-user)>
6995@end example
6996
6997@noindent
6998Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
6999@code{store-monad}.
7000
7001Les formes syntaxiques principales pour utiliser des monades en général sont
7002disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
7003
7004@deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
7005Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
7006comme une @var{monad}.
7007@end deffn
7008
7009@deffn {Syntaxe Scheme} return @var{val}
7010Renvoie une valeur monadique qui encapsule @var{val}.
7011@end deffn
7012
7013@deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
7014@dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
7015procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
7016souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
7017voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
7018langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
7019cet exemple :
7020
7021@example
7022(run-with-state
7023 (with-monad %state-monad
7024 (>>= (return 1)
7025 (lambda (x) (return (+ 1 x)))
7026 (lambda (x) (return (* 2 x)))))
7027 'some-state)
7028
7029@result{} 4
7030@result{} some-state
7031@end example
7032@end deffn
7033
7034@deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
7035 @var{body} ...
7036@deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
7037 @var{body} ...
7038Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
7039@var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
7040on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
7041» dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
7042cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
7043(@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
7044comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
7045vers la droite. La dernière expression de @var{body} doit être une
7046expression monadique et son résultat deviendra le résultat de @code{mlet} ou
7047@code{mlet*} lorsque lancé dans la @var{monad}.
7048
7049@code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
7050(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
7051@end deffn
7052
7053@deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
7054Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
7055renvoie le résultat de la dernière expression. Chaque expression dans la
7056séquence doit être une expression monadique.
7057
7058Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
7059des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
7060@code{begin}, mais appliqué à des expressions monadiques.
7061@end deffn
7062
7063@deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
7064Lorsque la @var{condition} est vraie, évalue la séquence des expressions
7065monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
7066@var{condition} est fausse, renvoie @code{*unspecified*} dans la monade
7067actuelle. Chaque expression dans la séquence doit être une expression
7068monadique.
7069@end deffn
7070
7071@deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
7072Lorsque la @var{condition} est fausse, évalue la séquence des expressions
7073monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
7074@var{condition} est vraie, renvoie @code{*unspecified*} dans la monade
7075actuelle. Chaque expression dans la séquence doit être une expression
7076monadique.
7077@end deffn
7078
7079@cindex monade d'état
7080Le module @code{(guix monads)} fournit la @dfn{monade d'état} qui permet à
7081une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
7082procédures.
7083
7084@defvr {Variable Scheme} %state-monad
7085La monade d'état. les procédure dans la monade d'état peuvent accéder et
7086modifier l'état qui est enfilé.
7087
7088Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
7089valeur dans la monade d'état. Elle renvoie le carré de son argument, mais
7090incrémente aussi la valeur actuelle de l'état :
7091
7092@example
7093(define (square x)
7094 (mlet %state-monad ((count (current-state)))
7095 (mbegin %state-monad
7096 (set-current-state (+ 1 count))
7097 (return (* x x)))))
7098
7099(run-with-state (sequence %state-monad (map square (iota 3))) 0)
7100@result{} (0 1 4)
7101@result{} 3
7102@end example
7103
7104Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
7105d'état supplémentaire, qui est le nombre d'appels à @code{square}.
7106@end defvr
7107
7108@deffn {Procédure monadique} current-state
7109Renvoie l'état actuel dans une valeur monadique.
7110@end deffn
7111
7112@deffn {Procédure monadique} set-current-state @var{value}
7113Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
7114valeur monadique.
7115@end deffn
7116
7117@deffn {Procédure monadique} state-push @var{value}
7118Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
7119renvoie l'état précédent dans une valeur monadique.
7120@end deffn
7121
7122@deffn {Procédure monadique} state-pop
7123Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
7124monadique. L'état est supposé être une liste.
7125@end deffn
7126
7127@deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
7128Lance la valeur monadique @var{mval} avec @var{state} comme valeur
7129initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
7130résultat.
7131@end deffn
7132
7133L'interface principale avec la monade du dépôt, fournit par le module
7134@code{(guix store)}, est la suivante.
7135
7136@defvr {Variable Scheme} %store-monad
7137La monade du dépôt — un alias pour @var{%state-monad}.
7138
7139Les valeurs dans la monade du dépôt encapsulent des accès au dépôt. Lorsque
7140son effet est requis, une valeur de la monade du dépôt doit être « évaluée »
7141en la passant à la procédure @code{run-with-store} (voir plus bas).
7142@end defvr
7143
7144@deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
7145Lance @var{mval}, une valeur monadique dans la monade du dépôt, dans
7146@var{store}, une connexion ouvert au dépôt.
7147@end deffn
7148
7149@deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
7150Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
7151du fichier contenant @var{text}, une chaîne de caractères. @var{references}
7152est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
7153réfère ; c'est la liste vide par défaut.
7154@end deffn
7155
7156@deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
7157Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
7158dépôt du fichier contenant @var{data}, un vecteur d'octets.
7159@var{references} est une liste d'éléments du dépôt auxquels le fichier
7160binaire en résultat se réfère ; c'est la liste vide par défaut.
7161@end deffn
7162
7163@deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
7164 [#:recursive? #t] [#:select? (const #t)]
7165Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
7166comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
7167omis.
7168
7169Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
7170récursivement ; si @var{file} désigne un fichier simple et que
7171@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
7172sont préservés.
7173
7174Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
7175@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
7176absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
7177l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
7178
7179L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
7180
7181@example
7182(run-with-store (open-connection)
7183 (mlet %store-monad ((a (interned-file "README"))
7184 (b (interned-file "README" "LEGU-MIN")))
7185 (return (list a b))))
7186
7187@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
7188@end example
7189
7190@end deffn
7191
7192Le module @code{(guix packages)} exporte les procédures monadiques liées aux
7193paquets suivantes :
7194
7195@deffn {Procédure monadique} package-file @var{package} [@var{file}] @
7196 [#:system (%current-system)] [#:target #f] @
7197[#:output "out"]
7198Renvoie une valeur monadique qui contient le nom de fichier absolu de
7199@var{file} dans le répertoire @var{output} de @var{package}. Lorsque
7200@var{file} est omis, renvoie le nom du répertoire @var{output} de
7201@var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
7202cible pour la compilation croisée.
7203@end deffn
7204
7205@deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
7206@deffnx {Procédure monadique} package->cross-derivation @var{package} @
7207 @var{target} [@var{system}]
7208Version monadique de @code{package-derivation} et
7209@code{package-cross-derivation} (@pxref{Définition des paquets}).
7210@end deffn
7211
7212
7213@node G-Expressions
7214@section G-Expressions
7215
7216@cindex G-expression
7217@cindex quoting du code de construction
7218On a donc des « dérivations » qui représentent une séquence d'actions de
7219construction à effectuer pour produire un élément du dépôt
7220(@pxref{Dérivations}). Ces actions de construction sont effectuées
7221lorsqu'on demande au démon de construire effectivement les dérivations ;
7222elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
7223
7224@cindex strate de code
7225Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
7226construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
7227de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
7228par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
7229sur Hop. Oleg Kiselyov, qui a écrit des
7230@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
7231et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
7232genre de génération de code.} : le « code hôte » — le code qui défini les
7233paquets, parle au démon, etc — et le « code côté construction » — le code
7234qui effectue effectivement les actions de construction, comme créer des
7235répertoires, invoquer @code{make}, etc.
7236
7237Pour décrire une dérivation et ses actions de construction, on a typiquement
7238besoin d'intégrer le code de construction dans le code hôte. Ça revient à
7239manipuler le code de construction comme de la donnée, et l'homoiconicité de
7240Scheme — le code a une représentation directe en tant que donnée — est très
7241utile pour cela. Mais on a besoin de plus que le mécanisme de
7242@code{quasiquote} en Scheme pour construire des expressions de construction.
7243
7244Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
7245de S-expression adaptée aux expressions de construction. Les G-expression,
7246ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
7247@code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
7248@code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
7249@code{quasiquote}, @code{unquote} et @code{unquote-splicing} respectivement
7250(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
7251Manual}). Cependant il y a des différences majeures :
7252
7253@itemize
7254@item
7255Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
7256manipulées par d'autres processus.
7257
7258@item
7259Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
7260unquotée dans une gexp, le résultat est comme si le nom de fichier de son
7261résultat avait été introduit.
7262
7263@item
7264Les gexps transportent des informations sur les paquets ou les dérivations
7265auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
7266comme des entrées du processus de construction qui les utilise.
7267@end itemize
7268
7269@cindex abaissement, des objets haut-niveau dans les gepxs
7270Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
7271définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
7272haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
7273aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
7274utiles qui pourraient être insérées dans une gexp sont les « objets
7275simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
7276les références vers eux dans les dérivations et autres (voir
7277@code{local-file} et @code{plain-file} ci-dessous).
7278
7279Pour illustrer cette idée, voici un exemple de gexp :
7280
7281@example
7282(define build-exp
7283 #~(begin
7284 (mkdir #$output)
7285 (chdir #$output)
7286 (symlink (string-append #$coreutils "/bin/ls")
7287 "list-files")))
7288@end example
7289
7290Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
7291dérivation qui construit une répertoire contenant exactement un lien
7292symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
7293
7294@example
7295(gexp->derivation "the-thing" build-exp)
7296@end example
7297
7298Comme on pourrait s'y attendre, la chaîne
7299@code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
7300référence au paquet @var{coreutils} dans le code de construction final, et
7301@var{coreutils} est automatiquement devenu une entrée de la dérivation. De
7302même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
7303une chaîne de caractères contenant le nom du répertoire de la sortie de la
7304dérivation.
7305
7306@cindex compilation croisée
7307Dans le contexte d'une compilation croisée, il est utile de distinguer entre
7308des références à la construction @emph{native} d'un paquet — qui peut être
7309lancé par l'hôte — et des références à la construction croisée d'un paquet.
7310Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
7311construction native d'un paquet :
7312
7313@example
7314(gexp->derivation "vi"
7315 #~(begin
7316 (mkdir #$output)
7317 (system* (string-append #+coreutils "/bin/ln")
7318 "-s"
7319 (string-append #$emacs "/bin/emacs")
7320 (string-append #$output "/bin/vi")))
7321 #:target "mips64el-linux-gnu")
7322@end example
7323
7324@noindent
7325Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
7326utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
7327mais ensuite la construction croisée d'@var{emacs} est utilisée.
7328
7329@cindex modules importés, pour les gexps
7330@findex with-imported-modules
7331Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
7332voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
7333dans la gexp, donc ces modules devraient être importés dans «
7334l'environnement de construction ». La forme @code{with-imported-modules}
7335vous permet d'exprimer ça :
7336
7337@example
7338(let ((build (with-imported-modules '((guix build utils))
7339 #~(begin
7340 (use-modules (guix build utils))
7341 (mkdir-p (string-append #$output "/bin"))))))
7342 (gexp->derivation "empty-dir"
7343 #~(begin
7344 #$build
7345 (display "success!\n")
7346 #t)))
7347@end example
7348
7349@noindent
7350Dans cet exemple, le module @code{(guix build utils)} est automatiquement
7351récupéré dans l'environnement de construction isolé de notre gexp, pour que
7352@code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
7353
7354@cindex closure de module
7355@findex source-module-closure
7356Typiquement, vous voudriez que la @emph{closure} complète du module soit
7357importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
7358plutôt que seulement le module ; sinon, une tentative de chargement du
7359module échouera à cause des modules dépendants manquants. La procédure
7360@code{source-module-closure} calcule la closure d'un module en cherchant
7361dans ses en-têtes sources, ce qui est pratique dans ce cas :
7362
7363@example
7364(use-modules (guix modules)) ;pour 'source-module-closure'
7365
7366(with-imported-modules (source-module-closure
7367 '((guix build utils)
7368 (gnu build vm)))
7369 (gexp->derivation "something-with-vms"
7370 #~(begin
7371 (use-modules (guix build utils)
7372 (gnu build vm))
7373 @dots{})))
7374@end example
7375
7376@cindex extensions, des gexps
7377@findex with-extensions
7378Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
7379modules en Scheme pur, mais aussi des « extensions » comme des liaisons
7380Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
7381voulez utiliser le paquet @code{guile-json} du côté de la construction,
7382voici comme procéder :
7383
7384@example
7385(use-modules (gnu packages guile)) ;pour 'guile-json'
7386
7387(with-extensions (list guile-json)
7388 (gexp->derivation "something-with-json"
7389 #~(begin
7390 (use-modules (json))
7391 @dots{})))
7392@end example
7393
7394La forme syntaxique pour construire des gexps est résumée ci-dessous.
7395
7396@deffn {Syntaxe Scheme} #~@var{exp}
7397@deffnx {Syntaxe Scheme} (gexp @var{exp})
7398Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
7399ou plusieurs de ces formes :
7400
7401@table @code
7402@item #$@var{obj}
7403@itemx (ungexp @var{obj})
7404Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
7405supportés, par exemple un paquet ou une dérivation, auquel cas la forme
7406@code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
7407@code{"/gnu/store/@dots{}-coreutils-8.22}.
7408
7409Si @var{boj} est une liste, elle est traversée et les références aux objets
7410supportés sont substitués de manière similaire.
7411
7412Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
7413sont ajoutées à celle de la gexp qui l'entoure.
7414
7415Si @var{obj} est un autre type d'objet, il est inséré tel quel.
7416
7417@item #$@var{obj}:@var{output}
7418@itemx (ungexp @var{obj} @var{output})
7419Cette forme est similaire à la précédente, mais se réfère explicitement à la
7420sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
7421produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
7422
7423@item #+@var{obj}
7424@itemx #+@var{obj}:output
7425@itemx (ungexp-native @var{obj})
7426@itemx (ungexp-native @var{obj} @var{output})
7427Comme @code{ungexp}, mais produit une référence à la construction
7428@emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
7429croisée.
7430
7431@item #$output[:@var{output}]
7432@itemx (ungexp output [@var{output}])
7433Insère une référence à la sortie @var{output} de la dérivation, ou à la
7434sortie principale lorsque @var{output} est omis.
7435
7436Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
7437
7438@item #$@@@var{lst}
7439@itemx (ungexp-splicing @var{lst})
7440Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
7441liste qui la contient.
7442
7443@item #+@@@var{lst}
7444@itemx (ungexp-native-splicing @var{lst})
7445Comme au dessus, mais se réfère à la construction native des objets listés
7446dans @var{lst}.
7447
7448@end table
7449
7450Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
7451l'exécution du type @code{gexp?} (voir plus bas).
7452@end deffn
7453
7454@deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
7455Marque les gexps définies dans @var{body}@dots{} comme requérant
7456@var{modules} dans leur environnement d'exécution.
7457
7458Chaque élément dans @var{module} peut être le nom d'un module, comme
7459@code{(guix build utils)} ou le nom d'un module suivi d'une flèche, suivie
7460d'un objet simili-fichier :
7461
7462@example
7463`((guix build utils)
7464 (guix gcrypt)
7465 ((guix config) => ,(scheme-file "config.scm"
7466 #~(define-module @dots{}))))
7467@end example
7468
7469@noindent
7470Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
7471chemin de recherche, et le dernier est créé à partir d'un objet
7472simili-fichier.
7473
7474Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
7475directement définies dans @var{body}@dots{}, mais pas sur celles définies
7476dans des procédures appelées par @var{body}@dots{}.
7477@end deffn
7478
7479@deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
7480Marque les gexps définies dans @var{body}@dots{} comme requérant
7481@var{extensions} dans leur environnement de construction et d'exécution.
7482@var{extensions} est typiquement une liste d'objets paquets comme définis
7483dans le module @code{(gnu packages guile)}.
7484
7485Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
7486chemin de chargement lors de la compilation des modules importés dans
7487@var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
7488gexp renvoyée par @var{body}@dots{}.
7489@end deffn
7490
7491@deffn {Procédure Scheme} gexp? @var{obj}
7492Renvoie @code{#t} si @var{obj} est une G-expression.
7493@end deffn
7494
7495Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
7496que code pour construire une dérivation, soit en tant que fichier normal
7497dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
7498cela (@pxref{La monade du dépôt}, pour plus d'information sur les monads).
7499
7500@deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
7501 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
7502[#:hash #f] [#:hash-algo #f] @
7503[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7504[#:module-path @var{%load-path}] @
7505[#:effective-version "2.2"] @
7506[#:references-graphs #f] [#:allowed-references #f] @
7507[#:disallowed-references #f] @ [#:leaked-env-vars #f] @
7508[#:script-name (string-append @var{name} "-builder")] @
7509[#:deprecation-warnings #f] @
7510[#:local-build? #f] [#:substitutable? #t] @
7511[#:properties '()] [#:guile-for-build #f]
7512Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
7513@var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
7514stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
7515vraie, elle est utilisée comme triplet de cible de compilation croisée pour
7516les paquets référencés par @var{exp}.
7517
7518@var{modules} est devenu obsolète en faveur de
7519@code{with-imported-modules}. Sa signification est de rendre @var{modules}
7520disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
7521une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
7522pour les copier dans le dépôt, les compiler et les rendre disponibles dans
7523le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
7524@code{((guix build utils) (guix build gnu-build-system))}.
7525
7526@var{effective-version} détermine la chaîne à utiliser lors d'ajout
7527d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
7528recherche — p.@: ex.@: @code{"2.2"}.
7529
7530@var{graft?} détermine si les paquets référencés par @var{exp} devraient
7531être greffés si possible.
7532
7533Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
7534tuples de la forme suivante :
7535
7536@example
7537(@var{file-name} @var{package})
7538(@var{file-name} @var{package} @var{output})
7539(@var{file-name} @var{derivation})
7540(@var{file-name} @var{derivation} @var{output})
7541(@var{file-name} @var{store-item})
7542@end example
7543
7544La partie droite des éléments de @var{references-graphs} est automatiquement
7545transformée en une entrée du processus de construction @var{exp}. Dans
7546l'environnement de construction, chaque @var{file-name} contient le graphe
7547des références de l'élément correspondant, dans un format texte simple.
7548
7549@var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
7550sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
7551dépôt auxquels le résultat a le droit de faire référence. Toute référence à
7552un autre élément du dépôt conduira à une erreur à la construction. Comme
7553pour @var{disallowed-references}, qui peut lister des éléments qui ne
7554doivent pas être référencés par les sorties.
7555
7556@var{deprecation-warnings} détermine s'il faut afficher les avertissement
7557d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
7558@code{t} ou @code{'detailed}.
7559
7560Les autres arguments sont les mêmes que pour @code{derivation}
7561(@pxref{Dérivations}).
7562@end deffn
7563
7564@cindex objets simili-fichiers
7565Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
7566@code{program-file} et @code{scheme-file} ci-dessous renvoient des
7567@dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
7568une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
7569cette G-expression :
7570
7571@example
7572#~(system* #$(file-append glibc "/sbin/nscd") "-f"
7573 #$(local-file "/tmp/my-nscd.conf"))
7574@end example
7575
7576Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
7577dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
7578G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
7579modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
7580fait la G-expression. @code{plain-file} peut être utilisé de la même
7581manière ; elle est seulement différente par le fait que le contenu du
7582fichier est passé directement par une chaîne de caractères.
7583
7584@deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
7585 [#:recursive? #f] [#:select? (const #t)]
7586Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
7587; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
7588fichier relatif, il est récupéré à partir de la position du fichier source
7589dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
7590@var{name} — par défaut le nom de base de @var{file}.
7591
7592Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
7593récursivement ; si @var{file} désigne un fichier simple et que
7594@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
7595sont préservés.
7596
7597Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
7598@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
7599absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
7600l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
7601
7602C'est la version déclarative de la procédure monadique @code{interned-file}
7603(@pxref{La monade du dépôt, @code{interned-file}}).
7604@end deffn
7605
7606@deffn {Procédure Scheme} plain-file @var{name} @var{content}
7607Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
7608contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
7609ajouter un dépôt.
7610
7611C'est la version déclarative de @code{text-file}.
7612@end deffn
7613
7614@deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
7615 [#:options '(#:local-build? #t)]
7616Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
7617un répertoire calculé par @var{gexp}. @var{options} est une liste
7618d'arguments supplémentaires à passer à @code{gexp->derivation}.
7619
7620C'est la version déclarative de @code{gexp->derivation}.
7621@end deffn
7622
7623@deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
7624 [#:guile (default-guile)] [#:module-path %load-path]
7625Renvoie un script exécutable @var{name} qui lance @var{exp} avec
7626@var{guile}, avec les modules importés de @var{exp} dans son chemin de
7627recherche. Cherche les modules de @var{exp} dans @var{module-path}.
7628
7629L'exemple ci-dessous construit un script qui invoque simplement la commande
7630@command{ls} :
7631
7632@example
7633(use-modules (guix gexp) (gnu packages base))
7634
7635(gexp->script "list-files"
7636 #~(execl #$(file-append coreutils "/bin/ls")
7637 "ls"))
7638@end example
7639
7640Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monade du dépôt,
7641@code{run-with-store}}), on obtient une dérivation qui produit une fichier
7642exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
7643
7644@example
7645#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
7646!#
7647(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
7648@end example
7649@end deffn
7650
7651@deffn {Procédure Scheme} program-file @var{name} @var{exp} @
7652 [#:guile #f] [#:module-path %load-path]
7653Renvoie un objet représentant un élément du dépôt @var{name} qui lance
7654@var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
7655script. Les modules importés par @var{gexp} sont recherchés dans
7656@var{module-path}.
7657
7658C'est la version déclarative de @code{gexp->script}.
7659@end deffn
7660
7661@deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
7662 [#:set-load-path? #t] [#:module-path %load-path] @
7663[#:splice? #f] @
7664[#:guile (default-guile)]
7665Renvoie une dérivation qui construit un fichier @var{name} contenant
7666@var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
7667une liste d'expressions qui seront splicée dans le fichier qui en résulte.
7668
7669Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
7670résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
7671pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
7672sont trouvés dans @var{module-path}.
7673
7674Le fichier qui en résulte retient les références à toutes les dépendances de
7675@var{exp} ou un sous-ensemble.
7676@end deffn
7677
7678@deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
7679Renvoie un objet représentant le fichier Scheme @var{name} qui contient
7680@var{exp}.
7681
7682C'est la version déclarative de @code{gexp->file}.
7683@end deffn
7684
7685@deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
7686Renvoie une valeur monadique qui construit un ficher texte contenant
7687@var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
7688objet de n'importe quel type qui peut être utilisé dans une gexp : des
7689paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
7690dépôt qui en résulte en retient toutes les références.
7691
7692Cette variante devrait être préférée à @code{text-file} lorsque vous
7693souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
7694typiquement lorsque vous construisez un fichier de configuration qui
7695contient des noms de fichiers du dépôt, comme ceci :
7696
7697@example
7698(define (profile.sh)
7699 ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
7700 ;; la variable d'environnement « PATH ».
7701 (text-file* "profile.sh"
7702 "export PATH=" coreutils "/bin:"
7703 grep "/bin:" sed "/bin\n"))
7704@end example
7705
7706Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
7707résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
7708empêche d'être glanés tant que le script est accessible.
7709@end deffn
7710
7711@deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
7712Renvoie un objet représentant le fichier du dépôt @var{name} contenant
7713@var{text}. @var{text} est une séquence de chaînes de caractères et de
7714fichiers simili-objets, comme dans :
7715
7716@example
7717(mixed-text-file "profile"
7718 "export PATH=" coreutils "/bin:" grep "/bin")
7719@end example
7720
7721C'est la version déclarative de @code{text-file*}.
7722@end deffn
7723
7724@deffn {Procédure Scheme} file-union @var{name} @var{files}
7725Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
7726tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
7727une paire où le premier élément est le nom de fichier à utiliser dans le
7728nouveau répertoire et le second élément est une gexp dénotant le fichier
7729cible. Voici un exemple :
7730
7731@example
7732(file-union "etc"
7733 `(("hosts" ,(plain-file "hosts"
7734 "127.0.0.1 localhost"))
7735 ("bashrc" ,(plain-file "bashrc"
7736 "alias ls='ls --color=auto'"))))
7737@end example
7738
7739Cela crée un répertoire @code{etc} contenant ces deux fichiers.
7740@end deffn
7741
7742@deffn {Procédure Scheme} directory-union @var{name} @var{things}
7743Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
7744une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
7745:
7746
7747@example
7748(directory-union "guile+emacs" (list guile emacs))
7749@end example
7750
7751crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
7752@end deffn
7753
7754@deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
7755Renvoie un objet simili-fichier qui correspond à la concaténation de
7756@var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
7757@var{suffix} est une chaîne de caractères.
7758
7759Par exemple, considérez cette gexp :
7760
7761@example
7762(gexp->script "run-uname"
7763 #~(system* #$(file-append coreutils
7764 "/bin/uname")))
7765@end example
7766
7767On peut obtenir le même effet avec :
7768
7769@example
7770(gexp->script "run-uname"
7771 #~(system* (string-append #$coreutils
7772 "/bin/uname")))
7773@end example
7774
7775Il y a une différence cependant : dans le cas @code{file-append}, le script
7776qui en résulte contient le nom de fichier absolu comme une chaîne de
7777caractère alors que dans le deuxième cas, le script contient une expression
7778@code{(string-append @dots{})} pour construire le nom de fichier @emph{à
7779l'exécution}.
7780@end deffn
7781
7782
7783Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
7784contiennent des outils de construction. Pour savoir facilement qu'ils sont
7785à utiliser dans la strate de construction, ces modules sont gardés dans
7786l'espace de nom @code{(guix build @dots{})}.
7787
7788@cindex abaissement, des objets haut-niveau dans les gepxs
7789En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
7790compilateur, soit en des dérivations, soit en des objets du dépôt. Par
7791exemple, abaisser un paquet crée une dérivation, et abaisser un
7792@code{plain-file} crée un élément du dépôt. Cela est effectué par la
7793procédure monadique @code{lower-object}.
7794
7795@deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
7796 [#:target #f]
7797Renvoie la dérivation ou l'élément du dépôt comme une valeur de
7798@var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
7799compilant de manière croisée pour @var{target} si @var{target} est vrai.
7800@var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
7801@code{<package>}.
7802@end deffn
7803
7804@node Invoquer guix repl
7805@section Invoquer @command{guix repl}
7806
7807@cindex REPL, read-eval-print loop
7808La commande @command{guix repl} démarre un @dfn{boucle
7809lecture-évaluation-affichage} Guile pour la programmation interactive
7810(@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
7811Comparé au lancement de la commande @command{guile}, @command{guix repl}
7812garanti que tous les modules Guix et toutes ses dépendances sont disponibles
7813dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
7814
7815@example
7816$ guix repl
7817scheme@@(guile-user)> ,use (gnu packages base)
7818scheme@@(guile-user)> coreutils
7819$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
7820@end example
7821
7822@cindex inférieurs
7823En plus, @command{guix repl} implémente un protocole REPL simple lisible par
7824une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
7825interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
7826une version potentiellement différente de Guix.
7827
7828Les options disponibles sont les suivante :
7829
7830@table @code
7831@item --type=@var{type}
7832@itemx -t @var{type}
7833Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
7834
7835@table @code
7836@item guile
7837C'est la valeur par défaut. Elle démarre un REPL Guile standard
7838fonctionnel.
7839@item machine
7840Démarre un REPL qui utilise le protocole lisible par machine. C'est le
7841protocole que parle le module @code{(guix inferior)}.
7842@end table
7843
7844@item --listen=@var{extrémité}
7845Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
7846sortie standard. Lorsque cette option est passée, il écoutera plutôt les
7847connexions sur @var{endpoint}. Voici un exemple d'options valides :
7848
7849@table @code
7850@item --listen=tcp:37146
7851Accepte les connexions sur localhost, sur le port 31.
7852
7853@item --listen=unix:/tmp/socket
7854Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
7855@end table
7856@end table
7857
7858@c *********************************************************************
7859@node Utilitaires
7860@chapter Utilitaires
7861
7862Cette section décrit les utilitaires en ligne de commande de Guix. certains
7863sont surtout faits pour les développeurs qui écrivent de nouvelles
7864définitions de paquets tandis que d'autres sont plus utiles pour une
7865utilisation générale. Ils complètent l'interface de programmation Scheme de
7866Guix d'une manière pratique.
7867
7868@menu
7869* Invoquer guix build:: Construire des paquets depuis la ligne de
7870 commande.
7871* Invoquer guix edit:: Modifier les définitions de paquets.
7872* Invoquer guix download:: Télécharger un fichier et afficher son hash.
7873* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
7874* Invoquer guix import:: Importer des définitions de paquets.
7875* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
7876* Invoquer guix lint:: Trouver des erreurs dans les définitions de
7877 paquets.
7878* Invoquer guix size:: Profiler l'utilisation du disque.
7879* Invoquer guix graph:: Visualiser le graphe des paquets.
7880* Invoquer guix publish:: Partager des substituts.
7881* Invoquer guix challenge:: Défier les serveurs de substituts.
7882* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
7883* Invoquer guix container:: Isolation de processus.
7884* Invoquer guix weather:: Mesurer la disponibilité des substituts.
7885* Invoquer guix processes:: Lister les processus clients.
7886@end menu
7887
7888@node Invoquer guix build
7889@section Invoquer @command{guix build}
7890
7891@cindex construction de paquets
7892@cindex @command{guix build}
7893La commande @command{guix build} construit des paquets ou des dérivations et
7894leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
7895qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
7896commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
7897elle est surtout utile pour les développeurs de la distribution.
7898
7899La syntaxe générale est :
7900
7901@example
7902guix build @var{options} @var{package-or-derivation}@dots{}
7903@end example
7904
7905Par exemple, la commande suivante construit la dernière version d'Emacs et
7906de Guile, affiche leur journaux de construction et enfin affiche les
7907répertoires des résultats :
7908
7909@example
7910guix build emacs guile
7911@end example
7912
7913De même, la commande suivante construit tous les paquets disponibles :
7914
7915@example
7916guix build --quiet --keep-going \
7917 `guix package -A | cut -f1,2 --output-delimiter=@@`
7918@end example
7919
7920@var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
7921distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
7922soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
7923Dans le premier cas, la commande cherchera un paquet avec le nom
7924correspondant (et éventuellement la version) dans les modules de la
7925distribution GNU (@pxref{Modules de paquets}).
7926
7927Autrement, l'option @code{--expression} peut être utilisée pour spécifier
7928une expression Scheme qui s'évalue en un paquet ; c'est utile pour
7929différencier des paquets avec le même nom ou des variantes de paquets.
7930
7931Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
7932disponibles sont décrites dans les sous-sections ci-dessous.
7933
7934@menu
7935* Options de construction communes:: Options de construction pour la
7936 plupart des commandes.
7937* Options de transformation de paquets:: Créer des variantes de paquets.
7938* Options de construction supplémentaires:: Options spécifiques à «
7939 guix build ».
7940* Débogage des échecs de construction:: La vie d'un empaqueteur.
7941@end menu
7942
7943@node Options de construction communes
7944@subsection Options de construction communes
7945
7946Un certain nombre d'options qui contrôlent le processus de construction sont
7947communes avec @command{guix build} et les autres commandes qui peuvent
7948générer des constructions, comme @command{guix package} ou @command{guix
7949archive}. Voici ces options :
7950
7951@table @code
7952
7953@item --load-path=@var{répertoire}
7954@itemx -L @var{répertoire}
7955Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
7956(@pxref{Modules de paquets}).
7957
7958Cela permet à des utilisateurs de définir leur propres paquets et les rendre
7959disponibles aux outils en ligne de commande.
7960
7961@item --keep-failed
7962@itemx -K
7963Garde l'arborescence de construction des constructions en échec. Ainsi, si
7964une construction échoue, son arborescence de construction est préservée dans
7965@file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
7966de construction. Cela est utile pour déboguer des échecs de construction.
7967@xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
7968des problèmes de construction.
7969
7970Cette option n'a pas d'effet lors de la connexion à un démon distant avec
7971l'URI @code{guix://} (@pxref{Le dépôt, la variable
7972@code{GUIX_DAEMON_SOCKET}}).
7973
7974@item --keep-going
7975@itemx -k
7976Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
7977toutes les constructions ont soit réussies, soit échouées.
7978
7979Le comportement par défaut est de s'arrêter dès qu'une des dérivations
7980spécifiées échoue.
7981
7982@item --dry-run
7983@itemx -n
7984Ne pas construire les dérivations.
7985
7986@anchor{option de repli}
7987@item --fallback
7988Lorsque la substitution d'un binaire pré-compilé échoue, construit les
7989paquets localement à la place (@pxref{Échec de substitution}).
7990
7991@item --substitute-urls=@var{urls}
7992@anchor{client-substitute-urls}
7993Considère @var{urls} comme une liste d'URL de sources de substituts séparés
7994par des espaces, et remplace la liste par défaut d'URL de
7995@command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
7996URLs}).
7997
7998Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
7999tant qu'ils sont signés par une clef autorisée par l'administrateur système
8000(@pxref{Substituts}).
8001
8002Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
8003substitution.
8004
8005@item --no-substitutes
8006Ne pas utiliser de substitut pour les résultats de la construction.
8007C'est-à-dire, toujours construire localement plutôt que de permettre le
8008téléchargement de binaires pré-construits (@pxref{Substituts}).
8009
8010@item --no-grafts
8011Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
8012jour des paquets disponibles comme des greffes ne sont pas appliquées.
8013@xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
8014
8015@item --rounds=@var{n}
8016Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
8017les constructions consécutives ne sont pas identiques bit-à-bit.
8018
8019Cela est une manière utile pour détecter des processus de construction non
8020déterministes. Les processus de construction non déterministes sont
8021problématiques car ils rendent pratiquement impossible la
8022@emph{vérification} par les utilisateurs de l'authenticité de binaires
8023tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
8024
8025Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
8026devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
8027résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
8028puis en reconstruisant, et enfin en comparant les deux résultats.
8029
8030@item --no-build-hook
8031N'essaye pas de décharger les constructions via le « crochet de construction
8032» du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
8033construit localement plutôt que de décharger les constructions à une machine
8034distante.
8035
8036@item --max-silent-time=@var{secondes}
8037Lorsque le processus de construction ou de substitution restent silencieux
8038pendant plus de @var{secondes}, le terminer et rapporter une erreur de
8039construction.
8040
8041Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
8042
8043@item --timeout=@var{secondes}
8044De même, lorsque le processus de construction ou de substitution dure plus
8045de @var{secondes}, le terminer et rapporter une erreur de construction.
8046
8047Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
8048
8049@c Note: This option is actually not part of %standard-build-options but
8050@c most programs honor it.
8051@cindex verbosité, des outils en ligne de commande
8052@cindex journaux de construction, verbosité
8053@item -v [@var{niveau}]
8054@itemx --verbosity=@var{niveau}
8055Utiliser le @var{niveau} de verbosité, en tant qu'entier. 0 signifie
8056qu'aucune sortie n'est produite, 1 signifie une sortie silencieuse et 2
8057montre tous les journaux de construction sur la sortie d'erreur standard.
8058
8059@item --cores=@var{n}
8060@itemx -c @var{n}
8061Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
8062valeur spéciale @code{0} signifie autant de cœurs que possible.
8063
8064@item --max-jobs=@var{n}
8065@itemx -M @var{n}
8066Permet 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
8067l'option équivalente pour @command{guix-daemon}.
8068
8069@item --debug=@var{niveau}
8070Produire une sortie de débogage qui provient du démon de construction.
8071@var{niveau} doit être un entier entre 0 et 5 ; plus grand est ce nombre,
8072plus verbeuse sera la sortie. Indiquer un niveau de 4 ou plus peut être
8073utile pour déboguer des problèmes d'installation avec le démon de
8074construction.
8075
8076@end table
8077
8078Sous le capot, @command{guix build} est surtout un interface à la procédure
8079@code{package-derivation} du module @code{(guix packages)}, et à la
8080procédure @code{build-derivations} du module @code{(guix derivations)}.
8081
8082En plus des options passées explicitement par la ligne de commande,
8083@command{guix build} et les autres commande @command{guix} qui peuvent
8084effectuer des construction honorent la variable d'environnement
8085@code{GUIX_BUILD_OPTIONS}.
8086
8087@defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
8088Les utilisateurs peuvent définir cette variable à une liste d'options de la
8089ligne de commande qui seront automatiquement utilisées par @command{guix
8090build} et les autres commandes @command{guix} qui peuvent effectuer des
8091constructions, comme dans l'exemple suivant :
8092
8093@example
8094$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
8095@end example
8096
8097Ces options sont analysées indépendamment, et le résultat est ajouté aux
8098options de la ligne de commande analysées.
8099@end defvr
8100
8101
8102@node Options de transformation de paquets
8103@subsection Options de transformation de paquets
8104
8105@cindex variantes de paquets
8106Un autre ensemble d'options de la ligne de commande supportés par
8107@command{guix build} et aussi @command{guix package} sont les @dfn{options
8108de transformation de paquets}. Ce sont des options qui rendent possible la
8109définition de @dfn{variantes de paquets} — par exemple, des paquets
8110construit à partir de sources différentes. C'est une manière simple de
8111créer des paquets personnalisés à la volée sans avoir à taper les
8112définitions de variantes de paquets (@pxref{Définition des paquets}).
8113
8114@table @code
8115
8116@item --with-source=@var{source}
8117@itemx --with-source=@var{paquet}=@var{source}
8118@itemx --with-source=@var{paquet}@@@var{version}=@var{source}
8119Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
8120son numéro de version. @var{source} doit être un nom de fichier ou une URL,
8121comme pour @command{guix download} (@pxref{Invoquer guix download}).
8122
8123Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
8124spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
8125@code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
8126
8127De même, lorsque @var{version} est omis, la chaîne de version est inférée à
8128partir de @var{source} ; dans l'exemple précédent, il s'agit de
8129@code{2.0.10}.
8130
8131Cette option permet aux utilisateurs d'essayer des version des paquets
8132différentes de celles fournies par la distribution. L'exemple ci-dessous
8133télécharge @file{ed-1.7.tar.g} depuis un miroir GNU et l'utilise comme
8134source pour le paquet @code{ed} :
8135
8136@example
8137guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
8138@end example
8139
8140En tant que développeur, @code{--with-source} permet de tester facilement
8141des version bêta :
8142
8143@example
8144guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
8145@end example
8146
8147@dots{} ou pour construire un dépôt de gestion de version dans un
8148environnement vierge :
8149
8150@example
8151$ git clone git://git.sv.gnu.org/guix.git
8152$ guix build guix --with-source=guix@@1.0=./guix
8153@end example
8154
8155@item --with-input=@var{paquet}=@var{remplaçant}
8156Remplace la dépendance sur @var{paquet} par une dépendance à
8157@var{remplaçant}. @var{paquet} doit être un nom de paquet et
8158@var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
8159@code{guile@@1.8}.
8160
8161Par exemple, la commande suivante construit Guix, mais remplace sa
8162dépendance à la version stable actuelle de Guile par une dépendance à une
8163ancienne version de Guile, @code{guile@@2.0} :
8164
8165@example
8166guix build --with-input=guile=guile@@2.0 guix
8167@end example
8168
8169C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
8170@code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
8171@code{guile}) sont reconstruits avec @code{guile@@2.0}.
8172
8173Cette option est implémentée avec la procédure Scheme
8174@code{package-input-rewriting} (@pxref{Définition des paquets,
8175@code{package-input-rewriting}}).
8176
8177@item --with-graft=@var{paquet}=@var{remplaçant}
8178Cette option est similaire à @code{--with-input} mais avec une différence
8179importante : plutôt que de reconstruire la chaîne de dépendance complète,
8180@var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
8181référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
8182d'information sur les greffes.
8183
8184Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
8185Wget et toutes ses dépendances, en remplaçant les références à la version
8186actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
8187
8188@example
8189guix build --with-graft=gnutls=gnutls@@3.5.4 wget
8190@end example
8191
8192Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
8193y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
8194sont strictement compatibles — par exemple, s'ils fournissent une
8195bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
8196doivent être compatibles. Si @var{remplaçant} est incompatible avec
8197@var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
8198utilisez avec précaution !
8199
8200@item --with-git-url=@var{paquet}=@var{url}
8201@cindex Git, utiliser le dernier commit
8202@cindex dernier commit, construction
8203Construire @var{paquet} depuis le dernier commit de la branche @code{master}
8204du dépôt sur @var{url}. Les sous-modules Git du dépôt sont récupérés,
8205récursivement.
8206
8207Par exemple, la commande suivante construit la bibliothèque Python NumPy
8208avec le dernier commit de la branche master de Python lui-même :
8209
8210@example
8211guix build python-numpy \
8212 --with-git-url=python=https://github.com/python/cpython
8213@end example
8214
8215Cette option peut aussi être combinée avec @code{--with-branch} ou
8216@code{--with-commit} (voir plus bas).
8217
8218@cindex intégration continue
8219Évidemment, comme cela utilise le dernier commit d'une branche donnée, le
8220résultat d'une telle commande varie avec le temps. Néanmoins c'est une
8221manière pratique pour reconstruire des piles logicielles entières avec le
8222dernier commit d'un ou plusieurs paquets. C'est particulièrement pratique
8223dans le contexte d'une intégration continue.
8224
8225Les clones sont gardés dans un cache dans @file{~/.cache/guix/checkouts}
8226pour accélérer les accès consécutifs au même dépôt. Vous pourriez vouloir
8227le nettoyer de temps en temps pour récupérer de l'espace disque.
8228
8229@item --with-branch=@var{paquet}=@var{branche}
8230Construire @var{paquet} à partir du dernier commit de la @var{branche}. Si
8231le champ @code{source} de @var{paquet} est une origine avec la méthode
8232@code{git-fetch} (@pxref{Référence des origines}) ou un objet @code{git-checkout},
8233l'URL du dépôt est récupérée à partir de cette @code{source}. Sinon, vous
8234devez utiliser @code{--with-git-url} pour spécifier l'URL du dépôt Git.
8235
8236Par exemple, la commande suivante construit @code{guile-sqlite3} à partir du
8237dernier commit de sa branche @code{master}, puis construit @code{guix} (qui
8238en dépend) et @code{cuirass} (qui dépend de @code{guix}) avec cette
8239construction spécifique de @code{guile-sqlite3} :
8240
8241@example
8242guix build --with-branch=guile-sqlite3=master cuirass
8243@end example
8244
8245@item --with-commit=@var{paquet}=@var{commit}
8246Cela est similaire à @code{--with-branch}, sauf qu'elle construite à partir
8247de @var{commit} au lieu du sommet d'une branche. @var{commit} doit être un
8248identifiant SHA1 de commit Git valide.
8249@end table
8250
8251@node Options de construction supplémentaires
8252@subsection Options de construction supplémentaires
8253
8254Les options de la ligne de commande ci-dessous sont spécifiques à
8255@command{guix build}.
8256
8257@table @code
8258
8259@item --quiet
8260@itemx -q
8261Construire en silence, sans afficher les journaux de construction ; c'est
8262équivalent à @code{--verbosity=0}. À la fin, le journal de construction est
8263gardé dans @file{/var} (ou similaire) et on peut toujours l'y trouver avec
8264l'option @option{--log-file}.
8265
8266@item --file=@var{fichier}
8267@itemx -f @var{fichier}
8268Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
8269code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
8270
8271Par exemple, @var{file} peut contenir une définition de paquet comme ceci
8272(@pxref{Définition des paquets}) :
8273
8274@example
8275@verbatiminclude package-hello.scm
8276@end example
8277
8278@item --expression=@var{expr}
8279@itemx -e @var{expr}
8280Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
8281
8282Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
8283guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
8284version 1.8 de Guile.
8285
8286Autrement, @var{exp} peut être une G-expression, auquel cas elle est
8287utilisée comme un programme de construction passé à @code{gexp->derivation}
8288(@pxref{G-Expressions}).
8289
8290Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
8291argument (@pxref{La monade du dépôt}). La procédure doit renvoyer une
8292dérivation comme une valeur monadique, qui est ensuite lancée à travers
8293@code{run-with-store}.
8294
8295@item --source
8296@itemx -S
8297Construit les dérivation source des paquets, plutôt que des paquets
8298eux-mêmes.
8299
8300Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
8301@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
8302de GCC.
8303
8304L'archive des sources renvoyée est le résultat de l'application des
8305correctifs et des extraits de code éventuels spécifiés dans le champ
8306@code{origin} du paquet (@pxref{Définition des paquets}).
8307
8308@item --sources
8309Récupère et renvoie la source de @var{package-or-derivation} et toute ses
8310dépendances, récursivement. C'est pratique pour obtenir une copie locale de
8311tous les codes sources requis pour construire @var{packages}, ce qui vous
8312permet de les construire plus tard même sans accès réseau. C'est une
8313extension de l'option @code{--source} et peut accepter l'un des arguments
8314facultatifs suivants :
8315
8316@table @code
8317@item package
8318Cette valeur fait que l'option @code{--sources} se comporte comme l'option
8319@code{--source}.
8320
8321@item all
8322Construit les dérivations des sources de tous les paquets, dont les sources
8323qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
8324
8325@example
8326$ guix build --sources tzdata
8327The following derivations will be built:
8328 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
8329 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8330@end example
8331
8332@item transitive
8333Construire les dérivations des sources de tous les paquets, ainsi que toutes
8334celles des entrées transitives des paquets. On peut par exemple utiliser
8335cette option pour précharger les sources des paquets pour les construire
8336plus tard hors ligne.
8337
8338@example
8339$ guix build --sources=transitive tzdata
8340The following derivations will be built:
8341 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8342 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
8343 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
8344 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
8345 /gnu/store/@dots{}-make-4.1.tar.xz.drv
8346 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
8347@dots{}
8348@end example
8349
8350@end table
8351
8352@item --system=@var{système}
8353@itemx -s @var{système}
8354Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of the
8355system type of the build host. The @command{guix build} command allows you
8356to repeat this option several times, in which case it builds for all the
8357specified systems; other commands ignore extraneous @option{-s} options.
8358
8359@quotation Remarque
8360Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
8361ne doit pas être confondu avec une compilation croisée. Voir
8362@code{--target} ci-dessous pour des informations sur la compilation croisée.
8363@end quotation
8364
8365Par exemple, passer @code{--system=i686-linux} sur un système
8366@code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
8367@code{aarch64-linux} vous permet de construire des paquets dans un
8368environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
8369option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
8370
8371@quotation Remarque
8372La possibilité de construire pour un système @code{armhf-linux} est activé
8373sans condition sur les machines @code{aarch64-linux}, bien que certaines
8374puces aarch64 n'en soient pas capables, comme les ThunderX.
8375@end quotation
8376
8377De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
8378est activée (@pxref{Services de virtualisation,
8379@code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
8380quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
8381installé.
8382
8383Les constructions pour un autre système que celui de la machine que vous
8384utilisez peuvent aussi être déchargées à une machine distante de la bonne
8385architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
8386déchargement.
8387
8388@item --target=@var{triplet}
8389@cindex compilation croisée
8390Effectuer une compilation croisée pour @var{triplet} qui doit être un
8391triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
8392target triplets, GNU configuration triplets,, autoconf, Autoconf}).
8393
8394@anchor{vérification de la construction}
8395@item --check
8396@cindex déterminisme, vérification
8397@cindex reproductibilité, vérification
8398Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
8399le dépôt et lève une erreur si les résultats des constructions ne sont pas
8400identiques bit-à-bit.
8401
8402Ce mécanisme vous permet de vérifier si les substituts précédemment
8403installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
8404construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
8405pour plus d'informations et pour les outils.
8406
8407Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
8408dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
8409l'étude des différences entre les deux résultats.
8410
8411@item --repair
8412@cindex réparer les éléments du dépôt
8413@cindex corruption, récupérer de
8414Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
8415les téléchargeant ou en les construisant à nouveau.
8416
8417Cette opération n'est pas atomique et donc restreinte à l'utilisateur
8418@code{root}
8419
8420@item --derivations
8421@itemx -d
8422Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
8423donnés.
8424
8425@item --root=@var{fichier}
8426@itemx -r @var{fichier}
8427@cindex racines du GC, ajout
8428@cindex ajout de racines au ramasse-miettes
8429Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
8430en tant que racine du ramasse-miettes.
8431
8432En conséquence, les résultats de cette invocation de @command{guix build}
8433sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
8434supprimé. Lorsque cette option est omise, les constructions sont
8435susceptibles d'être glanées.
8436
8437@item --log-file
8438@cindex journaux de construction, accès
8439Renvoie les noms des journaux de construction ou les URL des
8440@var{package-or-derivation} donnés ou lève une erreur si les journaux de
8441construction sont absents.
8442
8443Cela fonctionne indépendamment de la manière dont les paquets ou les
8444dérivations sont spécifiées. Par exemple, les invocations suivantes sont
8445équivalentes :
8446
8447@example
8448guix build --log-file `guix build -d guile`
8449guix build --log-file `guix build guile`
8450guix build --log-file guile
8451guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
8452@end example
8453
8454Si un journal n'est pas disponible localement, à moins que
8455@code{--no-substitutes} ne soit passé, la commande cherche un journal
8456correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
8457@code{--substitute-urls}.)
8458
8459Donc par exemple, imaginons que vous souhaitiez voir le journal de
8460construction de GDB sur MIPS, mais que vous n'avez qu'une machine
8461@code{x86_64} :
8462
8463@example
8464$ guix build --log-file gdb -s mips64el-linux
8465https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
8466@end example
8467
8468Vous pouvez accéder librement à un vaste bibliothèque de journaux de
8469construction !
8470@end table
8471
8472@node Débogage des échecs de construction
8473@subsection Débogage des échecs de construction
8474
8475@cindex échecs de construction, débogage
8476Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
8477passerez probablement du temps à déboguer et modifier la construction
8478jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
8479construction vous-même dans un environnement le plus proche possible de
8480celui qu'utilise le démon de construction.
8481
8482Pour cela, la première chose à faire est d'utiliser l'option
8483@option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
8484l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
8485par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
8486
8487À partir de là, vous pouvez vous déplacer dans l'arborescence de
8488construction et sourcer le fichier @file{environment-variables}, qui
8489contient toutes les variables d'environnement qui étaient définies lorsque
8490la construction a échoué. Disons que vous déboguez un échec de construction
8491dans le paquet @code{foo} ; une session typique ressemblerait à cela :
8492
8493@example
8494$ guix build foo -K
8495@dots{} @i{build fails}
8496$ cd /tmp/guix-build-foo.drv-0
8497$ source ./environment-variables
8498$ cd foo-1.2
8499@end example
8500
8501Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
8502(presque) et corriger le processus de construction.
8503
8504Parfois il arrive que, par exemple, les tests d'un paquet réussissent
8505lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
8506le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
8507contrairement à notre environnement au-dessus, l'accès réseau est
8508indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
8509
8510Dans ce cas, vous pourriez avoir besoin de lancer le processus de
8511construction dans un conteneur similaire à celui que le démon crée :
8512
8513@example
8514$ guix build -K foo
8515@dots{}
8516$ cd /tmp/guix-build-foo.drv-0
8517$ guix environment --no-grafts -C foo --ad-hoc strace gdb
8518[env]# source ./environment-variables
8519[env]# cd foo-1.2
8520@end example
8521
8522Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
8523shell dedans (@pxref{Invoquer guix environment}). La partie
8524@command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
8525@command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
8526débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
8527environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
8528plus d'informations sur les greffes).
8529
8530Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
8531de construction, on peut enlever @file{/bin/sh} :
8532
8533@example
8534[env]# rm /bin/sh
8535@end example
8536
8537Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
8538conteneur jetable créé par @command{guix environment}.
8539
8540La commande @command{strace} n'est probablement pas dans le chemin de
8541recherche, mais on peut lancer :
8542
8543@example
8544[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
8545@end example
8546
8547De cette manière, non seulement vous aurez reproduit les variables
8548d'environnement utilisées par le démon, mais vous lancerez aussi le
8549processus de construction dans un conteneur similaire à celui utilisé par le
8550démon.
8551
8552
8553@node Invoquer guix edit
8554@section Invoquer @command{guix edit}
8555
8556@cindex @command{guix edit}
8557@cindex définition de paquets, modification
8558Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
8559facilite la vie des utilisateurs et des empaqueteurs en plaçant leur éditeur
8560sur le fichier source qui contient la définition des paquets spécifiés. Par
8561exemple :
8562
8563@example
8564guix edit gcc@@4.9 vim
8565@end example
8566
8567@noindent
8568lance le programme spécifié dans la variable d'environnement @code{VISUAL}
8569ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et celle de
8570Vim.
8571
8572Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
8573ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
8574(@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
8575Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
8576actuellement dans le dépôt.
8577
8578
8579@node Invoquer guix download
8580@section Invoquer @command{guix download}
8581
8582@cindex @command{guix download}
8583@cindex télécharger les sources des paquets
8584En écrivant des définitions de paquets, les développeurs ont généralement
8585besoin de télécharger une archive des sources, calculer son hash SHA256 et
8586écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
8587L'outil @command{guix download} aide à cette tâche : il télécharge un
8588fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
8589le dépôt et son hash SHA56.
8590
8591Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
8592passante : lorsque les développeurs finissent par construire le paquet
8593nouvellement défini avec @command{guix build}, l'archive des sources n'aura
8594pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
8595le dépôt. C'est aussi une manière pratique de garder des fichiers
8596temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
8597
8598La commande @command{guix download} supporte les mêmes URI que celles
8599utilisées dans les définitions de paquets. En particulier, elle supporte
8600les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
8601supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
8602l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
8603erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
8604bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
8605
8606@command{guix download} vérifie les certificats du serveur HTTPS en
8607chargeant les autorités de certification X.509 depuis le répertoire vers
8608lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
8609
8610Les options suivantes sont disponibles :
8611
8612@table @code
8613@item --format=@var{fmt}
8614@itemx -f @var{fmt}
8615Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
8616d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
8617
8618@item --no-check-certificate
8619Ne pas valider les certificats HTTPS des serveurs.
8620
8621Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
8622garanti} que vous communiquez avec le serveur authentique responsable de
8623l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
8624milieu ».
8625
8626@item --output=@var{fichier}
8627@itemx -o @var{fichier}
8628Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
8629au dépôt.
8630@end table
8631
8632@node Invoquer guix hash
8633@section Invoquer @command{guix hash}
8634
8635@cindex @command{guix hash}
8636La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
8637surtout un outil pour simplifier la vie des contributeurs de la distribution
8638: il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
8639la définition d'un paquet (@pxref{Définition des paquets}).
8640
8641La syntaxe générale est :
8642
8643@example
8644guix hash @var{option} @var{fichier}
8645@end example
8646
8647Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
8648hash des données lues depuis l'entrée standard. @command{guix hash} a les
8649options suivantes :
8650
8651@table @code
8652
8653@item --format=@var{fmt}
8654@itemx -f @var{fmt}
8655Écrit le hash dans le format spécifié par @var{fmt}.
8656
8657Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
8658(@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
8659
8660Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
8661affichera le hash en @code{nix-base32}. Cette représentation est utilisée
8662dans les définitions des paquets.
8663
8664@item --recursive
8665@itemx -r
8666Calcule le hash sur @var{fichier} récursivement.
8667
8668@c FIXME: Replace xref above with xref to an ``Archive'' section when
8669@c it exists.
8670Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
8671dont ses enfants si c'est un répertoire. Certaines métadonnées de
8672@var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
8673est un fichier normal, le hash est différent que le @var{fichier} soit
8674exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
8675sur le hash (@pxref{Invoquer guix archive}).
8676
8677@item --exclude-vcs
8678@itemx -x
8679Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
8680système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
8681
8682@vindex git-fetch
8683Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
8684avec la méthode @code{git-fetch} (@pxref{Référence des origines}) :
8685
8686@example
8687$ git clone http://example.org/foo.git
8688$ cd foo
8689$ guix hash -rx .
8690@end example
8691@end table
8692
8693@node Invoquer guix import
8694@section Invoquer @command{guix import}
8695
8696@cindex importer des paquets
8697@cindex paquets importés
8698@cindex conversion de paquets
8699@cindex Invoquer @command{guix import}
8700La commande @command{guix import} est utile pour les gens qui voudraient
8701ajouter un paquet à la distribution avec aussi peu de travail que possible —
8702une demande légitime. La commande connaît quelques dépôts logiciels d'où
8703elle peut « importer » des métadonnées de paquets. Le résultat est une
8704définition de paquet, ou un modèle de définition, dans le format reconnu par
8705Guix (@pxref{Définition des paquets}).
8706
8707La syntaxe générale est :
8708
8709@example
8710guix import @var{importer} @var{options}@dots{}
8711@end example
8712
8713@var{importer} spécifie la source depuis laquelle importer des métadonnées
8714de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
8715options spécifiques à @var{importer}. Actuellement les « importateurs »
8716disponibles sont :
8717
8718@table @code
8719@item gnu
8720Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
8721la dernière version de ce paquet GNU, avec le hash de son archive, le
8722synopsis et la description canonique.
8723
8724Les informations supplémentaires comme les dépendances du paquet et sa
8725licence doivent être renseignées manuellement.
8726
8727Par exemple, la commande suivante renvoie une définition de paquets pour
8728GNU@tie{}Hello :
8729
8730@example
8731guix import gnu hello
8732@end example
8733
8734Les options spécifiques sont :
8735
8736@table @code
8737@item --key-download=@var{politique}
8738Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
8739OpenPGP manquantes lors de la vérification de la signature d'un paquet.
8740@xref{Invoquer guix refresh, @code{--key-download}}.
8741@end table
8742
8743@item pypi
8744@cindex pypi
8745Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
8746paquets Python}. Les informations sont récupérées à partir de la
8747description en JSON disponible sur @code{pypi.python.org} et inclus
8748généralement toutes les informations utiles, dont les dépendances des
8749paquets. Pour une efficacité maximale, il est recommandé d'installer
8750l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
8751wheels Python et récupérer les informations contenues à l'intérieur.
8752
8753La commande ci-dessous importe les métadonnées du paquet Python
8754@code{itsdangerous} :
8755
8756@example
8757guix import pypi itsdangerous
8758@end example
8759
8760@table @code
8761@item --recursive
8762@itemx -r
8763Traverse le graphe des dépendances du paquet amont donné et génère les
8764expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8765@end table
8766
8767@item gem
8768@cindex gem
8769Importe des métadonnées de @uref{https://rubygems.org/, RubyGems}. Les
8770informations sont récupérées au format JSON disponible sur
8771@code{rubygems.org} et inclut les informations les plus utiles, comme les
8772dépendances à l'exécution. Il y a des cependant quelques restrictions. Les
8773métadonnées ne distinguent pas synopsis et description, donc la même chaîne
8774est utilisée pour les deux champs. En plus, les détails des dépendances non
8775Ruby requises pour construire des extensions natives sont indisponibles et
8776laissé en exercice à l'empaqueteur.
8777
8778La commande ci-dessous importe les métadonnées pour le paquet Ruby
8779@code{rails} :
8780
8781@example
8782guix import gem rails
8783@end example
8784
8785@table @code
8786@item --recursive
8787@itemx -r
8788Traverse le graphe des dépendances du paquet amont donné et génère les
8789expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8790@end table
8791
8792@item cpan
8793@cindex CPAN
8794Importe des métadonnées de @uref{https://www.metacpan.org/, MetaCPAN}. Les
8795informations sont récupérées au format JSON disponible à travers
8796@uref{https://fastapi.metacpan.org/, l'API de MetaCPAN} et inclus les
8797informations les plus utiles, comme les dépendances des modules.
8798L'information sur les licences doit être vérifiée avec attention. Si Perl
8799est disponible dans le dépôt, alors l'utilitaire @code{corelist} sera
8800utiliser pour exclure les modules du cœur de la distribution Perl de la
8801liste des dépendances.
8802
8803La commande ci-dessous importe les métadonnées du module Perl
8804@code{Acme::Boolean} :
8805
8806@example
8807guix import cpan Acme::Boolean
8808@end example
8809
8810@item cran
8811@cindex CRAN
8812@cindex Bioconductor
8813Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
8814dépôt central de @uref{http://r-project.org, l'environnement statistique et
8815graphique GUN@tie{}R}.
8816
8817Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
8818
8819La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
8820
8821@example
8822guix import cran Cairo
8823@end example
8824
8825Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
8826le graphe des dépendances du paquet amont récursivement et générera des
8827expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
8828
8829Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
8830sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
8831répertoire de paquets R pour l'analyse et la compréhension de données
8832génomiques volumineuses en bioinformatique.
8833
8834Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
8835publié sur l'interface web du dépôt SVN de Bioconductor.
8836
8837La commande ci-dessous importe les métadonnées du paquet R
8838@code{GenomicRanges} :
8839
8840@example
8841guix import cran --archive=bioconductor GenomicRanges
8842@end example
8843
8844@item texlive
8845@cindex TeX Live
8846@cindex CTAN
8847Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
8848réseau complète pour les paquets TeX qui font partie de la
8849@uref{https://www.tug.org/texlive/, distribution TeX Live}.
8850
8851Les informations sur les paquets sont obtenues à travers l'API XML fournie
8852par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
8853projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
8854d'archives versionnées.
8855
8856La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
8857:
8858
8859@example
8860guix import texlive fontspec
8861@end example
8862
8863Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
8864n'est pas téléchargé depuis le sous-répertoire @file{latex} du
8865l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
8866depuis le répertoire voisin spécifié sous la même racine.
8867
8868La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
8869depuis CTAN en récupérant les sources depuis le répertoire
8870@file{texmf/source/generic} :
8871
8872@example
8873guix import texlive --archive=generic ifxetex
8874@end example
8875
8876@item json
8877@cindex JSON, import
8878Importe des métadonnées d'un fichier JSON local. Considérez l'exemple
8879suivant d'une définition de paquet au format JSON :
8880
8881@example
8882@{
8883 "name": "hello",
8884 "version": "2.10",
8885 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
8886 "build-system": "gnu",
8887 "home-page": "https://www.gnu.org/software/hello/",
8888 "synopsis": "Hello, GNU world: An example GNU package",
8889 "description": "GNU Hello prints a greeting.",
8890 "license": "GPL-3.0+",
8891 "native-inputs": ["gcc@@6"]
8892@}
8893@end example
8894
8895Les noms des champs sont les mêmes que pour les enregistrements de
8896@code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
8897paquets sont fournies comme des listes JSON de chaînes de spécifications de
8898paquets comme @code{guile} ou @code{guile@@2.0}.
8899
8900L'importateur supporte aussi une définition plus explicite des sources avec
8901les champs habituels pour les enregistrements @code{<origin>} :
8902
8903@example
8904@{
8905 @dots{}
8906 "source": @{
8907 "method": "url-fetch",
8908 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
8909 "sha256": @{
8910 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
8911 @}
8912 @}
8913 @dots{}
8914@}
8915@end example
8916
8917La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
8918et renvoie une expression de paquet :
8919
8920@example
8921guix import json hello.json
8922@end example
8923
8924@item nix
8925Importe les métadonnées d'une copie locale des source de
8926@uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
8927repose sur la commande @command{nix-instantiate} de
8928@uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
8929Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
8930Bash. Cette commande n'importe que la structure de haut-niveau du paquet
8931qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
8932de base de la définition d'un paquet.
8933
8934Lorsque vous importez un paquet GNU, le synopsis et la description sont
8935replacés par la version canonique en amont.
8936
8937Normalement, vous devrez d'abord faire :
8938
8939@example
8940export NIX_REMOTE=daemon
8941@end example
8942
8943@noindent
8944pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
8945de Nix.
8946
8947Par exemple, la commande ci-dessous importe la définition du paquet de
8948LibreOffice (plus précisément, elle importe la définition du paquet lié à
8949l'attribut de plus haut-niveau @code{libreoffice}) :
8950
8951@example
8952guix import nix ~/path/to/nixpkgs libreoffice
8953@end example
8954
8955@item hackage
8956@cindex hackage
8957Importe les métadonnées de l'archive de paquets centrale de la communauté
8958Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
8959sont récupérées depuis les fichiers Cabal et incluent toutes les
8960informations utiles, dont les dépendances des paquets.
8961
8962Les options spécifiques sont :
8963
8964@table @code
8965@item --stdin
8966@itemx -s
8967Lit un fichier Cabal depuis l'entrée standard.
8968@item --no-test-dependencies
8969@itemx -t
8970N'inclut pas les dépendances requises uniquement par les suites de tests.
8971@item --cabal-environment=@var{alist}
8972@itemx -e @var{alist}
8973@var{alist} est une alist Scheme qui définie l'environnement dans lequel les
8974conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
8975@code{arch}, @code{impl} et une représentation sous forme de chaîne de
8976caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
8977le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
8978doivent se conformer avec la définition du format de fichiers Cabal. La
8979valeur par défaut associée avec les clefs @code{os}, @code{arch} et
8980@code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
8981@item --recursive
8982@itemx -r
8983Traverse le graphe des dépendances du paquet amont donné et génère les
8984expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8985@end table
8986
8987La commande ci-dessous importe les métadonnées de la dernière version du
8988paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
8989spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
8990:
8991
8992@example
8993guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
8994@end example
8995
8996Une version spécifique du paquet peut éventuellement être spécifiée en
8997faisant suivre le nom du paquet par un arobase et un numéro de version comme
8998dans l'exemple suivant :
8999
9000@example
9001guix import hackage mtl@@2.1.3.1
9002@end example
9003
9004@item stackage
9005@cindex stackage
9006L'importateur @code{stackage} est une enveloppe autour de l'importateur
9007@code{hackage}. Il prend un nom de paquet, recherche la version incluse
9008dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
9009Stackage} et utilise l'importateur @code{hackage} pour récupérer les
9010métadonnées. Remarquez que c'est à vous de choisir une version LTS
9011compatible avec le compilateur GHC utilisé par Guix.
9012
9013Les options spécifiques sont :
9014
9015@table @code
9016@item --no-test-dependencies
9017@itemx -t
9018N'inclut pas les dépendances requises uniquement par les suites de tests.
9019@item --lts-version=@var{version}
9020@itemx -l @var{version}
9021@var{version} est la version LTS désirée. Si elle est omise, la dernière
9022version est utilisée.
9023@item --recursive
9024@itemx -r
9025Traverse le graphe des dépendances du paquet amont donné et génère les
9026expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
9027@end table
9028
9029La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
9030inclus dans la version LTS 7.18 de Stackage :
9031
9032@example
9033guix import stackage --lts-version=7.18 HTTP
9034@end example
9035
9036@item elpa
9037@cindex elpa
9038Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
9039Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
9040
9041Les options spécifiques sont :
9042
9043@table @code
9044@item --archive=@var{repo}
9045@itemx -a @var{repo}
9046@var{repo} identifie le dépôt d'archive depuis lequel récupérer les
9047informations. Actuellement les dépôts supportés et leurs identifiants sont
9048:
9049@itemize -
9050@item
9051@uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
9052l'identifiant @code{gnu}. C'est la valeur par défaut.
9053
9054Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
9055porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
9056similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
9057package signatures,, emacs, The GNU Emacs Manual}).
9058
9059@item
9060@uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
9061sélectionner avec l'identifiant @code{melpa-stable}.
9062
9063@item
9064@uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
9065l'identifiant @code{melpa}.
9066@end itemize
9067
9068@item --recursive
9069@itemx -r
9070Traverse le graphe des dépendances du paquet amont donné et génère les
9071expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
9072@end table
9073
9074@item crate
9075@cindex crate
9076Importe les métadonnées du répertoire des paquets Rust
9077@uref{https://crates.io, crates.io}.
9078
9079@item opam
9080@cindex OPAM
9081@cindex OCaml
9082Importe les métadonnées du répertoire de paquets
9083@uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml.
9084@end table
9085
9086La structure du code de @command{guix import} est modulaire. Il serait
9087utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
9088aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
9089
9090@node Invoquer guix refresh
9091@section Invoquer @command{guix refresh}
9092
9093@cindex @command{guix refresh}
9094L'audience première de la commande @command{guix refresh} est l'ensemble des
9095développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
9096les paquets fournis par la distribution qui sont en retard par rapport aux
9097dernières versions disponibles en amont, comme ceci :
9098
9099@example
9100$ guix refresh
9101gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
9102gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
9103@end example
9104
9105Autrement, on peut spécifier les paquets à considérer, auquel cas un
9106avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
9107mise à jour associé :
9108
9109@example
9110$ guix refresh coreutils guile guile-ssh
9111gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
9112gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
9113@end example
9114
9115@command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
9116le numéro de version le plus élevé parmi les versions publiées. La commande
9117sait comment mettre à jour certains types de paquets : les paquets GNU, les
9118paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
9119Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
9120déterminer si une nouvelle version est disponible en amont. Cependant, le
9121mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
9122une nouvelle méthode !
9123
9124@table @code
9125
9126@item --recursive
9127Considère les paquets spécifiés et tous les paquets dont ils dépendent.
9128
9129@example
9130$ guix refresh --recursive coreutils
9131gnu/packages/acl.scm:35:2: warning: no updater for acl
9132gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
9133gnu/packages/xml.scm:68:2: warning: no updater for expat
9134gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
9135@dots{}
9136@end example
9137
9138@end table
9139
9140Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
9141@command{guix refresh} a besoin d'un peu d'aide. La plupart des
9142gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
9143les définitions de paquets, ce qui peut être utilisé à cette fin :
9144
9145@example
9146(define-public network-manager
9147 (package
9148 (name "network-manager")
9149 ;; @dots{}
9150 (properties '((upstream-name . "NetworkManager")))))
9151@end example
9152
9153Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
9154source de la distribution pour mettre à jour le numéro de version et le hash
9155de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
9156Cela est effectué en téléchargeant la dernière version de l'archive des
9157sources de chaque paquet et des signatures associées, en authentifiant
9158l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
9159calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
9160manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
9161récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
9162clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
9163refresh} rapporte une erreur.
9164
9165Les options suivantes sont supportées :
9166
9167@table @code
9168
9169@item --expression=@var{expr}
9170@itemx -e @var{expr}
9171Considérer le paquet évalué par @var{expr}.
9172
9173C'est utile pour précisément se référer à un paquet, comme dans cet exemple
9174:
9175
9176@example
9177guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
9178@end example
9179
9180Cette commande liste les paquets qui dépendent de la libc « finale » (en
9181gros tous les paquets).
9182
9183@item --update
9184@itemx -u
9185Met à jour les fichiers source de la distribution (les recettes de paquets)
9186en place. Cette option est généralement utilisée depuis une copie du dépôt
9187git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
9188
9189@example
9190$ ./pre-inst-env guix refresh -s non-core -u
9191@end example
9192
9193@xref{Définition des paquets}, pour plus d'information sur les définitions des
9194paquets.
9195
9196@item --select=[@var{subset}]
9197@itemx -s @var{subset}
9198Choisi tous les paquets dans @var{subset}, entre @code{core} et
9199@code{non-core}.
9200
9201Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
9202distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
9203tout le reste ». Cela comprend GCC, libc, Binutils, Bash, etc.
9204Habituellement, changer l'un de ces paquets dans la distribution implique de
9205reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
9206pour les utilisateurs, en terme de temps de compilation et de bande passante
9207utilisés pour effectuer la mise à jour.
9208
9209Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
9210habituellement utile dans les cas où une mise à jour des paquets du cœur
9211serait dérangeante.
9212
9213@item --manifest=@var{fichier}
9214@itemx -m @var{fichier}
9215Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
9216vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
9217jour.
9218
9219@item --type=@var{updater}
9220@itemx -t @var{updater}
9221Chois uniquement les paquets pris en charge par @var{updater}
9222(éventuellement une liste de gestionnaires de mise à jour séparés par des
9223virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
9224:
9225
9226@table @code
9227@item gnu
9228le gestionnaire de mise à jour pour les paquets GNU ;
9229@item gnome
9230le gestionnaire de mise à jour pour les paquets GNOME ;
9231@item kde
9232le gestionnaire de mise à jour pour les paquets KDE ;
9233@item xorg
9234le gestionnaire de mise à jour pour les paquets X.org ;
9235@item kernel.org
9236le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
9237@item elpa
9238le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
9239ELPA} ;
9240@item cran
9241le gestionnaire de mise à jour pour les paquets
9242@uref{https://cran.r-project.org/, CRAN} ;
9243@item bioconductor
9244le gestionnaire de mise à jour pour les paquets
9245@uref{https://www.bioconductor.org/, Bioconductor} ;
9246@item cpan
9247le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
9248CPAN} ;
9249@item pypi
9250le gestionnaire de mise à jour pour les paquets
9251@uref{https://pypi.python.org, PyPI} ;
9252@item gem
9253le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
9254RubyGems} ;
9255@item github
9256le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
9257GitHub} ;
9258@item hackage
9259le gestionnaire de mise à jour pour les paquets
9260@uref{https://hackage.haskell.org, Hackage} ;
9261@item stackage
9262le gestionnaire de mise à jour pour les paquets
9263@uref{https://www.stackage.org, Stackage} ;
9264@item crate
9265le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
9266Crates} ;
9267@item launchpad
9268le gestionnaire de mise à jour pour les paquets @uref{https://launchpad.net,
9269Launchpad}
9270@end table
9271
9272Par exemple, la commande suivante ne vérifie que les mises à jour des
9273paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
9274
9275@example
9276$ guix refresh --type=elpa,cran
9277gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
9278gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
9279@end example
9280
9281@end table
9282
9283En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
9284paquets, comme dans cet exemple :
9285
9286@example
9287$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
9288@end example
9289
9290@noindent
9291La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
9292@code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
9293
9294Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
9295de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
9296vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
9297avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
9298
9299@table @code
9300
9301@item --list-updaters
9302@itemx -L
9303Liste les gestionnaires de mise à jour et quitte (voir l'option
9304@option{--type} plus haut).
9305
9306Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
9307la fin, affiche le pourcentage de paquets couverts par tous les
9308gestionnaires.
9309
9310@item --list-dependent
9311@itemx -l
9312Liste les paquets de plus haut-niveau qui devraient être reconstruits après
9313la mise à jour d'un ou plusieurs paquets.
9314
9315@xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
9316graph}}, pour des informations sur la manière de visualiser la liste des
9317paquets dépendant d'un autre.
9318
9319@end table
9320
9321Soyez conscients que l'option @code{--list-dependent} ne fait
9322@emph{qu'approximer} les reconstructions qui seraient requises par une mise
9323à jour. Plus de reconstructions pourraient être requises dans certaines
9324circonstances.
9325
9326@example
9327$ guix refresh --list-dependent flex
9328Building the following 120 packages would ensure 213 dependent packages are rebuilt:
9329hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
9330@end example
9331
9332La commande ci-dessus liste un ensemble de paquets qui peuvent être
9333construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
9334
9335@table @code
9336
9337@item --list-transitive
9338Lister tous les paquets dont un paquet ou plus dépendent.
9339
9340@example
9341$ guix refresh --list-transitive flex
9342flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
9343bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{}
9344@end example
9345
9346@end table
9347
9348La commande ci-dessus liste un ensemble de paquets qui, lorsqu'ils sont
9349modifiés, causent la reconstruction de @code{flex}.
9350
9351Les options suivante peuvent être utilisées pour personnaliser les
9352opérations avec GnuPG :
9353
9354@table @code
9355
9356@item --gpg=@var{commande}
9357Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
9358recherchée dans @code{PATH}.
9359
9360@item --keyring=@var{fichier}
9361Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
9362doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
9363un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
9364manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
9365Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
9366fichiers keybox).
9367
9368Lorsque cette option est omise, @command{guix refresh} utilise
9369@file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
9370clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
9371clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
9372(voir @option{--key-download} plus bas).
9373
9374Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
9375fichier keybox avec une commande telle que :
9376
9377@example
9378gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
9379@end example
9380
9381De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
9382comme ceci :
9383
9384@example
9385gpg --no-default-keyring --keyring mykeyring.kbx \
9386 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9387@end example
9388
9389@ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
9390Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
9391GPG.
9392
9393@item --key-download=@var{politique}
9394Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
9395l'une des suivantes :
9396
9397@table @code
9398@item always
9399Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
9400ajouter au porte-clefs de l'utilisateur.
9401
9402@item never
9403Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
9404place.
9405
9406@item interactive
9407Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
9408à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
9409par défaut.
9410@end table
9411
9412@item --key-server=@var{host}
9413Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
9414clef publique.
9415
9416@end table
9417
9418Le gestionnaire de mises à jour @code{github} utilise
9419@uref{https://developer.github.com/v3/, l'API de GitHub} pour faire des
9420requêtes sur les nouvelles versions. Lorsqu'elle est utilisé de manière
9421répétée, p.@: ex.@: lorsque vous vérifiez tous les paquets, GitHub finira
9422par refuser de répondre à d'autres requêtes de l'API. Par défaut 60
9423requêtes à l'heure sont autorisées, et une vérification complète de tous les
9424paquets GitHub dans Guix requiert bien plus que cela. L'authentification
9425avec GitHub à travers l'utilisation d'un jeton d'API lève ces limites. Pour
9426utiliser un jeton de l'API, initialisez la variable d'environnement
9427@code{GUIX_GITHUB_TOKEN} avec un jeton que vous vous serez procuré sur
9428@uref{https://github.com/settings/tokens} ou autrement.
9429
9430
9431@node Invoquer guix lint
9432@section Invoquer @command{guix lint}
9433
9434@cindex @command{guix lint}
9435@cindex paquets, chercher des erreurs
9436La commande @command{guix lint} est conçue pour aider les développeurs à
9437éviter des erreurs commune et à utiliser un style cohérent lors de
9438l'écriture de recettes de paquets. Elle lance des vérifications sur un
9439ensemble de paquets donnés pour trouver des erreurs communes dans leur
9440définition. Les @dfn{vérifieurs} disponibles comprennent (voir
9441@code{--list-checkers} pour une liste complète) :
9442
9443@table @code
9444@item synopsis
9445@itemx description
9446Vérifie certaines règles typographiques et stylistiques dans les
9447descriptions et les synopsis.
9448
9449@item inputs-should-be-native
9450Identifie les entrées qui devraient sans doute plutôt être des entrées
9451natives.
9452
9453@item source
9454@itemx home-page
9455@itemx mirror-url
9456@itemx github-url
9457@itemx source-file-name
9458Sonde les URL @code{home-page} et @code{source} et rapporte celles qui sont
9459invalides. Suggère une URL en @code{mirror://} lorsque c'est possible. Si
9460l'URL de @code{source} redirige vers une URL GitHub, recommande d'utiliser
9461l'URL GitHub. Vérifie que le nom du fichier source a un sens, p.@: ex.@:
9462qu'il ne s'agisse pas juste d'un numéro de version ou « git-checkout », sans
9463avoir déclaré un @code{file-name} (@pxref{Référence des origines}).
9464
9465@item source-unstable-tarball
9466Analyse l'URL @code{source} pour déterminer si une archive de GitHub est
9467autogénérée ou s'il s'agit d'une archive de publication. Malheureusement
9468les archives autogénérées de GitHub sont parfois régénérées.
9469
9470@item cve
9471@cindex vulnérabilités
9472@cindex CVE, Common Vulnerabilities and Exposures
9473Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
9474(Common Vulnerabilities and Exposures) de l'année en cours et des années
9475précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
9476NIST américain}.
9477
9478Pour voir les informations sur une vulnérabilité en particulier, visitez les
9479pages :
9480
9481@itemize
9482@item
9483@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
9484@item
9485@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
9486@end itemize
9487
9488@noindent
9489où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
9490@code{CVE-2015-7554}.
9491
9492Les développeurs de paquets peuvent spécifier dans les recettes des paquets
9493le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
9494et la version du paquet s'ils diffèrent du nom et de la version que Guix
9495utilise, comme dans cet exemple :
9496
9497@example
9498(package
9499 (name "grub")
9500 ;; @dots{}
9501 ;; CPE calls this package "grub2".
9502 (properties '((cpe-name . "grub2")
9503 (cpe-version . "2.3")))
9504@end example
9505
9506@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
9507Certaines entrées dans la base de données CVE ne spécifient pas la version
9508du paquet auquel elles s'appliquent et lui restera donc attachée pour
9509toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
9510qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
9511
9512@example
9513(package
9514 (name "t1lib")
9515 ;; @dots{}
9516 ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
9517 (properties `((lint-hidden-cve . ("CVE-2011-0433"
9518 "CVE-2011-1553"
9519 "CVE-2011-1554"
9520 "CVE-2011-5244")))))
9521@end example
9522
9523@item formatting
9524Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
9525source évident : des espaces en fin de ligne, des tabulations, etc.
9526@end table
9527
9528La syntaxe générale est :
9529
9530@example
9531guix lint @var{options} @var{package}@dots{}
9532@end example
9533
9534Si aucun paquet n'est donné par la ligne de commande, tous les paquets
9535seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
9536options suivantes :
9537
9538@table @code
9539@item --list-checkers
9540@itemx -l
9541Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
9542paquets puis quitte.
9543
9544@item --checkers
9545@itemx -c
9546N'active que les vérificateurs spécifiés dans une liste de noms séparés par
9547des virgules parmi la liste renvoyée par @code{--list-checkers}.
9548
9549@end table
9550
9551@node Invoquer guix size
9552@section Invoquer @command{guix size}
9553
9554@cindex taille
9555@cindex paquet, taille
9556@cindex closure
9557@cindex @command{guix size}
9558La commande @command{guix size} aide les développeurs à dresser un profil de
9559l'utilisation du disque que font les paquets. C'est facile de négliger
9560l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
9561l'utilisation d'une sortie unique pour un paquet qui pourrait être
9562facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
9563problèmes que @command{guix size} peut typiquement mettre en valeur.
9564
9565On peut passer un ou plusieurs spécifications de paquets à la commande,
9566comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
9567dépôt. Regardez cet exemple :
9568
9569@example
9570$ guix size coreutils
9571store item total self
9572/gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
9573/gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
9574/gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
9575/gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
9576/gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
9577/gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
9578/gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
9579/gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
9580total: 78.9 MiB
9581@end example
9582
9583@cindex closure
9584Les éléments du dépôt listés ici constituent la @dfn{clôture transitive} de
9585Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
9586comme ce qui serait renvoyé par :
9587
9588@example
9589$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
9590@end example
9591
9592Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
9593première colonne, nommée « total », montre la taille en mébioctet (Mio) de
9594la clôture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
9595taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
9596la taille de l'élément lui-même. La dernière colonne montre le ration de la
9597taille de l'élément lui-même par rapport à celle de tous les éléments
9598montrés.
9599
9600Dans cet exemple, on voit que la clôture de Coreutils pèse 79@tie{}Mio, dont
9601la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
9602n'est pas un problème en soit que la libc et les bibliothèques de GCC
9603représentent une grande part de la clôture parce qu'elles sont toujours
9604disponibles sur le système de toute façon).
9605
9606Lorsque les paquets passés à @command{guix size} sont disponibles dans le
9607dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
9608@emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
9609@code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
9610informations sur les greffes}, @command{guix size} demande au démon de
9611déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
9612@command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
9613Coreutils}).
9614
9615Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
9616size} rapporte les informations en se basant sur les substituts disponibles
9617(@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
9618éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
9619distance.
9620
9621Vous pouvez aussi spécifier plusieurs noms de paquets :
9622
9623@example
9624$ guix size coreutils grep sed bash
9625store item total self
9626/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
9627/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
9628/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
9629/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
9630@dots{}
9631total: 102.3 MiB
9632@end example
9633
9634@noindent
9635Dans cet exemple on voit que la combinaison des quatre paquets prend
9636102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clôtures
9637puisqu'ils ont beaucoup de dépendances en commun.
9638
9639Les options disponibles sont :
9640
9641@table @option
9642
9643@item --substitute-urls=@var{urls}
9644Utilise les informations de substituts de @var{urls}.
9645@xref{client-substitute-urls, the same option for @code{guix build}}.
9646
9647@item --sort=@var{clef}
9648Trie les lignes en fonction de la @var{clef}, l'une des options suivantes :
9649
9650@table @code
9651@item self
9652la taille de chaque élément (par défaut) ;
9653@item closure
9654la taille totale de la clôture de l'élément.
9655@end table
9656
9657@item --map-file=@var{fichier}
9658Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
9659
9660Pour l'exemple au-dessus, le schéma ressemble à ceci :
9661
9662@image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
9663Coreutils produit par @command{guix size}}
9664
9665Cette option requiert l'installation de
9666@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
9667soit visible dans le chemin de recherche des modules Guile. Lorsque ce
9668n'est pas le cas, @command{guix size} plante en essayant de le charger.
9669
9670@item --system=@var{système}
9671@itemx -s @var{système}
9672Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
9673
9674@end table
9675
9676@node Invoquer guix graph
9677@section Invoque @command{guix graph}
9678
9679@cindex DAG
9680@cindex @command{guix graph}
9681@cindex dépendances des paquets
9682Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
9683un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
9684une représentation mentale du DAG d'un paquet, donc la commande
9685@command{guix graph} fournit une représentation visuelle du DAG. Par
9686défaut, @command{guix graph} émet un représentation du DAG dans le format
9687d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
9688puisse être passée directement à la commande @command{dot} de Graphviz.
9689Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
9690un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
9691@uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
9692construire un graphe dans une base de donnée de graphes supportant le
9693langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
9694syntaxe générale est :
9695
9696@example
9697guix graph @var{options} @var{paquet}@dots{}
9698@end example
9699
9700Par exemple, la commande suivante génère un fichier PDF représentant le DAG
9701du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
9702compilation :
9703
9704@example
9705guix graph coreutils | dot -Tpdf > dag.pdf
9706@end example
9707
9708La sortie ressemble à ceci :
9709
9710@image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
9711
9712Joli petit graphe, non ?
9713
9714Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
9715graphe des objets paquets, en omettant les entrées implicites comme GCC,
9716libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
9717parfois on veut voir plus de détails. @command{guix graph} supporte
9718plusieurs types de graphes, qui vous permettent de choisir le niveau de
9719détails :
9720
9721@table @code
9722@item package
9723C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
9724des objets paquets, sans les dépendances implicites. C'est concis, mais
9725omet pas mal de détails.
9726
9727@item reverse-package
9728Cela montre le DAG @emph{inversé} des paquets. Par exemple :
9729
9730@example
9731guix graph --type=reverse-package ocaml
9732@end example
9733
9734…@: crée le graphe des paquets qui dépendent @emph{explicitement} d'OCaml
9735(si vous vous intéressez aussi au cas où OCaml est une dépendance implicite,
9736voir @code{reverse-bag} plus bas).
9737
9738Remarquez que pour les paquets du cœur de la distribution, cela crée des
9739graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
9740dépendent d'un paquet donnés, utilisez @command{guix refresh
9741--list-dependent} (@pxref{Invoquer guix refresh,
9742@option{--list-dependent}}).
9743
9744@item bag-emerged
9745C'est le DAG du paquet, @emph{avec} les entrées implicites.
9746
9747Par exemple, la commande suivante :
9748
9749@example
9750guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
9751@end example
9752
9753…@: montre ce graphe plus gros :
9754
9755@image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
9756GNU Coreutils}
9757
9758En bas du graphe, on voit toutes les entrées implicites de
9759@var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
9760
9761Maintenant, remarquez que les dépendances de ces entrées implicites —
9762c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
9763sont pas affichées, pour rester concis.
9764
9765@item bag
9766Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
9767bootstrap.
9768
9769@item bag-with-origins
9770Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
9771
9772@item reverse-bag
9773Cela montre le DAG @emph{inverse} des paquets. Contrairement à
9774@code{reverse-package}, il montre aussi les dépendance implicites. Par
9775exemple :
9776
9777@example
9778guix graph -t reverse-bag dune
9779@end example
9780
9781@noindent
9782…@: crée le graphe des tous les paquets qui dépendent de Dune, directement
9783ou indirectement. Comme Dune est une dépendance @emph{implicite} de
9784nombreux paquets @i{via} @code{dune-build-system}, cela montre un plus grand
9785nombre de paquets, alors que @code{reverse-package} en montrerait très peu,
9786voir aucun.
9787
9788@item dérivation
9789C'est la représentation lu plus détaillée : elle montre le DAG des
9790dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
9791représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
9792scripts de construction, les correctifs, les modules Guile, etc.
9793
9794Pour ce type de graphe, il est aussi possible de passer un nom de fichier
9795@file{.drv} à la place d'un nom de paquet, comme dans :
9796
9797@example
9798guix graph -t derivation `guix system build -d my-config.scm`
9799@end example
9800
9801@item module
9802C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
9803exemple, la commande suivante montre le graphe des modules de paquets qui
9804définissent le paquet @code{guile} :
9805
9806@example
9807guix graph -t module guile | dot -Tpdf > module-graph.pdf
9808@end example
9809@end table
9810
9811Tous les types ci-dessus correspondent aux @emph{dépendances à la
9812construction}. Le type de graphe suivant représente les @emph{dépendances à
9813l'exécution} :
9814
9815@table @code
9816@item references
9817C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
9818renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
9819
9820Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
9821@command{guix graph} essayera d'obtenir les informations sur les dépendances
9822à travers les substituts.
9823
9824Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
9825paquet. Par exemple, la commande ci-dessous produit le graphe des
9826références de votre profile (qui peut être gros !) :
9827
9828@example
9829guix graph -t references `readlink -f ~/.guix-profile`
9830@end example
9831
9832@item referrers
9833C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
9834par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
9835
9836Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
9837supposons que Inkscape est actuellement disponible dans 10 profils sur votre
9838machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
9839la racine est Inkscape avec 10 profils qui y sont liés.
9840
9841Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
9842glané.
9843
9844@end table
9845
9846Les options disponibles sont les suivante :
9847
9848@table @option
9849@item --type=@var{type}
9850@itemx -t @var{type}
9851Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
9852des types au-dessus.
9853
9854@item --list-types
9855Liste les types de graphes supportés.
9856
9857@item --backend=@var{moteur}
9858@itemx -b @var{moteur}
9859Produit un graphe avec le @var{moteur} choisi.
9860
9861@item --list-backends
9862Liste les moteurs de graphes supportés.
9863
9864Actuellement les moteurs disponibles sont Graphviz et d3.js.
9865
9866@item --expression=@var{expr}
9867@itemx -e @var{expr}
9868Considérer le paquet évalué par @var{expr}.
9869
9870C'est utile pour précisément se référer à un paquet, comme dans cet exemple
9871:
9872
9873@example
9874guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
9875@end example
9876
9877@item --system=@var{système}
9878@itemx -s @var{système}
9879Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
9880
9881Le graphe de dépendance des paquets est la plupart du temps indépendant de
9882l'architecture, mais il y a quelques parties qui dépendent de l'architecture
9883que cette option vous permet de visualiser.
9884@end table
9885
9886
9887
9888@node Invoquer guix publish
9889@section Invoquer @command{guix publish}
9890
9891@cindex @command{guix publish}
9892Le but de @command{guix publish} est de vous permettre de partager
9893facilement votre dépôt avec d'autres personnes qui peuvent ensuite
9894l'utiliser comme serveur de substituts (@pxref{Substituts}).
9895
9896Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
9897à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
9898signifie que toutes les machines qui font tourner Guix peuvent aussi agir
9899comme une ferme de construction, puisque l'interface HTTP est compatible
9900avec Hydra, le logiciel derrière la ferme de construction
9901@code{@value{SUBSTITUTE-SERVER}}.
9902
9903Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
9904destinataires de vérifier leur authenticité et leur intégrité
9905(@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
9906signature du système, qui n'est lisible que par l'administrateur système, il
9907doit être lancé en root ; l'option @code{--user} lui fait baisser ses
9908privilèges le plus tôt possible.
9909
9910La pair de clefs pour les signatures doit être générée avant de lancer
9911@command{guix publish}, avec @command{guix archive --generate-key}
9912(@pxref{Invoquer guix archive}).
9913
9914La syntaxe générale est :
9915
9916@example
9917guix publish @var{options}@dots{}
9918@end example
9919
9920Lancer @command{guix publish} sans arguments supplémentaires lancera un
9921serveur HTTP sur le port 8080 :
9922
9923@example
9924guix publish
9925@end example
9926
9927Une 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 :
9928
9929@example
9930guix-daemon --substitute-urls=http://example.org:8080
9931@end example
9932
9933Par défaut, @command{guix publish} compresse les archives à la volée quand
9934il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
9935aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
9936s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
9937@option{--cache}, qui active le cache des archives avant de les envoyer aux
9938clients — voir les détails plus bas. La commande @command{guix weather}
9939fournit un manière pratique de vérifier ce qu'un serveur fournit
9940(@pxref{Invoquer guix weather}).
9941
9942En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
9943des fichiers source référencées dans les enregistrements @code{origin}
9944(@pxref{Référence des origines}). Par exemple, en supposant que @command{guix
9945publish} tourne sur @code{example.org}, l'URL suivante renverra le fichier
9946brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
9947format @code{nix-base32}, @pxref{Invoquer guix hash}) :
9948
9949@example
9950http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
9951@end example
9952
9953Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
9954dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
9955
9956@cindex journaux de construction, publication
9957Les journaux de construction sont disponibles à partir des URL @code{/log}
9958comme ceci :
9959
9960@example
9961http://example.org/log/gwspk@dots{}-guile-2.2.3
9962@end example
9963
9964@noindent
9965Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
9966construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
9967avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
9968Nous recommandons de lancer @command{guix-daemon} avec
9969@code{--log-compression=gzip} parce que les navigateurs web les
9970décompressent automatiquement, ce qui n'est pas le cas avec la compression
9971bzip2.
9972
9973Les options suivantes sont disponibles :
9974
9975@table @code
9976@item --port=@var{port}
9977@itemx -p @var{port}
9978Écoute les requêtes HTTP sur le @var{port}
9979
9980@item --listen=@var{hôte}
9981Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
9982accepte les connexions de n'importe quelle interface.
9983
9984@item --user=@var{utilisateur}
9985@itemx -u @var{utilisateur}
9986Charge les privilèges de @var{utilisateur} le plus vite possible —
9987c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
9988signature a été lue.
9989
9990@item --compression[=@var{niveau}]
9991@itemx -C [@var{niveau}]
9992Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
9993zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
9994différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
9995meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
9996
9997À moins que @option{--cache} ne soit utilisé, la compression se fait à la
9998volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
9999charge sur la machine qui fait tourner @command{guix publish}, c'est une
10000bonne idée de choisir un niveau de compression faible, de lancer
10001@command{guix publish} derrière un serveur de cache ou d'utiliser
10002@option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
10003@command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
10004réponse.
10005
10006@item --cache=@var{répertoire}
10007@itemx -c @var{répertoire}
10008Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
10009@var{répertoire} et ne sert que les archives dans ce cache.
10010
10011Lorsque cette option est omise, les archives et les métadonnées sont crées à
10012la volée. Cela réduit la bande passante disponible, surtout quand la
10013compression est activée puisqu'elle pourrait être limitée par le CPU. Un
10014autre inconvénient au mode par défaut est que la taille des archives n'est
10015pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
10016@code{Content-Length} à ses réponses, ce qui empêche les clients de savoir
10017la quantité de données à télécharger.
10018
10019À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
10020un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
10021déclenche la création de l'archive — en calculant son @code{.narinfo} et en
10022compressant l'archive au besoin. Une fois l'archive cachée dans
10023@var{répertoire}, les requêtes suivantes réussissent et sont servies
10024directement depuis le cache, ce qui garanti que les clients ont la meilleure
10025bande passante possible.
10026
10027Le processus de création est effectué par des threads de travail. Par
10028défaut, un thread par cœur du CPU est créé, mais cela peut être
10029personnalisé. Voir @option{--workers} plus bas.
10030
10031Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
10032automatiquement supprimées lorsqu'elles expirent.
10033
10034@item --workers=@var{N}
10035Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
10036thread de travail pour créer les archives.
10037
10038@item --ttl=@var{ttl}
10039Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
10040vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
10041signifie 5 jours, @code{1m} signifie un mois, etc.
10042
10043Cela permet au Guix de l'utilisateur de garder les informations en cache
10044pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
10045pas lui-même que les éléments du dépôt qu'il fournit seront toujours
10046disponible pendant la durée @var{ttl}.
10047
10048En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
10049n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
10050dans le dépôt peuvent être supprimées.
10051
10052@item --nar-path=@var{chemin}
10053Utilise @var{chemin} comme préfixe des URL de fichier « nar »
10054(@pxref{Invoquer guix archive, normalized archives}).
10055
10056Par défaut, les nars sont présents à l'URL comme
10057@code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
10058changer la partie @code{/nar} en @var{chemin}.
10059
10060@item --public-key=@var{fichier}
10061@itemx --private-key=@var{fichier}
10062Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
10063signer les éléments avant de les publier.
10064
10065Les fichiers doivent correspondre à la même pair de clefs (la clef privée
10066est utilisée pour signer et la clef publique est seulement ajouté aux
10067métadonnées de la signature). Ils doivent contenir les clefs dans le format
10068s-expression canonique produit par @command{guix archive --generate-key}
10069(@pxref{Invoquer guix archive}). Par défaut,
10070@file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
10071utilisés.
10072
10073@item --repl[=@var{port}]
10074@itemx -r [@var{port}]
10075Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
10076Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
10077pour déboguer un serveur @command{guix publish} qui tourne.
10078@end table
10079
10080Activer @command{guix publish} sur un système Guix est vraiment une seule
10081ligne : instanciez simplement un service @code{guix-publish-service-type}
10082dans le champs @code{services} de votre déclaration @code{operating-system}
10083(@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
10084
10085Si vous avez installé Guix sur une « distro externe », suivez ces
10086instructions :
10087
10088@itemize
10089@item
10090Si votre distro hôte utilise le système d'init systemd :
10091
10092@example
10093# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
10094 /etc/systemd/system/
10095# systemctl start guix-publish && systemctl enable guix-publish
10096@end example
10097
10098@item
10099Si votre distribution hôte utilise le système d'initialisation Upstart :
10100
10101@example
10102# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
10103# start guix-publish
10104@end example
10105
10106@item
10107Sinon, procédez de manière similaire avec votre système d'init de votre
10108distro.
10109@end itemize
10110
10111@node Invoquer guix challenge
10112@section Invoquer @command{guix challenge}
10113
10114@cindex constructions reproductibles
10115@cindex constructions vérifiables
10116@cindex @command{guix challenge}
10117@cindex défi
10118Est-ce que les binaires fournis par ce serveur correspondent réellement au
10119code source qu'il dit avoir construit ? Est-ce que le processus de
10120construction d'un paquet est déterministe ? Ce sont les question auxquelles
10121la commande @command{guix challenge} essaye de répondre.
10122
10123La première question est évidemment importante : avant d'utiliser un serveur
10124de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
10125fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
10126permet la première : si les constructions des paquets sont déterministes
10127alors des constructions indépendantes du paquet devraient donner le même
10128résultat, bit à bit ; si un serveur fournit un binaire différent de celui
10129obtenu localement, il peut être soit corrompu, soit malveillant.
10130
10131On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
10132toutes les entrées du processus qui construit le fichier ou le répertoire —
10133les compilateurs, les bibliothèques, les scripts de construction,
10134etc. (@pxref{Introduction}). En supposant que les processus de construction
10135sont déterministes, un nom de fichier dans le dépôt devrait correspondre
10136exactement à une sortie de construction. @command{guix challenge} vérifie
10137si il y a bien effectivement une seule correspondance en comparant les
10138sorties de plusieurs constructions indépendantes d'un élément du dépôt
10139donné.
10140
10141La sortie de la commande ressemble à :
10142
10143@smallexample
10144$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10145mise à jour de la liste des substituts depuis 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
10146mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
10147le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
10148 empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10149 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10150 https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
10151le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
10152 empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
10153 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
10154 https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
10155le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
10156 empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10157 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10158 https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
10159
10160@dots{}
10161
101626,406 éléments du dépôt ont été analysés :
10163 - 4,749 (74.1%) étaient identiques
10164 - 525 (8.2%) étaient différents
10165 - 1,132 (17.7%) étaient impossibles à évaluer
10166@end smallexample
10167
10168@noindent
10169Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
10170déterminer l'ensemble des dérivations construites localement — en opposition
10171aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
10172demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
10173les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
10174différent de la construction locale.
10175
10176@cindex non-déterminisme, dans les constructions des paquets
10177Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
10178différente. Inversement, @code{@value{SUBSTITUTE-SERVER}} est d'accord avec
10179les constructions locale, sauf dans le cas de Git. Cela peut indiquer que
10180le processus de construction de Git est non-déterministe, ce qui signifie
10181que sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
10182parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
10183sources les plus communes de non-déterminisme comprennent l'ajout
10184d'horodatage dans les résultats des constructions, l'inclusion de nombres
10185aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
10186@uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
10187
10188Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
10189chose comme cela (@pxref{Invoquer guix archive}) :
10190
10191@example
10192$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
10193 | guix archive -x /tmp/git
10194$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
10195@end example
10196
10197Cette commande montre les différences entre les fichiers qui résultent de la
10198construction locale et des fichiers qui résultent de la construction sur
10199@code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging
10200Files,, diffutils, Comparing and Merging Files}). La commande
10201@command{diff} fonctionne bien avec des fichiers texte. Lorsque des
10202fichiers binaires diffèrent cependant, @uref{https://diffoscope.org/,
10203Diffoscope} est une meilleure option. C'est un outil qui aide à visualiser
10204les différences entre toute sorte de fichiers.
10205
10206Une fois que vous avez fait ce travail, vous pourrez dire si les différences
10207sont dues au non-déterminisme du processus de construction ou à la
10208malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
10209les sources de non-déterminisme dans les paquets pour rendre plus facile la
10210vérification des substituts, mais bien sûr, c'est un processus qui
10211n'implique pas que Guix, mais une grande partie de la communauté des
10212logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
10213pour aider à corriger le problème.
10214
10215Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
10216@code{@value{SUBSTITUTE-SERVER}} et d'autres serveurs de substituts
10217obtiennent le même résultat que vous avec :
10218
10219@example
10220$ guix challenge @var{paquet}
10221@end example
10222
10223@noindent
10224où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
10225@code{glibc:debug}.
10226
10227La syntaxe générale est :
10228
10229@example
10230guix challenge @var{options} [@var{paquets}@dots{}]
10231@end example
10232
10233Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
10234localement et celle d'un substitut fournit par un serveur, ou parmi les
10235substituts fournis par différents serveurs, la commande l'affiche comme dans
10236l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
10237différentes de 0 indiquent d'autres sortes d'erreurs).
10238
10239L'option qui compte est :
10240
10241@table @code
10242
10243@item --substitute-urls=@var{urls}
10244Considère @var{urls} comme la liste des URL des sources de substituts
10245séparés par des espaces avec lesquels comparer les paquets locaux.
10246
10247@item --verbose
10248@itemx -v
10249Montre des détails sur les correspondances (contenu identique) en plus des
10250informations sur différences.
10251
10252@end table
10253
10254@node Invoquer guix copy
10255@section Invoquer @command{guix copy}
10256
10257@cindex copier des éléments du dépôt par SSH
10258@cindex SSH, copie d'éléments du dépôt
10259@cindex partager des éléments du dépôt entre plusieurs machines
10260@cindex transférer des éléments du dépôt entre plusieurs machines
10261La commande @command{guix copy} copie des éléments du dépôt d'une machine
10262vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
10263commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
10264pour des détails}. Par exemple, la commande suivante copie le paquet
10265@code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
10266@var{hôte}, en tant qu'utilisateur @var{utilisateur} :
10267
10268@example
10269guix copy --to=@var{utilisateur}@@@var{hôte} \
10270 coreutils `readlink -f ~/.guix-profile`
10271@end example
10272
10273Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
10274pas envoyés.
10275
10276La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
10277@var{hôte}, en supposant qu'ils y sont présents :
10278
10279@example
10280guix copy --from=@var{hôte} libreoffice gimp
10281@end example
10282
10283La connexion SSH est établie avec le client Guile-SSH, qui set compatible
10284avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
10285et utilise l'agent SSH pour l'authentification.
10286
10287La clef utilisée pour signer les éléments qui sont envoyés doit être
10288acceptée par la machine distante. De même, la clef utilisée pour la machine
10289distante depuis laquelle vous récupérez des éléments doit être dans
10290@file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
10291@xref{Invoquer guix archive}, pour plus d'informations sur
10292l'authentification des éléments du dépôt.
10293
10294La syntaxe générale est :
10295
10296@example
10297guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
10298@end example
10299
10300Vous devez toujours spécifier l'une des options suivantes :
10301
10302@table @code
10303@item --to=@var{spec}
10304@itemx --from=@var{spec}
10305Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
10306être une spécification SSH comme @code{example.org},
10307@code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
10308@end table
10309
10310L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
10311éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
10312
10313Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
10314construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
10315options de construction communes sont supportées (@pxref{Options de construction communes}).
10316
10317
10318@node Invoquer guix container
10319@section Invoquer @command{guix container}
10320@cindex conteneur
10321@cindex @command{guix container}
10322@quotation Remarque
10323À la version @value{VERSION}, cet outil est toujours expérimental.
10324L'interface est sujette à changement radicaux dans le futur.
10325@end quotation
10326
10327Le but de @command{guix container} est de manipuler des processus qui
10328tournent dans un environnement séparé, connus sous le nom de « conteneur »,
10329typiquement créés par les commandes @command{guix environment}
10330(@pxref{Invoquer guix environment}) et @command{guix system container}
10331(@pxref{Invoquer guix system}).
10332
10333La syntaxe générale est :
10334
10335@example
10336guix container @var{action} @var{options}@dots{}
10337@end example
10338
10339@var{action} spécifie les opérations à effectuer avec un conteneur, et
10340@var{options} spécifie les arguments spécifiques au contexte pour l'action.
10341
10342Les actions suivantes sont disponibles :
10343
10344@table @code
10345@item exec
10346Exécute une commande dans le contexte d'un conteneur lancé.
10347
10348La syntaxe est :
10349
10350@example
10351guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
10352@end example
10353
10354@var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
10355nom du fichier exécutable dans le système de fichiers racine du conteneur.
10356@var{arguments} sont les options supplémentaires à passer à @var{programme}.
10357
10358La commande suivante lance un shell de connexion interactif dans un
10359conteneur Guix System, démarré par @command{guix system container} et dont
10360le PID est 9001 :
10361
10362@example
10363guix container exec 9001 /run/current-system/profile/bin/bash --login
10364@end example
10365
10366Remarquez que @var{pid} ne peut pas être le processus parent d'un
10367conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
10368fils.
10369
10370@end table
10371
10372@node Invoquer guix weather
10373@section Invoquer @command{guix weather}
10374
10375Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
10376et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
10377commande @command{guix weather} rapporte la disponibilité des substituts sur
10378les serveurs spécifiés pour que vous sachiez si vous allez raller
10379aujourd'hui. Cela peut parfois être une information utile pour les
10380utilisateurs, mais elle est surtout utile pour les personnes qui font
10381tourner @command{guix publish} (@pxref{Invoquer guix publish}).
10382
10383@cindex statistiques sur les substituts
10384@cindex disponibilité des substituts
10385@cindex substituts, disponibilité
10386@cindex weather, disponibilité des substituts
10387Voici un exemple :
10388
10389@example
10390$ guix weather --substitute-urls=https://guix.example.org
10391calcul de 5,872 dérivations de paquets pour x86_64-linux…
10392recherche de 6,128 éléments du dépôt sur https://guix.example.org…
10393mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
10394https://guix.example.org
10395 43.4% substituts disponibles (2,658 sur 6,128)
10396 7,032.5 Mo de fichiers nar (compressés)
10397 19,824.2 Mo sur le disque (décompressés)
10398 0.030 secondes par requêtes (182.9 secondes au total)
10399 33.5 requêtes par seconde
10400
10401 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
10402 867 constructions dans la queue
10403 x86_64-linux : 518 (59.7%)
10404 i686-linux : 221 (25.5%)
10405 aarch64-linux : 128 (14.8%)
10406 vitesse de construction : 23.41 constructions par heure
10407 x86_64-linux : 11.16 constructions par heure
10408 i686-linux : 6.03 constructions par heure
10409 aarch64-linux : 6.41 constructions par heure
10410@end example
10411
10412@cindex intégration continue, statistiques
10413Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
10414lesquels des substituts sont disponibles sur le serveur — indépendamment du
10415fait que les substituts soient activés, et indépendamment du fait que la
10416clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
10417des archives compressées (« nars ») fournies par le serveur, la taille des
10418éléments du dépôt correspondant dans le dépôt (en supposant que la
10419déduplication soit désactivée) et la vitesse du serveur. La deuxième partie
10420donne des statistiques sur l'intégration continue (CI), si le serveur le
10421supporte. En plus, avec l'option @option{--coverage}, @command{guix
10422weather} peut lister les substituts de paquets « importants » qui font
10423défaut sur le serveur (voir plus bas).
10424
10425Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
10426(@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
10427@command{guix challenge}, il ignore les signatures de ces substituts, ce qui
10428n'est pas dangereux puisque la commande ne fait que récupérer des
10429statistiques et n'installe pas ces substituts.
10430
10431Entre autres choses, il est possible de demander des types de système
10432particuliers et des ensembles de paquets particuliers. Les options
10433disponibles sont listées plus bas.
10434
10435@table @code
10436@item --substitute-urls=@var{urls}
10437@var{urls} est la liste des URL des serveurs de substituts séparés par des
10438espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
10439de substituts par défaut est utilisé.
10440
10441@item --system=@var{système}
10442@itemx -s @var{système}
10443Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
10444@code{aarch64-linux}. Cette option peut être répétée, auquel cas
10445@command{guix weather} demandera les substituts de plusieurs types de
10446systèmes.
10447
10448@item --manifest=@var{fichier}
10449Plutôt que de demander des substituts pour tous les paquets, demande
10450uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
10451contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
10452package} (@pxref{Invoquer guix package}).
10453
10454@item --coverage[=@var{count}]
10455@itemx -c [@var{count}]
10456Rapporte la couverture des substituts pour les paquets : liste les paquets
10457avec au moins @var{count} autres paquets qui en dépendent (zéro par défaut)
10458pour lesquels il n'y a pas de substitut. Les paquets qui en dépendent ne
10459sont pas listés : si @var{b} dépend de @var{a} et que @var{a} n'a pas de
10460substitut, seul @var{a} est listé, même si @var{b} n'a habituellement pas de
10461substitut non plus. Le résultat ressemble à cela :
10462
10463@example
10464$ guix weather --substitute-urls=https://ci.guix.fr.info -c 10
10465calcul de 8 983 dérivations de paquets pour x86_64-linux…
10466recherche de 9 343 éléments du dépôt sur https://ci.guix.fr.info…
10467mise à jour des substituts depuis « https://ci.guix.fr.info »… 100,0 %
10468https://ci.guix.fr.info
10469 64.7 % des substituts sont disponibles (6,047 sur 9,343)
10470@dots{}
104712502 paquets ne sont pas sur « https://ci.guix.fr.info » pour « x86_64-linux », parmi lesquels :
10472 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
10473 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
10474 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
10475 @dots{}
10476@end example
10477
10478Ce que montre cet exemple est que @code{kcoreaddons} et probablement les 58
10479paquets qui en dépendent n'ont pas de substituts sur @code{ci.guix.fr.info} ;
10480de même pour @code{qgpgme} et les 46 paquets qui en dépendent.
10481
10482Si vous êtes un développeur de Guix, ou si vous prenez soin de cette ferme
10483de construction, vous voudrez sans doute inspecter plus finement ces paquets
10484: ils peuvent simplement avoir échoué à la construction.
10485@end table
10486
10487@node Invoquer guix processes
10488@section Invoquer @command{guix processes}
10489
10490La commande @command{guix processes} peut être utile pour les développeurs
10491et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
10492et sur les fermes de construction : elle liste les sessions actuelles (les
10493connexions au démon), ainsi que des informations sur les processus en
10494question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
10495démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
10496@emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
10497
10498@example
10499$ sudo guix processes
10500SessionPID: 19002
10501ClientPID: 19090
10502ClientCommand: guix environment --ad-hoc python
10503
10504SessionPID: 19402
10505ClientPID: 19367
10506ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
10507
10508SessionPID: 19444
10509ClientPID: 19419
10510ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10511LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
10512LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
10513LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
10514ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
10515ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
10516ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
10517@end example
10518
10519Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
10520: @command{guix environment}, @command{guix publish} et l'outil
10521d'intégration continue Cuirass ; leur identifiant de processus (PID) est
10522donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
10523PID du sous-processus @command{guix-daemon} de cette session particulière.
10524
10525Les champs @code{LockHeld} montrent quels éléments du dépôt sont
10526actuellement verrouillés par cette session, ce qui correspond aux éléments
10527du dépôt qui sont en train d'être construits ou d'être substitués (le champ
10528@code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
10529en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
10530ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
10531
10532La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
10533@command{recsel} pour sélectionner les sessions qui nous intéressent
10534(@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
10535exemple, la commande montre la ligne de commande et le PID du client qui
10536effectue la construction d'un paquet Perl :
10537
10538@example
10539$ sudo guix processes | \
10540 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
10541ClientPID: 19419
10542ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10543@end example
10544
10545
10546@node Configuration système
10547@chapter Configuration système
10548
10549@cindex configuration du système
10550La distribution système Guix utilise un mécanisme de configuration du
10551système cohérent. On veut dire par là que tous les aspects de la
10552configuration globale du système — comme la disponibilité des services
10553système, des fuseaux horaires, des paramètres linguistiques, des comptes
10554utilisateurs — sont déclarés à un seul endroit. Une telle
10555@dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
10556en vigueur.
10557
10558@c Yes, we're talking of Puppet, Chef, & co. here. ↑
10559L'un des avantages de placer toute la configuration du système sous le
10560contrôle de Guix est de permettre les mises à jour transactionnelles du
10561système ce qui rend possible le fait de revenir en arrière à une
10562instanciation précédent du système, si quelque chose se passait mal avec le
10563nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
10564réplication de la même configuration sur plusieurs machines différentes ou à
10565différents moments dans le temps, sans avoir à recourir à des outils
10566d'administrations supplémentaires au-dessus des outils du système.
10567
10568Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
10569le point de vue de l'administrateur système en expliquant comment le système
10570est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
10571être étendu, par exemple pour supporter de nouveaux services systèmes.
10572
10573@menu
10574* Utiliser le système de configuration:: Personnaliser votre système
10575 GNU@.
10576* Référence de système d'exploitation:: Détail sur la déclaration de
10577 système d'exploitation.
10578* Systèmes de fichiers:: Configurer les montages de systèmes de
10579 fichiers.
10580* Périphériques mappés:: Gestion des périphériques de bloc.
10581* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
10582* Disposition du clavier:: La manière dont le système interprète les
10583 touches du clavier.
10584* Régionalisation:: Paramétrer la langue et les conventions
10585 culturelles.
10586* Services:: Spécifier les services du système.
10587* Programmes setuid:: Programmes tournant avec les privilèges root.
10588* Certificats X.509:: Authentifier les serveurs HTTPS@.
10589* Name Service Switch:: Configurer le « name service switch » de la
10590 libc.
10591* Disque de RAM initial:: Démarrage de Linux-Libre.
10592* Configuration du chargeur d'amorçage:: Configurer le chargeur
10593 d'amorçage.
10594* Invoquer guix system:: Instantier une configuration du système.
10595* Lancer Guix dans une VM:: Comment lancer Guix dans une machine virtuelle.
10596* Définir des services:: Ajouter de nouvelles définitions de services.
10597@end menu
10598
10599@node Utiliser le système de configuration
10600@section Utiliser le système de configuration
10601
10602Le système d'exploitation est configuré en fournissant une déclaration
10603@code{operating-system} dans un fichier qui peut être passé à la command
10604@command{guix system} (@pxref{Invoquer guix system}). Une configuration
10605simple, avec les services systèmes par défaut, le noyau Linux-Libre par
10606défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
10607:
10608
10609@findex operating-system
10610@lisp
10611@include os-config-bare-bones.texi
10612@end lisp
10613
10614Cet exemple devrait se comprendre de lui-même. Certains champs définis
10615ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
10616D'autres comme @code{packages} et @code{services} peuvent être omis auquel
10617cas ils ont une valeur par défaut.
10618
10619Ci-dessous nous discutons des effets de certains des champs les plus
10620importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
10621les champs disponibles) et comment @dfn{instancier} le système
10622d'exploitation avec @command{guix system}.
10623
10624@unnumberedsubsec Bootloader
10625
10626@cindex ancien système de démarrage, sur les machines Intel
10627@cindex démarrage BIOS, sur les machines Intel
10628@cindex démarrage UEFI
10629@cindex démarrage EFI
10630Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
10631votre système. Les machines basées sur les processeurs Intel peuvent
10632démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
10633Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
10634Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
10635@code{bootloader} devrait contenir quelque chose comme cela :
10636
10637@example
10638(bootloader-configuration
10639 (bootloader grub-efi-bootloader)
10640 (target "/boot/efi"))
10641@end example
10642
10643@xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
10644configuration disponibles.
10645
10646@unnumberedsubsec Paquets visibles sur tout le système
10647
10648@vindex %base-packages
10649Le champ @code{packages} liste les paquets qui seront visibles sur tout le
10650système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
10651d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
10652utilisateurs (@pxref{Invoquer guix package}). La variable
10653@var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
10654les taches de base de l'administrateur et de l'utilisateur — dont les GNU
10655Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
10656Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
10657GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
10658screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
10659@code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
10660
10661@lisp
10662(use-modules (gnu packages))
10663(use-modules (gnu packages dns))
10664
10665(operating-system
10666 ;; ...
10667 (packages (cons (list bind "utils")
10668 %base-packages)))
10669@end lisp
10670
10671@findex specification->package
10672Se référer aux paquets par le nom de leur variable, comme @code{bind}
10673ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
10674rendre rapidement compte de coquilles quand on a des « variables non liées
10675». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
10676le paquet, et de modifier la ligne @code{use-package-modules} en
10677conséquence. Pour éviter cela, on peut utiliser la procédure
10678@code{specification->package} du module @code{(gnu packages)}, qui renvoie
10679le meilleur paquet pour un nom donné ou un nom et une version :
10680
10681@lisp
10682(use-modules (gnu packages))
10683
10684(operating-system
10685 ;; ...
10686 (packages (append (map specification->package
10687 '("tcpdump" "htop" "gnupg@@2.0"))
10688 %base-packages)))
10689@end lisp
10690
10691@unnumberedsubsec Services systèmes
10692
10693@cindex services
10694@vindex %base-services
10695Le champ @code{services} liste les @dfn{services système} à rendre
10696disponible lorsque le système démarre (@pxref{Services}). La déclaration
10697@code{operating-system} au-dessus spécifie que, en plus des services de
10698base, on veut que le démon ssh OpenSSH écoute sur le port 2222
10699(@pxref{Services réseau, @code{openssh-service-type}}). Sous le capot,
10700@code{openssh-service-type} s'arrange pour que @code{sshd} soit lancé avec
10701les bonnes options de la ligne de commande, éventuellement en générant des
10702fichiers de configuration (@pxref{Définir des services}).
10703
10704@cindex personnalisation des services
10705@findex modify-services
10706Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
10707vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
10708(@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
10709
10710Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
10711Mingetty (l'écran de connexion en console) dans la liste
10712@var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
10713cela, vous pouvez écrire ce qui suit dans votre déclaration de système
10714d'exploitation :
10715
10716@lisp
10717(define %my-services
10718 ;; Ma propre liste de services.
10719 (modify-services %base-services
10720 (guix-service-type config =>
10721 (guix-configuration
10722 (inherit config)
10723 (use-substitutes? #f)
10724 (extra-options '("--gc-keep-derivations"))))
10725 (mingetty-service-type config =>
10726 (mingetty-configuration
10727 (inherit config)))))
10728(operating-system
10729 ;; @dots{}
10730 (services %my-services))
10731@end lisp
10732
10733Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
10734l'instance de @code{guix-service-type}, et de toutes les instances de
10735@code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
10736comment on fait cela : d'abord, on s'arrange pour que la configuration de
10737départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
10738@var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
10739remarquez comment on utilise @code{inherit} pour créer une nouvelle
10740configuration qui a les même valeurs que l'ancienne configuration, avec
10741seulement quelques modifications.
10742
10743@cindex chiffrement du disque
10744La configuration pour une utilisation de « bureau » typique, avec une
10745partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
10746utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
10747connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
10748l'énergie, et bien plus, ressemblerait à ceci :
10749
10750@lisp
10751@include os-config-desktop.texi
10752@end lisp
10753
10754Un système graphique avec un choix de gestionnaires de fenêtres légers
10755plutôt que des environnement de bureaux complets ressemblerait à cela :
10756
10757@lisp
10758@include os-config-lightweight-desktop.texi
10759@end lisp
10760
10761Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
10762@code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
10763renvoyé par la commande @command{blkid}.
10764
10765@xref{Services de bureaux}, pour la liste exacte des services fournis par
10766@var{%desktop-services}. @xref{Certificats X.509}, pour des informations
10767sur le paquet @code{nss-certs} utilisé ici.
10768
10769Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
10770service. Si vous voulez en supprimer des services, vous pouvez le faire
10771avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
10772Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
10773l'expression suivante renvoie une liste qui contient tous les services dans
10774@var{%desktop-services} sauf le service Avahi :
10775
10776@example
10777(remove (lambda (service)
10778 (eq? (service-kind service) avahi-service-type))
10779 %desktop-services)
10780@end example
10781
10782@unnumberedsubsec Instancier le système
10783
10784En supposant que la déclaration @code{operating-system} est stockée dans le
10785fichier @file{my-system-config.scm}, la commande @command{guix system
10786reconfigure my-system-config.scm} instancie cette configuration et en fait
10787l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
10788
10789Pour changer la configuration du système, on met normalement à jour ce
10790fichier et on relance @command{guix system reconfigure}. On ne devrait
10791jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
10792commandes qui modifient l'état du système comme @command{useradd} ou
10793@command{grub-install}. En fait, vous devez les éviter parce que non
10794seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
10795à des versions précédents du système, si vous en avez besoin.
10796
10797@cindex revenir en arrière dans la configuration du système
10798En parlant de revenir en arrière, à chaque fois que vous lancez
10799@command{guix system reconfigure}, une nouvelle @dfn{génération} du système
10800est crée — sans modifier ou supprimer les générations précédentes. Les
10801anciennes générations du système ont une entrée dans le menu du chargeur
10802d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
10803serait mal passé avec la dernière génération. C'est rassurant, non ? La
10804commande @command{guix system list-generations} liste les générations du
10805système disponibles sur le disque. Il est possible de revenir à une
10806ancienne génération via les commandes @command{guix system roll-back} et
10807@command{guix system switch-generation}.
10808
10809Bien que la commande @command{guix system reconfigure} ne modifiera pas les
10810générations précédentes, vous devez faire attention lorsque votre génération
10811actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
10812system roll-back}), puisque l'opération pourrait remplacer une génération
10813suivante (@pxref{Invoquer guix system}).
10814
10815@unnumberedsubsec L'interface de programmation
10816
10817Au niveau Scheme, la grosse déclaration @code{operating-system} est
10818instanciée avec la procédure monadique suivante (@pxref{La monade du dépôt}) :
10819
10820@deffn {Procédure monadique} operating-system-derivation os
10821Renvoie une dérivation qui construit @var{os}, un objet
10822@code{operating-system} (@pxref{Dérivations}).
10823
10824La sortie de la dérivation est un répertoire qui se réfère à tous les
10825paquets et d'autres fichiers supports requis pour instancier @var{os}.
10826@end deffn
10827
10828Cette procédure est fournie par le module @code{(gnu system)}. Avec
10829@code{(gnu services)} (@pxref{Services}), ce module contient les entrailles
10830du système Guix. Ouvrez-le un jour !
10831
10832
10833@node Référence de système d'exploitation
10834@section Référence de @code{operating-system}
10835
10836Cette section résume toutes les options disponibles dans les déclarations
10837@code{operating-system} (@pxref{Utiliser le système de configuration}).
10838
10839@deftp {Type de données} operating-system
10840C'est le type de données représentant une configuration d'un système
10841d'exploitation. On veut dire par là toute la configuration globale du
10842système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
10843
10844@table @asis
10845@item @code{kernel} (par défaut : @var{linux-libre})
10846L'objet paquet d'un noyau de système d'exploitation à
10847utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
10848le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
10849
10850@item @code{kernel-arguments} (par défaut : @code{'()})
10851Liste de chaînes ou de gexps représentant des arguments supplémentaires à
10852passer sur la ligne de commande du noyau — p.@: ex.@:
10853@code{("console=ttyS0")}.
10854
10855@item @code{bootloader}
10856L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
10857
10858@item @code{label}
10859This is the label (a string) as it appears in the bootloader's menu entry.
10860The default label includes the kernel name and version.
10861
10862@item @code{keyboard-layout} (par défaut : @code{#f})
10863Ce champ spécifie la disposition du clavier à utiliser dans la console. Il
10864peut être soit @code{#f}, auquel cas la disposition par défaut est utilisée
10865(habituellement anglais américain), ou un enregistrement
10866@code{<keyboard-layout>}.
10867
10868Cette disposition du clavier est effective dès que le noyau démarre. Par
10869exemple, c'est la disposition du clavier effective lorsque vous saisissez la
10870phrase de passe de votre système de fichier racine sur une partition
10871utilisant @code{luks-device-mapping} (@pxref{Périphériques mappés}).
10872
10873@quotation Remarque
10874Cela ne spécifie @emph{pas} la disposition clavier utilisée par le chargeur
10875d'amorçage, ni celle utilisée par le serveur d'affichage graphique.
10876@xref{Configuration du chargeur d'amorçage}, pour plus d'information sur la manière de
10877spécifier la disposition du clavier pour le chargeur d'amorçage. @xref{Système de fenêtrage X}, pour plus d'informations sur la manière de spécifier la disposition
10878du clavier utilisée par le système de fenêtrage X.
10879@end quotation
10880
10881@item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
10882@cindex initrd
10883@cindex disque de RAM initial
10884La liste des modules du noyau linux requis dans l'image disque de RAM
10885initiale. @xref{Disque de RAM initial}.
10886
10887@item @code{initrd} (par défaut : @code{base-initrd})
10888Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
10889champ est fournit pour pouvoir personnaliser son système à bas-niveau et
10890n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
10891
10892@item @code{firmware} (par défaut : @var{%base-firmware})
10893@cindex firmware
10894Liste les paquets de microgiciels chargeables pour le noyau de système
10895d'exploitation.
10896
10897La valeur par défaut contient les microgiciels requis pour les périphériques
10898WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
10899Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
10900d'info sur les périphériques supportés.
10901
10902@item @code{host-name}
10903Le nom d'hôte.
10904
10905@item @code{hosts-file}
10906@cindex fichier hosts
10907Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
10908utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
10909Library Reference Manual}). La valeur par défaut est un fichier avec des
10910entrées pour @code{localhost} et @var{host-name}.
10911
10912@item @code{mapped-devices} (par défaut : @code{'()})
10913Une liste de périphériques mappés. @xref{Périphériques mappés}.
10914
10915@item @code{file-systems}
10916Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
10917
10918@item @code{swap-devices} (par défaut : @code{'()})
10919@cindex espaces d'échange
10920Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
10921pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
10922Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
10923@code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
10924sur un périphérique mappé, tant que le périphérique nécessaire et le système
10925de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
10926
10927@item @code{users} (par défaut : @code{%base-user-accounts})
10928@itemx @code{groups} (par défaut : @var{%base-groups})
10929Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
10930
10931Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
10932root » avec l'UID@tie{}0 est automatiquement ajouté.
10933
10934@item @code{skeletons} (par défaut : @code{(default-skeletons)})
10935Une liste de couples composés d'un nom de fichier cible et d'un objet
10936simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
10937fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
10938utilisateurs nouvellement créés.
10939
10940Par exemple, un valeur valide ressemblerait à cela :
10941
10942@example
10943`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
10944 (".guile" ,(plain-file "guile"
10945 "(use-modules (ice-9 readline))
10946 (activate-readline)")))
10947@end example
10948
10949@item @code{issue} (par défaut : @var{%default-issue})
10950Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
10951affiché lorsqu'un utilisateur se connecte sur la console.
10952
10953@item @code{packages} (par défaut : @var{%base-packages})
10954L'ensemble des paquets installés dans le profil global, qui est accessible à
10955partir de @file{/run/current-system/profile}.
10956
10957L'ensemble par défaut contient les utilitaires de base et c'est une bonne
10958pratique d'installer les utilitaires non essentiels dans les profils
10959utilisateurs (@pxref{Invoquer guix package}).
10960
10961@item @code{timezone}
10962Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
10963
10964Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
10965horaire correspondant à votre région. Si vous choisissez un nom de fuseau
10966horaire invalide, @command{guix system} échouera.
10967
10968@item @code{locale} (par défaut : @code{"en_US.utf8"})
10969Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
10970GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
10971
10972@item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
10973La liste des définitions de locales à compiler et qui devraient être
10974utilisées à l'exécution. @xref{Régionalisation}.
10975
10976@item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
10977La liste des paquets GNU@tie{}libc dont les données des paramètres
10978linguistiques sont utilisées pour construire les définitions des paramètres
10979linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
10980qui justifient cette option.
10981
10982@item @code{name-service-switch} (par défaut : @var{%default-nss})
10983La configuration de NSS de la libc (name service switch) — un objet
10984@code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
10985
10986@item @code{services} (par défaut : @var{%base-services})
10987Une liste d'objets services qui dénotent les services du système.
10988@xref{Services}.
10989
10990@cindex services essentiels
10991@item @code{essential-services} (par défaut : …)
10992La liste des « services essentiels » — c.-à-d.@: les services comme des
10993instance de @code{system-service-type} et @code{host-name-service-type}
10994(@pxref{Référence de service}), qui sont dérivés de la définition du système
10995d'exploitation lui-même. En tant qu'utilisateur vous ne devriez
10996@emph{jamais} toucher à ce champ.
10997
10998@item @code{pam-services} (par défaut : @code{(base-pam-services)})
10999@cindex PAM
11000@cindex pluggable authentication modules
11001@c FIXME: Add xref to PAM services section.
11002Services PAM (@dfn{pluggable authentication module}) Linux.
11003
11004@item @code{setuid-programs} (par défaut : @var{%setuid-programs})
11005Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
11006les programmes setuid. @xref{Programmes setuid}.
11007
11008@item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
11009@cindex fichier sudoers
11010Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
11011(@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
11012
11013Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
11014@command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
11015peuvent gagner. La valeur par défaut est que seul @code{root} et les
11016membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
11017
11018@end table
11019
11020@deffn {Scheme Syntax} this-operating-system
11021When used in the @emph{lexical scope} of an operating system field
11022definition, this identifier resolves to the operating system being defined.
11023
11024The example below shows how to refer to the operating system being defined
11025in the definition of the @code{label} field:
11026
11027@example
11028(use-modules (gnu) (guix))
11029
11030(operating-system
11031 ;; ...
11032 (label (package-full-name
11033 (operating-system-kernel this-operating-system))))
11034@end example
11035
11036It is an error to refer to @code{this-operating-system} outside an operating
11037system definition.
11038@end deffn
11039
11040@end deftp
11041
11042@node Systèmes de fichiers
11043@section Systèmes de fichiers
11044
11045La liste des systèmes de fichiers à monter est spécifiée dans le champ
11046@code{file-systems} de la déclaration de système d'exploitation
11047(@pxref{Utiliser le système de configuration}). Chaque système de fichier est
11048déclaré avec la forme @code{file-system}, comme ceci :
11049
11050@example
11051(file-system
11052 (mount-point "/home")
11053 (device "/dev/sda3")
11054 (type "ext4"))
11055@end example
11056
11057Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
11058l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
11059décrits plus bas.
11060
11061@deftp {Type de données} file-system
11062Les objets de ce type représentent des systèmes de fichiers à monter. Ils
11063contiennent les membres suivants :
11064
11065@table @asis
11066@item @code{type}
11067C'est une chaîne de caractères spécifiant le type du système de fichier —
11068p.@: ex.@: @code{"ext4"}.
11069
11070@item @code{mount-point}
11071Désigne l'emplacement où le système de fichier sera monté.
11072
11073@item @code{device}
11074Ce champ nomme le système de fichier « source ». il peut être l'une de ces
11075trois choses : une étiquette de système de fichiers, un UUID de système de
11076fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
11077offrent une manière de se référer à des systèmes de fichiers sans avoir à
11078coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
11079d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
11080obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
11081périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
11082disponibles au moment de monter le périphérique.}.
11083
11084@findex file-system-label
11085Les étiquettes de systèmes de fichiers sont crées avec la procédure
11086@code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
11087@file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
11088système de fichiers référencé par son étiquette, donnée par la commande
11089@command{e2label} :
11090
11091@example
11092(file-system
11093 (mount-point "/home")
11094 (type "ext4")
11095 (device (file-system-label "my-home")))
11096@end example
11097
11098@findex uuid
11099Les UUID sont convertis à partir de leur représentation en chaîne de
11100caractères (montrée par la command @command{tune2fs -l}) en utilisant la
11101forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
11102octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
11103RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
11104systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
11105que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
11106comme ceci :
11107
11108@example
11109(file-system
11110 (mount-point "/home")
11111 (type "ext4")
11112 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
11113@end example
11114
11115Lorsque la source d'un système de fichiers est un périphérique mappé
11116(@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
11117nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
11118Cela est requis pour que le système sache que monter ce système de fichier
11119dépend de la présence du périphérique mappé correspondant.
11120
11121@item @code{flags} (par défaut : @code{'()})
11122C'est une liste de symboles qui dénotent des drapeaux de montage. Les
11123drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
11124(interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
11125setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
11126
11127@item @code{options} (par défaut : @code{#f})
11128C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
11129montage.
11130
11131@item @code{mount?} (par défaut : @code{#t})
11132Cette valeur indique s'il faut monter automatiquement le système de fichier
11133au démarrage du système. Lorsque la valeur est @code{#f}, le système de
11134fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
11135@command{mount}) mais n'est pas monté automatiquement.
11136
11137@item @code{needed-for-boot?} (par défaut : @code{#f})
11138Cette valeur booléenne indique si le système de fichier est nécessaire au
11139démarrage. Si c'est vrai alors le système de fichier est monté au
11140chargement du disque de RAM initial. C'est toujours le cas par exemple du
11141système de fichiers racine.
11142
11143@item @code{check?} (par défaut : @code{#t})
11144Cette valeur booléenne indique si le système de fichier doit être vérifié
11145avant de le monter.
11146
11147@item @code{create-mount-point?} (par défaut : @code{#f})
11148Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
11149pas déjà.
11150
11151@item @code{dependencies} (par défaut : @code{'()})
11152C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
11153représentent les systèmes de fichiers qui doivent être montés ou les
11154périphériques mappés qui doivent être ouverts avant (et monté ou fermés
11155après) celui-ci.
11156
11157Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
11158est une dépendance de @file{/sys/fs/cgroup/cpu} et
11159@file{/sys/fs/cgroup/memory}.
11160
11161Un autre exemple est un système de fichier qui dépend d'un périphérique
11162mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
11163@end table
11164@end deftp
11165
11166Le module @code{(gnu system file-systems)} exporte les variables utiles
11167suivantes.
11168
11169@defvr {Variable Scheme} %base-file-systems
11170Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
11171normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
11172(voir plus bas). Les déclarations de systèmes d'exploitation devraient au
11173moins les contenir.
11174@end defvr
11175
11176@defvr {Variable Scheme} %pseudo-terminal-file-system
11177C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
11178@dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
11179(@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
11180pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
11181@command{xterm}.
11182@end defvr
11183
11184@defvr {Variable Scheme} %shared-memory-file-system
11185Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
11186partage de mémoire entre processus (@pxref{Memory-mapped I/O,
11187@code{shm_open},, libc, The GNU C Library Reference Manual}).
11188@end defvr
11189
11190@defvr {Variable Scheme} %immutable-store
11191Ce système de fichiers effectue un « montage lié » en lecture-seule de
11192@file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
11193les utilisateurs dont @code{root}. Cela évite que des logiciels qui
11194tournent en @code{root} ou des administrateurs systèmes ne modifient
11195accidentellement le dépôt.
11196
11197Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
11198remonté en lecture-écriture dans son propre « espace de nom ».
11199@end defvr
11200
11201@defvr {Variable Scheme} %binary-format-file-system
11202Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
11203quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
11204demande que le module du noyau @code{binfmt.ko} soit chargé.
11205@end defvr
11206
11207@defvr {Variable Scheme} %fuse-control-file-system
11208Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
11209privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
11210utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
11211chargé.
11212@end defvr
11213
11214@node Périphériques mappés
11215@section Périphériques mappés
11216
11217@cindex mappage de périphériques
11218@cindex périphériques mappés
11219Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
11220périphérique bloc, comme une partition sur un disque dur, peut être
11221@dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
11222avec des calculs supplémentaires sur les données qui naviguent entre les
11223deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
11224concept de « périphérique mappé » et celle d'un système de fichiers : les
11225deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
11226faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
11227Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
11228avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
11229hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
11230de périphériques chiffrés : toutes les écritures sont sur le périphérique
11231mappé sont chiffrées, toutes les lectures déchiffrées, de manière
11232transparente. Guix étend cette notion en considérant que tout périphérique
11233ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
11234manière créent un nouveau périphérique ; par exemple, les périphériques RAID
11235sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
11236disque ou des partitions, en un nouveau périphérique en tant qu'unique
11237partition. Un autre exemple, qui n'est pas encore disponible, sont les
11238volumes logiques LVM.
11239
11240Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
11241définie comme suit ; par exemple, voir ci-dessous.
11242
11243@deftp {Type de données} mapped-device
11244Les objets de ce type représentent des mappages de périphériques qui seront
11245effectués au démarrage du système.
11246
11247@table @code
11248@item source
11249C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
11250comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
11251assembler pour en créer un nouveau.
11252
11253@item target
11254Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
11255mappeurs noyaux comme les périphériques chiffrés de type
11256@code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
11257périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
11258de type @code{raid-device-mapping}, il faut donner le nom complet comme
11259@code{"/dev/md0"}.
11260
11261@item type
11262Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
11263@var{source} est mappés sur @var{target}.
11264@end table
11265@end deftp
11266
11267@defvr {Variable Scheme} luks-device-mapping
11268Cela définie les périphériques blocs chiffrés en LUKS avec
11269@command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
11270noyau Linux @code{dm-crypt}.
11271@end defvr
11272
11273@defvr {Variable Scheme} raid-device-mapping
11274Cela définie un périphérique RAID qui est assemblé avec la commande
11275@code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
11276approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
11277RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
11278@end defvr
11279
11280@cindex chiffrement du disque
11281@cindex LUKS
11282L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
11283@file{/dev/mapper/home} avec LUKS —
11284@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
11285mécanisme standard pour chiffrer les disques. Le périphérique
11286@file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
11287déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
11288
11289@example
11290(mapped-device
11291 (source "/dev/sda3")
11292 (target "home")
11293 (type luks-device-mapping))
11294@end example
11295
11296Autrement, pour devenir indépendant du numéro de périphérique, on peut
11297obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
11298une commande comme :
11299
11300@example
11301cryptsetup luksUUID /dev/sda3
11302@end example
11303
11304et l'utiliser ainsi :
11305
11306@example
11307(mapped-device
11308 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
11309 (target "home")
11310 (type luks-device-mapping))
11311@end example
11312
11313@cindex chiffrement de l'espace d'échange
11314Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
11315d'échange peut contenir des données sensibles. Une manière de faire cela
11316est d'utiliser un fichier d'échange dans un système de fichiers sur un
11317périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
11318d'échange est chiffré parce que tout le périphérique est chiffré.
11319@xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
11320
11321Un périphérique RAID formé des partitions @file{/dev/sda1} et
11322@file{/dev/sdb1} peut être déclaré ainsi :
11323
11324@example
11325(mapped-device
11326 (source (list "/dev/sda1" "/dev/sdb1"))
11327 (target "/dev/md0")
11328 (type raid-device-mapping))
11329@end example
11330
11331Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
11332@code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
11333Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
11334pendant la création initiale du périphérique RAID et est ensuite déterminé
11335automatiquement.
11336
11337
11338@node Comptes utilisateurs
11339@section Comptes utilisateurs
11340
11341@cindex utilisateurs
11342@cindex comptes
11343@cindex comptes utilisateurs
11344Les comptes utilisateurs et les groupes sont gérés entièrement par la
11345déclaration @code{operating-system}. Ils sont spécifiés avec les formes
11346@code{user-account} et @code{user-group} :
11347
11348@example
11349(user-account
11350 (name "alice")
11351 (group "users")
11352 (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
11353 "audio" ;carte son
11354 "video" ;périphériques réseaux comme les webcams
11355 "cdrom")) ;le bon vieux CD-ROM
11356 (comment "Bob's sister")
11357 (home-directory "/home/alice"))
11358@end example
11359
11360Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
11361système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
11362dans la déclaration @code{operating-system} existent, et avec les propriétés
11363spécifiées. Ainsi, les modifications ou les créations de comptes ou de
11364groupes effectuées directement en invoquant des commandes comme
11365@command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
11366permet de s'assurer que le système reste exactement tel que déclaré.
11367
11368@deftp {Type de données} user-account
11369Les objets de se type représentent les comptes utilisateurs. Les membres
11370suivants peuvent être spécifiés :
11371
11372@table @asis
11373@item @code{name}
11374Le nom du compte utilisateur.
11375
11376@item @code{group}
11377@cindex groupes
11378C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
11379utilisateur auquel ce compte appartient.
11380
11381@item @code{supplementary-groups} (par défaut : @code{'()})
11382Éventuellement, cela peut être définie comme une liste de noms de groupes
11383auxquels ce compte appartient.
11384
11385@item @code{uid} (par défaut : @code{#f})
11386C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
11387dernier cas, le nombre est choisi automatiquement par le système à la
11388création du compte.
11389
11390@item @code{comment} (par défaut : @code{""})
11391Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
11392
11393@item @code{home-directory}
11394C'est le nom du répertoire personnel du compte.
11395
11396@item @code{create-home-directory?} (par défaut : @code{#t})
11397Indique si le répertoire personnel du compte devrait être créé s'il n'existe
11398pas déjà.
11399
11400@item @code{shell} (par défaut : Bash)
11401C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
11402comme shell (@pxref{G-Expressions}).
11403
11404@item @code{system?} (par défaut : @code{#f})
11405C'est une valeur booléenne qui indique si le compte est un compte « système
11406». Les comptes systèmes sont parfois traités à part ; par exemple, les
11407gestionnaires de connexion graphiques ne les liste pas.
11408
11409@anchor{user-account-password}
11410@cindex mot de passe, pour les comptes utilisateurs
11411@item @code{password} (par défaut : @code{#f})
11412Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
11413de passe utilisateurs en tant que @code{root} avec la commande
11414@command{passwd}, puis laisseriez l'utilisateur le changer avec
11415@command{passwd}. Les mots de passes définis avec @command{passwd} sont
11416bien sûr préservés après redémarrage et reconfiguration.
11417
11418Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
11419ce champ doit contenir le mot de passe chiffré, comme une chaîne de
11420caractère. Vous pouvez utiliser la procédure @code{crypt} pour cela :
11421
11422@example
11423(user-account
11424 (name "charlie")
11425 (group "users")
11426
11427 ;; Spécifie un mot de passe initial hashé avec sha512.
11428 (password (crypt "InitialPassword!" "$6$abc")))
11429@end example
11430
11431@quotation Remarque
11432Le hash de ce mot de passe initial sera disponible dans un fichier dans
11433@file{/gnu/store}, lisible par tous les utilisateurs, donc cette méthode est
11434à utiliser avec soin.
11435@end quotation
11436
11437@xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, pour
11438plus d'information sur le chiffrement des mots de passe et
11439@ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
11440sur la procédure @code{crypt} de Guile.
11441
11442@end table
11443@end deftp
11444
11445@cindex groupes
11446Les déclarations de groupes sont encore plus simple :
11447
11448@example
11449(user-group (name "students"))
11450@end example
11451
11452@deftp {Type de données} user-group
11453C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
11454quelques champs :
11455
11456@table @asis
11457@item @code{name}
11458Le nom du groupe.
11459
11460@item @code{id} (par défaut : @code{#f})
11461L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
11462est alloué automatiquement lorsque le groupe est créé.
11463
11464@item @code{system?} (par défaut : @code{#f})
11465Cette valeur booléenne indique si le groupe est un groupe « système ». les
11466groupes systèmes ont un numéro d'ID bas.
11467
11468@item @code{password} (par défaut : @code{#f})
11469Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
11470bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
11471passe du groupe.
11472
11473@end table
11474@end deftp
11475
11476Par simplicité, une variable liste les groupes utilisateurs de base auxquels
11477on pourrait s'attendre :
11478
11479@defvr {Variable Scheme} %base-groups
11480C'est la liste des groupes utilisateur de base que les utilisateurs et les
11481paquets s'attendent à trouver sur le système. Cela comprend des groupes
11482comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
11483contrôler l'accès à certains périphériques, comme « audio », « disk » et «
11484cdrom ».
11485@end defvr
11486
11487@defvr {Variable Scheme} %base-user-accounts
11488C'est la liste des compte du système de base que les programmes peuvent
11489s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
11490
11491Remarquez que le compte « root » n'est pas défini ici. C'est un cas
11492particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
11493@end defvr
11494
11495@node Disposition du clavier
11496@section Disposition du clavier
11497
11498@cindex disposition du clavier
11499@cindex disposition clavier
11500Pour spécifier ce que fait chaque touche de votre clavier, vous devez dire
11501au système d'exploitation quel @dfn{disposition du clavier} vous voulez
11502utiliser. Par défaut, lorsque rien n'est spécifié, la disposition QWERTY
11503pour l'anglais américain pour les claviers 105 touches est utilisée.
11504Cependant, les germanophones préfèrent généralement la disposition QWERTZ,
11505les francophones la disposition AZERTY etc ; les hackers peuvent préférer
11506Dvorak ou bépo, et peuvent même vouloir personnaliser plus en détails
11507l'effet de certaines touches. Cette section explique comment faire cela.
11508
11509@cindex disposition du clavier, définition
11510Il y a trois composants qui devront connaître votre disposition du clavier :
11511
11512@itemize
11513@item
11514Le @emph{chargeur d'amorçage} peut avoir besoin de connaître la disposition
11515clavier que vous voulez utiliser (@pxref{Configuration du chargeur d'amorçage,
11516@code{keyboard-layout}}). C'est utile si vous voulez par exemple vous
11517assurer que vous pouvez saisir la phrase de passe de votre partition racine
11518chiffrée avec la bonne disposition.
11519
11520@item
11521Le @emph{noyau du système d'exploitation}, Linux, en aura besoin pour
11522configurer correctement la console (@pxref{Référence de système d'exploitation,
11523@code{keyboard-layout}}).
11524
11525@item
11526Le @emph{serveur d'affichage graphique}, habituellement Xorg, a aussi sa
11527propre idée sur la disposition du clavier à utiliser (@pxref{Système de fenêtrage X,
11528@code{keyboard-layout}}).
11529@end itemize
11530
11531Guix vous permet de configurer les trois séparément mais, heureusement, il
11532vous permet de partager la même disposition du clavier pour chacun des trois
11533composants.
11534
11535@cindex XKB, disposition du clavier
11536Les dispositions de clavier sont représentées par des enregistrements créés
11537par la procédure @code{keyboard-layout} de @code{(gnu system keyboard)}. En
11538suivant l'extension clavier de X (XKB), chaque disposition a trois attributs
11539: un nom (souvent un code de langue comme « fi » pour le finnois ou « jp »
11540pour le japonais), un nom de variante facultatif, un nom de modèle de
11541clavier facultatif et une liste éventuellement vide d'options
11542supplémentaires. Dans la plupart des cas, vous n'aurez besoin que du nom de
11543la disposition. Voici quelques exemples :
11544
11545@example
11546;; La disposition QWERTZ allemande. Ici on suppose que vous utilisez un clavier
11547;; type « pc105 » standard.
11548(keyboard-layout "de")
11549
11550;; La variante bépo de la disposition française.
11551(keyboard-layout "fr" "bepo")
11552
11553;; La disposition catalane.
11554(keyboard-layout "es" "cat")
11555
11556;; La disposition espagnole américaine. En plus, la touche
11557;; « Verr. Maj. » est utilisée comme touche « Ctrl » supplémentaire,
11558;; et la touche « Menu » est utilisée comme touche « Compose » pour
11559;; saisir des lettres accentuées.
11560(keyboard-layout "latam"
11561 #:options '("ctrl:nocaps" "compose:menu"))
11562
11563;; La disposition russe pour un clavier de ThinkPad.
11564(keyboard-layout "ru" #:model "thinkpad")
11565
11566;; La disposition « US internationale », qui est comme la disposition US plus
11567;; des touches mortes pour saisir des caractères accentués. Cet exemple est pour
11568;; un clavier de MacBook Apple.
11569(keyboard-layout "us" "intl" #:model "macbook78")
11570@end example
11571
11572Voir le répertoire @file{share/X11/xkb} du paquet @code{xkeyboard-config}
11573pour une liste complète des disposition, des variantes et des modèles pris
11574en charge.
11575
11576@cindex disposition du clavier, configuration
11577Disons que vous voulez que votre système utilise la disposition turque sur
11578tout le système — du chargeur d'amorçage à Xorg en passant par la console.
11579Voici ce que votre configuration du système contiendrait :
11580
11581@findex set-xorg-configuration
11582@lisp
11583;; Utiliser la disposition turque pour le chargeur d'amorçage,
11584;; la console et Xorg.
11585(operating-system
11586 ;; ...
11587 (keyboard-layout (keyboard-layout "tr")) ;pour la console
11588 (bootloader (bootloader-configuration
11589 (bootloader grub-efi-bootloader)
11590 (target "/boot/efi")
11591 (keyboard-layout keyboard-layout))) ;pour GRUB
11592 (services (cons (set-xorg-configuration
11593 (xorg-configuration ;pour Xorg
11594 (keyboard-layout keyboard-layout)))
11595 %desktop-services)))
11596@end lisp
11597
11598Dans l'exemple ci-dessus, pour GRUB et pour Xorg, nous nous référons
11599simplement au champ @code{keyboard-layout} au dessus, mais on pourrait aussi
11600bien se référer à une autre disposition. La procédure
11601@code{set-xorg-configuration} communique la configuration Xorg désirée au
11602gestionnaire de connexion, par défaut GDM.
11603
11604Nous avons discuté de la manière de spécifier la disposition du clavier
11605@emph{par défaut} lorsque votre système démarre, mais vous pouvez aussi
11606l'ajuster à l'exécution :
11607
11608@itemize
11609@item
11610Si vous utilisez GNOME, son panneau de configuration contient une entrée «
11611Région & Langues » où vous pouvez choisir une ou plusieurs dispositions du
11612clavier.
11613
11614@item
11615Sous Xorg, la commande @command{sexkbmap} (du paquet du même nom) vous
11616permet de changer la disposition actuelle. Par exemple, voilà comment
11617changer la disposition pour un Dvorak américain :
11618
11619@example
11620setxkbmap us dvorak
11621@end example
11622
11623@item
11624La commande @code{loadkey} change la disposition du clavier dans la console
11625Linux. Cependant, remarque que @code{loadkeys} n'utilise @emph{pas} la
11626catégorisation des dispositions XKB décrite plus haut. La commande suivante
11627charge la disposition bépo française :
11628
11629@example
11630loadkeys fr-bepo
11631@end example
11632@end itemize
11633
11634@node Régionalisation
11635@section Régionalisation
11636
11637@cindex paramètres linguistiques
11638Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
11639langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
11640Library Reference Manual}). Chaque paramètre linguistique a un nom de la
11641forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
11642ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
11643avec les conventions culturelles du Luxembourg, en utilisant l'encodage
11644UTF-8.
11645
11646@cindex définition des paramètres linguistiques
11647Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
11648pour la machine en utilisant le champ @code{locale} de la déclaration
11649@code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
11650
11651Les paramètres régionaux choisis sont automatiquement ajoutés aux
11652définitions des @dfn{paramètres régionaux} connues par le système au besoin,
11653avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
11654@code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
11655@code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
11656le champ @code{locale-definitions} de @code{operating-system} — c'est utile
11657par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
11658L'ensemble par défaut de définitions comprend certains paramètres
11659linguistiques parmi les plus utilisés, mais pas toutes les variantes
11660disponibles, pour gagner de la place.
11661
11662Par exemple, pour ajouter les paramètres pour le frison septentrional en
11663Allemagne, la valeur de ce champ serait :
11664
11665@example
11666(cons (locale-definition
11667 (name "fy_DE.utf8") (source "fy_DE"))
11668 %default-locale-definitions)
11669@end example
11670
11671De me, pour gagner de la place, on peut vouloir lister dans
11672@code{locale-definitions} seulement les paramètres qui sont vraiment
11673utilisés, comme dans :
11674
11675@example
11676(list (locale-definition
11677 (name "ja_JP.eucjp") (source "ja_JP")
11678 (charset "EUC-JP")))
11679@end example
11680
11681@vindex LOCPATH
11682Les définitions des paramètres linguistiques compilées sont disponibles dans
11683@file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
11684libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
11685Guix cherche les données de régionalisation. Cet emplacement peut être
11686modifié avec la variable d'environnement @code{LOCPATH}
11687(@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
11688
11689La forme @code{locale-definition} est fournie par le module @code{(gnu
11690system locale)}. Des détails sont disponibles plus bas.
11691
11692@deftp {Type de données} locale-definition
11693C'est le type de données d'une définition de paramètres linguistiques.
11694
11695@table @asis
11696
11697@item @code{name}
11698Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
11699Library Reference Manual}, pour en savoir plus sur les noms de paramètres
11700linguistiques.
11701
11702@item @code{source}
11703Le nom de la source pour ce paramètre linguistique. C'est typiquement la
11704partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
11705
11706@item @code{charset} (par défaut : @code{"UTF-8"})
11707Le « jeu de caractères » d'un paramètre linguistique,
11708@uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
11709
11710@end table
11711@end deftp
11712
11713@defvr {Variable Scheme} %default-locale-definitions
11714Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
11715comme valeur par défaut pour le champ @code{locale-definitions} des
11716déclarations @code{operating-system}.
11717
11718@cindex nom de paramètre linguistique
11719@cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
11720Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
11721caractère normalisé} pour la partie qui suit le point dans le nom
11722(@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
11723Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
11724@emph{pas}, disons, @code{uk_UA.UTF-8}.
11725@end defvr
11726
11727@subsection Considérations sur la compatibilité des données linguistiques
11728
11729@cindex incompatibilité, des données linguistiques
11730Les déclaration @code{operating-system} fournissent un champ
11731@code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
11732compiler les déclarations de paramètres linguistiques
11733(@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
11734», vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
11735des données linguistique est parfois incompatible d'une version de la libc à
11736une autre.
11737
11738@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
11739@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
11740Par exemple, un programme lié à la libc version 2.21 est incapable de lire
11741les données linguistiques produites par la libc 2.22 ; pire, ce programme
11742@emph{plante} plutôt que d'ignorer les données linguistiques
11743incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
11744sauteront simplement les données linguistiques incompatibles, ce qui est
11745déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
11746mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
11747les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
11748@code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
11749
11750Le « problème » avec Guix c'est que les utilisateurs ont beaucoup de liberté
11751: ils peuvent choisir s'ils veulent et quand ils veulent mettre à jour les
11752logiciels de leur profil, et peuvent utiliser une version différente de la
11753libc de celle que l'administrateur système utilise pour construire les
11754données linguistiques du système global.
11755
11756Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
11757propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
11758(@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
11759
11760Cependant, c'est encore mieux si les données linguistiques du système dans
11761@file{/run/current-system/locale} étaient construites avec les versions de
11762la libc utilisées sur le système, pour que tous les programmes puissent y
11763accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
11764cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
11765champ @code{locale-libcs} de @code{operating-system} :
11766
11767@example
11768(use-package-modules base)
11769
11770(operating-system
11771 ;; @dots{}
11772 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
11773@end example
11774
11775Cet exemple créera un système contenant les définitions des paramètres
11776linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
11777@file{/run/current-system/locale}.
11778
11779
11780@node Services
11781@section Services
11782
11783@cindex services systèmes
11784Une part importante de la préparation d'une déclaration
11785@code{operating-system} est la liste des @dfn{services systèmes} et de leur
11786configuration (@pxref{Utiliser le système de configuration}). Les services
11787systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
11788requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
11789
11790Guix a une définition large de « service » (@pxref{Composition de services}),
11791mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
11792(@pxref{Services Shepherd}). Sur un système lancé, la commande
11793@command{herd} vous permet de lister les services disponibles, montrer leur
11794statut, les démarrer et les arrêter, ou faire d'autres opérations
11795spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
11796exemple :
11797
11798@example
11799# herd status
11800@end example
11801
11802La commande ci-dessus, lancée en @code{root}, liste les services
11803actuellement définis. La commande @command{herd doc} montre un synopsis du
11804service donné et ses actions associées :
11805
11806@example
11807# herd doc nscd
11808Run libc's name service cache daemon (nscd).
11809
11810# herd doc nscd action invalidate
11811invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
11812@end example
11813
11814Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
11815l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
11816service nscd et redémarrent le serveur d'affichage Xorg :
11817
11818@example
11819# herd stop nscd
11820Service nscd has been stopped.
11821# herd restart xorg-server
11822Service xorg-server has been stopped.
11823Service xorg-server has been started.
11824@end example
11825
11826Les sections suivantes documentent les services disponibles, en commençant
11827par les services de base qui peuvent être utilisés avec une déclaration
11828@code{operating-system}.
11829
11830@menu
11831* Services de base:: Services systèmes essentiels.
11832* Exécution de tâches planifiées:: Le service mcron.
11833* Rotation des journaux:: Le service rottlog.
11834* Services réseau:: Paramètres réseau, démon SSH, etc.
11835* Système de fenêtrage X:: Affichage graphique.
11836* Services d'impression:: Support pour les imprimantes locales et
11837 distantes.
11838* Services de bureaux:: D-Bus et les services de bureaux.
11839* Services de son:: Services ALSA et Pulseaudio.
11840* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
11841* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
11842* Services de messagerie:: Services de messagerie.
11843* Services de téléphonie:: Services de téléphonie.
11844* Services de surveillance:: Services de surveillance.
11845* Services Kerberos:: Services Kerberos.
11846* Services LDAP:: services LDAP
11847* Services web:: Services web.
11848* Services de certificats:: Certificats TLS via Let's Encrypt.
11849* Services DNS:: Démons DNS@.
11850* Services VPN:: Démons VPN.
11851* Système de fichiers en réseau:: Services liés à NFS@.
11852* Intégration continue:: Le service Cuirass.
11853* Services de gestion de l'énergie:: Augmenter la durée de vie de la
11854 batterie.
11855* Services audio:: MPD@.
11856* Services de virtualisation:: Services de virtualisation.
11857* Services de contrôle de version:: Fournit des accès distants à des
11858 dépôts Git.
11859* Services de jeu:: Serveurs de jeu.
11860* Services divers:: D'autres services.
11861@end menu
11862
11863@node Services de base
11864@subsection Services de base
11865
11866Le module @code{(gnu services base)} fournit des définitions de services
11867pour les services de base qu'on peut attendre du système. Les services
11868exportés par ce module sort listés ci-dessous.
11869
11870@defvr {Variable Scheme} %base-services
11871Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
11872attendre du système : un service de connexion (mingetty) sur chaque tty,
11873syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
11874périphériques udev, et plus.
11875
11876C'est la valeur par défaut du champ @code{services} des déclarations
11877@code{operating-system}. Habituellement, lors de la personnalisation d'un
11878système, vous voudrez ajouter des services à ceux de @var{%base-services},
11879comme ceci :
11880
11881@example
11882(append (list (service avahi-service-type)
11883 (service openssh-service-type))
11884 %base-services)
11885@end example
11886@end defvr
11887
11888@defvr {Variable Scheme} special-files-service-type
11889C'est le service qui met en place des « fichiers spéciaux » comme
11890@file{/bin/sh} ; une instance de ce service fait partie de
11891@code{%base-services}.
11892
11893La valeur associée avec les services @code{special-files-service-type} doit
11894être une liste de couples dont le premier élément est le « fichier spécial »
11895et le deuxième sa cible. Par défaut il s'agit de :
11896
11897@cindex @file{/bin/sh}
11898@cindex @file{sh}, dans @file{/bin}
11899@example
11900`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
11901@end example
11902
11903@cindex @file{/usr/bin/env}
11904@cindex @file{env}, dans @file{/usr/bin}
11905Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
11906pouvez changer cela en :
11907
11908@example
11909`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
11910 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
11911@end example
11912
11913Comme il fait parti de @code{%base-services}, vous pouvez utiliser
11914@code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
11915(@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
11916simple d'ajouter un fichier spécial est d'utiliser la procédure
11917@code{extra-special-file} (voir plus bas).
11918@end defvr
11919
11920@deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
11921Utilise @var{target} comme « fichier spécial » @var{file}.
11922
11923Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
11924votre déclaration de système d'exploitation crée un lien symbolique
11925@file{/usr/bin/env} :
11926
11927@example
11928(extra-special-file "/usr/bin/env"
11929 (file-append coreutils "/bin/env"))
11930@end example
11931@end deffn
11932
11933@deffn {Procédure Scheme} host-name-service @var{name}
11934Renvoie un service qui paramètre le nom d'hôte à @var{name}.
11935@end deffn
11936
11937@deffn {Procédure Scheme} login-service @var{config}
11938Renvoie un service pour lancer login en suivant @var{config}, un objet
11939@code{<login-configuration>} qui spécifie le message du jour, entre autres
11940choses.
11941@end deffn
11942
11943@deftp {Type de données} login-configuration
11944Le type de données qui représente la configuration de login.
11945
11946@table @asis
11947
11948@item @code{motd}
11949@cindex message du jour
11950Un objet simili-fichier contenant le « message du jour ».
11951
11952@item @code{allow-empty-passwords?} (par défaut : @code{#t})
11953Permet les mots de passes vides par défaut pour que les utilisateurs
11954puissent se connecter au compte « root » la première fois après sa création.
11955
11956@end table
11957@end deftp
11958
11959@deffn {Procédure Scheme} mingetty-service @var{config}
11960Renvoie un service qui lance mingetty en suivant @var{config}, un objet
11961@code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
11962choses.
11963@end deffn
11964
11965@deftp {Type de données} mingetty-configuration
11966C'est le type de données représentant la configuration de Mingetty, qui
11967fournit l'implémentation par défaut de l'écran de connexion des consoles
11968virtuelles.
11969
11970@table @asis
11971
11972@item @code{tty}
11973Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
11974@code{"tty1"}.
11975
11976@item @code{auto-login} (par défaut : @code{#f})
11977Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
11978dénotant le nom d'utilisateur pour lequel le système se connecte
11979automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
11980d'utilisateur et un mot de passe pour se connecter.
11981
11982@item @code{login-program} (par défaut : @code{#f})
11983Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
11984est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
11985dénotant le nom d'un programme de connexion.
11986
11987@item @code{login-pause?} (par défaut : @code{#f})
11988Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
11989devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
11990
11991@item @code{mingetty} (par défaut : @var{mingetty})
11992Le paquet Mingetty à utiliser.
11993
11994@end table
11995@end deftp
11996
11997@deffn {Procédure Scheme} agetty-service @var{config}
11998Renvoie un service pour lancer agetty en suivant @var{config}, un objet
11999@code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
12000choses.
12001@end deffn
12002
12003@deftp {Type de données} agetty-configuration
12004Ce type de données représente la configuration de agetty, qui implémente
12005l'écran de connexion des consoles virtuelles et series. Voir la page de
12006manuel de @code{agetty(8)} pour plus d'informations.
12007
12008@table @asis
12009
12010@item @code{tty}
12011Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
12012@code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
12013raisonnable d'un port série utilisé par le noyau Linux.
12014
12015Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
12016ligne de commande du noyau, agetty extraira le nom du périphérique du port
12017série à partir de cette option.
12018
12019Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
12020la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
12021du port série et l'utilisera.
12022
12023Dans les deux cas, agetty laissera les autres paramètres du périphérique
12024série (baud, etc) sans y toucher — dans l'espoir que Linux leur a assigné
12025les bonnes valeurs.
12026
12027@item @code{baud-rate} (par défaut : @code{#f})
12028Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
12029des virgules, en ordre décroissant.
12030
12031@item @code{term} (par défaut : @code{#f})
12032Une chaîne contenant la valeur utilisée pour la variable d'environnement
12033@code{TERM}.
12034
12035@item @code{eight-bits?} (par défaut : @code{#f})
12036Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
12037caractères 8-bit et la détection de parité est désactivée.
12038
12039@item @code{auto-login} (par défaut : @code{#f})
12040Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
12041l'utilisateur spécifié sera automatiquement connecté sans demande du nom
12042d'utilisateur ni du mot de passe.
12043
12044@item @code{no-reset?} (par défaut : @code{#f})
12045Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
12046de contrôle).
12047
12048@item @code{host} (par défaut : @code{#f})
12049Cette option accepte une chaîne contenant le « login_host », qui sera écrit
12050dans le fichier @file{/var/run/utmpx}.
12051
12052@item @code{remote?} (par défaut : @code{#f})
12053Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
12054une option fakehost @code{-r} à la ligne de commande du programme de
12055connexion spécifié dans @var{login-program}.
12056
12057@item @code{flow-control?} (par défaut : @code{#f})
12058Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
12059(RTS/CTS).
12060
12061@item @code{no-issue?} (par défaut : @code{#f})
12062Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
12063sera pas affiché avant de présenter l'écran de connexion.
12064
12065@item @code{init-string} (par défaut : @code{#f})
12066Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
12067modem avant toute autre chose. Elle peut être utilisée pour initialiser un
12068modem.
12069
12070@item @code{no-clear?} (par défaut : @code{#f})
12071Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
12072montrer l'écran de connexion.
12073
12074@item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
12075Cette option doit être soit une gexp dénotant le nom d'un programme de
12076connexion, soit non définie, auquel cas la valeur par défaut est la commande
12077@command{login} de la suite d'outils Shadow.
12078
12079@item @code{local-line} (par défaut : @code{#f})
12080Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
12081comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
12082est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}.
12083
12084@item @code{extract-baud?} (par défaut : @code{#f})
12085Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
12086de baud depuis les messages de statut produits par certains modems.
12087
12088@item @code{skip-login?} (par défaut : @code{#f})
12089Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
12090peut être utilisée avec le champ @var{login-program} pour utiliser des
12091systèmes de connexion non standards.
12092
12093@item @code{no-newline?} (par défaut : @code{#f})
12094Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
12095d'afficher le fichier @file{/etc/issue}.
12096
12097@c Is this dangerous only when used with login-program, or always?
12098@item @code{login-options} (par défaut : @code{#f})
12099Cette option accepte une chaîne de caractères contenant des options passées
12100au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
12101conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
12102d'utilisateur contenant des options incluses qui pourraient être analysées
12103par le programme de connexion.
12104
12105@item @code{login-pause} (par défaut : @code{#f})
12106Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
12107montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
12108pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
12109
12110@item @code{chroot} (par défaut : @code{#f})
12111Change de racine dans le répertoire donné. Cette option accepte un chemin
12112en tant que chaîne de caractères.
12113
12114@item @code{hangup?} (par défaut : @code{#f})
12115Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
12116le terminal spécifié.
12117
12118@item @code{keep-baud?} (par défaut : @code{#f})
12119Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
12120Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
12121caractères @key{BREAK}.
12122
12123@item @code{timeout} (par défaut : @code{#f})
12124Lorsque la valeur est un nombre entier, termine la session si aucun nom
12125d'utilisateur n'a pu être lu après @var{timeout} secondes.
12126
12127@item @code{detect-case?} (par défaut : @code{#f})
12128Lorsque la valeur est @code{#t}, active le support pour la détection des
12129terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
12130d'utilisateur qui ne contient que des majuscules indique un terminal en
12131majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
12132que cela ne fonctionne pas avec les caractères unicode.
12133
12134@item @code{wait-cr?} (par défaut : @code{#f})
12135Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
12136un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
12137l'écran de connexion. Cela est typiquement utilisé avec l'option
12138@var{init-string}.
12139
12140@item @code{no-hints?} (par défaut : @code{#f})
12141Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
12142verrouillages numériques, majuscule et défilement.
12143
12144@item @code{no-hostname?} (par défaut : @code{#f})
12145Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
12146aucun nom d'hôte ne sera affiché.
12147
12148@item @code{long-hostname?} (par défaut : @code{#f})
12149Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
12150la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
12151@code{gethostname} ou @code{getaddrinfo} sera affiché.
12152
12153@item @code{erase-characters} (par défaut : @code{#f})
12154Cette option accepte une chaîne de caractères de caractères supplémentaires
12155qui devraient être interprétés comme des effacements lorsque l'utilisateur
12156les tape dans leur nom d'utilisateur.
12157
12158@item @code{kill-characters} (par défaut : @code{#f})
12159Cette option accepte une chaîne de caractères qui devrait être interprété
12160comme signifiant « ignore tous les caractères précédent » (aussi appelé un
12161caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
12162
12163@item @code{chdir} (par défaut : @code{#f})
12164Cette option accepte, en tant que chaîne de caractères, un chemin vers un
12165répertoire dans lequel se trouvera la commande avant la connexion.
12166
12167@item @code{delay} (par défaut : @code{#f})
12168Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
12169avant d'ouvrir le tty et afficher l'écran de connexion.
12170
12171@item @code{nice} (par défaut : @code{#f})
12172Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
12173programme @command{login} tourne.
12174
12175@item @code{extra-options} (par défaut : @code{'()})
12176Cette option fournie un « mécanisme de secours » pour que l'utilisateur
12177puisse ajouter des arguments de la ligne de commande arbitraires à
12178@command{agetty} comme une liste de chaînes de caractères.
12179
12180@end table
12181@end deftp
12182
12183@deffn {Procédure Scheme} kmscon-service-type @var{config}
12184Renvoie un service qui lance
12185@uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
12186@var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
12187sur lequel tourner, entre autres choses.
12188@end deffn
12189
12190@deftp {Type de données} kmscon-configuration
12191C'est le type de données représentant la configuration de Kscon, qui
12192implémente l'écran de chargement de la console virtuelle.
12193
12194@table @asis
12195
12196@item @code{virtual-terminal}
12197Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
12198
12199@item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
12200Une gexp qui dénote le nom d'un programme de connexion. le programme de
12201connexion par défaut est @command{login} de la suite d'outils Shadow.
12202
12203@item @code{login-arguments} (par défaut : @code{'("-p")})
12204Une liste d'arguments à passer à @command{login}.
12205
12206@item @code{auto-login} (par défaut : @code{#f})
12207Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
12208l'utilisateur spécifié sera automatiquement connecté sans demande du nom
12209d'utilisateur ni du mot de passe.
12210
12211@item @code{hardware-acceleration?} (par défaut : #f)
12212S'il faut utiliser l'accélération matérielle.
12213
12214@item @code{kmscon} (par défaut : @var{kmscon})
12215Le paquet Kmscon à utiliser.
12216
12217@end table
12218@end deftp
12219
12220@cindex name service cache daemon
12221@cindex nscd
12222@deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
12223 [#:name-services '()]
12224Renvoie un service qui lance le démon de cache de services de noms de la
12225libc (nscd) avec la @var{config} donnée — un objet
12226@code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
12227
12228Parce que c'est pratique, le service du Shepherd pour nscd fournit les
12229actions suivantes :
12230
12231@table @code
12232@item invalidate
12233@cindex invalidation du cache, nscd
12234@cindex nscd, invalidation du cache
12235Cela invalide le cache donné. Par exemple, en laçant :
12236
12237@example
12238herd invalidate nscd hosts
12239@end example
12240
12241@noindent
12242on invalide le cache de noms d'hôtes de nscd.
12243
12244@item statistiques
12245Lancer @command{herd statistics nscd} affiche des informations sur
12246l'utilisation de nscd et des caches.
12247@end table
12248
12249@end deffn
12250
12251@defvr {Variable Scheme} %nscd-default-configuration
12252C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
12253utilisée par @code{nscd-service}. Elle utilise les caches définis par
12254@var{%nscd-default-caches} ; voir plus bas.
12255@end defvr
12256
12257@deftp {Type de données} nscd-configuration
12258C'est le type de données qui représente la configuration du démon de cache
12259de services de noms (nscd).
12260
12261@table @asis
12262
12263@item @code{name-services} (par défaut : @code{'()})
12264Liste des paquets dénotant des @dfn{services de noms} qui doivent être
12265visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
12266
12267@item @code{glibc} (par défaut : @var{glibc})
12268Objet de paquet qui dénote la Bibliothèque C de GNU qui fournit la commande
12269@command{nscd}.
12270
12271@item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
12272Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
12273envoyée lorsque @code{debug-level} est strictement positif.
12274
12275@item @code{debug-level} (par défaut : @code{0})
12276Entier qui dénote le niveau de débogage. Les entiers les plus grands
12277signifient plus de sortie de débogage.
12278
12279@item @code{caches} (par défaut : @var{%nscd-default-caches})
12280Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
12281; voir plus bas.
12282
12283@end table
12284@end deftp
12285
12286@deftp {Type de données} nscd-cache
12287Type de données représentant une base de données de cache de nscd et ses
12288paramètres.
12289
12290@table @asis
12291
12292@item @code{database}
12293C'est un symbole qui représente le nom de la base de donnée à mettre en
12294cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
12295@code{services} qui désignent les bases de données NSS correspondantes
12296(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
12297
12298@item @code{positive-time-to-live}
12299@itemx @code{negative-time-to-live} (par défaut : @code{20})
12300Un entier qui représente le nombre de secondes pendant lesquelles un
12301résultat positif ou négatif reste en cache.
12302
12303@item @code{check-files?} (par défaut : @code{#t})
12304Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
12305à @var{database}.
12306
12307Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
12308nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
12309prendre en compte.
12310
12311@item @code{persistent?} (par défaut : @code{#t})
12312Indique si le cache devrait être stocké de manière persistante sur le
12313disque.
12314
12315@item @code{shared?} (par défaut : @code{#t})
12316Indique si le cache devrait être partagé entre les utilisateurs.
12317
12318@item @code{max-database-size} (par défaut : 32@tie{}MiB)
12319Taille maximale en octets de la base de données en cache.
12320
12321@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
12322@c settings, so leave them out.
12323
12324@end table
12325@end deftp
12326
12327@defvr {Variable Scheme} %nscd-default-caches
12328Liste d'objets @code{<nscd-cache>} utilisés par défaut par
12329@code{nscd-configuration} (voir plus haut).
12330
12331Elle active la mise en cache persistante et agressive des recherches de
12332services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
12333d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
12334et une protection de votre vie privée plus efficace — souvent le résultat
12335des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
12336de nom externes n'ont même pas besoin d'être questionnés.
12337@end defvr
12338
12339@anchor{syslog-configuration-type}
12340@cindex syslog
12341@cindex logging
12342@deftp {Type de données} syslog-configuration
12343Ce type de données représente la configuration du démon syslog.
12344
12345@table @asis
12346@item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
12347Le démon syslog à utiliser.
12348
12349@item @code{config-file} (par défaut : @code{%default-syslog.conf})
12350Le fichier de configuration de syslog à utiliser.
12351
12352@end table
12353@end deftp
12354
12355@anchor{syslog-service}
12356@cindex syslog
12357@deffn {Procédure Scheme} syslog-service @var{config}
12358Renvoie un service qui lance un démon syslog en suivant @var{config}.
12359
12360@xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
12361d'informations sur la syntaxe du fichier de configuration.
12362@end deffn
12363
12364@defvr {Variable Scheme} guix-service-type
12365C'est le type de service qui lance le démon de construction,
12366@command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
12367un enregistrement @code{guix-configuration} décrit plus bas.
12368@end defvr
12369
12370@anchor{guix-configuration-type}
12371@deftp {Type de données} guix-configuration
12372Ce type de données représente la configuration du démon de construction de
12373Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
12374
12375@table @asis
12376@item @code{guix} (par défaut : @var{guix})
12377Le paquet Guix à utiliser.
12378
12379@item @code{build-group} (par défaut : @code{"guixbuild"})
12380Nom du groupe des comptes utilisateurs de construction.
12381
12382@item @code{build-accounts} (par défaut : @code{10})
12383Nombre de comptes utilisateurs de construction à créer.
12384
12385@item @code{authorize-key?} (par défaut : @code{#t})
12386@cindex substituts, autorisations
12387Indique s'il faut autoriser ou non les clefs de substituts listées dans
12388@code{authorize-keys} — par défaut celle de @code{@value{SUBSTITUTE-SERVER}}
12389(@pxref{Substituts}).
12390
12391@vindex %default-authorized-guix-keys
12392@item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
12393La liste des fichiers de clefs autorisées pour les imports d'archives, en
12394tant que liste de gexps sous forme de chaînes (@pxref{Invoquer guix archive}). Par défaut, elle contient celle de
12395@code{@value{SUBSTITUTE-SERVER}} (@pxref{Substituts}).
12396
12397@item @code{use-substitutes?} (par défaut : @code{#t})
12398S'il faut utiliser les substituts.
12399
12400@item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
12401La liste des URL où trouver des substituts par défaut.
12402
12403@item @code{max-silent-time} (par défaut : @code{0})
12404@itemx @code{timeout} (par défaut : @code{0})
12405Le nombre de secondes de silence et le nombre de secondes d'inactivité,
12406respectivement, après lesquelles un processus de construction son délai
12407d'attente. Une valeur de zéro désactive le délai d'attente.
12408
12409@item @code{log-compression} (par défaut : @code{'bzip2})
12410Le type de compression utilisé par les journaux de construction — parmi
12411@code{gzip}, @code{bzip2} et @code{none}.
12412
12413@item @code{extra-options} (par défaut : @code{'()})
12414Liste d'options supplémentaires de la ligne de commande pour
12415@command{guix-daemon}.
12416
12417@item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
12418Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
12419écrites.
12420
12421@item @code{http-proxy} (par défaut : @code{#f})
12422Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
12423sortie fixe et les substituts.
12424
12425@item @code{tmpdir} (par défaut : @code{#f})
12426Un répertoire où @command{guix-daemon} effectuera ses constructions.
12427
12428@end table
12429@end deftp
12430
12431@deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
12432Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
12433règles udev peuvent être fournies comme une liste de fichier via la variable
12434@var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
12435@code{(gnu services base)} simplifient la création de ces fichiers de règle.
12436@end deffn
12437
12438@deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
12439Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
12440définie par le littéral @var{contents}.
12441
12442Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
12443sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
12444script à la détection du périphérique USB avec l'identifiant de produit
12445donné.
12446
12447@example
12448(define %example-udev-rule
12449 (udev-rule
12450 "90-usb-thing.rules"
12451 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
12452 "ATTR@{product@}==\"Example\", "
12453 "RUN+=\"/path/to/script\"")))
12454@end example
12455
12456La commande @command{herd rules udev}, en tant que root, renvoie le nom du
12457répertoire contenant toutes les règles udev actives.
12458@end deffn
12459
12460Ici on montre comment le service @var{udev-service} par défaut peut être
12461étendu avec cette règle.
12462
12463@example
12464(operating-system
12465 ;; @dots{}
12466 (services
12467 (modify-services %desktop-services
12468 (udev-service-type config =>
12469 (udev-configuration (inherit config)
12470 (rules (append (udev-configuration-rules config)
12471 (list %example-udev-rule))))))))
12472@end example
12473
12474@deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
12475Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
12476dans @var{file}, un objet simili-fichier.
12477
12478L'exemple suivant montre comment utiliser un fichier de règles existant.
12479
12480@example
12481(use-modules (guix download) ;pour url-fetch
12482 (guix packages) ;pour origin
12483 ;; @dots{})
12484
12485(define %android-udev-rules
12486 (file->udev-rule
12487 "51-android-udev.rules"
12488 (let ((version "20170910"))
12489 (origin
12490 (method url-fetch)
12491 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
12492 "android-udev-rules/" version "/51-android.rules"))
12493 (sha256
12494 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
12495@end example
12496@end deffn
12497
12498En plus, les définitions des paquets de Guix peuvent être inclus dans
12499@var{rules} pour étendre les règles avec les définitions trouvées dans leur
12500sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
12501@var{file->udev-rule} précédent, on aurait pu utiliser le paquet
12502@var{android-udev-rules} qui existe dans le module @code{(gnu packages
12503android)}.
12504
12505L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
12506pour que l'outil Android @command{adb} puisse détecter les appareils sans
12507privilège root. Il détaille aussi comment créer le groupe @code{adbusers},
12508requis pour le bon fonctionnement des règles définies dans le paquet
12509@var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
12510@var{supplementary-groups} de la déclaration @var{user-account} ainsi que
12511dans le champ @var{groups} de l'enregistrement @var{operating-system}.
12512
12513@example
12514(use-modules (gnu packages android) ;for android-udev-rules
12515 (gnu system shadow) ;for user-group
12516 ;; @dots{})
12517
12518(operating-system
12519 ;; @dots{}
12520 (users (cons (user-acount
12521 ;; @dots{}
12522 (supplementary-groups
12523 '("adbusers" ;for adb
12524 "wheel" "netdev" "audio" "video"))
12525 ;; @dots{})))
12526
12527 (groups (cons (user-group (system? #t) (name "adbusers"))
12528 %base-groups))
12529
12530 ;; @dots{}
12531
12532 (services
12533 (modify-services %desktop-services
12534 (udev-service-type
12535 config =>
12536 (udev-configuration (inherit config)
12537 (rules (cons android-udev-rules
12538 (udev-configuration-rules config))))))))
12539@end example
12540
12541@defvr {Variable Scheme} urandom-seed-service-type
12542Garde de l'entropie dans @var{%random-seed-file} pour démarrer
12543@file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
12544@file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
12545@file{/dev/hwrng} existe et peut être lu.
12546@end defvr
12547
12548@defvr {Variable Scheme} %random-seed-file
12549C'est le nom du fichier où des octets aléatoires sont sauvegardés par
12550@var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
12551redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
12552@end defvr
12553
12554@cindex souris
12555@cindex gpm
12556@defvr {Variable Scheme} gpm-service-type
12557C'est le type du service qui lance GPM, le @dfn{démon de souris à but
12558général}, qui fournit le support de la souris sur la console Linux. GPM
12559permet aux utilisateurs d'utiliser la souris dans la console, entre autres
12560pour sélectionner, copier et coller du texte.
12561
12562La valeur pour les services de ce type doit être un @code{gpm-configuration}
12563(voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
12564@end defvr
12565
12566@deftp {Type de données} gpm-configuration
12567Type de données représentant la configuration de GPM.
12568
12569@table @asis
12570@item @code{options} (par défaut : @code{%default-gpm-options})
12571Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
12572des options par défaut dit à @command{gpm} d'écouter les événements de la
12573souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
12574pour plus d'informations.
12575
12576@item @code{gpm} (par défaut : @code{gpm})
12577Le paquet GPM à utiliser.
12578
12579@end table
12580@end deftp
12581
12582@anchor{guix-publish-service-type}
12583@deffn {Variable Scheme} guix-publish-service-type
12584C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
12585plus bas.
12586
12587Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
12588créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
12589@end deffn
12590
12591@deftp {Type de données} guix-publish-configuration
12592Le type de données représentant la configuration du service @code{guix
12593publish}.
12594
12595@table @asis
12596@item @code{guix} (par défaut : @code{guix})
12597Le paquet Guix à utiliser.
12598
12599@item @code{port} (par défaut : @code{80})
12600Le port TCP sur lequel écouter les connexions.
12601
12602@item @code{host} (par défaut : @code{"localhost"})
12603L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
12604@code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
12605
12606@item @code{compression-level} (par défaut : @code{3})
12607Le niveau de compression gzip auquel les substituts sont compressés.
12608Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
12609pour avoir le meilleur taux de compression contre une plus grande
12610utilisation du CPU.
12611
12612@item @code{nar-path} (par défaut : @code{"nar"})
12613Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
12614@code{--nar-path}}, pour des détails.
12615
12616@item @code{cache} (par défaut : @code{#f})
12617Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
12618la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
12619@code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
12620des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
12621impliqués.
12622
12623@item @code{workers} (par défaut : @code{#f})
12624Lorsque la valeur est un entier, c'est le nombre de threads de travail
12625utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
12626processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
12627pour plus d'informations.
12628
12629@item @code{ttl} (par défaut : @code{#f})
12630Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
12631des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
12632plus d'informations.
12633@end table
12634@end deftp
12635
12636@anchor{rngd-service}
12637@deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
12638 [#:device "/dev/hwrng"]
12639Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
12640pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
12641échouera si @var{device} n'existe pas.
12642@end deffn
12643
12644@anchor{pam-limits-service}
12645@cindex limites de session
12646@cindex ulimit
12647@cindex priorités
12648@cindex temps réel
12649@cindex jackd
12650@deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
12651
12652Renvoie un service qui installe un fichier de configuration pour le
12653@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
12654@code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
12655@code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
12656limites @code{ulimit} et les priorités des sessions utilisateurs.
12657
12658La définition de limites suivante défini deux limites matérielles et
12659logicielles pour toutes les sessions connectées des utilisateurs du groupe
12660@code{realtime} :
12661
12662@example
12663(pam-limits-service
12664 (list
12665 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
12666 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
12667@end example
12668
12669La première entrée augment la priorité en temps réel maximale des processus
12670non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
12671d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
12672sont souvent utilisés sur les systèmes audio temps-réel.
12673@end deffn
12674
12675@node Exécution de tâches planifiées
12676@subsection Exécution de tâches planifiées
12677
12678@cindex cron
12679@cindex mcron
12680@cindex tâches planifiées
12681Le module @code{(gnu services mcron)} fournit une interface pour
12682GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
12683mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
12684traditionnel @command{cron} ; la principale différence est qu'il est
12685implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
12686spécification de la planification des tâches et de leurs actions.
12687
12688L'exemple en dessous définit un système d'exploitation qui lance les
12689commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
12690Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
12691ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
12692(@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
12693gexps pour introduire des définitions de tâches qui sont passées à mcron
12694(@pxref{G-Expressions}).
12695
12696@lisp
12697(use-modules (guix) (gnu) (gnu services mcron))
12698(use-package-modules base idutils)
12699
12700(define updatedb-job
12701 ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
12702 ;; l'action de la tâche comme une procédure Scheme.
12703 #~(job '(next-hour '(3))
12704 (lambda ()
12705 (execl (string-append #$findutils "/bin/updatedb")
12706 "updatedb"
12707 "--prunepaths=/tmp /var/tmp /gnu/store"))))
12708
12709(define garbage-collector-job
12710 ;; Lance le ramasse-miettes tous les jours à minuit cinq.
12711 ;; L'action de la tâche est une commande shell.
12712 #~(job "5 0 * * *" ;Vixie cron syntax
12713 "guix gc -F 1G"))
12714
12715(define idutils-job
12716 ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
12717 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
12718 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
12719 (string-append #$idutils "/bin/mkid src")
12720 #:user "charlie"))
12721
12722(operating-system
12723 ;; @dots{}
12724 (services (cons (service mcron-service-type
12725 (mcron-configuration
12726 (jobs (list garbage-collector-job
12727 updatedb-job
12728 idutils-job))))
12729 %base-services)))
12730@end lisp
12731
12732@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
12733plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
12734est la référence du service mcron.
12735
12736Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
12737service pour visualiser les travaux mcron qui seront exécutés ensuite :
12738
12739@example
12740# herd schedule mcron
12741@end example
12742
12743@noindent
12744Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
12745pouvez spécifier le nombre de tâches à afficher :
12746
12747@example
12748# herd schedule mcron 10
12749@end example
12750
12751@defvr {Variable Scheme} mcron-service-type
12752C'est le type du service @code{mcron}, dont la valeur est un objet
12753@code{mcron-configuration}
12754
12755Ce type de service peut être la cible d'une extension de service qui lui
12756fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
12757qui fournissent des tâches mcron à lancer.
12758@end defvr
12759
12760@deftp {Type de données} mcron-configuration
12761Type données qui représente la configuration de mcron.
12762
12763@table @asis
12764@item @code{mcron} (par défaut : @var{mcron})
12765Le paquet mcron à utiliser.
12766
12767@item @code{jobs}
12768C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
12769à une spécification de tâche de mcron (@pxref{Syntax, mcron job
12770specifications,, mcron, GNU@tie{}mcron}).
12771@end table
12772@end deftp
12773
12774
12775@node Rotation des journaux
12776@subsection Rotation des journaux
12777
12778@cindex rottlog
12779@cindex journaux, rotation
12780@cindex logging
12781Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
12782tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
12783tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
12784fichiers séparés, potentiellement compressés. Le module @code{(gnu services
12785admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
12786de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
12787
12788L'exemple ci-dessous définit un système d'exploitation qui fournit la
12789rotation des journaux avec les paramètres par défaut, pour les journaux les
12790plus courants.
12791
12792@lisp
12793(use-modules (guix) (gnu))
12794(use-service-modules admin mcron)
12795(use-package-modules base idutils)
12796
12797(operating-system
12798 ;; @dots{}
12799 (services (cons (service rottlog-service-type)
12800 %base-services)))
12801@end lisp
12802
12803@defvr {Variable Scheme} rottlog-service-type
12804C'est le type du service Rotlog, dont la valeur est un objet
12805@code{rottlog-configuration}.
12806
12807D'autres services peuvent étendre celui-ci avec de nouveaux objets
12808@code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
12809fichiers à faire tourner.
12810
12811Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
12812pour lancer le service rottlog.
12813@end defvr
12814
12815@deftp {Type de données} rottlog-configuration
12816Type de données représentant la configuration de rottlog.
12817
12818@table @asis
12819@item @code{rottlog} (par défaut : @code{rottlog})
12820Le paquet Rottlog à utiliser.
12821
12822@item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
12823Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
12824Variables,,, rottlog, GNU Rot[t]log Manual}).
12825
12826@item @code{rotations} (par défaut : @code{%default-rotations})
12827Une liste d'objets @code{log-rotation} définis plus bas.
12828
12829@item @code{jobs}
12830C'est une liste de gexps où chaque gexp correspond à une spécification de
12831tache de mcron (@pxref{Exécution de tâches planifiées}).
12832@end table
12833@end deftp
12834
12835@deftp {Type de données} log-rotation
12836Type de données représentant la rotation d'un groupe de fichiers journaux.
12837
12838En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
12839Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
12840d'un journal de cette manière :
12841
12842@example
12843(log-rotation
12844 (frequency 'daily)
12845 (files '("/var/log/apache/*"))
12846 (options '("storedir apache-archives"
12847 "rotate 6"
12848 "notifempty"
12849 "nocompress")))
12850@end example
12851
12852La liste des champs est la suivante :
12853
12854@table @asis
12855@item @code{frequency} (par défaut : @code{'weekly})
12856La fréquence de rotation, un symbole.
12857
12858@item @code{files}
12859La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
12860
12861@item @code{options} (par défaut : @code{'()})
12862La liste des options de rottlog pour cette rotation (@pxref{Configuration
12863parameters,,, rottlog, GNU Rot[t]lg Manual}).
12864
12865@item @code{post-rotate} (par défaut : @code{#f})
12866Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
12867@end table
12868@end deftp
12869
12870@defvr {Variable Scheme} %default-rotations
12871Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
12872autres fichiers.
12873@end defvr
12874
12875@defvr {Variable Scheme} %rotated-files
12876La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
12877s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
12878@end defvr
12879
12880@node Services réseau
12881@subsection Services réseau
12882
12883Le module @code{(gnu services networking)} fournit des services pour
12884configurer les interfaces réseaux.
12885
12886@cindex DHCP, service réseau
12887@defvr {Variable Scheme} dhcp-client-service-type
12888C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
12889configuration d'hôte dynamique) sur toutes les interfaces réseau
12890non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
12891@code{isc-dhcp} par défaut.
12892@end defvr
12893
12894@deffn {Procédure Scheme} dhcpd-service-type
12895Ce type définie un service qui lance un démon DHCP. Pour créer un service
12896de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
12897exemple :
12898
12899@example
12900(service dhcpd-service-type
12901 (dhcpd-configuration
12902 (config-file (local-file "my-dhcpd.conf"))
12903 (interfaces '("enp0s25"))))
12904@end example
12905@end deffn
12906
12907@deftp {Type de données} dhcpd-configuration
12908@table @asis
12909@item @code{package} (par défaut : @code{isc-dhcp})
12910Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
12911@file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
12912défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
12913@item @code{config-file} (par défaut : @code{#f})
12914Le fichier de configuration à utiliser. Il est requis. Il sera passé à
12915@code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
12916objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
12917@code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
12918configuration.
12919@item @code{version} (par défaut : @code{"4"})
12920La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
129214 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
12922et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
12923de détails.
12924@item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
12925Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
12926ce répertoire sera créé s'il n'existe pas.
12927@item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
12928Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
12929@code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
12930@item @code{interfaces} (par défaut : @code{'()})
12931Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
12932n'est pas vide, alors ses éléments (qui doivent être des chaînes de
12933caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
12934du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
12935; voir @code{man dhcpd} pour plus de détails.
12936@end table
12937@end deftp
12938
12939@defvr {Variable Scheme} static-networking-service-type
12940@c TODO Document <static-networking> data structures.
12941C'est le type des interfaces réseaux configurés statiquement.
12942@end defvr
12943
12944@deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
12945 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
12946[#:requirement @code{'(udev)}]
12947Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
12948@var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
12949@var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
12950la passerelle par défaut du réseau. @var{requirement} peut être utilisé
12951pour déclarer une dépendance sur un autre service avant de configurer
12952l'interface.
12953
12954On peut appeler cette procédure plusieurs fois, une fois par interface
12955réseau qui nous intéresse. Dans les coulisses, elle étend
12956@code{static-networking-service-type} avec les interfaces réseaux
12957supplémentaires à gérer.
12958
12959Par exemple :
12960
12961@example
12962(static-networking-service "eno1" "192.168.1.82"
12963 #:gateway "192.168.1.2"
12964 #:name-servers '("192.168.1.2"))
12965@end example
12966@end deffn
12967
12968@cindex wicd
12969@cindex sans-fil
12970@cindex WiFi
12971@cindex gestion du réseau
12972@deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
12973Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
12974de gestion réseau qui cherche à simplifier la configuration des réseaux
12975filaires et sans fil.
12976
12977Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
12978commandes pour interagir avec le démon et configurer le réseau :
12979@command{wicd-client}, une interface graphique et les interfaces
12980utilisateurs @command{wicd-cli} et @command{wicd-curses}.
12981@end deffn
12982
12983@cindex ModemManager
12984
12985@defvr {Variable Scheme} modem-manager-service-type
12986C'est le type de service pour le service
12987@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
12988valeur de ce type de service est un enregistrement
12989@code{modem-manager-configuration}.
12990
12991Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
12992@end defvr
12993
12994@deftp {Type de données} modem-manager-configuration
12995Type de donnée représentant la configuration de ModemManager.
12996
12997@table @asis
12998@item @code{modem-manager} (par défaut : @code{modem-manager})
12999Le paquet ModemManager à utiliser.
13000
13001@end table
13002@end deftp
13003
13004@cindex NetworkManager
13005
13006@defvr {Variable Scheme} network-manager-service-type
13007C'est le type de service pour le service
13008@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
13009valeur pour ce type de service est un enregistrement
13010@code{network-manager-configuration}.
13011
13012Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
13013@end defvr
13014
13015@deftp {Type de données} network-manager-configuration
13016Type de données représentant la configuration de NetworkManager.
13017
13018@table @asis
13019@item @code{network-manager} (par défaut : @code{network-manager})
13020Le paquet NetworkManager à utiliser.
13021
13022@item @code{dns} (par défaut : @code{"default"})
13023Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
13024utilise le fichier de configuration @code{resolv.conf}
13025
13026@table @samp
13027@item default
13028NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
13029de noms fournis par les connexions actives.
13030
13031@item dnsmasq
13032NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
13033utilisant une configuration « DNS disjointe » si vous êtes connecté par un
13034VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
13035nom local.
13036
13037@item none
13038NetworkManager ne modifiera pas @code{resolv.conf}.
13039@end table
13040
13041@item @code{vpn-plugins} (par défaut : @code{'()})
13042C'est la liste des greffons disponibles pour les VPN (réseaux privés
13043virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
13044permet à NetworkManager de gérer des VPN via OpenVPN.
13045
13046@end table
13047@end deftp
13048
13049@cindex Connman
13050@deffn {Variable Scheme} connman-service-type
13051C'est le type de service pour lancer @url{https://01.org/connman,Connman},
13052un gestionnaire de connexions réseaux.
13053
13054Sa valeur doit être un enregistrement @code{connman-configuration} comme
13055dans cet exemple :
13056
13057@example
13058(service connman-service-type
13059 (connman-configuration
13060 (disable-vpn? #t)))
13061@end example
13062
13063Voir plus bas pour des détails sur @code{connman-configuration}.
13064@end deffn
13065
13066@deftp {Type de données} connman-configuration
13067Type de données représentant la configuration de connman.
13068
13069@table @asis
13070@item @code{connman} (par défaut : @var{connman})
13071Le paquet connman à utiliser.
13072
13073@item @code{disable-vpn?} (par défaut : @code{#f})
13074Lorsque la valeur est vraie, désactive le greffon vpn de connman.
13075@end table
13076@end deftp
13077
13078@cindex WPA Supplicant
13079@defvr {Variable Scheme} wpa-supplicant-service-type
13080C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
13081supplicant}, un démon d'authentification requis pour s'authentifier sur des
13082WiFi chiffrés ou des réseaux ethernet.
13083@end defvr
13084
13085@deftp {Type de données} wpa-supplicant-configuration
13086Type données qui représente la configuration de WPA Supplicant.
13087
13088Il prend les paramètres suivants :
13089
13090@table @asis
13091@item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
13092Le paquet WPA Supplicant à utiliser.
13093
13094@item @code{dbus?} (par défaut : @code{#t})
13095Indique s'il faut écouter les requêtes sur D-Bus.
13096
13097@item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
13098Où stocker votre fichier de PID.
13099
13100@item @code{interface} (par défaut : @code{#f})
13101Si une valeur est indiquée, elle doit spécifier le nom d'une interface
13102réseau que WPA supplicant contrôlera.
13103
13104@item @code{config-file} (par défaut : @code{#f})
13105Fichier de configuration facultatif à utiliser.
13106
13107@item @code{extra-options} (par défaut : @code{'()})
13108Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
13109@end table
13110@end deftp
13111
13112@cindex iptables
13113@defvr {Variable Scheme} iptables-service-type
13114C'est le type de service pour mettre en place une configuration iptables.
13115iptables est un outil de filtrage de paquets pris en charge par le noyau
13116Linux. Ce service prend en charge la configuration d'iptable pour IPv4 et
13117IPv6. Un exemple de configuration simple, qui rejette les connexions
13118entrantes sauf celles sur le port 22 est présenté ci-dessous.
13119
13120@lisp
13121(service iptables-service-type
13122 (iptables-configuration
13123 (ipv4-rules (plain-file "iptables.rules" "*filter
13124:INPUT ACCEPT
13125:FORWARD ACCEPT
13126:OUTPUT ACCEPT
13127-A INPUT -p tcp --dport 22 -j ACCEPT
13128-A INPUT -j REJECT --reject-with icmp-port-unreachable
13129COMMIT
13130"))
13131 (ipv6-rules (plain-file "ip6tables.rules" "*filter
13132:INPUT ACCEPT
13133:FORWARD ACCEPT
13134:OUTPUT ACCEPT
13135-A INPUT -p tcp --dport 22 -j ACCEPT
13136-A INPUT -j REJECT --reject-with icmp6-port-unreachable
13137COMMIT
13138"))))
13139@end lisp
13140@end defvr
13141
13142@deftp {Type de données} iptables-configuration
13143Type de données représentant la configuration d'iptables.
13144
13145@table @asis
13146@item @code{iptables} (par défaut : @code{iptables})
13147Le paquet iptables qui fournit @code{iptables-restore} et
13148@code{ip6tables-restore}.
13149@item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
13150Les règles iptables à utiliser. Elles seront passées à
13151@code{iptables-restore}. Cela peut être un objet « simili-fichier »
13152(@pxref{G-Expressions, file-like objects}).
13153@item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
13154Les règles iptables à utiliser. Elles seront passées à
13155@code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
13156(@pxref{G-Expressions, file-like objects}).
13157@end table
13158@end deftp
13159
13160@cindex NTP (Network Time Protocol), service
13161@cindex horloge
13162@defvr {Variable Scheme} ntp-service-type
13163C'est le type de service qui lance le démon @uref{http://www.ntp.org,
13164Network Time Protocol (NTP)}, @command{ntpd}. Le démon gardera l'horloge
13165système synchronisée avec celle des serveurs NTP spécifiés.
13166
13167La valeur de ce service est un objet @code{ntpd-configuration}, décrit
13168ci-dessous.
13169@end defvr
13170
13171@deftp {Type de données} ntp-configuration
13172C'est le type de données représentant la configuration du service NTP.
13173
13174@table @asis
13175@item @code{servers} (par défaut : @code{%ntp-servers})
13176C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
13177synchronisé.
13178
13179@item @code{allow-large-adjustment?} (par défaut : @code{#f})
13180Détermine si @code{ntpd} peut faire un ajustement initial de plus de
131811@tie{}000 secondes.
13182
13183@item @code{ntp} (par défaut : @code{ntp})
13184Le paquet NTP à utiliser.
13185@end table
13186@end deftp
13187
13188@defvr {Variable Scheme} %ntp-servers
13189Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
13190serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
13191@end defvr
13192
13193@cindex OpenNTPD
13194@deffn {Procédure Scheme} openntpd-service-type
13195Lance le démon NTP @command{ntpd}, implémenté par
13196@uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
13197système synchronisée avec celle des serveurs donnés.
13198
13199@example
13200(service
13201 openntpd-service-type
13202 (openntpd-configuration
13203 (listen-on '("127.0.0.1" "::1"))
13204 (sensor '("udcf0 correction 70000"))
13205 (constraint-from '("www.gnu.org"))
13206 (constraints-from '("https://www.google.com/"))
13207 (allow-large-adjustment? #t)))
13208
13209@end example
13210@end deffn
13211
13212@deftp {Type de données} openntpd-configuration
13213@table @asis
13214@item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
13215L'exécutable openntpd à utiliser.
13216@item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
13217Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
13218démon ntpd.
13219@item @code{query-from} (par défaut : @code{'()})
13220Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
13221sortantes.
13222@item @code{sensor} (par défaut : @code{'()})
13223Spécifie une liste de senseurs de différences de temps que ntpd devrait
13224utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
13225qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
13226documentation en amont} pour plus d'informations.
13227@item @code{server} (par défaut : @var{%ntp-servers})
13228Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
13229lesquels se synchroniser.
13230@item @code{servers} (par défaut : @code{'()})
13231Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
13232NTP avec lesquelles se synchroniser.
13233@item @code{constraint-from} (par défaut : @code{'()})
13234@code{ntpd} peut être configuré pour demander la « Date » à des serveurs
13235HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
13236pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
13237l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
13238authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
13239serveurs HTTPS qui fournissent cette contrainte.
13240@item @code{constraints-from} (par défaut : @code{'()})
13241Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
13242ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
13243noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
13244contrainte médiane.
13245@item @code{allow-large-adjustment?} (par défaut : @code{#f})
13246Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
13247secondes.
13248@end table
13249@end deftp
13250
13251@cindex inetd
13252@deffn {Variable Scheme} inetd-service-type
13253Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
13254inetutils, GNU Inetutils}). @command{inetd} écoute des connexions sur des
13255sockets internet et démarre le programme spécifié uniquement lorsqu'une
13256connexion arrive sur l'un de ces sockets.
13257
13258La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
13259suivant configure le démon @command{inetd} pour qu'il fournisse le service
13260@command{echo}, ainsi qu'un service smtp qui transfère le trafic smtp par
13261ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
13262:
13263
13264@example
13265(service
13266 inetd-service-type
13267 (inetd-configuration
13268 (entries (list
13269 (inetd-entry
13270 (name "echo")
13271 (socket-type 'stream)
13272 (protocol "tcp")
13273 (wait? #f)
13274 (user "root"))
13275 (inetd-entry
13276 (node "127.0.0.1")
13277 (name "smtp")
13278 (socket-type 'stream)
13279 (protocol "tcp")
13280 (wait? #f)
13281 (user "root")
13282 (program (file-append openssh "/bin/ssh"))
13283 (arguments
13284 '("ssh" "-qT" "-i" "/path/to/ssh_key"
13285 "-W" "smtp-server:25" "user@@hostname")))))
13286@end example
13287
13288Voir plus bas pour plus de détails sur @code{inetd-configuration}.
13289@end deffn
13290
13291@deftp {Type de données} inetd-configuration
13292Type de données représentant la configuration de @command{inetd}.
13293
13294@table @asis
13295@item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
13296L'exécutable @command{inetd} à utiliser.
13297
13298@item @code{entries} (par défaut : @code{'()})
13299Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
13300crée avec le constructeur @code{inetd-entry}.
13301@end table
13302@end deftp
13303
13304@deftp {Type de données} inetd-entry
13305Type de données représentant une entrée dans la configuration
13306d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
13307@command{inetd} écoutera les requêtes.
13308
13309@table @asis
13310@item @code{node} (par défaut : @code{#f})
13311Chaîne de caractères facultative, un liste d'adresses locales séparées par
13312des virgules que @command{inetd} devrait utiliser pour écouter ce service.
13313@xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
13314complète de toutes les options.
13315@item @code{name}
13316Une chaîne de caractères dont le nom doit correspondre à une entrée de
13317@code{/etc/services}.
13318@item @code{socket-type}
13319Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
13320@code{'seqpacket}.
13321@item @code{protocol}
13322Une chaîne de caractères qui doit correspondre à une entrée dans
13323@code{/etc/protocols}.
13324@item @code{wait?} (par défaut : @code{#t})
13325Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
13326d'écouter de nouvelles demandes de service.
13327@item @code{user}
13328Une chaîne de caractères contenant le nom d'utilisateur (et éventuellement
13329de groupe) de l'utilisateur en tant que lequel le serveur devrait tourner.
13330Le nom du groupe peut être spécifié comme un suffixe, séparé par un
13331deux-points ou un point, c.-à-d.@: @code{"utilisateur"},
13332@code{"utilisateur:groupe"} ou @code{"utilisateur.groupe"}.
13333@item @code{program} (par défaut : @code{"internal"})
13334Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
13335@command{inetd} devrait utiliser un service inclus.
13336@item @code{arguments} (par défaut : @code{'()})
13337Une liste de chaînes de caractères ou d'objets simili-fichiers qui sont les
13338arguments du programme du serveur, en commençant par le zéroième argument,
13339c.-à-d.@: le nom du programme lui-même. Pour les services internes à
13340@command{inetd}, cette entrée doit être @code{'()} ou @code{'("internal")}.
13341@end table
13342
13343@xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
13344discussion plus détaillée de chaque champ de configuration.
13345@end deftp
13346
13347@cindex Tor
13348@defvr {Variable Scheme} tor-service-type
13349C'est le type pour un service qui lance le démon de navigation anonyme
13350@uref{https://torproject.org, Tor}. Le service est configuré avec un
13351enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
13352lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
13353@code{tor}.
13354
13355@end defvr
13356
13357@deftp {Type de données} tor-configuration
13358@table @asis
13359@item @code{tor} (par défaut : @code{tor})
13360Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
13361@file{bin/tor} relativement à son répertoire de sortie. Le paquet par
13362défaut est le l'implémentation du @uref{https://www.torproject.org, projet
13363Tor}.
13364
13365@item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
13366Le fichier de configuration à utiliser. Il sera ajouté au fichier de
13367configuration par défaut, et le fichier de configuration final sera passé à
13368@code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
13369simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
13370tor} pour plus de détails sur la syntaxe du fichier de configuration.
13371
13372@item @code{hidden-services} (par défaut : @code{'()})
13373La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
13374n'importe quel service cache que vous ajoutez à cette liste, la
13375configuration appropriée pour activer le service caché sera automatiquement
13376ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
13377enregistrements @code{<hidden-service>} avec la procédure
13378@code{tor-hidden-service} décrite plus bas.
13379
13380@item @code{socks-socket-type} (par défaut : @code{'tcp})
13381Le type de socket par défaut que Tor devrait utiliser pour les socket
13382SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
13383@code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
13384l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
13385@code{'unix}, Tor écoutera sur le socket UNIX domain
13386@file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
13387groupe @code{tor}.
13388
13389Si vous voulez personnaliser le socket SOCKS plus avant, laissez
13390@code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
13391@code{config-file} pour remplacer les valeurs par défaut avec votre propre
13392option @code{SocksPort}.
13393@end table
13394@end deftp
13395
13396@cindex service caché
13397@deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
13398Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
13399@var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
13400comme dans :
13401
13402@example
13403 '((22 "127.0.0.1:22")
13404 (80 "127.0.0.1:8080"))
13405@end example
13406
13407Dans cet exemple, le port 22 du service caché est relié au port local 22 et
13408le port 80 est relié au port local 8080.
13409
13410Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
13411fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
13412caché.
13413
13414Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
13415Tor project's documentation} pour trouver plus d'information.
13416@end deffn
13417
13418Le module @code{(gnu services rsync)} fournit les services suivant :
13419
13420Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
13421disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
13422fichiers existants ou en téléverser des nouveaux.
13423
13424@deffn {Variable Scheme} rsync-service-type
13425C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
13426un enregistrement @command{rsync-configuration} comme dans cet exemple :
13427
13428@example
13429(service rsync-service-type)
13430@end example
13431
13432Voir plus pas pour trouver des détails à propos de
13433@code{rsync-configuration}.
13434@end deffn
13435
13436@deftp {Type de données} rsync-configuration
13437Type de données représentant la configuration de @code{rsync-service}.
13438
13439@table @asis
13440@item @code{package} (par défaut : @var{rsync})
13441Le paquet @code{rsync} à utiliser.
13442
13443@item @code{port-number} (par défaut : @code{873})
13444Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
13445le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
13446tant qu'utilisateur et groupe @code{root}.
13447
13448@item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
13449Nom du fichier où @command{rsync} écrit son PID.
13450
13451@item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
13452Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
13453
13454@item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
13455Nom du fichier où @command{rsync} écrit son fichier de journal.
13456
13457@item @code{use-chroot?} (par défaut : @var{#t})
13458S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
13459
13460@item @code{share-path} (par défaut : @file{/srv/rsync})
13461Emplacement du répertoire partagé de @command{rsync}.
13462
13463@item @code{share-comment} (par défaut : @code{"Rsync share"})
13464Commentaire du répertoire partagé de @command{rsync}.
13465
13466@item @code{read-only?} (par défaut : @var{#f})
13467Permission en écriture sur le répertoire partagé.
13468
13469@item @code{timeout} (par défaut : @code{300})
13470Délai d'attente d'entrée-sortie en secondes.
13471
13472@item @code{user} (par défaut : @var{"root"})
13473Propriétaire du processus @code{rsync}.
13474
13475@item @code{group} (par défaut : @var{"root"})
13476Groupe du processus @code{rsync}.
13477
13478@item @code{uid} (par défaut : @var{"rsyncd"})
13479Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
13480fichiers ont lieu si le démon a été lancé en @code{root}.
13481
13482@item @code{gid} (par défaut : @var{"rsyncd"})
13483Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
13484
13485@end table
13486@end deftp
13487
13488En plus, @code{(gnu services ssh)} fournit les services suivant.
13489@cindex SSH
13490@cindex serveur SSH
13491
13492@deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
13493 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
13494[#:allow-empty-passwords? #f] [#:root-login? #f] @
13495[#:syslog-output? #t] [#:x11-forwarding? #t] @
13496[#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
13497[#:public-key-authentication? #t] [#:initialize? #t]
13498Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
13499@var{port-number}. @var{host-key} doit désigner un fichier contenant la
13500clef d'hôte et ne doit être lisible que par root.
13501
13502Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
13503qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
13504@var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
13505dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
13506vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
13507
13508Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
13509lors de l'activation du service s'ils n'existent pas encore. Cela peut
13510prendre du temps et demande une interaction.
13511
13512Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
13513générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
13514une paire de clefs dont la clef privée sera stockée dans le fichier
13515@var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
13516
13517Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
13518interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
13519d'hôtes et d'adresses.
13520
13521@var{allow-empty-passwords?} spécifie si les connexions avec des mots de
13522passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
13523root est acceptée.
13524
13525Les autres options devraient être évidentes.
13526@end deffn
13527
13528@cindex SSH
13529@cindex serveur SSH
13530@deffn {Variable Scheme} openssh-service-type
13531C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
13532@command{sshd}. Sa valeur doit être un enregistrement
13533@code{openssh-configuration} comme dans cet exemple :
13534
13535@example
13536(service openssh-service-type
13537 (openssh-configuration
13538 (x11-forwarding? #t)
13539 (permit-root-login 'without-password)
13540 (authorized-keys
13541 `(("alice" ,(local-file "alice.pub"))
13542 ("bob" ,(local-file "bob.pub"))))))
13543@end example
13544
13545Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
13546
13547Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
13548dans cet exemple :
13549
13550@example
13551(service-extension openssh-service-type
13552 (const `(("charlie"
13553 ,(local-file "charlie.pub")))))
13554@end example
13555@end deffn
13556
13557@deftp {Type de données} openssh-configuration
13558C'est l'enregistrement de la configuration de la commande @command{sshd}
13559d'OpenSSH.
13560
13561@table @asis
13562@item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
13563Nom du fichier où @command{sshd} écrit son PID.
13564
13565@item @code{port-number} (par défaut : @code{22})
13566Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
13567
13568@item @code{permit-root-login} (par défaut : @code{#f})
13569Ce champ détermine si et quand autoriser les connexions en root. Si la
13570valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
13571est @code{#t}, elles sont autorisées. S'il s'agit du symbole
13572@code{'without-password}, alors les connexions root sont autorisées mais pas
13573par une authentification par mot de passe.
13574
13575@item @code{allow-empty-passwords?} (par défaut : @code{#f})
13576Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
13577peuvent se connecter. Sinon, ils ne peuvent pas.
13578
13579@item @code{password-authentication?} (par défaut : @code{#t})
13580Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
13581mot de passe. Sinon, ils doivent utiliser une autre méthode
13582d'authentification.
13583
13584@item @code{public-key-authentication?} (par défaut : @code{#t})
13585Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
13586clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
13587d'authentification.
13588
13589Les clefs publiques autorisées sont stockées dans
13590@file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
13591version 2.
13592
13593@item @code{x11-forwarding?} (par défaut : @code{#f})
13594Lorsque la valeur est vraie, le transfert de connexion du client graphique
13595X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
13596de @command{ssh} fonctionneront.
13597
13598@item @code{allow-agent-forwarding?} (par défaut : @code{#t})
13599Indique s'il faut autoriser la redirection d'agent.
13600
13601@item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
13602Indique s'il faut autoriser la redirection TCP.
13603
13604@item @code{gateway-ports?} (par défaut : @code{#f})
13605Indique s'il faut autoriser les ports de passerelle.
13606
13607@item @code{challenge-response-authentication?} (par défaut : @code{#f})
13608Spécifie si l'authentification par défi est autorisée (p.@: ex.@: via PAM).
13609
13610@item @code{use-pam?} (par défaut : @code{#t})
13611Active l'interface avec le module d'authentification greffable, PAM. Si la
13612valeur est @code{#t}, cela activera l'authentification PAM avec
13613@code{challenge-response-authentication?} et
13614@code{password-authentication?}, en plus des modules de compte et de session
13615de PAM pour tous les types d'authentification.
13616
13617Comme l'authentification par défi de PAM sert généralement un rôle
13618équivalent à l'authentification par mot de passe, vous devriez désactiver
13619soit @code{challenge-response-authentication?}, soit
13620@code{password-authentication?}.
13621
13622@item @code{print-last-log?} (par défaut : @code{#t})
13623Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
13624connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
13625interactive.
13626
13627@item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
13628Configure les sous-systèmes externes (p.@: ex.@: le démon de transfert de
13629fichiers).
13630
13631C'est une liste de paires, composées chacune du nom du sous-système et d'une
13632commande (avec éventuellement des arguments) à exécuter à la demande du
13633sous-système.
13634
13635La commande @command{internal-sftp} implémente un serveur SFTP dans le
13636processus. Autrement, on peut spécifier la commande @command{sftp-server} :
13637@example
13638(service openssh-service-type
13639 (openssh-configuration
13640 (subsystems
13641 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
13642@end example
13643
13644@item @code{accepted-environment} (par défaut : @code{'()})
13645Liste de chaînes de caractères qui décrivent les variables d'environnement
13646qui peuvent être exportées.
13647
13648Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
13649@code{man sshd_config}.
13650
13651Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
13652Elle est initialisée par les émulateurs de terminaux qui supportent les
13653couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
13654shell pour activer les couleurs sur la ligne de commande si cette variable
13655est initialisée.
13656
13657@example
13658(service openssh-service-type
13659 (openssh-configuration
13660 (accepted-environment '("COLORTERM"))))
13661@end example
13662
13663@item @code{authorized-keys} (par défaut : @code{'()})
13664@cindex clefs autorisées, SSH
13665@cindex SSH, clefs autorisées
13666C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
13667d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
13668représentent les clefs publiques SSH. Par exemple :
13669
13670@example
13671(openssh-configuration
13672 (authorized-keys
13673 `(("rekado" ,(local-file "rekado.pub"))
13674 ("chris" ,(local-file "chris.pub"))
13675 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
13676@end example
13677
13678@noindent
13679enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
13680@code{chris} et @code{root}.
13681
13682Des clefs autorisées supplémentaires peuvent être spécifiées via
13683@code{service-extension}.
13684
13685Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
13686@file{~/.ssh/authorized_keys}.
13687
13688@item @code{log-level} (par défaut : @code{'info})
13689C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
13690@code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
13691Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
13692des noms de niveaux.
13693
13694@item @code{extra-content} (par défaut : @code{""})
13695Ce champ peut être utilisé pour ajouter un texte arbitraire au fichier de
13696configuration. C'est particulièrement utile pour des configurations
13697élaborées qui ne pourraient pas être exprimées autrement. Cette
13698configuration, par exemple, désactiverait les connexions en root, mais les
13699permettrait depuis une adresse IP spécifique :
13700
13701@example
13702(openssh-configuration
13703 (extra-content "\
13704Match Address 192.168.0.1
13705 PermitRootLogin yes"))
13706@end example
13707
13708@end table
13709@end deftp
13710
13711@deffn {Procédure Scheme} dropbear-service [@var{config}]
13712Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
13713Dropbear} avec la configuration @var{config} donnée, un objet
13714@code{<dropbear-configuration>}.
13715
13716Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
13717ajoutez cet appel au champ @code{services} de votre système d'exploitation :
13718
13719@example
13720(dropbear-service (dropbear-configuration
13721 (port-number 1234)))
13722@end example
13723@end deffn
13724
13725@deftp {Type de données} dropbear-configuration
13726Ce type de données représente la configuration d'un démon SSH Dropbear.
13727
13728@table @asis
13729@item @code{dropbear} (par défaut : @var{dropbear})
13730Le paquet Dropbear à utiliser.
13731
13732@item @code{port-number} (par défaut : 22)
13733Le port TCP sur lequel le démon attend des connexions entrantes.
13734
13735@item @code{syslog-output?} (par défaut : @code{#t})
13736Indique s'il faut activer la sortie vers syslog.
13737
13738@item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
13739Nom du fichier de PID du démon.
13740
13741@item @code{root-login?} (par défaut : @code{#f})
13742Indique s'il faut autoriser les connexions en @code{root}.
13743
13744@item @code{allow-empty-passwords?} (par défaut : @code{#f})
13745Indique s'il faut autoriser les mots de passes vides.
13746
13747@item @code{password-authentication?} (par défaut : @code{#t})
13748Indique s'il faut autoriser l'authentification par mot de passe.
13749@end table
13750@end deftp
13751
13752@defvr {Variable Scheme} %facebook-host-aliases
13753Cette variable contient une chaîne de caractères à utiliser dans
13754@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
13755Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
13756des serveurs connus du service en ligne Facebook — p.@: ex.@:
13757@code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
13758équivalent en IPv6, @code{::1}.
13759
13760Cette variable est typiquement utilisée dans le champ @code{hosts-file}
13761d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
13762
13763@example
13764(use-modules (gnu) (guix))
13765
13766(operating-system
13767 (host-name "mamachine")
13768 ;; ...
13769 (hosts-file
13770 ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
13771 ;; et « mamachine », ainsi que pour les serveurs de Facebook.
13772 (plain-file "hosts"
13773 (string-append (local-host-aliases host-name)
13774 %facebook-host-aliases))))
13775@end example
13776
13777Ce mécanisme peut éviter que des programmes qui tournent localement, comme
13778des navigateurs Web, ne se connectent à Facebook.
13779@end defvr
13780
13781Le module @code{(gnu services avahi)} fourni la définition suivante.
13782
13783@defvr {Variable Scheme} avahi-service-type
13784C'est le service qui lance @command{avahi-daemon}, un service système qui
13785répond aux requêtes mDNS/DNS-SD qui permet la découverte de service et la
13786recherche de nom en « zéro configuration » (voir @uref{http://avahi.org/}).
13787Sa valeur doit être un enregistrement @code{zero-configuration} — voir plus
13788bas.
13789
13790Ce service étend le démon de cache de services de noms (nscd) pour qu'il
13791puisse résoudre les noms d'hôtes en @code{.local} avec
13792@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name Service Switch}, pour plus d'informations sur la résolution des noms d'hôte.
13793
13794En plus, cela ajoute le paquet @var{avahi} au profil du système pour que les
13795commandes comme @command{avahi-browse} soient directement utilisables.
13796@end defvr
13797
13798@deftp {Type de données} avahi-configuration
13799Type de données représentant la configuration d'Avahi.
13800
13801@table @asis
13802
13803@item @code{host-name} (par défaut : @code{#f})
13804Si la valeur n'est pas @code{#f}, utilise cette valeur comme nom d'hôte à
13805publier pour la machine ; sinon, utilise le vrai nom d'hôte de la machine.
13806
13807@item @code{publish?} (par défaut : @code{#t})
13808Lorsque la valeur est vraie, permet la publication sur le réseau (en
13809diffusion) des noms d'hôtes et des services.
13810
13811@item @code{publish-workstation?} (par défaut : @code{#t})
13812Lorsque la valeur est vraie, @command{avahi-daemon} publie le nom d'hôte et
13813l'adresse IP de la machine via mDNS sur le réseau local. Pour voir les noms
13814d'hôtes publiés sur votre réseau local, vous pouvez lancer :
13815
13816@example
13817avahi-browse _workstation._tcp
13818@end example
13819
13820@item @code{wide-area?} (par défaut : @code{#f})
13821Lorsque la valeur est vraie, DNS-SD sur DNS unicast est activé.
13822
13823@item @code{ipv4?} (par défaut : @code{#t})
13824@itemx @code{ipv6?} (par défaut : @code{#t})
13825Ces champs déterminent s'il faut utiliser des socket IPv4/IPv6.
13826
13827@item @code{domains-to-browse} (par défaut : @code{'()})
13828C'est la liste des domaines sur lesquels naviguer.
13829@end table
13830@end deftp
13831
13832@deffn {Variable Scheme} openvswitch-service-type
13833C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
13834dont la valeur devrait être un objet @code{openvswitch-configuration}.
13835@end deffn
13836
13837@deftp {Type de données} openvswitch-configuration
13838Type de données représentant la configuration de Open vSwitch, un
13839commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
13840massive des réseaux avec des extensions programmables.
13841
13842@table @asis
13843@item @code{package} (par défaut : @var{openvswitch})
13844Objet de paquet de Open vSwitch.
13845
13846@end table
13847@end deftp
13848
13849@node Système de fenêtrage X
13850@subsection Système de fenêtrage X
13851
13852@cindex X11
13853@cindex Système de fenêtrage X
13854@cindex gestionnaire de connexion
13855La prise en chargue du système d'affichage graphique X Window — en
13856particulier Xorg — est fournit par le module @code{(gnu services xorg)}.
13857Remarquez qu'il n'y a pas de procédure @code{xorg-service}. À la place, le
13858serveur X est démarré par le @dfn{gestionnaire de connexion}, par défaut le
13859gestionnaire d'affichage de GNOME (GDM).
13860
13861@cindex GDM
13862@cindex GNOME, gestionnaire de connexion
13863GDM permet évidemment aux utilisateurs de se connecter et d'ouvrir un
13864gestionnaire de fenêtre ou un gestionnaire d'environnement autre que GNOME ;
13865pour ceux qui utilisent GNOME, GDM est requis pour certaines fonctionnalités
13866comme l'écran de verrouillage automatique.
13867
13868@cindex gestionnaire de fenêtre
13869Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
13870fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
13871préférence en l'ajoutant au champ @code{packages} de votre définition de
13872système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
13873packages}).
13874
13875@defvr {Variable Scheme} gdm-service-type
13876C'est le type pour le @uref{https://wiki.gnome.org/Projects/GDM/,
13877gestionnaire d'affichage de GNOME} (GDM), un programme qui gère les serveurs
13878d'affichage graphiques et s'occupe de la connexion graphique des
13879utilisateurs. Sa valeur doit être un @code{gdm-configuration} (voir plus
13880bas).
13881
13882@cindex types de sessions (X11)
13883@cindex X11, types de sessions
13884GDM cherche des @dfn{types de sessions} définies par les fichiers
13885@file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
13886permet aux utilisateurs de choisir une session depuis l'écran de connexion.
13887Les paquets comme @code{gnmoe}, @code{xfce} et @code{i3} fournissent des
13888fichiers @file{.desktop} ; les ajouter à l'ensemble des paquets du système
13889les rendra automatiquement disponibles sur l'écran de connexion.
13890
13891En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
13892disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
13893un gestionnaire de fenêtre au un autre client X.
13894@end defvr
13895
13896@deftp {Type de données} gdm-configuration
13897@table @asis
13898@item @code{auto-login?} (par défaut : @code{#f})
13899@itemx @code{default-user} (par défaut : @code{#f})
13900Lorsque @code{auto-login?} est faux, GDM présente un écran de connexion.
13901
13902Lorsque @code{auto-login?} est vrai, GDM se connecte directement en tant que
13903@code{default-user}.
13904
13905@item @code{gnome-shell-assets} (par défaut : …)
13906Liste de données requises par GDM : un thème d'icônes, des polices, etc.
13907
13908@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
13909Configuration du serveur graphique Xorg.
13910
13911@item @code{xsession} (par défaut : @code{xinitrc})
13912Le script à lancer avant de démarrer une session X.
13913
13914@item @code{dbus-daemon} (par défaut : @code{dbus-daemon-wrapper})
13915Nom du fichier de l'exécutable @code{dbus-daemon}.
13916
13917@item @code{gdm} (par défaut : @code{gdm})
13918Le paquet GDM à utiliser.
13919@end table
13920@end deftp
13921
13922@defvr {Variable Scheme} slim-service-type
13923C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
13924
13925Comme GDM, SLiM recherche des types de sessions décrites par des fichiers
13926@file{.desktop} et permet aux utilisateurs de choisir une session à partir
13927de l'écran de connexion avec @kbd{F1}. Il comprend aussi les fichiers
13928@file{~/.xsession}.
13929@end defvr
13930
13931@deftp {Type de données} slim-configuration
13932Type de données représentant la configuration de @code{slim-service-type}.
13933
13934@table @asis
13935@item @code{allow-empty-passwords?} (par défaut : @code{#t})
13936S'il faut autoriser les connexions avec un mot de passe vide.
13937
13938@item @code{auto-login?} (par défaut : @code{#f})
13939@itemx @code{default-user} (par défaut : @code{""})
13940Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
13941
13942Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
13943que @code{default-user}.
13944
13945@item @code{theme} (par défaut : @code{%default-slim-theme})
13946@itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
13947Le thème graphique à utiliser et son nom.
13948
13949@item @code{auto-login-session} (par défaut : @code{#f})
13950Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
13951comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
13952"/bin/windowmaker")}.
13953
13954Si la valeur est fausse, une session décrite par l'un des fichiers
13955@file{.desktop} disponibles dans @code{/run/current-system/profile} et
13956@code{~/.guix-profile} sera utilisée.
13957
13958@quotation Remarque
13959Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
13960système ou dans votre profil utilisateur. Sinon, si
13961@code{auto-login-session} est faux, vous ne serez jamais capable de vous
13962connecter.
13963@end quotation
13964
13965@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
13966Configuration du serveur graphique Xorg.
13967
13968@item @code{xauth} (par défaut : @code{xauth})
13969Le paquet XAuth à utiliser.
13970
13971@item @code{shepherd} (par défaut : @code{shepherd})
13972Le paquet Shepherd à utiliser pour invoquer @command{halt} et
13973@command{reboot}.
13974
13975@item @code{sessreg} (par défaut : @code{sessreg})
13976Le paquet sessreg à utiliser pour enregistrer la session.
13977
13978@item @code{slim} (par défaut : @code{slim})
13979Le paquet SLiM à utiliser.
13980@end table
13981@end deftp
13982
13983@defvr {Variable Scheme} %default-theme
13984@defvrx {Variable Scheme} %default-theme-name
13985Le thème SLiM par défaut et son nom.
13986@end defvr
13987
13988
13989@deftp {Type de données} sddm-configuration
13990C'est le type de données représentant la configuration du service sddm.
13991
13992@table @asis
13993@item @code{display-server} (par défaut : "x11")
13994Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
13995valeurs valides sont « x11 » et « wayland ».
13996
13997@item @code{numlock} (par défaut : "on")
13998Les valeurs valides sont « on », « off » ou « none ».
13999
14000@item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
14001La commande à lancer à l'arrêt du système.
14002
14003@item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
14004La commande à lancer lors du redémarrage du système.
14005
14006@item @code{theme} (par défaut : "maldives")
14007Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
14008et « maldives ».
14009
14010@item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
14011Le répertoire où se trouvent les thèmes.
14012
14013@item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
14014Répertoire où se trouvent les avatars.
14015
14016@item @code{default-path} (par défaut : "/run/current-system/profile/bin")
14017Le PATH par défaut à utiliser.
14018
14019@item @code{minimum-uid} (par défaut : 1000)
14020UID minimum pour être affiché dans SDDM.
14021
14022@item @code{maximum-uid} (par défaut : 2000)
14023UID maximum pour être affiché dans SDDM
14024
14025@item @code{remember-last-user?} (par défaut : #t)
14026S'il faut se rappeler le dernier utilisateur connecté.
14027
14028@item @code{remember-last-session?} (par défaut : #t)
14029S'il faut se rappeler la dernière session.
14030
14031@item @code{hide-users} (par défaut : "")
14032Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
14033
14034@item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
14035Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
14036de SDDM.
14037
14038@item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
14039Le script à lancer avant de démarrer une session wayland.
14040
14041@item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
14042Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
14043wayland.
14044
14045@item @code{xorg-configuration} (par défaut : @code{(xorg-configuration)})
14046Configuration du serveur graphique Xorg.
14047
14048@item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
14049Chemin vers xauth.
14050
14051@item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
14052Chemin vers Xephyr.
14053
14054@item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
14055Le script à lancer après avoir démarré xorg-server.
14056
14057@item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
14058Le script à lancer avant d'arrêter xorg-server.
14059
14060@item @code{xsession-command} (par défaut : @code{xinitrc})
14061Le script à lancer avant de démarrer une session X.
14062
14063@item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
14064Répertoire où trouver les fichiers .desktop pour les sessions X.
14065
14066@item @code{minimum-vt} (par défaut : 7)
14067VT minimal à utiliser.
14068
14069@item @code{auto-login-user} (par défaut : "")
14070Utilisateur à utiliser pour la connexion automatique.
14071
14072@item @code{auto-login-session} (par défaut : "")
14073Le fichier desktop à utiliser pour la connexion automatique.
14074
14075@item @code{relogin?} (par défaut : #f)
14076S'il faut se reconnecter après la déconnexion.
14077
14078@end table
14079@end deftp
14080
14081@cindex gestionnaire de connexion
14082@cindex connexion X11
14083@deffn {Procédure Scheme} sddm-service config
14084Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
14085avec une configuration de type @code{<sddm-configuration>}.
14086
14087@example
14088 (sddm-service (sddm-configuration
14089 (auto-login-user "Alice")
14090 (auto-login-session "xfce.desktop")))
14091@end example
14092@end deffn
14093
14094@cindex Xorg, configuration
14095@deftp {Type de données} xorg-configuration
14096Ce type de données représente la configuration du serveur d'affichage
14097graphique Xorg. Remarquez qu'il ne s'agit pas d'un service Xorg ; à la
14098place, le serveur X est démarré par un « gestionnaire d'affichage graphique
14099» comme GDM, SDDM et SLiM. Ainsi, la configuration de ces gestionnaires
14100d'affichage agrègent un enregistrement @code{xorg-configuration}.
14101
14102@table @asis
14103@item @code{modules} (par défaut : @code{%default-xorg-modules})
14104C'est une liste de @dfn{paquets de module} chargés par le serveur Xorg —
14105p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard} etc.
14106
14107@item @code{fonts} (par défaut : @code{%default-xorg-fonts})
14108C'est une liste de répertoires de polices à ajouter au @dfn{chemin de
14109polices} du serveur.
14110
14111@item @code{drivers} (par défaut : @code{'()})
14112Cela doit être soit la liste vide, auquel cas Xorg choisit un pilote
14113graphique automatiquement, soit une liste de noms de pilotes qui seront
14114essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}
14115
14116@item @code{resolutions} (par défaut : @code{'()})
14117Lorsque @code{resolutions} est la liste vide, Xorg choisit une résolution
14118d'écran appropriée. Sinon, il doit s'agir d'une liste de résolutions — p.@:
14119ex.@: @code{((1024 768) (640 480))}
14120
14121@cindex disposition du clavier, pour Xorg
14122@cindex disposition des touches, Xorg
14123@item @code{keyboard-layout} (par défaut : @code{#f})
14124Si la valeur est @code{#f}, Xorg utilise la disposition du clavier par
14125défaut — habituellement la disposition anglaise américaine (« qwerty ») pour
14126un clavier de PC à 105 touches.
14127
14128Sinon cela doit être un objet @code{keyboard-layout} spécifiant la
14129disposition du clavier à utiliser lorsque Xorg tourne. @xref{Disposition du clavier} pour plus d'informations sur la manière de spécifier la disposition
14130du clavier.
14131
14132@item @code{extra-config} (par défaut : @code{'()})
14133C'est une liste de chaînes de caractères ou d'objets ajoutés au fichier de
14134configuration. Elle est utile pour ajouter du texte supplémentaire
14135directement dans le fichier de configuration.
14136
14137@item @code{server} (par défaut : @code{xorg-server})
14138C'est le paquet fournissant le serveur Xorg.
14139
14140@item @code{server-arguments} (par défaut : @code{%default-xorg-server-arguments})
14141Liste d'arguments de la ligne de commande supplémentaires à passer au
14142serveur X. La valeur par défaut est @code{-nolisten tcp}.
14143@end table
14144@end deftp
14145
14146@deffn {Procédure Scheme} set-xorg-configuration @var{config} @
14147 [@var{login-manager-service-type}]
14148Dit au gestionnaire de connexion (de type @var{login-manager-service-type})
14149d'utiliser @var{config}, un enregistrement <xorg-configuration>.
14150
14151Comme la configuration Xog est incluse dans la configuration du gestionnaire
14152de connexion — p.@: ex.@: @code{gdm-configuration} — cette procédure fournit
14153un raccourci pour configurer Xorg.
14154@end deffn
14155
14156@deffn {Procédure Scheme} xorg-start-command [@var{config}]
14157Renvoie un script @code{startx} dans lequel les modules, les polices, etc,
14158spécifiés dans @var{config} sont disponibles. Le résultat devrait être
14159utilisé à la place de @code{startx}.
14160
14161Habituellement le serveur X est démarré par un gestionnaire de connexion.
14162@end deffn
14163
14164
14165@deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
14166Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
14167économiseur d'écran dont la commande est @var{program}, à l'ensemble des
14168programmes setuid et lui ajoute une entrée PAM. Par exemple :
14169
14170@lisp
14171(screen-locker-service xlockmore "xlock")
14172@end lisp
14173
14174rend utilisable le bon vieux XlockMore.
14175@end deffn
14176
14177
14178@node Services d'impression
14179@subsection Services d'impression
14180
14181@cindex support des imprimantes avec CUPS
14182Le module @code{(gnu services cups)} fournit une définition de service Guix
14183pour le service d'impression CUPS. Pour ajouter la prise en charge d'une
14184imprimante à un système Guix, ajoutez un @code{cups-service} à la définition
14185du système d'exploitation :
14186
14187@deffn {Variable Scheme} cups-service-type
14188Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
14189être une configuration CUPS valide (voir plus bas). Pour utiliser les
14190paramètres par défaut, écrivez simplement :
14191@example
14192(service cups-service-type)
14193@end example
14194@end deffn
14195
14196La configuration de CUPS contrôle les paramètres de base de votre
14197installation CUPS : sur quelles interfaces il doit écouter, que faire si un
14198travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
14199une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
14200utiliser un outil comme les services de configuration d'imprimante de
14201GNOME. Par défaut, la configuration du service CUPS générera un certificat
14202auto-signé si besoin, pour les connexions sécurisée avec le serveur
14203d'impression.
14204
14205Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
14206support pour les imprimantes Epson via le paquet @code{escpr} et pour les
14207imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
14208directement, comme ceci (vous devez utiliser le module @code{(gnu packages
14209cups)}) :
14210
14211@example
14212(service cups-service-type
14213 (cups-configuration
14214 (web-interface? #t)
14215 (extensions
14216 (list cups-filters escpr hplip-minimal))))
14217@end example
14218
14219Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
14220paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
14221dans votre configuration d'OS, soit en tant qu'utilisateur.
14222
14223Les paramètres de configuration disponibles sont les suivants. Chaque
14224définition des paramètres est précédé par son type ; par exemple,
14225@samp{string-list foo} indique que le paramètre @code{foo} devrait être
14226spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
14227de spécifier la configuration comme une chaîne de caractères, si vous avez
14228un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
14229système ; voir la fin pour plus de détails.
14230
14231@c The following documentation was initially generated by
14232@c (generate-documentation) in (gnu services cups). Manually maintained
14233@c documentation is better, so we shouldn't hesitate to edit below as
14234@c needed. However if the change you want to make to this documentation
14235@c can be done in an automated way, it's probably easier to change
14236@c (generate-documentation) than to make it below and have to deal with
14237@c the churn as CUPS updates.
14238
14239
14240Les champs de @code{cups-configuration} disponibles sont :
14241
14242@deftypevr {paramètre de @code{cups-configuration}} package cups
14243Le paquet CUPS.
14244@end deftypevr
14245
14246@deftypevr {paramètre de @code{cups-configuration}} package-list extensions
14247Pilotes et autres extensions du paquet CUPS.
14248@end deftypevr
14249
14250@deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
14251Configuration de l'emplacement où écrire les journaux, quels répertoires
14252utiliser pour les travaux d'impression et les paramètres de configuration
14253privilégiés liés.
14254
14255Les champs @code{files-configuration} disponibles sont :
14256
14257@deftypevr {paramètre de @code{files-configuration}} log-location access-log
14258Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
14259désactive la génération de journaux d'accès. La valeur @code{stderr} fait
14260que les entrées du journal seront envoyés sur l'erreur standard lorsque
14261l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
14262lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
14263entrées du journal sont envoyées au démon de journalisation du système. Le
14264nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
14265@code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
14266
14267La valeur par défaut est @samp{"/var/log/cups/access_log"}.
14268@end deftypevr
14269
14270@deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
14271L'emplacement où CUPS devrait mettre les données en cache.
14272
14273La valeur par défaut est @samp{"/var/cache/cups"}.
14274@end deftypevr
14275
14276@deftypevr {paramètre de @code{files-configuration}} string config-file-perm
14277Spécifie les permissions pour tous les fichiers de configuration que
14278l'ordonnanceur écrit.
14279
14280Remarquez que les permissions pour le fichier printers.conf sont
14281actuellement masqués pour ne permettre que l'accès par l'utilisateur de
14282l'ordonnanceur (typiquement root). La raison est que les URI des
14283imprimantes contiennent des informations d'authentification sensibles qui ne
14284devraient pas être connues sur le système. Il n'est pas possible de
14285désactiver cette fonctionnalité de sécurité.
14286
14287La valeur par défaut est @samp{"0640"}.
14288@end deftypevr
14289
14290@deftypevr {paramètre de @code{files-configuration}} log-location error-log
14291Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
14292désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
14293que les entrées du journal seront envoyés sur l'erreur standard lorsque
14294l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
14295lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
14296entrées du journal sont envoyées au démon de journalisation du système. Le
14297nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
14298@code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
14299
14300La valeur par défaut est @samp{"/var/log/cups/error_log"}.
14301@end deftypevr
14302
14303@deftypevr {paramètre de @code{files-configuration}} string fatal-errors
14304Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
14305Les types de chaînes sont :
14306
14307@table @code
14308@item none
14309Aucune erreur n'est fatale.
14310
14311@item all
14312Toutes les erreurs ci-dessous sont fatales.
14313
14314@item browse
14315Les erreurs d'initialisation de la navigation sont fatales, par exemple les
14316connexion échouées au démon DNS-SD.
14317
14318@item config
14319Les erreurs de syntaxe du fichier de configuration sont fatale.
14320
14321@item listen
14322Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
14323sur la boucle locale ou les adresses @code{any}.
14324
14325@item log
14326Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
14327
14328@item permissions
14329Les mauvaises permissions des fichiers de démarrage sont fatales, par
14330exemple un certificat TLS et des fichiers de clefs avec des permissions
14331permettant la lecture à tout le monde.
14332@end table
14333
14334La valeur par défaut est @samp{"all -browse"}.
14335@end deftypevr
14336
14337@deftypevr {paramètre de @code{files-configuration}} boolean file-device?
14338Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
14339nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
14340permise.
14341
14342La valeur par défaut est @samp{#f}.
14343@end deftypevr
14344
14345@deftypevr {paramètre de @code{files-configuration}} string group
14346Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
14347programmes externes.
14348
14349La valeur par défaut est @samp{"lp"}.
14350@end deftypevr
14351
14352@deftypevr {paramètre de @code{files-configuration}} string log-file-perm
14353Spécifie les permissions pour tous les fichiers de journal que
14354l'ordonnanceur écrit.
14355
14356La valeur par défaut est @samp{"0644"}.
14357@end deftypevr
14358
14359@deftypevr {paramètre de @code{files-configuration}} log-location page-log
14360Définit le fichier de journal de page. Spécifier un nom de fichier vide
14361désactive la génération de journaux de pages. La valeur @code{stderr} fait
14362que les entrées du journal seront envoyés sur l'erreur standard lorsque
14363l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
14364lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
14365entrées du journal sont envoyées au démon de journalisation du système. Le
14366nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
14367@code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
14368
14369La valeur par défaut est @samp{"/var/log/cups/page_log"}.
14370@end deftypevr
14371
14372@deftypevr {paramètre de @code{files-configuration}} string remote-root
14373Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
14374clients qui se disent être l'utilisateur root. La valeur par défaut est
14375@code{remroot}.
14376
14377La valeur par défaut est @samp{"remroot"}.
14378@end deftypevr
14379
14380@deftypevr {paramètre de @code{files-configuration}} file-name request-root
14381Spécifie le répertoire qui contient les travaux d'impression et d'autres
14382données des requêtes HTTP.
14383
14384La valeur par défaut est @samp{"/var/spool/cups"}.
14385@end deftypevr
14386
14387@deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
14388Spécifie le niveau d'isolation de sécurité appliqué aux filtres
14389d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
14390soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
14391utilisée et supportée que sur macOS.
14392
14393La valeur par défaut est @samp{strict}.
14394@end deftypevr
14395
14396@deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
14397Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
14398cherchera les clefs publiques et privées dans ce répertoire : un fichier
14399@code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
14400correspondant pour la clef privée encodée en PEM.
14401
14402La valeur par défaut est @samp{"/etc/cups/ssl"}.
14403@end deftypevr
14404
14405@deftypevr {paramètre de @code{files-configuration}} file-name server-root
14406Spécifie le répertoire contenant les fichiers de configuration du serveur.
14407
14408La valeur par défaut est @samp{"/etc/cups"}.
14409@end deftypevr
14410
14411@deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
14412Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
14413configuration ou les fichiers d'état.
14414
14415La valeur par défaut est @samp{#f}.
14416@end deftypevr
14417
14418@deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
14419Spécifie le groupe ou les groupes à utiliser pour l'authentification du
14420groupe @code{@@SYSTEM}.
14421@end deftypevr
14422
14423@deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
14424Spécifie le répertoire où les fichiers temporaires sont stockés.
14425
14426La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
14427@end deftypevr
14428
14429@deftypevr {paramètre de @code{files-configuration}} string user
14430Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
14431externes.
14432
14433La valeur par défaut est @samp{"lp"}.
14434@end deftypevr
14435@end deftypevr
14436
14437@deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
14438Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
14439@code{config} enregistre les ajouts, suppressions et modifications
14440d'imprimantes et de classes et lorsque les fichiers de configuration sont
14441accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
14442la suspension, la libération, la modification et l'annulation des travaux et
14443toutes les conditions de @code{config}. Le niveau @code{all} enregistre
14444toutes les requêtes.
14445
14446La valeur par défaut est @samp{actions}.
14447@end deftypevr
14448
14449@deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
14450Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
14451n'est plus nécessaire pour les quotas.
14452
14453La valeur par défaut est @samp{#f}.
14454@end deftypevr
14455
14456@deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
14457Spécifie les protocoles à utiliser pour partager les imprimantes sur le
14458réseau local.
14459
14460La valeur par défaut est @samp{dnssd}.
14461@end deftypevr
14462
14463@deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
14464Spécifie si l'interface web de CUPS est publiée.
14465
14466La valeur par défaut est @samp{#f}.
14467@end deftypevr
14468
14469@deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
14470Spécifie si les imprimantes partagées sont publiées.
14471
14472La valeur par défaut est @samp{#f}.
14473@end deftypevr
14474
14475@deftypevr {paramètre de @code{cups-configuration}} string classification
14476Spécifie la classification de sécurité du serveur. N'importe quel nom de
14477bannière peut être utilisé, comme « classifié », « confidentiel », « secret
14478», « top secret » et « déclassifié » ou la bannière peut être omise pour
14479désactiver les fonctions d'impression sécurisées.
14480
14481La valeur par défaut est @samp{""}.
14482@end deftypevr
14483
14484@deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
14485Spécifie si les utilisateurs peuvent remplacer la classification (page de
14486couverture) des travaux d'impression individuels avec l'option
14487@code{job-sheets}.
14488
14489La valeur par défaut est @samp{#f}.
14490@end deftypevr
14491
14492@deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
14493Spécifie le type d'authentification par défaut à utiliser.
14494
14495La valeur par défaut est @samp{Basic}.
14496@end deftypevr
14497
14498@deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
14499Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
14500
14501La valeur par défaut est @samp{Required}.
14502@end deftypevr
14503
14504@deftypevr {paramètre de @code{cups-configuration}} string default-language
14505Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
14506
14507La valeur par défaut est @samp{"en"}.
14508@end deftypevr
14509
14510@deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
14511Spécifie la taille de papier par défaut pour les nouvelles queues
14512d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
14513régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
14514par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
14515et @samp{"A4"}.
14516
14517La valeur par défaut est @samp{"Auto"}.
14518@end deftypevr
14519
14520@deftypevr {paramètre de @code{cups-configuration}} string default-policy
14521Spécifie la politique d'accès par défaut à utiliser.
14522
14523La valeur par défaut est @samp{"default"}.
14524@end deftypevr
14525
14526@deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
14527Spécifie si les imprimantes locales sont partagées par défaut.
14528
14529La valeur par défaut est @samp{#t}.
14530@end deftypevr
14531
14532@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
14533Spécifie le délai pour mettre à jour les fichiers de configuration et
14534d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
14535possible, typiquement en quelques millisecondes.
14536
14537La valeur par défaut est @samp{30}.
14538@end deftypevr
14539
14540@deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
14541Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
14542sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
14543@code{retry-job}, qui tentera de nouveau l'impression plus tard ;
14544@code{retry-this-job}, qui retentera l'impression immédiatement ; et
14545@code{stop-printer} qui arrête l'imprimante.
14546
14547La valeur par défaut est @samp{stop-printer}.
14548@end deftypevr
14549
14550@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
14551Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
14552minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
14553limite de 0 désactive la limite de filtrage. Une impression standard vers
14554une imprimante non-PostScript requiert une limite de filtre d'environ 200.
14555Une imprimante PostScript requiert environ la moitié (100). Mettre en place
14556la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
14557travail d'impression à la fois.
14558
14559La valeur par défaut est @samp{0}.
14560@end deftypevr
14561
14562@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
14563Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
14564imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
14565plus basse priorité.
14566
14567La valeur par défaut est @samp{0}.
14568@end deftypevr
14569
14570@deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
14571Spécifie s'il faut faire des résolutions inverses sur les clients qui se
14572connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
14573nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
14574par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
14575avec des adresses non enregistrées ne s'adressent à votre serveur.
14576N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
14577absolument nécessaire.
14578
14579La valeur par défaut est @samp{#f}.
14580@end deftypevr
14581
14582@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
14583Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
14584moteurs associés avec un travail annulé ou suspendu.
14585
14586La valeur par défaut est @samp{30}.
14587@end deftypevr
14588
14589@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
14590Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
14591typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
14592des queues d'impressions normales dont la politique d'erreur est
14593@code{retry-job} ou @code{retry-current-job}.
14594
14595La valeur par défaut est @samp{30}.
14596@end deftypevr
14597
14598@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
14599Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
14600typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
14601les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
14602@code{retry-current-job}.
14603
14604La valeur par défaut est @samp{5}.
14605@end deftypevr
14606
14607@deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
14608Spécifie s'il faut supporter les connexion HTTP keep-alive.
14609
14610La valeur par défaut est @samp{#t}.
14611@end deftypevr
14612
14613@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
14614Spécifie combien de temps les connexions inactives avec les clients restent
14615ouvertes, en secondes.
14616
14617La valeur par défaut est @samp{30}.
14618@end deftypevr
14619
14620@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
14621Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
14622données de formulaires HTML. Une limite de 0 désactive la vérification de
14623la limite.
14624
14625La valeur par défaut est @samp{0}.
14626@end deftypevr
14627
14628@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
14629Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
14630@var{adresse}:@var{port}, où @var{adresse} est soit une adresse IPv6 dans
14631des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
14632adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
14633UNIX domain. La directive Listen est similaire à la directive Port mais
14634vous permet de restreindre l'accès à des interfaces ou des réseaux
14635spécifiques.
14636@end deftypevr
14637
14638@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
14639Spécifie le nombre de connexions en attente qui seront permises. Ça
14640n'affecte normalement que les serveurs très actifs qui ont atteint la limite
14641MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
14642simultanées. Lorsque la limite est atteinte, le système d'exploitation
14643refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
14644accepte les connexions en attente.
14645
14646La valeur par défaut est @samp{128}.
14647@end deftypevr
14648
14649@deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
14650Spécifie un ensemble de contrôles d'accès supplémentaires.
14651
14652Les champs de @code{location-access-controls} disponibles sont :
14653
14654@deftypevr {paramètre de @code{location-access-controls}} file-name path
14655Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
14656@end deftypevr
14657
14658@deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
14659Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
14660que le champ @code{access-controls} de @code{operation-access-control}.
14661
14662La valeur par défaut est @samp{()}.
14663@end deftypevr
14664
14665@deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
14666Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
14667
14668La valeur par défaut est @samp{()}.
14669
14670Les champs de @code{method-access-controls} disponibles sont :
14671
14672@deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
14673Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
14674méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
14675aux méthodes listées.
14676
14677La valeur par défaut est @samp{#f}.
14678@end deftypevr
14679
14680@deftypevr {paramètre de @code{method-access-controls}} method-list methods
14681Les méthodes auxquelles ce contrôle d'accès s'applique.
14682
14683La valeur par défaut est @samp{()}.
14684@end deftypevr
14685
14686@deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
14687Directives de contrôle d'accès, comme une liste de chaînes de caractères.
14688Chaque chaîne devrait être une directive, comme « Order allow, deny ».
14689
14690La valeur par défaut est @samp{()}.
14691@end deftypevr
14692@end deftypevr
14693@end deftypevr
14694
14695@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
14696Spécifie le nombre de messages de débogage qui sont retenu pour la
14697journalisation si une erreur arrive dans un travail d'impression. Les
14698messages de débogage sont journalisés indépendamment du paramètre LogLevel.
14699
14700La valeur par défaut est @samp{100}.
14701@end deftypevr
14702
14703@deftypevr {paramètre de @code{cups-configuration}} log-level log-level
14704Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
14705@code{none} arrête toute journalisation alors que que @code{debug2}
14706enregistre tout.
14707
14708La valeur par défaut est @samp{info}.
14709@end deftypevr
14710
14711@deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
14712Spécifie le format de la date et de l'heure dans les fichiers de journaux.
14713La valeur @code{standard} enregistre les secondes entières alors que
14714@code{usecs} enregistre les microsecondes.
14715
14716La valeur par défaut est @samp{standard}.
14717@end deftypevr
14718
14719@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
14720Spécifie le nombre maximum de clients simultanés qui sont autorisés par
14721l'ordonnanceur.
14722
14723La valeur par défaut est @samp{100}.
14724@end deftypevr
14725
14726@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
14727Spécifie le nombre maximum de clients simultanés permis depuis une même
14728adresse.
14729
14730La valeur par défaut est @samp{100}.
14731@end deftypevr
14732
14733@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
14734Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
14735chaque travail.
14736
14737La valeur par défaut est @samp{9999}.
14738@end deftypevr
14739
14740@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
14741Spécifie la durée maximum qu'un travail peut rester dans l'état de
14742suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
14743désactive l'annulation des travaux suspendus.
14744
14745La valeur par défaut est @samp{0}.
14746@end deftypevr
14747
14748@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
14749Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
14750permet un nombre illimité de travaux.
14751
14752La valeur par défaut est @samp{500}.
14753@end deftypevr
14754
14755@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
14756Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
14757La valeur 0 permet au plus MaxJobs travaux par imprimante.
14758
14759La valeur par défaut est @samp{0}.
14760@end deftypevr
14761
14762@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
14763Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
14764valeur 0 permet au plus MaxJobs travaux par utilisateur.
14765
14766La valeur par défaut est @samp{0}.
14767@end deftypevr
14768
14769@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
14770Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
14771annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
14772coincés ».
14773
14774La valeur par défaut est @samp{10800}.
14775@end deftypevr
14776
14777@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
14778Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
14779fasse tourner, en octets. La valeur 0 désactive la rotation.
14780
14781La valeur par défaut est @samp{1048576}.
14782@end deftypevr
14783
14784@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
14785Spécifie la durée maximale à permettre entre les fichiers d'un travail en
14786contenant plusieurs, en secondes.
14787
14788La valeur par défaut est @samp{300}.
14789@end deftypevr
14790
14791@deftypevr {paramètre de @code{cups-configuration}} string page-log-format
14792Spécifie le format des lignes PageLog. Les séquences qui commencent par un
14793pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
14794que les autres caractères sont copiés littéralement. Les séquences pourcent
14795suivantes sont reconnues :
14796
14797@table @samp
14798@item %%
14799insère un seul caractères pourcent
14800
14801@item %@{name@}
14802insère la valeur de l'attribut IPP spécifié
14803
14804@item %C
14805insère le nombre de copies pour la page actuelle
14806
14807@item %P
14808insère le numéro de page actuelle
14809
14810@item %T
14811insère la date et l'heure actuelle dans un format de journal commun
14812
14813@item %j
14814insère l'ID du travail
14815
14816@item %p
14817insère le nom de l'imprimante
14818
14819@item %u
14820insère le nom d'utilisateur
14821@end table
14822
14823Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
14824@code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
14825%@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
14826standards.
14827
14828La valeur par défaut est @samp{""}.
14829@end deftypevr
14830
14831@deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
14832Passe les variables d'environnement spécifiées aux processus fils ; une
14833liste de chaînes de caractères.
14834
14835La valeur par défaut est @samp{()}.
14836@end deftypevr
14837
14838@deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
14839Spécifie des politiques de contrôle d'accès nommées.
14840
14841Les champs de @code{policy-configuration} disponibles sont :
14842
14843@deftypevr {paramètre de @code{policy-configuration}} string name
14844Nom de la politique.
14845@end deftypevr
14846
14847@deftypevr {paramètre de @code{policy-configuration}} string job-private-access
14848Spécifie une liste d'accès pour les valeurs privées du travail.
14849@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14850requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14851propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14852le champ @code{system-group} de la configuration @code{files-config}, qui
14853est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14854possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14855@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14856liste d'accès peut aussi être simplement @code{all} ou @code{default}.
14857
14858La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
14859@end deftypevr
14860
14861@deftypevr {paramètre de @code{policy-configuration}} string job-private-values
14862Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14863@code{default}, ou @code{none}.
14864
14865La valeur par défaut est @samp{"job-name job-originating-host-name
14866job-originating-user-name phone"}.
14867@end deftypevr
14868
14869@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
14870Spécifie un liste d'accès pour les valeurs privées de la souscription.
14871@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14872requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14873propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14874le champ @code{system-group} de la configuration @code{files-config}, qui
14875est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14876possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14877@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14878liste d'accès peut aussi être simplement @code{all} ou @code{default}.
14879
14880La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
14881@end deftypevr
14882
14883@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
14884Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14885@code{default}, ou @code{none}.
14886
14887La valeur par défaut est @samp{"notify-events notify-pull-method
14888notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
14889@end deftypevr
14890
14891@deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
14892Contrôle d'accès par les actions IPP.
14893
14894La valeur par défaut est @samp{()}.
14895@end deftypevr
14896@end deftypevr
14897
14898@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
14899Spécifie si les fichiers de travaux (les documents) sont préservés après
14900qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
14901fichiers de travaux sont préservés pour le nombre de secondes indiquées
14902après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
14903
14904La valeur par défaut est @samp{86400}.
14905@end deftypevr
14906
14907@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
14908Spécifie si l'historique des travaux est préservé après qu'un travail est
14909imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
14910est préservé pour le nombre de secondes indiquées après l'impression. Si la
14911valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
14912atteindre la limite MaxJobs.
14913
14914La valeur par défaut est @samp{#t}.
14915@end deftypevr
14916
14917@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
14918Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
14919l'ordonnanceur.
14920
14921La valeur par défaut est @samp{30}.
14922@end deftypevr
14923
14924@deftypevr {paramètre de @code{cups-configuration}} string rip-cache
14925Spécifie la quantité de mémoire maximale à utiliser pour convertir des
14926documents en bitmaps pour l'imprimante.
14927
14928La valeur par défaut est @samp{"128m"}.
14929@end deftypevr
14930
14931@deftypevr {paramètre de @code{cups-configuration}} string server-admin
14932Spécifie l'adresse de courriel de l'administrateur système.
14933
14934La valeur par défaut est @samp{"root@@localhost.localdomain"}.
14935@end deftypevr
14936
14937@deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
14938La directive ServerAlias est utilisée pour la validation des en-tête HTTP
14939Host lorsque les clients se connectent à l'ordonnanceur depuis des
14940interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
14941système à des attaques connues de recombinaison DNS dans le navigateur, même
14942lorsque vous accédez au site à travers un pare-feu. Si la découverte
14943automatique des autres noms ne fonctionne pas, nous vous recommandons de
14944lister chaque nom alternatif avec une directive SeverAlias plutôt que
14945d'utiliser @code{*}.
14946
14947La valeur par défaut est @samp{*}.
14948@end deftypevr
14949
14950@deftypevr {paramètre de @code{cups-configuration}} string server-name
14951Spécifie le nom d'hôte pleinement qualifié du serveur.
14952
14953La valeur par défaut est @samp{"localhost"}.
14954@end deftypevr
14955
14956@deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
14957Spécifie les informations incluses dans les en-têtes Server des réponses
14958HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
14959@code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
14960@code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
14961rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
14962commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
14963IPP/2.0}.
14964
14965La valeur par défaut est @samp{Minimal}.
14966@end deftypevr
14967
14968@deftypevr {paramètre de @code{cups-configuration}} string set-env
14969Indique que la variable d'environnement spécifiée doit être passée aux
14970processus fils.
14971
14972La valeur par défaut est @samp{"variable value"}.
14973@end deftypevr
14974
14975@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
14976Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
14977valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
14978une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
14979pour indiquer toutes les interfaces.
14980
14981La valeur par défaut est @samp{()}.
14982@end deftypevr
14983
14984@deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
14985Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
14986chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
14987être sures. L'option @code{AllowRC4} active les suites de chiffrement
14988128-bits RC4, qui sont requises pour certains vieux clients qui
14989n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
14990v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
14991v1.0.
14992
14993La valeur par défaut est @samp{()}.
14994@end deftypevr
14995
14996@deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
14997Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
14998IPP.
14999
15000La valeur par défaut est @samp{#f}.
15001@end deftypevr
15002
15003@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
15004Spécifie le délai d'attente des requêtes HTTP, en secondes.
15005
15006La valeur par défaut est @samp{300}.
15007
15008@end deftypevr
15009
15010@deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
15011Spécifie si l'interface web est activée.
15012
15013La valeur par défaut est @samp{#f}.
15014@end deftypevr
15015
15016Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
15017t'aime bien mais arrête maintenant avec ces options de configuration
15018»@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
15019traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
15020effet. cependant, encore un point supplémentaire : vous pouvez avoir un
15021fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
15022ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
15023configuration d'un @code{cups-service-type}.
15024
15025Les champs de @code{opaque-cups-configuration} disponibles sont :
15026
15027@deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
15028Le paquet CUPS.
15029@end deftypevr
15030
15031@deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
15032Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
15033@end deftypevr
15034
15035@deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
15036Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
15037caractères.
15038@end deftypevr
15039
15040Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
15041sont dans des chaînes du même nom, pouvez instancier un service CUPS de
15042cette manière :
15043
15044@example
15045(service cups-service-type
15046 (opaque-cups-configuration
15047 (cupsd.conf cupsd.conf)
15048 (cups-files.conf cups-files.conf)))
15049@end example
15050
15051
15052@node Services de bureaux
15053@subsection Services de bureaux
15054
15055Le module @code{(gnu services desktop)} fournit des services qui sont
15056habituellement utiles dans le contexte d'une installation « de bureau » —
15057c'est-à-dire sur une machine qui fait tourner un service d'affichage
15058graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
15059Il définit aussi des services qui fournissent des environnements de bureau
15060spécifiques comme GNOME, Xfce et MATE.
15061
15062Pour simplifier les choses, le module définit une variable contenant
15063l'ensemble des services que les utilisateurs s'attendent en général à avoir
15064sur une machine avec un environnement graphique et le réseau :
15065
15066@defvr {Variable Scheme} %desktop-services
15067C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
15068ajustant des services pour une configuration « de bureau » typique.
15069
15070En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{gdm-service-type}}), des verrouilleurs d'écran, un outil de
15071gestion réseau (@pxref{Services réseau,
15072@code{network-manager-service-type}}), des services de gestion de l'énergie
15073et des couleurs, le gestionnaire de connexion et de session @code{elogind},
15074le service de privilèges Polkit, le service de géolocalisation GeoClue, le
15075démon Accounts Service qui permet aux utilisateurs autorisés de changer les
15076mots de passe du système, un client NTP (@pxref{Services réseau}), le
15077démon Avahi, et le service name service switch est configuré pour pouvoir
15078utiliser @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
15079@end defvr
15080
15081La variable @var{%desktop-services} peut être utilisée comme champ
15082@code{services} d'une déclaration @code{operating-system}
15083(@pxref{Référence de système d'exploitation, @code{services}}).
15084
15085En plus, les procédures @code{gnome-desktop-service-type},
15086@code{xfce-desktop-service}, @code{mate-desktop-service-type} et
15087@code{enlightenment-desktop-service-type} peuvent ajouter GNOME, Xfce, MATE
15088ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
15089du système comme les utilitaires d'ajustement de la luminosité et de gestion
15090de l'énergie sont ajoutés au système, en étendant @code{polkit} et
15091@code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
15092privilèges plus élevés sur un nombre limité d'interfaces systèmes
15093spécialisées. En plus, ajouter un service construit par
15094@code{gnome-desktop-service-type} ajoute le métapaquet GNOME au profil du
15095système. De même, ajouter le service Xfce ajoute non seulement le
15096métapaquet @code{xfce} au profil système, mais il permet aussi au
15097gestionnaire de fichiers Thunar d'ouvrir une fenêtre de gestion des fichier
15098« en mode root », si l'utilisateur s'authentifie avec le mot de passe
15099administrateur via l'interface graphique polkit standard. « Ajouter MATE »
15100signifie que @code{polkit} et @code{dbus} sont étendue de la bonne manière,
15101ce qui permet à MATE d'opérer avec des privilèges plus élevés sur un nombre
15102limité d'interface systèmes spécialisées. En plus, ajouter un service de
15103type @code{mate-desktop-service-type} ajoute le métapaquet MATE au profil du
15104système. « Ajouter Enlightenment » signifie que @code{dbus} est étendu
15105comme il faut et que plusieurs binaires d'Enlightenment récupèrent le bit
15106setuid, ce qui permet au verrouilleur d'écran d'Enlightenment et à d'autres
15107fonctionnalités de fonctionner correctement.
15108
15109Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
15110par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
15111récent Wayland, vous devez utiliser @code{sddm-service} à la place de GDM
15112comme gestionnaire de connexion graphique. Vous devriez ensuite
15113sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement, vous
15114pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY avec
15115la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
15116gnome-session}. Actuellement seul GNOME support Wayland.
15117
15118@defvr {Variable Scheme} gnome-desktop-service-type
15119C'est le type de service qui ajoute l'environnement de bureau
15120@uref{https://www.gnome.org, GNOME}. Sa valeur est un objet
15121@code{gnome-desktop-configuration} (voir plus bas).
15122
15123Ce service ajoute le paquet @code{gnome} au profil du système et étend
15124polkit avec les actions de @code{gnome-settings-daemon}.
15125@end defvr
15126
15127@deftp {Type de données} gnome-desktop-configuration
15128Enregistrement de la configuration de l'environnement de bureau GNOME.
15129
15130@table @asis
15131@item @code{gnome} (par défaut : @code{gnome})
15132Le paquet GNOME à utiliser.
15133@end table
15134@end deftp
15135
15136@defvr {Variable Scheme} xfce-desktop-service-type
15137C'est le type de service qui lance l'environnement de bureau @uref{Xfce,
15138https://xfce.org/}. Sa valeur est un objet
15139@code{xfce-desktop-configuration} (voir plus bas).
15140
15141Ce service ajoute le paquet @code{xfce} au profil du système et étend polkit
15142avec la possibilité pour @code{thunar} de manipuler le système de fichier en
15143root depuis une session utilisateur, après que l'utilisateur s'authentifie
15144avec le mot de passe administrateur.
15145@end defvr
15146
15147@deftp {Type de données} xfce-desktop-configuration
15148Enregistrement de la configuration de l'environnement de bureau Xfce.
15149
15150@table @asis
15151@item @code{xfce} (par défaut : @code{xfce})
15152Le paquet Xfce à utiliser.
15153@end table
15154@end deftp
15155
15156@deffn {Variable Scheme} mate-desktop-service-type
15157C'est le type de service qui lance @uref{https://mate-desktop.org/,
15158l'environnement de bureau MATE}. Sa valeur est un objet
15159@code{mate-desktop-configuration} (voir plus bas).
15160
15161Ce service ajoute le paquet @code{mate} au profil du système, et étend
15162polkit avec les actions de @code{mate-settings-daemon}.
15163@end deffn
15164
15165@deftp {Type de données} mate-desktop-configuration
15166Enregistrement de configuration pour l'environnement de bureau MATE.
15167
15168@table @asis
15169@item @code{mate} (par défaut : @code{mate})
15170Le paquet MATE à utiliser.
15171@end table
15172@end deftp
15173
15174@deffn {Variable Scheme} enlightenment-desktop-service-type
15175Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
15176avec les actions de @code{efl}
15177@end deffn
15178
15179@deftp {Type de données} enlightenment-desktop-service-configuration
15180@table @asis
15181@item @code{enlightenment} (par défaut : @code{enlightenment})
15182Le paquet enlightenment à utiliser.
15183@end table
15184@end deftp
15185
15186Comme les services de bureau GNOME, Xfce et MATE récupèrent tant de paquet,
15187la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
15188Pour ajouter GNOME, Xfce ou MATE, utilisez @code{cons} pour les ajouter à
15189@code{%desktop-services} dans le champ @code{services} de votre
15190@code{operating-system} :
15191
15192@example
15193(use-modules (gnu))
15194(use-service-modules desktop)
15195(operating-system
15196 ...
15197 ;; cons* ajoute des éléments à la liste donnée en dernier argument.
15198 (services (cons* (service gnome-desktop-service-type)
15199 (service xfce-desktop-service)
15200 %desktop-services))
15201 ...)
15202@end example
15203
15204Ces environnements de bureau seront alors disponibles comme une option dans
15205la fenêtre de connexion graphique.
15206
15207Les définitions de service qui sont vraiment incluses dans
15208@code{%desktop-services} et fournies par @code{(gnu services dbus)} et
15209@code{(gnu services desktop)} sont décrites plus bas.
15210
15211@deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
15212Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
15213de @var{services}.
15214
15215@uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
15216communication inter-processus. Son bus système est utilisé pour permettre à
15217des services systèmes de communiquer et d'être notifiés d'événements
15218systèmes.
15219
15220@var{services} doit être une liste de paquets qui fournissent un répertoire
15221@file{etc/dbus-1/system.d} contenant de la configuration D-Bus
15222supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
15223avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
15224@code{(list avahi)}.
15225@end deffn
15226
15227@deffn {Procédure Scheme} elogind-service [#:config @var{config}]
15228Renvoie un service qui lance le démon de gestion de connexion et de session
15229@code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
15230une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
15231sont connectés, le type de session qu'ils sont ouverte, suspendre le
15232système, désactiver la veille système, redémarrer le système et d'autre
15233taches.
15234
15235Elogind gère la plupart des événements liés à l'énergie du système, par
15236exemple mettre en veille le système quand l'écran est rabattu ou en
15237l'éteignant quand le bouton de démarrage est appuyé.
15238
15239L'argument @var{config} spécifie la configuration d'elogind et devrait être
15240le résultat d'une invocation de @code{(elogind-configuration
15241(@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
15242valeur par défaut sont :
15243
15244@table @code
15245@item kill-user-processes?
15246@code{#f}
15247@item kill-only-users
15248@code{()}
15249@item kill-exclude-users
15250@code{("root")}
15251@item inhibit-delay-max-seconds
15252@code{5}
15253@item handle-power-key
15254@code{poweroff}
15255@item handle-suspend-key
15256@code{suspend}
15257@item handle-hibernate-key
15258@code{hibernate}
15259@item handle-lid-switch
15260@code{suspend}
15261@item handle-lid-switch-docked
15262@code{ignore}
15263@item power-key-ignore-inhibited?
15264@code{#f}
15265@item suspend-key-ignore-inhibited?
15266@code{#f}
15267@item hibernate-key-ignore-inhibited?
15268@code{#f}
15269@item lid-switch-ignore-inhibited?
15270@code{#t}
15271@item holdoff-timeout-seconds
15272@code{30}
15273@item idle-action
15274@code{ignore}
15275@item idle-action-seconds
15276@code{(* 30 60)}
15277@item runtime-directory-size-percent
15278@code{10}
15279@item runtime-directory-size
15280@code{#f}
15281@item remove-ipc?
15282@code{#t}
15283@item suspend-state
15284@code{("mem" "standby" "freeze")}
15285@item suspend-mode
15286@code{()}
15287@item hibernate-state
15288@code{("disk")}
15289@item hibernate-mode
15290@code{("platform" "shutdown")}
15291@item hybrid-sleep-state
15292@code{("disk")}
15293@item hybrid-sleep-mode
15294@code{("suspend" "platform" "shutdown")}
15295@end table
15296@end deffn
15297
15298@deffn {Procédure Scheme} accountsservice-service @
15299 [#:accountsservice @var{accountsservice}]
15300Renvoie un service qui lance AccountsService, un service système qui peut
15301lister les comptes disponibles, changer leur mot de passe, etc.
15302AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
15303privilégiés de pouvoir modifier la configuration de leur système.
15304@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
15305accountsservice} pour trouver plus d'informations.
15306
15307L'argument @var{accountsservice} est le paquet @code{accountsservice} à
15308exposer comme un service.
15309@end deffn
15310
15311@deffn {Procédure Scheme} polkit-service @
15312 [#:polkit @var{polkit}]
15313Renvoie un service qui lance le
15314@uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
15315des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
15316l'accès à des opération privilégiées d'une manière structurée. En demandant
15317au service Polkit, un composant système privilégié peut savoir lorsqu'il
15318peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
15319exemple, un utilisateur normal peut obtenir le droit de mettre le système en
15320veille si l'utilisateur est connecté localement.
15321@end deffn
15322
15323@defvr {Variable Scheme} upower-service-type
15324Service qui lance @uref{http://upower.freedesktop.org/, @command{upowerd}},
15325un moniteur système de consommation d'énergie et de niveau de batterie, avec
15326les paramètres de configuration donnés.
15327
15328Il implémente l'interface D-Bus @code{org.freedesktop.UPower} et est
15329notamment utilisé par GNOME.
15330@end defvr
15331
15332@deftp {Type de données} upower-configuration
15333Type de données représentant la configuration de UPower.
15334
15335@table @asis
15336
15337@item @code{upower} (par défaut : @var{upower})
15338Paquet à utiliser pour @code{upower}.
15339
15340@item @code{watts-up-pro?} (par défaut : @code{#f})
15341Active le périphérique Watts Up Pro.
15342
15343@item @code{poll-batteries?} (par défaut : @code{#t})
15344Active les requêtes au noyau pour les changements de niveau de batterie.
15345
15346@item @code{ignore-lid?} (par défaut : @code{#f})
15347Ignore l'état de l'écran, ce qui peut être utile s'il est incorrect sur un
15348appareil.
15349
15350@item @code{use-percentage-for-policy?} (par défaut : @code{#f})
15351Indique si la politique de batterie basée sur le pourcentage devrait être
15352utilisée. La valeur par défaut est d'utiliser la durée restante, changez en
15353@code{#t} pour utiliser les pourcentages.
15354
15355@item @code{percentage-low} (par défaut : @code{10})
15356Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
15357niveau la batterie est considérée comme faible.
15358
15359@item @code{percentage-critical} (par défaut : @code{3})
15360Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
15361niveau la batterie est considérée comme critique.
15362
15363@item @code{percentage-action} (par défaut : @code{2})
15364Lorsque @code{use-percentage-for-policy?} est @code{#t}, cela indique à quel
15365niveau l'action sera prise.
15366
15367@item @code{time-low} (par défaut : @code{1200})
15368Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
15369quelle durée restante en secondes la batterie est considérée comme faible.
15370
15371@item @code{time-critical} (par défaut : @code{300})
15372Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
15373quelle durée restante en secondes la batterie est considérée comme critique.
15374
15375@item @code{time-action} (par défaut : @code{120})
15376Lorsque @code{use-percentage-for-policy?} est @code{#f}, cela indique à
15377quelle durée restante en secondes l'action sera prise.
15378
15379@item @code{critical-power-action} (par défaut : @code{'hybrid-sleep})
15380L'action à prendre lorsque @code{percentage-action} ou @code{time-action}
15381est atteint (en fonction de la configuration de
15382@code{use-percentage-for-policy?}).
15383
15384Les valeurs possibles sont :
15385
15386@itemize @bullet
15387@item
15388@code{'power-off}
15389
15390@item
15391@code{'hibernate}
15392
15393@item
15394@code{'hybrid-sleep}.
15395@end itemize
15396
15397@end table
15398@end deftp
15399
15400@deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
15401Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
15402UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
15403et la capacité de monter et démonter des disques à des interfaces
15404utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
15405commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
15406@end deffn
15407
15408@deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
15409Renvoie un service qui lance @command{colord}, un service système avec une
15410interface D-Bus pour gérer les profils de couleur des périphériques
15411d'entrées et de sorties comme les écrans et les scanners. Il est notamment
15412utilisé par l'outil graphique GNOME Color Manager. Voir
15413@uref{http://www.freedesktop.org/software/colord/, le site web de colord}
15414pour plus d'informations.
15415@end deffn
15416
15417@deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
15418Renvoie une configuration qui permet d'accéder aux données de localisation
15419de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
15420@code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
15421d'accéder aux informations de localisation par défaut. Le booléen
15422@var{system?} indique si une application est un composant système ou non.
15423Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
15424application a le droit d'accéder aux informations de géolocalisation. Une
15425liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
15426@end deffn
15427
15428@defvr {Variable Scheme} %standard-geoclue-applications
15429La liste standard de configuration des application GeoClue connues, qui
15430permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
15431actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
15432Epiphany de demander les informations de localisation. IceCat et Epiphany
15433demandent tous deux à l'utilisateur avant de permettre à une page web de
15434connaître l'emplacement de l'utilisateur.
15435@end defvr
15436
15437@deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
15438 [#:whitelist '()] @
15439[#:wifi-geolocation-url
15440"https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
15441[#:submit-data? #f] [#:wifi-submission-url
15442"https://location.services.mozilla.com/v1/submit?key=geoclue"] @
15443[#:submission-nick "geoclue"] @
15444[#:applications %standard-geoclue-applications]
15445Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
15446service fournit une interface D-Bus pour permettre aux applications de
15447demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
15448des informations à des bases de données de géolocalisation en ligne. Voir
15449@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
15450GeoClue} pour plus d'informations.
15451@end deffn
15452
15453@deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
15454 [@w{#:auto-enable? #f}]
15455Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
15456appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
15457Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
15458automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
15459utilisez un clavier ou une souris bluetooth.
15460
15461Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
15462service D-Bus.
15463@end deffn
15464
15465@node Services de son
15466@subsection Services de son
15467
15468@cindex support du son
15469@cindex ALSA
15470@cindex PulseAudio, support du son
15471
15472Le module @code{(gnu services sound)} fournit un service pour configurer le
15473système ALSA (architecture son linux avancée), qui fait de PulseAudio le
15474pilote de sortie préféré d'ALSA.
15475
15476@deffn {Variable Scheme} alsa-service-type
15477C'est le type pour le système @uref{https://alsa-project.org/, Advanced
15478Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
15479@file{/etc/asound.conf}. La valeur de ce type est un enregistrement
15480@command{alsa-configuration} comme dans cet exemple :
15481
15482@example
15483(service alsa-service-type)
15484@end example
15485
15486Voir plus bas pour des détails sur @code{alsa-configuration}.
15487@end deffn
15488
15489@deftp {Type de données} alsa-configuration
15490Type de données représentant la configuration pour @code{alsa-service}.
15491
15492@table @asis
15493@item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
15494Le paquet @code{alsa-plugins} à utiliser.
15495
15496@item @code{pulseaudio?} (par défaut : @var{#t})
15497Indique si les applications ALSA devraient utiliser le serveur de son
15498@uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
15499elles.
15500
15501Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
15502produisent du son en même temps et de les contrôler individuellement via
15503@command{pavucontrol} entre autres choses.
15504
15505@item @code{extra-options} (par défaut : @var{""})
15506Chaîne à ajouter au fichier @file{/etc/asound.conf}.
15507
15508@end table
15509@end deftp
15510
15511Les utilisateurs individuels qui veulent modifier la configuration système
15512d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
15513
15514@example
15515# Dans guix, il faut spécifier le chemin absolu des greffons.
15516pcm_type.jack @{
15517 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
15518@}
15519
15520# Faire passer ALSA par Jack :
15521# <http://jackaudio.org/faq/routing_alsa.html>.
15522pcm.rawjack @{
15523 type jack
15524 playback_ports @{
15525 0 system:playback_1
15526 1 system:playback_2
15527 @}
15528
15529 capture_ports @{
15530 0 system:capture_1
15531 1 system:capture_2
15532 @}
15533@}
15534
15535pcm.!default @{
15536 type plug
15537 slave @{
15538 pcm "rawjack"
15539 @}
15540@}
15541@end example
15542
15543Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
15544détails.
15545
15546
15547@node Services de bases de données
15548@subsection Services de bases de données
15549
15550@cindex database
15551@cindex SQL
15552Le module @code{(gnu services databases)} fournit les services suivants.
15553
15554@deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
15555 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
15556[#:port 5432] [#:locale ``en_US.utf8''] [#:extension-packages '()]
15557Renvoie un service qui lance @var{postgresql}, le service de bases de
15558données PostgreSQL.
15559
15560Le démon PostgreSQL charge sa configuration à l'exécution depuis
15561@var{config-file}, crée une grappe de bases de données avec @var{locale}
15562comme paramètre de régionalisation par défaut, stockée dans
15563@var{data-directory}. Il écoute ensuite sur @var{port}.
15564
15565@cindex postgresql extension-packages
15566Des extensions supplémentaires peuvent être chargées à partir de paquets
15567listés dans @var{extension-packages}. Les extensions sont disponibles à
15568l'exécution. Par exemple, pour créer une base de données géographique avec
15569l'extension @code{postgis}, on peut configurer postgresql-service de cette
15570manière :
15571
15572@cindex postgis
15573@example
15574(use-package-modules databases geo)
15575
15576(operating-system
15577 ...
15578 ;; postgresql est requis pour lancer `psql' mais postgis n'est pas requis pour son
15579 ;; bon fonctionnement.
15580 (packages (cons* postgresql %base-packages))
15581 (services
15582 (cons*
15583 (postgresql-service #:extension-packages (list postgis))
15584 %base-services)))
15585@end example
15586
15587Ensuite l'extension devient visible et vous pouvez initialiser une base de
15588données géographique de cette manière :
15589
15590@example
15591psql -U postgres
15592> create database postgistest;
15593> \connect postgistest;
15594> create extension postgis;
15595> create extension postgis_topology;
15596@end example
15597
15598Vous n'avez pas besoin d'ajouter ce champ pour les extensions « contrib »
15599comme hstore ou dblink comme elles sont déjà exploitables par postgresql.
15600Ce champ n'est requis que pour ajouter des extensions fournies par d'autres
15601paquets.
15602@end deffn
15603
15604@deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
15605Renvoie un service qui lance @command{mysqld}, le service de bases de
15606données MySQL ou MariaDB.
15607
15608L'argument @var{config} facultatif spécifie la configuration de
15609@command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
15610@end deffn
15611
15612@deftp {Type de données} mysql-configuration
15613Type de données représentant la configuration de @var{mysql-service}.
15614
15615@table @asis
15616@item @code{mysql} (par défaut : @var{mariadb})
15617Objet paquet du serveur de base de données MySQL, qui peut être soit
15618@var{mariadb}, soit @var{mysql}.
15619
15620Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
15621Pour MariaDB, le mot de passe root est vide.
15622
15623@item @code{port} (par défaut : @code{3306})
15624Port TCP sur lequel le serveur de base de données écoute les connexions
15625entrantes.
15626@end table
15627@end deftp
15628
15629@defvr {Variable Scheme} memcached-service-type
15630C'est le type de service pour le service @uref{https://memcached.org/,
15631Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
15632type de service est un objet @code{memcached-configuration}.
15633@end defvr
15634
15635@example
15636(service memcached-service-type)
15637@end example
15638
15639@deftp {Type de données} memcached-configuration
15640Type de données représentant la configuration de memcached.
15641
15642@table @asis
15643@item @code{memcached} (par défaut : @code{memcached})
15644Le paquet Memcached à utiliser.
15645
15646@item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
15647Les interfaces réseaux sur lesquelles écouter.
15648
15649@item @code{tcp-port} (par défaut : @code{11211})
15650Port sur lequel accepter les connexions.
15651
15652@item @code{udp-port} (par défaut : @code{11211})
15653Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
15654l'écoute en UDP.
15655
15656@item @code{additional-options} (par défaut : @code{'()})
15657Options de la ligne de commande supplémentaires à passer à @code{memcached}.
15658@end table
15659@end deftp
15660
15661@defvr {Variable Scheme} mongodb-service-type
15662C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
15663valeur de ce service est un objet @code{mongodb-configuration}.
15664@end defvr
15665
15666@example
15667(service mongodb-service-type)
15668@end example
15669
15670@deftp {Type de données} mongodb-configuration
15671Type de données représentant la configuration de mongodb.
15672
15673@table @asis
15674@item @code{mongodb} (par défaut : @code{mongodb})
15675Le paquet MongoDB à utiliser.
15676
15677@item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
15678Le fichier de configuration pour MongoDB.
15679
15680@item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
15681Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
15682appartienne à l'utilisateur mongodb. Il devrait correspondre au
15683data-directory que MongoDB est configuré pour utiliser dans son fichier de
15684configuration.
15685@end table
15686@end deftp
15687
15688@defvr {Variable Scheme} redis-service-type
15689C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
15690Redis} dont la valeur est un objet @code{redis-configuration}.
15691@end defvr
15692
15693@deftp {Type de données} redis-configuration
15694Type de données représentant la configuration de redis.
15695
15696@table @asis
15697@item @code{redis} (par défaut : @code{redis})
15698Le paquet Redis à utiliser.
15699
15700@item @code{bind} (par défaut : @code{"127.0.0.1"})
15701Interface réseau sur laquelle écouter.
15702
15703@item @code{port} (par défaut : @code{6379})
15704Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
15705sur un socket TCP.
15706
15707@item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
15708Répertoire dans lequel stocker la base de données et les fichiers liés.
15709@end table
15710@end deftp
15711
15712@node Services de courriels
15713@subsection Services de courriels
15714
15715@cindex courriel
15716@cindex email
15717Le module @code{(gnu services mail)} fournit des définitions de services
15718Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
15719que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
15720détaillés dans les sous-sections ci-dessous.
15721
15722@subsubheading Service Dovecot
15723
15724@deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
15725Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
15726@end deffn
15727
15728Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
15729configuration par défaut créé par @code{(dovecot-configuration)} suffira si
15730votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
15731sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
15732ports non chiffrés par défaut. Il y a quelques options cependant, que les
15733administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
15734d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
15735paramètres via une interface Scheme unifiée.
15736
15737Par exemple, pour spécifier que les courriels se trouvent dans
15738@code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
15739
15740@example
15741(dovecot-service #:config
15742 (dovecot-configuration
15743 (mail-location "maildir:~/.mail")))
15744@end example
15745
15746Les paramètres de configuration disponibles sont les suivants. Chaque
15747définition des paramètres est précédé par son type ; par exemple,
15748@samp{string-list foo} indique que le paramètre @code{foo} devrait être
15749spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
15750de spécifier la configuration comme une chaîne de caractères, si vous avez
15751un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
15752système ; voir la fin pour plus de détails.
15753
15754@c The following documentation was initially generated by
15755@c (generate-documentation) in (gnu services mail). Manually maintained
15756@c documentation is better, so we shouldn't hesitate to edit below as
15757@c needed. However if the change you want to make to this documentation
15758@c can be done in an automated way, it's probably easier to change
15759@c (generate-documentation) than to make it below and have to deal with
15760@c the churn as dovecot updates.
15761
15762Les champs de @code{dovecot-configuration} disponibles sont :
15763
15764@deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
15765Le paquet dovecot.
15766@end deftypevr
15767
15768@deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
15769Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
15770sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
15771IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
15772ou quelque chose de plus complexe, complétez les champs d'adresse et de port
15773de @samp{inet-listener} des services spécifiques qui vous intéressent.
15774@end deftypevr
15775
15776@deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
15777Liste des protocoles que vous voulez servir. Les protocoles disponibles
15778comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
15779
15780Les champs @code{protocol-configuration} disponibles sont :
15781
15782@deftypevr {paramètre de @code{protocol-configuration}} string name
15783Le nom du protocole.
15784@end deftypevr
15785
15786@deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
15787Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
15788trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
15789partagés) et lda. Sa valeur par défaut est
15790@samp{"/var/run/dovecot/auth-userdb"}.
15791@end deftypevr
15792
15793@deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
15794Liste de greffons à charger séparés par des espaces.
15795@end deftypevr
15796
15797@deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
15798Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
15799adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
15800la casse. Par défaut @samp{10}.
15801@end deftypevr
15802
15803@end deftypevr
15804
15805@deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
15806Liste des services à activer. Les services disponibles comprennent
15807@samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
15808et @samp{lmtp}.
15809
15810Les champs de @code{service-configuration} disponibles sont :
15811
15812@deftypevr {paramètre de @code{service-configuration}} string kind
15813Le type de service. Les valeurs valides comprennent @code{director},
15814@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
15815@code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
15816@code{quota-warning} ou n'importe quoi d'autre.
15817@end deftypevr
15818
15819@deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
15820Les auditeurs du service. Un auditeur est soit un
15821@code{unix-listener-configuration}, soit un
15822@code{fifo-listener-configuration}, soit un
15823@code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
15824
15825Les champs de @code{unix-listener-configuration} disponibles sont :
15826
15827@deftypevr {paramètre de @code{unix-listener-configuration}} string path
15828Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
15829utilisé comme nom de section.
15830@end deftypevr
15831
15832@deftypevr {paramètre de @code{unix-listener-configuration}} string mode
15833Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
15834@end deftypevr
15835
15836@deftypevr {paramètre de @code{unix-listener-configuration}} string user
15837L'utilisateur à qui appartient le socket. La valeur par défaut est
15838@samp{""}
15839@end deftypevr
15840
15841@deftypevr {paramètre de @code{unix-listener-configuration}} string group
15842Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
15843@end deftypevr
15844
15845
15846Les champs de @code{fifo-listener-configuration} disponibles sont :
15847
15848@deftypevr {paramètre de @code{fifo-listener-configuration}} string path
15849Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
15850utilisé comme nom de section.
15851@end deftypevr
15852
15853@deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
15854Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
15855@end deftypevr
15856
15857@deftypevr {paramètre de @code{fifo-listener-configuration}} string user
15858L'utilisateur à qui appartient le socket. La valeur par défaut est
15859@samp{""}
15860@end deftypevr
15861
15862@deftypevr {paramètre de @code{fifo-listener-configuration}} string group
15863Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
15864@end deftypevr
15865
15866
15867Les champs de @code{inet-listener-configuration} disponibles sont :
15868
15869@deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
15870Le protocole à écouter.
15871@end deftypevr
15872
15873@deftypevr {paramètre de @code{inet-listener-configuration}} string address
15874L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
15875La valeur par défaut est @samp{""}.
15876@end deftypevr
15877
15878@deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
15879Le port sur lequel écouter.
15880@end deftypevr
15881
15882@deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
15883S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
15884@samp{required}. La valeur par défaut est @samp{#t}.
15885@end deftypevr
15886
15887@end deftypevr
15888
15889@deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
15890Connexions de clients simultanées maximum par processus. Une fois ce nombre
15891de connections atteint, la connexion suivante fera en sorte que Dovecot
15892démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
15893est utilisé à la place.
15894
15895La valeur par défaut est @samp{0}.
15896
15897@end deftypevr
15898
15899@deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
15900Nombre de connexions à gérer avant de démarrer un nouveau processus.
15901Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
15902mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
15903est @samp{1}.
15904
15905@end deftypevr
15906
15907@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
15908Nombre de processus maximum qui peut exister pour ce service. Si la valeur
15909est 0, @code{default-process-limit} est utilisé à la place.
15910
15911La valeur par défaut est @samp{0}.
15912
15913@end deftypevr
15914
15915@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
15916Nombre de processus à toujours garder en attente de connexions. La valeur
15917par défaut est @samp{0}.
15918@end deftypevr
15919
15920@deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
15921Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
15922d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
15923@end deftypevr
15924
15925@end deftypevr
15926
15927@deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
15928Configuration du dictionnaire, créé par le constructeur
15929@code{dict-configuration}.
15930
15931Les champs de @code{dict-configuration} disponibles sont :
15932
15933@deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
15934Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
15935valeur par défaut est @samp{()}.
15936@end deftypevr
15937
15938@end deftypevr
15939
15940@deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
15941Une liste de configurations passdb, chacune créée par le constructeur
15942@code{passdb-configuration}.
15943
15944Les champs de @code{passdb-configuration} disponibles sont :
15945
15946@deftypevr {paramètre de @code{passdb-configuration}} string driver
15947Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
15948@samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
15949par défaut est @samp{"pam"}.
15950@end deftypevr
15951
15952@deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
15953Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
15954par défaut est @samp{""}.
15955@end deftypevr
15956
15957@end deftypevr
15958
15959@deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
15960Liste des configurations userdb, chacune créée par le constructeur
15961@code{userdb-configuration}.
15962
15963Les champs de @code{userdb-configuration} disponibles sont :
15964
15965@deftypevr {paramètre de @code{userdb-configuration}} string driver
15966Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
15967@samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
15968@end deftypevr
15969
15970@deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
15971Liste des arguments du pilote userdb séparés par des espaces. La valeur par
15972défaut est @samp{""}.
15973@end deftypevr
15974
15975@deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
15976Remplace des champs de passwd. La valeur par défaut est @samp{()}.
15977@end deftypevr
15978
15979@end deftypevr
15980
15981@deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
15982Configuration du greffon, créé par le constructeur
15983@code{plugin-configuration}.
15984@end deftypevr
15985
15986@deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
15987Liste d'espaces de noms. Chaque élément de la liste est créé par le
15988constructeur @code{namespace-configuration}.
15989
15990Les champs de @code{namespace-configuration} disponibles sont :
15991
15992@deftypevr {paramètre de @code{namespace-configuration}} string name
15993Nom de cet espace de nom.
15994@end deftypevr
15995
15996@deftypevr {paramètre de @code{namespace-configuration}} string type
15997Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
15998valeur par défaut est @samp{"private"}.
15999@end deftypevr
16000
16001@deftypevr {paramètre de @code{namespace-configuration}} string separator
16002Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
16003séparateur pour tous les espaces de noms ou certains clients seront confus.
16004@samp{/} est généralement une bonne valeur. La valeur par défaut dépend
16005cependant du format de stockage sous-jacent. La valeur par défaut est
16006@samp{""}.
16007@end deftypevr
16008
16009@deftypevr {paramètre de @code{namespace-configuration}} string prefix
16010Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
16011différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
16012valeur par défaut est @samp{""}.
16013@end deftypevr
16014
16015@deftypevr {paramètre de @code{namespace-configuration}} string location
16016Emplacement physique de la boîte aux lettres. C'est le même format que
16017mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
16018@samp{""}.
16019@end deftypevr
16020
16021@deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
16022Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
16023le possède. La valeur par défaut est @samp{#f}.
16024@end deftypevr
16025
16026@deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
16027Si l'espace de nom est caché, il n'est pas publié auprès des clients par
16028l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
16029#f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
16030des espaces de noms différents que vous voulez rendre obsolètes sans les
16031casser. Par exemple vous pouvez cacher les espaces de noms avec les
16032préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
16033défaut est @samp{#f}.
16034@end deftypevr
16035
16036@deftypevr {paramètre de @code{namespace-configuration}} boolean list?
16037Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
16038Cela rend l'espace de nom visible pour les clients qui ne supportent pas
16039l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
16040aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
16041défaut est @samp{#t}.
16042@end deftypevr
16043
16044@deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
16045Les espaces de noms gèrent leur propre souscription. Si la valeur est
16046@code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
16047toujours avoir cette valeur à @code{#t}. La valeur par défaut est
16048@samp{#t}.
16049@end deftypevr
16050
16051@deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
16052Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
16053par défaut est @samp{()}.
16054
16055Les champs de @code{mailbox-configuration} disponibles sont :
16056
16057@deftypevr {paramètre de @code{mailbox-configuration}} string name
16058Nom de cette boîte aux lettres.
16059@end deftypevr
16060
16061@deftypevr {paramètre de @code{mailbox-configuration}} string auto
16062@samp{create} créera automatiquement cette boîte aux lettres.
16063@samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
16064défaut est @samp{"no"}.
16065@end deftypevr
16066
16067@deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
16068Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
16069valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
16070@code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
16071défaut est @samp{()}.
16072@end deftypevr
16073
16074@end deftypevr
16075
16076@end deftypevr
16077
16078@deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
16079Répertoire de base où stocker les données d'exécution. La valeur par défaut
16080est @samp{"/var/run/dovecot/"}.
16081@end deftypevr
16082
16083@deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
16084Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
16085ready."}.
16086@end deftypevr
16087
16088@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
16089Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
16090sont autorisées à modifier leurs adresses IP et leurs ports (pour la
16091connexion et la vérification d'authentification).
16092@samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
16093Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
16094défaut est @samp{()}.
16095@end deftypevr
16096
16097@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
16098Liste des sockets de vérification d'accès de connexion (p.@: ex.@:
16099tcpwrap). La valeur par défaut est @samp{()}.
16100@end deftypevr
16101
16102@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
16103Montre des titres de processus plus verbeux (dans ps). Actuellement, montre
16104le nom d'utilisateur et l'adresse IP. Utile pour voir qui utilise en
16105réalité les processus IMAP (p.@: ex.@: des boîtes aux lettres partagées ou
16106si le même uid est utilisé pour plusieurs comptes). La valeur par défaut
16107est @samp{#f}.
16108@end deftypevr
16109
16110@deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
16111Indique si les processus devraient toujours être tués lorsque le processus
16112maître de Dovecot est éteint. La valeur @code{#f} signifie que Dovecot peut
16113être mis à jour sans forcer les connexions clientes existantes à se fermer
16114(bien que cela puisse être un problème si la mise à jour est un correctif de
16115sécurité par exemple). La valeur par défaut est @samp{#t}.
16116@end deftypevr
16117
16118@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
16119Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
16120de connexions au serveur doveadm au lieu de les lancer dans le même
16121processus. La valeur par défaut est @samp{0}.
16122@end deftypevr
16123
16124@deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
16125Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
16126valeur par défaut est @samp{"doveadm-server"}.
16127@end deftypevr
16128
16129@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
16130Liste des variables d'environnement qui sont préservées au démarrage de
16131Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
16132paires clef=valeur pour toujours spécifier ce paramètre.
16133@end deftypevr
16134
16135@deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
16136Désactive la commande LOGIN et toutes les autres authentifications en texte
16137clair à moins que SSL/TLS ne soit utilisé (capacité LOGINDISABLED).
16138Remarquez que si l'IP distante correspond à l'IP locale (c.-à-d.@: que vous
16139vous connectez depuis le même ordinateur), la connexion est considérée comme
16140sécurisée et l'authentification en texte clair est permise. Voir aussi le
16141paramètre ssl=required. La valeur par défaut est @samp{#t}.
16142@end deftypevr
16143
16144@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
16145Taille du cache d'authentification (p.@: ex.@: @samp{#e10e6}). 0 signifie
16146qu'il est désactivé. Remarquez que bsdauth, PAM et vpopmail ont besoin que
16147@samp{cache-key} soit indiqué pour que le cache soit utilisé. La valeur par
16148défaut est @samp{0}.
16149@end deftypevr
16150
16151@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
16152Durée de vie des données en cache. Après l'expiration du TTL
16153l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
16154de données principale revoie une erreur interne. Nous essayons aussi de
16155gérer les changements de mot de passe automatiquement : si
16156l'authentification précédente de l'utilisateur était réussie mais pas
16157celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
16158l'authentification en texte clair uniquement. La valeur par défaut est
16159@samp{"1 hour"}.
16160@end deftypevr
16161
16162@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
16163TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
16164passe ne correspond pas). 0 désactive la mise en cache complètement. La
16165valeur par défaut est @samp{"1 hour"}.
16166@end deftypevr
16167
16168@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
16169Liste des domaines pour les mécanismes d'authentification SASL qui en ont
16170besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
16171utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
16172domaine listé ici, donc gardez celui par défaut en premier. La valeur par
16173défaut est @samp{()}
16174@end deftypevr
16175
16176@deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
16177Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
16178les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
16179authentification en texte clair. La valeur par défaut est @samp{""}.
16180@end deftypevr
16181
16182@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
16183Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
16184d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
16185listé ici, la connexion échoue automatiquement. C'est juste une
16186vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
16187exploiter des vulnérabilités potentielles d'échappement de guillemets avec
16188les bases de données SQL/LDAP. Si vous voulez autoriser tous les
16189caractères, indiquez la liste vide.
16190@end deftypevr
16191
16192@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
16193Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
16194cherchés en base. La valeur contient une série de caractère de -> à. Par
16195exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
16196@samp{@@}. La valeur par défaut est @samp{""}.
16197@end deftypevr
16198
16199@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
16200Format des noms d'utilisateur avant qu'ils ne soient cherchés en base. Vous
16201pouvez utiliser les variables standard ici, p.@: ex.@: %Lu est le nom
16202d'utilisateur en minuscule, %n enlève le domaine s'il est donné ou
16203@samp{%n-AT-%d} changerait le @samp{@@} en @samp{-AT-}. Cette traduction
16204est faite après les changements de @samp{auth-username-translation}. La
16205valeur par défaut est @samp{"%Lu"}.
16206@end deftypevr
16207
16208@deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
16209Si vous voulez permettre aux utilisateurs maîtres de se connecter en
16210spécifiant le nom d'utilisateur maître dans la chaîne de nom d'utilisateur
16211normal (c.-à-d.@: sans utiliser le support du mécanisme SASL pour cela),
16212vous pouvez spécifier le caractère de séparation ici. Le format est ensuite
16213<nom d'utilisateur><séparateur><nom d'utilisateur maître>. UW-IMAP utilise
16214@samp{*} comme séparateur, donc ça pourrait être un bon choix. La valeur
16215par défaut est @samp{""}.
16216@end deftypevr
16217
16218@deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
16219Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
16220mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
16221@end deftypevr
16222
16223@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
16224Nombre maximum de processus de travail dovecot-auth. Ils sont utilisés pour
16225exécuter des requêtes passdb et userdb bloquantes (p.@: ex.@: MySQL et
16226PAM). Ils sont créés automatiquement et détruits au besoin. La valeur par
16227défaut est @samp{30}.
16228@end deftypevr
16229
16230@deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
16231Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
16232est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
16233des guillemets) pour permettre toutes les entrées keytab. La valeur par
16234défaut est @samp{""}.
16235@end deftypevr
16236
16237@deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
16238Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
16239par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
16240spécifié. Vous pourriez avoir besoin de faire en sorte que le service
16241d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
16242par défaut est @samp{""}.
16243@end deftypevr
16244
16245@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
16246Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
16247Samba et l'utilitaire @samp{ntlm-auth}.
16248<doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
16249@samp{#f}.
16250@end deftypevr
16251
16252@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
16253Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
16254@samp{"/usr/bin/ntlm_auth"}.
16255@end deftypevr
16256
16257@deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
16258Durée d'attente avant de répondre à des authentifications échouées. La
16259valeur par défaut est @samp{"2 secs"}.
16260@end deftypevr
16261
16262@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
16263Requiert un certification client SSL valide ou l'authentification échoue.
16264La valeur par défaut est @samp{#f}.
16265@end deftypevr
16266
16267@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
16268Prend le nom d'utilisateur du certificat SSL client, avec
16269@code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
16270sujet. La valeur par défaut est @samp{#f}.
16271@end deftypevr
16272
16273@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
16274Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
16275sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
16276@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
16277@samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
16278paramètre @samp{disable-plaintext-auth}.
16279@end deftypevr
16280
16281@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
16282Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
16283Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
16284même que le @samp{inet-listener} du service directeur. La valeur par défaut
16285est @samp{()}.
16286@end deftypevr
16287
16288@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
16289Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
16290grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
16291valeur par défaut est @samp{()}.
16292@end deftypevr
16293
16294@deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
16295Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
16296après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
16297min"}.
16298@end deftypevr
16299
16300@deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
16301La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
16302utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
16303@@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
16304valeur par défaut est @samp{"%Lu"}.
16305@end deftypevr
16306
16307@deftypevr {paramètre de @code{dovecot-configuration}} string log-path
16308Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
16309journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
16310valeur par défaut est @samp{"syslog"}.
16311@end deftypevr
16312
16313@deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
16314Fichier de journal à utiliser pour les messages d'information. La valeur
16315par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
16316@end deftypevr
16317
16318@deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
16319Fichier de journal à utiliser pour les messages de débogage. La valeur par
16320défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
16321@end deftypevr
16322
16323@deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
16324Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
16325si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
16326local0..local7. D'autres dispositifs standard sont supportés. La valeur
16327par défaut est @samp{"mail"}.
16328@end deftypevr
16329
16330@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
16331Indique s'il faut enregistrer les tentatives de connexion échouées et la
16332raison de leur échec. La valeur par défaut est @samp{#f}.
16333@end deftypevr
16334
16335@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
16336Dans le cas où le mot de passe n'était pas correct, indique s'il faut
16337enregistrer le mauvais mot de passe. Les valeurs valides sont « no », «
16338plain » et « sha1 ». Il peut être utile d'indiquer « sha1 » pour
16339discriminer des attaques par force brute d'utilisateurs qui réessayent
16340encore et encore le même mot de passe. Vous pouvez aussi tronquer la valeur
16341à n caractères en ajoutant « :n » (p.@: ex.@: « sha1:6 »). La valeur par
16342défaut est @samp{#f}.
16343@end deftypevr
16344
16345@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
16346Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
16347requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
16348@end deftypevr
16349
16350@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
16351Dans le cas où le mot de passe était incorrect, indique s'il faut
16352enregistrer les mots de passe et les schémas utilisés pour que le problème
16353puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
16354La valeur par défaut est @samp{#f}.
16355@end deftypevr
16356
16357@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
16358Indique s'il faut activer le débogage du traitement des courriels. Cela
16359peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
16360La valeur par défaut est @samp{#f}.
16361@end deftypevr
16362
16363@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
16364Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
16365est @samp{#f}.
16366@end deftypevr
16367
16368@deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
16369Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
16370codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
16371%H:%M:%S \""}.
16372@end deftypevr
16373
16374@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
16375Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
16376variable non vide sont agrégés pour former une chaîne de mots séparés par
16377des virgules.
16378@end deftypevr
16379
16380@deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
16381Format du journal de connexion. %s contient la chaîne
16382@samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
16383valeur par défaut est @samp{"%$: %s"}.
16384@end deftypevr
16385
16386@deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
16387Préfixe à utiliser devant chaque ligne du fichier de journal pour les
16388processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
16389la liste des variables que vous pouvez utiliser. La valeur par défaut est
16390@samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
16391@end deftypevr
16392
16393@deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
16394Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
16395utiliser ces variables :
16396@table @code
16397@item %$
16398Message de statut de la livraison (p.@: ex.@: @samp{saved to INBOX})
16399@item %m
16400Message-ID
16401@item %s
16402Objet
16403@item %f
16404Adresse « de »
16405@item %p
16406Taille physique
16407@item %w
16408Taille virtuelle.
16409@end table
16410La valeur par défaut est @samp{"msgid=%m: %$"}.
16411@end deftypevr
16412
16413@deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
16414Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
16415vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
16416automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
16417courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
16418Dovecot.
16419
16420Si vous utilisez mbox, il ne suffit pas de donner le chemin vers le fichier
16421INBOX (p.@: ex.@: /var/mail/%u). Vous devrez aussi dire à Dovecot où les
16422autres boîtes aux lettres se trouvent. Cela s'appelle le « répertoire
16423racine des courriels » et il doit être le premier chemin donné à l'option
16424@samp{mail-location}.
16425
16426Il y a quelques variables spéciales que vous pouvez utiliser :
16427
16428@table @samp
16429@item %u
16430nom d'utilisateur
16431@item %n
16432la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
16433pas de domaine
16434@item %d
16435la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
16436domaine
16437@item %h
16438répertoire personnel
16439@end table
16440
16441Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
16442@table @samp
16443@item maildir:~/Maildir
16444@item mbox:~/mail:INBOX=/var/mail/%u
16445@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
16446@end table
16447La valeur par défaut est @samp{""}.
16448@end deftypevr
16449
16450@deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
16451Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
16452utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
16453uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
16454<doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
16455@end deftypevr
16456
16457@deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
16458
16459La valeur par défaut est @samp{""}.
16460@end deftypevr
16461
16462@deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
16463Groupe à activer temporairement pour les opérations privilégiées.
16464Actuellement cela est utilisé uniquement avec INBOX lors de sa création
16465initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
16466« mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
16467@end deftypevr
16468
16469@deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
16470Donne l'accès à ces groupes supplémentaires aux processus de courriel. Ils
16471sont typiquement utilisés pour mettre en place l'accès à des boîtes aux
16472lettres partagées. Remarquez qu'il peut être dangereux d'utiliser cette
16473option si l'utilisateur peut créer des liens symboliques (p.@: ex.@: si le
16474groupe « mail » est utilisé ici, « ln -s /var/mail ~/mail/var » peut
16475permettre à un utilisateur de supprimer les boîtes aux lettres des autres,
16476ou « ln -s /secret/shared/box ~/mail/mybox » lui permettrait de la lire).
16477La valeur par défaut est @samp{""}.
16478@end deftypevr
16479
16480@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
16481Permet l'accès complet au système de fichiers pour les clients. Il n'y a
16482pas de vérification d'accès autres que ce que le système d'exploitation fait
16483avec les UID/GID. Cela fonctionne aussi bien avec maildir qu'avec mbox, ce
16484qui vous permet de préfixer les noms des boîtes aux lettres avec p.@: ex.@:
16485/chemin/ ou ~utilisateur/. La valeur par défaut est @samp{#f}.
16486@end deftypevr
16487
16488@deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
16489Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
16490dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
16491défaut est @samp{#f}.
16492@end deftypevr
16493
16494@deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
16495S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
16496verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
16497option est sûre de nos jours. La valeur par défaut est @samp{#t}.
16498@end deftypevr
16499
16500@deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
16501Quand utiliser les appels à fsync() ou fdatasync() :
16502@table @code
16503@item optimized
16504Lorsque cela est nécessaire pour éviter de perdre des données importantes
16505@item always
16506Utile lorsque par exemple les écritures NFS sont retardées
16507@item never
16508Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
16509perdre toutes les données).
16510@end table
16511La valeur par défaut est @samp{"optimized"}.
16512@end deftypevr
16513
16514@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
16515Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
16516Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
16517seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
16518par défaut est @samp{#f}.
16519@end deftypevr
16520
16521@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
16522Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
16523utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
16524@samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
16525@end deftypevr
16526
16527@deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
16528Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
16529flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
16530qui peuvent créer plus d'utilisation du disque que les autres méthodes de
16531verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
16532rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
16533@samp{"fcntl"}.
16534@end deftypevr
16535
16536@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
16537Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
16538plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
16539@end deftypevr
16540
16541@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
16542L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
16543utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
16544tant que démon ou qu'un autre utilisateur système. Remarquez que la
16545connexion en root est interdite en dur dans le binaire de dovecot et qu'on
16546ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
16547par défaut est @samp{500}.
16548@end deftypevr
16549
16550@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
16551
16552La valeur par défaut est @samp{0}.
16553@end deftypevr
16554
16555@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
16556Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
16557un GID non-valide comme numéro de groupe primaire ne peuvent pas se
16558connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
16559ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
16560@end deftypevr
16561
16562@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
16563
16564La valeur par défaut est @samp{0}.
16565@end deftypevr
16566
16567@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
16568Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
16569lors de la création de nouveaux mots-clefs. La valeur par défaut est
16570@samp{50}.
16571@end deftypevr
16572
16573@deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
16574Liste des répertoires sous lesquels le chroot est permis pour les processus
16575de traitement des courriels (c.-à-d.@: /var/mail permettra aussi de se
16576chrooter dans /var/mail/foo/bar). Ce paramètre n'affecte pas
16577@samp{login-chroot} @samp{mail-chroot} ou les paramètres de chroot de
16578l'authentification. Si ce paramètre est vide, « /./ » dans les répertoires
16579personnels sont ignorés. ATTENTION : n'ajoutez jamais de répertoires ici
16580que les utilisateurs locaux peuvent modifier, puisque ça pourrait permettre
16581d'escalader les privilèges. Normalement vous ne devriez le faire que si les
16582utilisateurs n'ont pas d'accès shell. <doc/wiki/Chrooting.txt>. La valeur
16583par défaut est @samp{()}.
16584@end deftypevr
16585
16586@deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
16587Répertoire chroot par défaut pour les processus de traitement des
16588courriels. Cela peut être modifié pour des utilisateurs particuliers dans
16589la base de donnée en donnant /./ dans le répertoire personnel (p.@: ex.@:
16590/home/./utilisateur permet de se chrooter dans /home). Remarquez qu'il n'y
16591a d'habitude pas besoin de se chrooter. Dovecot ne permet pas aux
16592utilisateurs d'accéder aux fichiers en dehors de leur répertoire de
16593courriels de toute façon. Si vos répertoires personnels sont préfixés par
16594le répertoire de chroot, ajoutez « /. » à @samp{mail-chroot}.
16595<doc/wiki/Chrooting.txt>. La valeur par défaut est @samp{""}.
16596@end deftypevr
16597
16598@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
16599Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
16600les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
16601et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
16602@end deftypevr
16603
16604@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
16605Répertoire où trouver les greffons. La valeur par défaut est
16606@samp{"/usr/lib/dovecot"}.
16607@end deftypevr
16608
16609@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
16610Liste des greffons à charger pour tous les services. Les greffons
16611spécifiques à IMAP, LDA, etc sont ajoutés à cette liste dans leur propre
16612fichiers .conf. La valeur par défaut est @samp{()}.
16613@end deftypevr
16614
16615@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
16616Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
16617jour le fichier de cache. Cela permet d'optimiser le comportement de
16618Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
16619disque. La valeur par défaut est @samp{0}.
16620@end deftypevr
16621
16622@deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
16623Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
16624temps en temps pour voir s'il y a de nouveaux messages ou d'autres
16625changements. Ce paramètre défini le temps d'attente minimum entre deux
16626vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
16627trouver immédiatement les changements. La valeur par défaut est @samp{"30
16628secs"}.
16629@end deftypevr
16630
16631@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
16632Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
16633de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
16634système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
16635d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
16636si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
16637leur traitement de ces CR supplémentaires et causer des problèmes. La
16638valeur par défaut est @samp{#f}.
16639@end deftypevr
16640
16641@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
16642Par défaut la commande LIST renvoie toutes les entrées du maildir qui
16643commencent par un point. Activer cette option permet à Dovecot de renvoyer
16644uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
16645sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
16646setting struct @samp{dirent->d_type} this check is free and it's done always
16647regardless of this setting). La valeur par défaut est @samp{#f}.
16648@end deftypevr
16649
16650@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
16651Lors de la copie d'un message, le faire avec des liens en dur si possible.
16652Cela améliore un peu la performance et n'a que peu de chance d'avoir des
16653effets secondaires.
16654@end deftypevr
16655
16656@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
16657Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
16658répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
16659lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
16660est @samp{#f}.
16661@end deftypevr
16662
16663@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
16664La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
16665mbox. Il y en a quatre :
16666
16667@table @code
16668@item dotlock
16669Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
16670plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
16671auront besoin de l'accès en écriture à ce répertoire.
16672@item dotlock-try
16673Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
16674ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
16675@item fcntl
16676Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
16677utilisez lockd.
16678@item flock
16679Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
16680@item lockf
16681Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
16682@end table
16683
16684Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
16685l'ordre dans lequel elles sont déclarées est important pour éviter des
16686interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
16687Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
16688méthodes en même temps.
16689@end deftypevr
16690
16691@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
16692
16693@end deftypevr
16694
16695@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
16696Temps d'attente maximal pour un verrou (tous les verrous) avant
16697d'abandonner. La valeur par défaut est @samp{"5 mins"}.
16698@end deftypevr
16699
16700@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
16701Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
16702modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
16703valeur par défaut est @samp{"2 mins"}.
16704@end deftypevr
16705
16706@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
16707Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
16708savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
16709beaucoup de temps. Comme le changement est habituellement un simple
16710courriel supplémentaire, il serait plus rapide de lire le nouveaux
16711courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
16712toujours à relire le fichier mbox complet si le fichier n'est pas comme
16713attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
16714changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
16715immédiatement compte. Remarquez qu'une synchronisation complète est
16716effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
16717par défaut est @samp{#t}.
16718@end deftypevr
16719
16720@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
16721Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
16722avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
16723activée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
16724@samp{#f}.
16725@end deftypevr
16726
16727@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
16728Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
16729synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
16730ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
16731suppriment souvent tous les courriels. L'inconvénient c'est que vos
16732changements ne sont pas immédiatement visibles pour les autres MUA. La
16733valeur par défaut est @samp{#t}.
16734@end deftypevr
16735
16736@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
16737Si la taille du fichier mbox est plus petite que cela (p.@: ex.@: 100k), ne
16738pas écrire de fichier d'index. Si un fichier d'index existe déjà il est
16739toujours lu, mais pas mis à jour. La valeur par défaut est @samp{0}.
16740@end deftypevr
16741
16742@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
16743Taille du fichier dbox maximale avant rotation. La valeur par défaut est
16744@samp{10000000}.
16745@end deftypevr
16746
16747@deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
16748Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
16749jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
167500 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
16751@end deftypevr
16752
16753@deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
16754Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
16755à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
16756dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
16757défaut est @samp{#f}.
16758@end deftypevr
16759
16760@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
16761Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
16762des fichiers externes, ce qui permet de les stocker une seule fois. Les
16763autres moteurs ne le supportent pas pour le moment.
16764
16765ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
16766vos risques et périls.
16767
16768Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
16769valeur par défaut est @samp{""}.
16770@end deftypevr
16771
16772@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
16773Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
16774Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
16775externe de certaines pièces-jointes spécifiques. La valeur par défaut est
16776@samp{128000}.
16777@end deftypevr
16778
16779@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
16780Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
16781:
16782@table @code
16783@item posix
16784Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
16785déduplication du système de fichier)
16786@item sis posix
16787SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
16788@item sis-queue posix
16789SiS avec déduplication et comparaison différées.
16790@end table
16791La valeur par défaut est @samp{"sis posix"}.
16792@end deftypevr
16793
16794@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
16795Format de hash à utiliser dans les noms de fichiers des pièces-jointes.
16796Vous pouvez ajouter n'importe quel texte ou variable : @code{%@{md4@}},
16797@code{%@{md5@}}, @code{%@{sha1@}}, @code{%@{sha256@}}, @code{%@{sha512@}},
16798@code{%@{size@}}. Les variables peuvent être tronquées, p.@: ex.@:
16799@code{%@{sha256:80@}} renvoie seulement les 80 premiers bits. La valeur par
16800défaut est @samp{"%@{sha1@}"}.
16801@end deftypevr
16802
16803@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
16804
16805La valeur par défaut est @samp{100}.
16806@end deftypevr
16807
16808@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
16809
16810La valeur par défaut est @samp{1000}.
16811@end deftypevr
16812
16813@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
16814Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
16815service. C'est surtout pour attraper et tuer les processus qui font fuiter
16816la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
16817@samp{256000000}.
16818@end deftypevr
16819
16820@deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
16821Utilisateur de connexion utilisé en interne par les processus de connexion.
16822C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
16823avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
16824@end deftypevr
16825
16826@deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
16827Utilisateur utilisé en interne par les processus non privilégiés. Il
16828devrait être différent de l'utilisateur de connexion, pour que les processus
16829de connexion ne puissent pas perturber les autres processus. La valeur par
16830défaut est @samp{"dovecot"}.
16831@end deftypevr
16832
16833@deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
16834Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
16835défaut est @samp{"required"}.
16836@end deftypevr
16837
16838@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
16839Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
16840défaut est @samp{"</etc/dovecot/default.pem"}.
16841@end deftypevr
16842
16843@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
16844Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
16845privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
16846valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
16847@end deftypevr
16848
16849@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
16850Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
16851Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
16852fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
16853ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
16854@end deftypevr
16855
16856@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
16857Certificat de l'autorité de confiance encodé en PEM. Indiquez cette valeur
16858si vous voulez utiliser @samp{ssl-verify-client-cert? #t}. Le fichier
16859devrait contenir les certificats de CA suivi par les CRL correspondants
16860(p.@: ex.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}). La valeur par défaut est
16861@samp{""}.
16862@end deftypevr
16863
16864@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
16865Indique si les certificats clients doivent réussir la vérification du CRL.
16866La valeur par défaut est @samp{#t}.
16867@end deftypevr
16868
16869@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
16870Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
16871requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
16872auth. La valeur par défaut est @samp{#f}.
16873@end deftypevr
16874
16875@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
16876Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
16877habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
16878indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
16879@samp{"commonName"}.
16880@end deftypevr
16881
16882@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
16883Version minimale de SSL à accepter. La valeur par défaut est
16884@samp{"TLSv1"}.
16885@end deftypevr
16886
16887@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
16888Méthodes de chiffrement à utiliser. La valeur par défaut est
16889@samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
16890@end deftypevr
16891
16892@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
16893Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
16894openssl engine ». La valeur par défaut est @samp{""}.
16895@end deftypevr
16896
16897@deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
16898Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
16899domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
16900@end deftypevr
16901
16902@deftypevr {paramètre de @code{dovecot-configuration}} string hostname
16903Nom d'hôte à utiliser dans diverses parties des courriels envoyés (p.@:
16904ex.@: dans Message-Id) et dans les réponses LMTP. La valeur par défaut est
16905le nomdhôte@@domaine réel du système. La valeur par défaut est @samp{""}.
16906@end deftypevr
16907
16908@deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
16909Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
16910rejeter le courriel. La valeur par défaut est @samp{#f}.
16911@end deftypevr
16912
16913@deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
16914Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
16915@samp{"/usr/sbin/sendmail"}.
16916@end deftypevr
16917
16918@deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
16919Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
16920hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
16921@end deftypevr
16922
16923@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
16924En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
16925utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
16926La valeur par défaut est @samp{"Rejected: %s"}.
16927@end deftypevr
16928
16929@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
16930Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
16931utiliser ces variables :
16932
16933@table @code
16934@item %n
16935CRLF
16936@item %r
16937raison
16938@item %s
16939objet du courriel de départ
16940@item %t
16941destinataire
16942@end table
16943La valeur par défaut est @samp{"Your message to <%t> was automatically
16944rejected:%n%r"}.
16945@end deftypevr
16946
16947@deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
16948Caractère de délimitation entre la partie locale et le détail des adresses
16949de courriel. La valeur par défaut est @samp{"+"}.
16950@end deftypevr
16951
16952@deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
16953En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
16954est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
16955dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
16956X-Original-To. La valeur par défaut est @samp{""}.
16957@end deftypevr
16958
16959@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
16960Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
16961? La valeur par défaut est @samp{#f}.
16962@end deftypevr
16963
16964@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
16965Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
16966La valeur par défaut est @samp{#f}.
16967@end deftypevr
16968
16969@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
16970Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
16971des lignes de commandes très longues avec des boîtes aux lettres énormes,
16972donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
16973erreurs « Too long argument » ou « IMAP command line too large ». La valeur
16974par défaut est @samp{64000}.
16975@end deftypevr
16976
16977@deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
16978Format de la chaîne de déconnexion IMAP :
16979@table @code
16980@item %i
16981nombre d'octets lus par le client
16982@item %o
16983nombre total d'octets envoyés au client.
16984@end table
16985Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
16986utilisables. La valeur par défaut est @samp{"in=%i out=%o
16987deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
16988hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
16989body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
16990@end deftypevr
16991
16992@deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
16993Remplace la réponse CAPABILITY d'IMAP. Si la valeur commence par « + »,
16994ajoute les capacités données en haut des valeur par défaut (p.@: ex.@: +XFOO
16995XBAR). La valeur par défaut est @samp{""}.
16996@end deftypevr
16997
16998@deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
16999Temps d'attente entre les notifications « OK Still here » lorsque le client
17000est en IDLE. La valeur par défaut est @samp{"2 mins"}.
17001@end deftypevr
17002
17003@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
17004Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
17005la valeur par défaut. Les champs suivants ont actuellement des valeurs par
17006défaut : name, version, os, os-version, support-url, support-email. La
17007valeur par défaut est @samp{""}.
17008@end deftypevr
17009
17010@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
17011Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
17012valeur par défaut est @samp{""}.
17013@end deftypevr
17014
17015@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
17016Contournements pour divers bogues de certains client :
17017
17018@table @code
17019@item delay-newmail
17020Envoi des notifications de nouveau message EXISTS/RECENT seulement en
17021réponse aux commandes NOOP et CHECK. Certains clients les ignorent
17022autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
17023cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
17024sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
17025contournement si la synchronisation est à « En-têtes seulement ».
17026
17027@item tb-extra-mailbox-sep
17028Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
17029un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
17030Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
17031le traiter comme un nom de boîte aux lettres invalide.
17032
17033@item tb-lsub-flags
17034Montre les drapeaux \Noselect pour les réponses LSUB avec LAYOUT=fs (p.@:
17035ex.@: mbox). Cela fait que Thunderbird réalise qu'ils ne sont pas
17036sélectionnables et les montre en grisé, au lieu de montrer un popup « non
17037sélectionnable » après coup.
17038@end table
17039La valeur par défaut est @samp{()}.
17040@end deftypevr
17041
17042@deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
17043Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
17044autorise tous. La valeur par défaut est @samp{""}.
17045@end deftypevr
17046
17047
17048Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que Guix a
17049une interface complète avec le langage de configuration de Dovecot. Cela
17050permet non seulement de déclarer la configuration de manière agréable, mais
17051aussi d'offrir des capacités de réflexion : les utilisateurs peuvent écrire
17052du code pour inspecter et transformer les configuration depuis Scheme.
17053
17054Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
17055prêt. Dans ce cas, vous pouvez passer un objet
17056@code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
17057@code{dovecot-service}. Comme son nom l'indique, une configuration opaque
17058n'a pas les capacités de réflexions.
17059
17060Les champs de @code{opaque-dovecot-configuration} disponibles sont :
17061
17062@deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
17063Le paquet dovecot.
17064@end deftypevr
17065
17066@deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
17067Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
17068@end deftypevr
17069
17070Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
17071vous pouvez instancier un service dovecot comme cela :
17072
17073@example
17074(dovecot-service #:config
17075 (opaque-dovecot-configuration
17076 (string "")))
17077@end example
17078
17079@subsubheading Service OpenSMTPD
17080
17081@deffn {Variable Scheme} opensmtpd-service-type
17082C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
17083dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
17084dans cet exemple :
17085
17086@example
17087(service opensmtpd-service-type
17088 (opensmtpd-configuration
17089 (config-file (local-file "./my-smtpd.conf"))))
17090@end example
17091@end deffn
17092
17093@deftp {Type de données} opensmtpd-configuration
17094Type de données représentant la configuration de opensmtpd.
17095
17096@table @asis
17097@item @code{package} (par défaut : @var{opensmtpd})
17098Objet de paquet du serveur SMTP OpenSMTPD.
17099
17100@item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
17101Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
17102Par défaut il écoute sur l'interface de boucle locale et accepte les
17103courriels des utilisateurs et des démons de la machine locale, et autorise
17104l'envoi de courriels à des serveurs distants. Lancez @command{man
17105smtpd.conf} pour plus d'information.
17106
17107@end table
17108@end deftp
17109
17110@subsubheading Service Exim
17111
17112@cindex agent de transfert de courriel (MTA)
17113@cindex MTA (agent de transfert de courriel)
17114@cindex SMTP
17115
17116@deffn {Variable Scheme} exim-service-type
17117C'est le type de l'agent de transfert de courriel (MTA)
17118@uref{https://exim.org, Exim}, dont la valeur devrait être un objet
17119@code{exim-configuration} comme dans cet exemple :
17120
17121@example
17122(service exim-service-type
17123 (exim-configuration
17124 (config-file (local-file "./my-exim.conf"))))
17125@end example
17126@end deffn
17127
17128Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
17129service @code{mail-aliases-service-type} dans votre @code{operating-system}
17130(même sans alias).
17131
17132@deftp {Type de données} exim-configuration
17133Type de données représentant la configuration d'exim.
17134
17135@table @asis
17136@item @code{package} (par défaut : @var{exim})
17137Objet de paquet du serveur Exim.
17138
17139@item @code{config-file} (par défaut : @code{#f})
17140Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
17141valeur est @code{#f} alors le service utilisera la configuration par défaut
17142du paquet fournit dans @code{package}. Le fichier de configuration qui en
17143résulte est chargé après avoir mis en place les variables de configuration
17144@code{exim_user} et @code{exim_group}.
17145
17146@end table
17147@end deftp
17148
17149@subsubheading Service d'alias de courriel
17150
17151@cindex alias de courriel
17152@cindex alias, pour les adresses de courriel
17153
17154@deffn {Variable Scheme} mail-aliases-service-type
17155C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
17156comment délivrer les courriels aux utilisateurs du système.
17157
17158@example
17159(service mail-aliases-service-type
17160 '(("postmaster" "bob")
17161 ("bob" "bob@@example.com" "bob@@example2.com")))
17162@end example
17163@end deffn
17164
17165La configuration pour un service @code{mail-aliases-service-type} est une
17166liste associative qui dénote comment délivrer les courriels qui arrivent au
17167système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
17168@code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
17169délivrer les courriels de cet utilisateur.
17170
17171Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
17172système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
17173@code{postmaster} dans la liste @code{user-accounts} du
17174@code{operating-system} pour délivrer les courriels à destination de
17175@code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
17176@code{bob@@example.com} et @code{bob@@example2.com}).
17177
17178@subsubheading Démon IMAP4 GNU Mailutils
17179@cindex Démon IMAP4 GNU Mailutils
17180
17181@deffn {Variable Scheme} imap4d-service-type
17182C'est le type du démon IMAP4 GNU Mailutils, dont la valeur devrait être un
17183objet @code{imap4d-configuration} comme dans cet exemple :
17184
17185@example
17186(service imap4d-service-type
17187 (imap4d-configuration
17188 (config-file (local-file "imap4d.conf"))))
17189@end example
17190@end deffn
17191
17192@deftp {Type de données} imap4d-configuration
17193Type de données représentant la configuration de @command{imap4d}.
17194
17195@table @asis
17196@item @code{package} (par défaut : @code{mailutils})
17197Le paquet qui fournit @command{imap4d}.
17198
17199@item @code{config-file} (par défaut : @code{%default-imap4d-config-file})
17200Objet simili-fichier du fichier de configuration à utiliser. Par défaut, la
17201configuration fera écouter sur le port TCP 143 sur @code{localhost}.
17202@xref{Conf-imap4d,,, mailutils, GNU Mailutils Manual}, pour les détails.
17203
17204@end table
17205@end deftp
17206
17207@node Services de messagerie
17208@subsection Services de messagerie
17209
17210@cindex messagerie instantanée
17211@cindex jabber
17212@cindex XMPP
17213Le module @code{(gnu services messaging)} fournit des définitions de
17214services Guix pour les services de messageries instantanées : actuellement
17215seul Prosody est supporté.
17216
17217@subsubheading Service Prosody
17218
17219@deffn {Variable Scheme} prosody-service-type
17220C'est le type pour le @uref{https://prosody.im, le serveur de communication
17221XMPP Prosody}. Sa valeur doit être un enregistrement
17222@code{prosody-configuration} comme dans cet exemple :
17223
17224@example
17225(service prosody-service-type
17226 (prosody-configuration
17227 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
17228 (int-components
17229 (list
17230 (int-component-configuration
17231 (hostname "conference.example.net")
17232 (plugin "muc")
17233 (mod-muc (mod-muc-configuration)))))
17234 (virtualhosts
17235 (list
17236 (virtualhost-configuration
17237 (domain "example.net"))))))
17238@end example
17239
17240Voir plus bas pour des détails sur @code{prosody-configuration}.
17241
17242@end deffn
17243
17244Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
17245champ @code{virtualhosts} est requis : il spécifie le domaine que vous
17246voulez voir Prosody servir.
17247
17248Vous pouvez effectuer plusieurs vérifications de la configuration générée
17249avec la commande @code{prosodyctl check}.
17250
17251Prosodyctl vous aidera aussi à importer des certificats du répertoire
17252@code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
17253Voir @url{https://prosody.im/doc/letsencrypt}.
17254
17255@example
17256prosodyctl --root cert import /etc/letsencrypt/live
17257@end example
17258
17259Les paramètres de configuration disponibles sont les suivants. Chaque
17260définition des paramètres est précédé par son type ; par exemple,
17261@samp{string-list foo} indique que le paramètre @code{foo} devrait être
17262spécifié comme une liste de chaînes de caractères. Les types précédés de
17263@code{maybe-} signifient que le paramètre n'apparaîtra pas dans
17264@code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
17265
17266Il y a aussi une manière de spécifier la configuration en tant que chaîne de
17267caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
17268voulez porter depuis un autre système ; voir la fin pour plus de détails.
17269
17270Le type @code{file-object} désigne soit un objet simili-fichier
17271(@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
17272
17273@c The following documentation was initially generated by
17274@c (generate-documentation) in (gnu services messaging). Manually maintained
17275@c documentation is better, so we shouldn't hesitate to edit below as
17276@c needed. However if the change you want to make to this documentation
17277@c can be done in an automated way, it's probably easier to change
17278@c (generate-documentation) than to make it below and have to deal with
17279@c the churn as Prosody updates.
17280
17281Les champs de @code{prosody-configuration} disponibles sont :
17282
17283@deftypevr {paramètre de @code{prosody-configuration}} package prosody
17284Le paquet Prosody.
17285@end deftypevr
17286
17287@deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
17288Emplacement du répertoire de stockage des données de Prosody. Voir
17289@url{https://prosody.im/doc/configure}. La valeur par défaut est
17290@samp{"/var/lib/prosody"}.
17291@end deftypevr
17292
17293@deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
17294Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
17295spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
17296par défaut est @samp{()}.
17297@end deftypevr
17298
17299@deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
17300Chaque hôte virtuel et composant a besoin d'un certificat pour que les
17301clients et les serveurs puissent vérifier son identité. Prosody chargera
17302automatiquement les clefs et les certificats dans le répertoire spécifié
17303ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
17304@end deftypevr
17305
17306@deftypevr {paramètre de @code{prosody-configuration}} string-list admins
17307C'est une liste des comptes administrateurs de ce serveur. Remarquez que
17308vous devez créer les comptes séparément. Voir
17309@url{https://prosody.im/doc/admins} et
17310@url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
17311'("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
17312@samp{()}.
17313@end deftypevr
17314
17315@deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
17316Active l'utilisation de libevent pour de meilleures performances sous une
17317forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
17318défaut est @samp{#f}.
17319@end deftypevr
17320
17321@deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
17322C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
17323@code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
17324qu'il existe aussi. La documentation des modules se trouve sur
17325@url{https://prosody.im/doc/modules}. La valeur par défaut est
17326@samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
17327"blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
17328"admin_adhoc")}.
17329@end deftypevr
17330
17331@deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
17332@samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
17333mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
17334par défaut est @samp{()}.
17335@end deftypevr
17336
17337@deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
17338Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
17339chemin est vide alors @samp{mod_groups} ne fait rien. Voir
17340@url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
17341@samp{"/var/lib/prosody/sharedgroups.txt"}.
17342@end deftypevr
17343
17344@deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
17345Désactive la création de compte par défaut, pour la sécurité. Voir
17346@url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
17347@samp{#f}.
17348@end deftypevr
17349
17350@deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
17351Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
17352pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
17353pas complètement ces options, ne les ajoutez pas à votre configuration, il
17354est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
17355@url{https://prosody.im/doc/advanced_ssl_config}.
17356
17357Les champs de @code{ssl-configuration} disponibles sont :
17358
17359@deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
17360Cela détermine la poignée de main à utiliser.
17361@end deftypevr
17362
17363@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
17364Chemin vers votre fichier de clef privée.
17365@end deftypevr
17366
17367@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
17368Chemin vers votre fichier de certificat.
17369@end deftypevr
17370
17371@deftypevr {paramètre de @code{ssl-configuration}} file-object capath
17372Chemin vers le répertoire contenant les certificats racines que vous voulez
17373voir Prosody utiliser lors de la vérification des certificats des serveurs
17374distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
17375@end deftypevr
17376
17377@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
17378Chemin vers un fichier contenant les certificats racines auxquels Prosody
17379devra faire confiance. Comme @code{capath} mais avec les certificats
17380concaténés ensemble.
17381@end deftypevr
17382
17383@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
17384Une liste d'options de vérification (qui correspondent globalement aux
17385drapeaux @code{set_verify()} d'OpenSSL).
17386@end deftypevr
17387
17388@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
17389Une liste d'options générales liées à SSL/TLS. Elles correspondent
17390globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
17391options disponibles dans LuaSec, voir les sources de LuaSec.
17392@end deftypevr
17393
17394@deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
17395Longueur maximale d'une chaîne d'autorités de certifications avant la
17396racine.
17397@end deftypevr
17398
17399@deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
17400Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
17401chiffrement que Prosody offrira aux clients, et dans quel ordre de
17402préférence.
17403@end deftypevr
17404
17405@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
17406Un chemin vers un fichier contenant les paramètres pour l'échange de clef
17407Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
17408dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
17409@end deftypevr
17410
17411@deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
17412Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
17413Prosody est @samp{"secp384r1"}.
17414@end deftypevr
17415
17416@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
17417Une liste d'options de vérification « supplémentaires ».
17418@end deftypevr
17419
17420@deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
17421Mot de passe pour les clefs privées chiffrées.
17422@end deftypevr
17423
17424@end deftypevr
17425
17426@deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
17427S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
17428non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
17429défaut est @samp{#f}.
17430@end deftypevr
17431
17432@deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
17433Ensemble de mécanismes qui ne seront jamais offerts. Voir
17434@url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
17435@samp{("DIGEST-MD5")}.
17436@end deftypevr
17437
17438@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
17439S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
17440non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
17441défaut est @samp{#f}.
17442@end deftypevr
17443
17444@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
17445S'il faut requérir le chiffrement et l'authentification du certificat. Cela
17446fournit une sécurité idéale, mais demande que les serveurs avec lesquels
17447vous communiquez supportent le chiffrement ET présentent un certificat
17448valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
17449valeur par défaut est @samp{#f}.
17450@end deftypevr
17451
17452@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
17453Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
17454invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
17455besoin de s'authentifier avec des certificats. Ils seront authentifiés par
17456DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
17457est @samp{()}.
17458@end deftypevr
17459
17460@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
17461Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
17462demander un certificat valide pour certains domaine en spécifiant la liste
17463ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
17464est @samp{()}.
17465@end deftypevr
17466
17467@deftypevr {paramètre de @code{prosody-configuration}} string authentication
17468Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
17469les mots de passes en texte clair et utilise la configuration de stockage
17470des données de Prosody pour stocker les données authentifiées. Si vous
17471n'avez pas confiance dans le serveur, lisez
17472@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
17473d'information sur l'utilisation du moteur hashed. Voir aussi
17474@url{https://prosody.im/doc/authentication}. La valeur par défaut est
17475@samp{"internal_plain"}.
17476@end deftypevr
17477
17478@deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
17479Indique les options de journalisation. La configuration avancée des
17480journaux n'est pas encore supportée par le service Prosody. Voir
17481@url{https://prosody.im/doc/logging}. La valeur par défaut est
17482@samp{"*syslog"}.
17483@end deftypevr
17484
17485@deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
17486Fichier où écrire le PID. Voir
17487@url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
17488@samp{"/var/run/prosody/prosody.pid"}.
17489@end deftypevr
17490
17491@deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
17492Taille maximum autorisée pour le corps HTTP (en octets).
17493@end deftypevr
17494
17495@deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
17496Certains modules exposent leur propre URL de diverses manières. Cette URL
17497est construite à partir du protocole, de l'hôte et du port utilisé. Si
17498Prosody se trouve derrière un proxy, l'URL publique sera
17499@code{http-external-url} à la place. Voir
17500@url{https://prosody.im/doc/http#external_url}.
17501@end deftypevr
17502
17503@deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
17504Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
17505créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
17506comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
17507@samp{"example.com"}. Toutes les options de cette liste seront appliquées
17508uniquement à cet hôte.
17509
17510Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
17511éviter de le confondre avec le nom d'hôte physique réel de la machine qui
17512héberge Prosody. Une seule instance de Prosody peut servir plusieurs
17513domaines, chacun défini comme une entrée VirtualHost dans la configuration
17514de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
17515qu'une entrée VirtualHost.
17516
17517Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
17518
17519Les champs de @code{virtualhost-configuration} disponibles sont :
17520
17521tous ces champs de @code{prosody-configuration} : @code{admins},
17522@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17523@code{groups-file}, @code{allow-registration?}, @code{ssl},
17524@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17525@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17526@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17527@code{authentication}, @code{log}, @code{http-max-content-size},
17528@code{http-external-url}, @code{raw-content}, plus :
17529@deftypevr {paramètre de @code{virtualhost-configuration}} string domain
17530Domaine que vous souhaitez que Prosody serve.
17531@end deftypevr
17532
17533@end deftypevr
17534
17535@deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
17536Les composant sont des services supplémentaires qui sont disponibles pour
17537les clients, habituellement sur un sous-domaine du serveur principal (comme
17538@samp{"mycomponent.example.com"}). Des exemples de composants sont des
17539serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
17540d'autres protocoles.
17541
17542Les composants internes sont implémentés dans des greffons spécifiques à
17543Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
17544champ de nom d'hôte et le greffon que vous voulez utiliser pour le
17545composant.
17546
17547Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
17548@samp{()}.
17549
17550Les champs de @code{int-component-configuration} disponibles sont :
17551
17552tous ces champs de @code{prosody-configuration} : @code{admins},
17553@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17554@code{groups-file}, @code{allow-registration?}, @code{ssl},
17555@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17556@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17557@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17558@code{authentication}, @code{log}, @code{http-max-content-size},
17559@code{http-external-url}, @code{raw-content}, plus :
17560@deftypevr {paramètre de @code{int-component-configuration}} string hostname
17561Nom d'hôte du composant.
17562@end deftypevr
17563
17564@deftypevr {paramètre de @code{int-component-configuration}} string plugin
17565Greffon que vous voulez utiliser pour ce composant.
17566@end deftypevr
17567
17568@deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
17569Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
17570créer des chatrooms/conférences pour les utilisateurs XMPP.
17571
17572Des informations générales sur la configuration des chatrooms
17573multi-utilisateurs se trouvent dans la documentation sur les chatrooms
17574(@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
17575découvrez.
17576
17577Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
17578
17579Les champs de @code{mod-muc-configuration} disponibles sont :
17580
17581@deftypevr {paramètre de @code{mod-muc-configuration}} string name
17582Le nom à renvoyer dans les réponses de découverte de services. La valeur
17583par défaut est @samp{"Prosody Chatrooms"}.
17584@end deftypevr
17585
17586@deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
17587Si la valeur est @samp{#t}, cela permettra uniquement aux admins de créer de
17588nouveaux salons. Sinon n'importe qui peut créer un salon. La valeur
17589@samp{"local"} restreint la création aux utilisateurs du domaine parent du
17590service. P.@: ex.@: @samp{user@@example.com} peut créer des salons sur
17591@samp{rooms.example.com}. La valeur @samp{"admin"} restreint ce service aux
17592administrateurs. La valeur par défaut est @samp{#f}.
17593@end deftypevr
17594
17595@deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
17596Nombre maximum de messages d'historique qui seront envoyés aux membres qui
17597viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
17598@end deftypevr
17599
17600@end deftypevr
17601
17602@end deftypevr
17603
17604@deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
17605Les composants externes utilisent XEP-0114, que la plupart des composants
17606supportent. Pour ajouter un composant externe, vous remplissez simplement
17607le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
17608valeur par défaut est @samp{()}.
17609
17610Les champs de @code{ext-component-configuration} disponibles sont :
17611
17612tous ces champs de @code{prosody-configuration} : @code{admins},
17613@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17614@code{groups-file}, @code{allow-registration?}, @code{ssl},
17615@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17616@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17617@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17618@code{authentication}, @code{log}, @code{http-max-content-size},
17619@code{http-external-url}, @code{raw-content}, plus :
17620@deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
17621Mot de passe que le composant utilisera pour s'authentifier.
17622@end deftypevr
17623
17624@deftypevr {paramètre de @code{ext-component-configuration}} string hostname
17625Nom d'hôte du composant.
17626@end deftypevr
17627
17628@end deftypevr
17629
17630@deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
17631Ports sur lesquels Prosody écoutera les connexions des composants. La
17632valeur par défaut est @samp{(5347)}.
17633@end deftypevr
17634
17635@deftypevr {paramètre de @code{prosody-configuration}} string component-interface
17636Interface sur laquelle Prosody écoutera les connexions des composants. La
17637valeur par défaut est @samp{"127.0.0.1"}.
17638@end deftypevr
17639
17640@deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
17641Contenu brut qui sera ajouté au fichier de configuration.
17642@end deftypevr
17643
17644Il se peut que vous ayez juste envie de lancer un fichier
17645@code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
17646enregistrement @code{opaque-prosody-configuration} comme valeur à
17647@code{prosody-service-type}. Comme son nom l'indique, une configuration
17648opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
17649@code{opaque-prosody-configuration} sont :
17650
17651@deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
17652Le paquet prosody.
17653@end deftypevr
17654
17655@deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
17656Le contenu de @code{prosody.cfg.lua} à utiliser.
17657@end deftypevr
17658
17659Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
17660pouvez instancier un service prosody comme ceci :
17661
17662@example
17663(service prosody-service-type
17664 (opaque-prosody-configuration
17665 (prosody.cfg.lua "")))
17666@end example
17667
17668@c end of Prosody auto-generated documentation
17669
17670@subsubheading Service BitlBee
17671
17672@cindex IRC (Internet Relay Chat)
17673@cindex passerelle IRC
17674@url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
17675interface IRC vers une variété de protocoles de messagerie instantanée comme
17676XMPP.
17677
17678@defvr {Variable Scheme} bitlbee-service-type
17679C'est le type de service pour le démon de passerelle IRC
17680@url{http://bitlbee.org,BitlBee}. Sa valeur est un
17681@code{bitlbee-configuration} (voir plus bas).
17682
17683Pour que BitlBee écoute sur le port 6667 sur localhost, ajoutez cette ligne
17684à vos services :
17685
17686@example
17687(service bitlbee-service-type)
17688@end example
17689@end defvr
17690
17691@deftp {Type de données} bitlbee-configuration
17692C'est la configuration de BitlBee, avec les champs suivants :
17693
17694@table @asis
17695@item @code{interface} (par défaut : @code{"127.0.0.1"})
17696@itemx @code{port} (par défaut : @code{6667})
17697Écoute sur l'interface réseau correspondant à l'adresse IP dans
17698@var{interface}, sur @var{port}.
17699
17700Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
17701peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
17702peuvent venir de n'importe quelle interface réseau.
17703
17704@item @code{package} (par défaut : @code{bitlbee})
17705Le paquet BitlBee à utiliser.
17706
17707@item @code{plugins} (par défaut : @code{'()})
17708Liste des paquets de greffons à utiliser — p.@: ex.@:
17709@code{bitlbee-discord}.
17710
17711@item @code{extra-settings} (par défaut : @code{""})
17712Partie de configuration ajoutée telle-quelle au fichier de configuration de
17713BitlBee.
17714@end table
17715@end deftp
17716
17717@subsubheading Service Quassel
17718
17719@cindex IRC (Internet Relay Chat)
17720@url{https://quassel-irc.org/,Quassel} est un client IRC distribué, ce qui
17721signifie qu'un client ou plus peuvent s'attacher et se détacher du cœur
17722central.
17723
17724@defvr {Variable Scheme} quassel-service-type
17725C'est le type de service pour le démon IRC
17726@url{https://quassel-irc.org/,Quassel}. Sa valeur est un
17727@code{quassel-configuration} (voir plus bas).
17728@end defvr
17729
17730@deftp {Type de données} quassel-configuration
17731C'est la configuration de Quassel, avec les champs suivants :
17732
17733@table @asis
17734@item @code{quassel} (par défaut : @code{quassel})
17735Le paquet Quassel à utiliser.
17736
17737@item @code{interface} (par défaut : @code{"::,0.0.0.0"})
17738@item @code{port} (par défaut : @code{4242})
17739Écoute sur les interfaces réseau correspondant à l'adresse IPv4 ou IPv6 des
17740interfaces spécifiées dans @var{interface}, une liste de chaînes délimitées
17741par des virgules, sur @var{port}.
17742
17743@item @code{loglevel} (par défaut : @code{"info"})
17744Le niveau de journalisation souhaité. Les valeurs acceptées sont « Debug »,
17745« Info », « Warning » et « Error ».
17746@end table
17747@end deftp
17748
17749@node Services de téléphonie
17750@subsection Services de téléphonie
17751
17752@cindex Murmur (serveur VoIP)
17753@cindex serveur VoIP
17754Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
17755est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
17756Mumble}.
17757
17758@deftp {Type de données} murmur-configuration
17759Le type de service pour le serveur Murmur. Voici un exemple de
17760configuration :
17761
17762@example
17763(service murmur-service-type
17764 (murmur-configuration
17765 (welcome-text
17766 "Bienvenue sur ce serveur Mumble qui tourne sur Guix !")
17767 (cert-required? #t) ;désactive les connections par mot de passe
17768 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
17769 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
17770@end example
17771
17772Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
17773mot de passe @code{SuperUser} de murmur avec la commande qui s'affiche
17774pendant la phase d'activation.
17775
17776Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
17777lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
17778@code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
17779vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
17780avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
17781que vous avez indiqué précédemment et accordez les droits administrateur ou
17782modérateur à vous utilisateur mumble nouvellement enregistré et créez
17783quelques salons.
17784
17785Les champs de @code{murmur-configuration} disponibles sont :
17786
17787@table @asis
17788@item @code{package} (par défaut : @code{mumble})
17789Paquet qui contient @code{bin/murmurd}.
17790
17791@item @code{user} (par défaut : @code{"murmur"})
17792Utilisateur qui lancera le serveur Murmur.
17793
17794@item @code{group} (par défaut : @code{"murmur"})
17795Groupe de l'utilisateur qui lancera le serveur Murmur.
17796
17797@item @code{port} (par défaut : @code{64738})
17798Port sur lequel le serveur écoutera.
17799
17800@item @code{welcome-text} (par défaut : @code{""})
17801Texte de bienvenue envoyé aux clients lors de leur connexion.
17802
17803@item @code{server-password} (par défaut : @code{""})
17804Mot de passe que les clients devront entrer pour se connecter.
17805
17806@item @code{max-users} (par défaut : @code{100})
17807Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
17808temps.
17809
17810@item @code{max-user-bandwidth} (par défaut : @code{#f})
17811Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
17812
17813@item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
17814Nom de fichier de la base de données sqlite. L'utilisateur du service
17815deviendra propriétaire du répertoire.
17816
17817@item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
17818Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
17819du répertoire.
17820
17821@item @code{autoban-attempts} (par défaut : @code{10})
17822Nombre maximum de connexions qu'un utilisateur peut faire pendant
17823@code{autoban-timeframe} sans être banni automatiquement pour
17824@code{autoban-time}.
17825
17826@item @code{autoban-timeframe} (par défaut : @code{120})
17827Durée du temps pendant lequel le nombre de connexions est compté.
17828
17829@item @code{autoban-time} (par défaut : @code{300})
17830Durée du bannissement automatique en secondes.
17831
17832@item @code{opus-threshold} (par défaut : @code{100})
17833Pourcentage des clients qui doivent supporter opus avant de passer sur le
17834codec audio opus.
17835
17836@item @code{channel-nesting-limit} (par défaut : @code{10})
17837Profondeur maximum des canaux.
17838
17839@item @code{channelname-regex} (par défaut : @code{#f})
17840Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
17841doivent respecter.
17842
17843@item @code{username-regex} (par défaut : @code{#f})
17844Une chaîne de la forme d'une expression régulière Qt que les noms
17845d'utilisateurs doivent respecter.
17846
17847@item @code{text-message-length} (par défaut : @code{5000})
17848Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
17849textuel.
17850
17851@item @code{image-message-length} (par défaut : @code{(* 128 1024)})
17852Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
17853
17854@item @code{cert-required?} (par défaut : @code{#f})
17855Si la valeur est @code{#t} les clients utilisant une authentification par
17856mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
17857compléter l'assistant de configuration des certificats pour rejoindre le
17858serveur.
17859
17860@item @code{remember-channel?} (paramètre de : @code{#f})
17861Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
17862les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
17863se reconnectent.
17864
17865@item @code{allow-html?} (par défaut : @code{#f})
17866Indique si le html est autorisé dans les messages textuels, les commentaires
17867utilisateurs et les descriptions des canaux.
17868
17869@item @code{allow-ping?} (par défaut : @code{#f})
17870Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
17871maximum et la bande passante maximale du serveur par client aux utilisateurs
17872non connectés. Dans le client Mumble, cette information est affichée dans
17873la boîte de dialogue de connexion.
17874
17875Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
17876
17877@item @code{bonjour?} (par défaut : @code{#f})
17878Indique si le serveur se présente sur le réseau local à travers le protocole
17879bonjour.
17880
17881@item @code{send-version?} (par défaut : @code{#f})
17882Indique si la version du serveur murmur doit être exposée dans les requêtes
17883ping.
17884
17885@item @code{log-days} (par défaut : @code{31})
17886Murmur stocke aussi les journaux en base de données, qui sont accessible via
17887RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
17888les garder pour toujours ou à -1 pour désactiver la journalisation dans la
17889base de données.
17890
17891@item @code{obfuscate-ips?} (par défaut : @code{#t})
17892Indique si les IP enregistrées doivent être cachées pour protéger la vie
17893privée des utilisateurs.
17894
17895@item @code{ssl-cert} (par défaut : @code{#f})
17896Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
17897
17898@example
17899(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
17900@end example
17901@item @code{ssl-key} (par défaut : @code{#f})
17902Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
17903@example
17904(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
17905@end example
17906
17907@item @code{ssl-dh-params} (par défaut : @code{#f})
17908Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
17909pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
17910@code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
17911@code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
17912inclus de la RFC 7919.
17913
17914@item @code{ssl-ciphers} (par défaut : @code{#f})
17915L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
17916disponibles pour SSL/TLS.
17917
17918Cette option est spécifiée en utilisant
17919l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
17920OpenSSL cipher list notation}
17921
17922Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
17923« openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
17924des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
17925nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
17926que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
17927
17928Remarque : modifier cette option peut impacter la rétrocompatibilité de
17929votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
17930connectent.
17931
17932@item @code{public-registration} (par défaut : @code{#f})
17933Doit être un enregistrement
17934@code{<murmur-public-registration-configuration>} ou @code{#f}.
17935
17936Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
17937publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
17938pas enregistrer votre serveur si vous avez un @code{server-password} ou
17939@code{allow-ping} à @code{#f}.
17940
17941Cela peut prendre quelques heures avant d'arriver sur la liste publique.
17942
17943@item @code{file} (par défaut : @code{#f})
17944Version alternative de cette configuration : si vous indiquez quelque chose,
17945le reste est ignoré.
17946@end table
17947@end deftp
17948
17949@deftp {Type de données} murmur-public-registration-configuration
17950Configuration pour l'enregistrement public du service murmur.
17951
17952@table @asis
17953@item @code{name}
17954C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
17955d'hôte.
17956
17957@item @code{password}
17958Un mot de passe pour identifier votre enregistrement. Les mises à jours
17959suivantes devront utiliser le même mot de passe. Ne le perdez pas.
17960
17961@item @code{url}
17962Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
17963web.
17964
17965@item @code{hostname} (par défaut : @code{#f})
17966Par défaut votre serveur sera listé par son adresse IP. Si cette option est
17967indiquée votre serveur sera listé par son nom d'hôte.
17968@end table
17969@end deftp
17970
17971
17972
17973@node Services de surveillance
17974@subsection Services de surveillance
17975
17976@subsubheading Service Tailon
17977
17978@uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
17979visualiser et chercher des fichiers de journaux.
17980
17981L'exemple suivant configurera le service avec les valeurs par défaut. Par
17982défaut, on peut accéder à Tailon sur le pour 8080
17983(@code{http://localhost:8080}).
17984
17985@example
17986(service tailon-service-type)
17987@end example
17988
17989L'exemple suivant personnalise un peu plus la configuration de Tailon, en
17990ajoutant @command{sed} à la liste des commandes autorisées.
17991
17992@example
17993(service tailon-service-type
17994 (tailon-configuration
17995 (config-file
17996 (tailon-configuration-file
17997 (allowed-commands '("tail" "grep" "awk" "sed"))))))
17998@end example
17999
18000
18001@deftp {Type de données} tailon-configuration
18002Type de données représentant la configuration de Tailon. Ce type a les
18003paramètres suivants :
18004
18005@table @asis
18006@item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
18007Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
18008un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
18009(@pxref{G-Expressions}).
18010
18011Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
18012fonction @code{local-file} :
18013
18014@example
18015(service tailon-service-type
18016 (tailon-configuration
18017 (config-file (local-file "./my-tailon.conf"))))
18018@end example
18019
18020@item @code{package} (par défaut : @code{tailon})
18021Le paquet tailon à utiliser.
18022
18023@end table
18024@end deftp
18025
18026@deftp {Type de données} tailon-configuration-file
18027Type de données représentant les options de configuration de Tailon. Ce
18028type a les paramètres suivants :
18029
18030@table @asis
18031@item @code{files} (par défaut : @code{(list "/var/log")})
18032Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
18033fichiers simple ou des répertoires, ou une liste, où le premier élément est
18034le nom d'un sous-section et le reste des fichiers ou des répertoires de
18035cette sous-section.
18036
18037@item @code{bind} (par défaut : @code{"localhost:8080"})
18038Adresse et port sur lesquels Tailon écoute.
18039
18040@item @code{relative-root} (par défaut : @code{#f})
18041Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
18042chemin.
18043
18044@item @code{allow-transfers?} (par défaut : @code{#t})
18045Permet de télécharger les journaux dans l'interface web.
18046
18047@item @code{follow-names?} (par défaut : @code{#t})
18048Permet de surveiller des fichiers qui n'existent pas encore.
18049
18050@item @code{tail-lines} (par défaut : @code{200})
18051Nombre de lignes à lire initialement dans chaque fichier.
18052
18053@item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
18054Commandes autorisées. Par défaut, @code{sed} est désactivé.
18055
18056@item @code{debug?} (par défaut : @code{#f})
18057Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
18058
18059@item @code{wrap-lines} (par défaut : @code{#t})
18060État initial du retour à la ligne dans l'interface web. Configurez l'option
18061à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
18062pas retourner à la ligne au début.
18063
18064@item @code{http-auth} (par défaut : @code{#f})
18065Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
18066l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
18067et @code{"basic"}.
18068
18069@item @code{users} (par défaut : @code{#f})
18070Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
18071restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
18072utilisez une liste de paires, où le premier élément de la paire est le nom
18073d'utilisateur et le second élément est le mot de passe.
18074
18075@example
18076(tailon-configuration-file
18077 (http-auth "basic")
18078 (users '(("user1" . "password1")
18079 ("user2" . "password2"))))
18080@end example
18081
18082@end table
18083@end deftp
18084
18085
18086@subsubheading Service Darkstat
18087@cindex darkstat
18088Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
18089calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
18090
18091@defvar {Variable Scheme} darkstat-service-type
18092C'est le type de service pour le service
18093@uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
18094enregistrement @code{darkstat-configuration} comme dans cet exemple :
18095
18096@example
18097(service darkstat-service-type
18098 (darkstat-configuration
18099 (interface "eno1")))
18100@end example
18101@end defvar
18102
18103@deftp {Type de données} darkstat-configuration
18104Type de données représentant la configuration de @command{darkstat}.
18105
18106@table @asis
18107@item @code{package} (par défaut : @code{darkstat})
18108Le paquet darkstat à utiliser.
18109
18110@item @code{interface}
18111Capture le trafic sur l'interface réseau spécifiée.
18112
18113@item @code{port} (par défaut : @code{"667"})
18114Lie l'interface web sur le port spécifié.
18115
18116@item @code{bind-address} (par défaut : @code{"127.0.0.1"})
18117Lie l'interface web sur l'adresse spécifiée.
18118
18119@item @code{base} (par défaut : @code{"/"})
18120Spécifie le chemin de base des URL. C'est utile si on accède à
18121@command{darkstat} à travers un proxy inverse.
18122
18123@end table
18124@end deftp
18125
18126@subsubheading Service d'export de nœud de Prometheus
18127
18128@cindex prometheus-node-exporter
18129L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
18130matériel et le système d'exploitation fournies par le noyau Linux pour le
18131système de surveillance Prometheus. Ce service devrait être déployé sur
18132tous les nœuds physiques et les machines virtuelles, où vous voulez
18133surveiller ces statistiques.
18134
18135@defvar {Variable Scheme} prometheus-node-exporter-service-type
18136C'est le type de service pour le service
18137@uref{https://github.com/prometheus/node_exporter/,
18138prometheus-node-exporter}, sa valeur doit être un enregistrement
18139@code{prometheus-node-exporter-configuration} comme dans cet exemple :
18140
18141@example
18142(service prometheus-node-exporter-service-type
18143 (prometheus-node-exporter-configuration
18144 (web-listen-address ":9100")))
18145@end example
18146@end defvar
18147
18148@deftp {Type de données} prometheus-node-exporter-configuration
18149Type de données représentant la configuration de @command{node_exporter}
18150
18151@table @asis
18152@item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
18153Le paquet prometheus-node-exporter à utiliser.
18154
18155@item @code{web-listen-address} (par défaut : @code{":9100"})
18156Lie l'interface web sur l'adresse spécifiée.
18157
18158@end table
18159@end deftp
18160
18161@subsubheading Server zabbix
18162@cindex zabbix zabbix-server
18163Zabbix fournit des métriques de suivi entre autres de l'utilisation du
18164réseau, de la charge CPU et de l'espace disque :
18165
18166@itemize
18167@item Haute performance, haute capacité (il est capable de surveiller des centaines de milliers d'appareils).
18168@item Découverte automatique des serveurs, des appareils et leurs interfaces réseaux.
18169@item Découverte bas-niveau, qui permet de commencer automatiquement à surveiller de nouveaux éléments, des systèmes de fichiers ou des interfaces réseaux entre autres.
18170@item Surveillance distribuée avec une administration web centralisée.
18171@item Agents natifs haute-performance.
18172@item Métriques SLA et ITIL KPI dans les rapports.
18173@item Vue haut-niveau (businness) des ressources surveillées à travers des écrans de consoles visuelles définie par l'utilisateur et des panneaux de commande.
18174@item Exécution à distance à travers les mandataires Zabbix.
18175@end itemize
18176
18177@c %start of fragment
18178
18179Les champs de @code{zabbix-server-configuration} disponibles sont :
18180
18181@deftypevr {paramètre de @code{zabbix-server-configuration}} package zabbix-server
18182Le paquet zabbix-server.
18183
18184@end deftypevr
18185
18186@deftypevr {paramètre de @code{zabbix-server-configuration}} string user
18187Utilisateur qui lancera le serveur Zabbix.
18188
18189La valeur par défaut est @samp{"zabbix"}.
18190
18191@end deftypevr
18192
18193@deftypevr {paramètre de @code{zabbix-server-configuration}} group group
18194Groupe qui lancera le serveur Zabbix.
18195
18196La valeur par défaut est @samp{"zabbix"}.
18197
18198@end deftypevr
18199
18200@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-host
18201Le nom d'hôte de la base de données.
18202
18203La valeur par défaut est @samp{"127.0.0.1"}.
18204
18205@end deftypevr
18206
18207@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-name
18208Nom de la base de données.
18209
18210La valeur par défaut est @samp{"zabbix"}.
18211
18212@end deftypevr
18213
18214@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-user
18215Utilisateur de la base de données.
18216
18217La valeur par défaut est @samp{"zabbix"}.
18218
18219@end deftypevr
18220
18221@deftypevr {paramètre de @code{zabbix-server-configuration}} string db-password
18222Mot de passe de la base de données. Utilisez plutôt @code{include-files}
18223avec @code{DBPassword=SECRET} dans le fichier spécifié à la place.
18224
18225La valeur par défaut est @samp{""}.
18226
18227@end deftypevr
18228
18229@deftypevr {paramètre de @code{zabbix-server-configuration}} number db-port
18230Port de la base de données.
18231
18232La valeur par défaut est @samp{5432}.
18233
18234@end deftypevr
18235
18236@deftypevr {paramètre de @code{zabbix-server-configuration}} string log-type
18237Spécifie où les messages de journalisation seront écrits :
18238
18239@itemize @bullet
18240@item
18241@code{system} - syslog.
18242
18243@item
18244@code{file} - fichier spécifié par le paramètre @code{log-file}.
18245
18246@item
18247@code{console} - sortie standard.
18248
18249@end itemize
18250
18251La valeur par défaut est @samp{""}.
18252
18253@end deftypevr
18254
18255@deftypevr {paramètre de @code{zabbix-server-configuration}} string log-file
18256Nom du fichier de journal lorsque le paramètre @code{log-type} vaut
18257@code{file}.
18258
18259La valeur par défaut est @samp{"/var/log/zabbix/server.log"}.
18260
18261@end deftypevr
18262
18263@deftypevr {paramètre de @code{zabbix-server-configuration}} string pid-file
18264Nom du fichier de PID.
18265
18266La valeur par défaut est @samp{"/var/run/zabbix/zabbix_server.pid"}.
18267
18268@end deftypevr
18269
18270@deftypevr {paramètre de @code{zabbix-server-configuration}} string ssl-ca-location
18271Emplacement des fichiers d'autorités de certification (AC) pour la
18272vérification des certificats SSL du serveur.
18273
18274La valeur par défaut est @samp{"/etc/ssl/certs/ca-certificates.crt"}.
18275
18276@end deftypevr
18277
18278@deftypevr {paramètre de @code{zabbix-server-configuration}} string ssl-cert-location
18279Emplacement des certificats SSL des clients.
18280
18281La valeur par défaut est @samp{"/etc/ssl/certs"}.
18282
18283@end deftypevr
18284
18285@deftypevr {paramètre de @code{zabbix-server-configuration}} string extra-options
18286Options supplémentaires ajoutées à la fin du fichier de configuration du
18287serveur Zabbix.
18288
18289La valeur par défaut est @samp{""}.
18290
18291@end deftypevr
18292
18293@deftypevr {paramètre de @code{zabbix-server-configuration}} include-files include-files
18294Vous pouvez inclure des fichiers individuels ou tous les fichiers d'un
18295répertoire dans le fichier de configuration.
18296
18297La valeur par défaut est @samp{()}.
18298
18299@end deftypevr
18300
18301@c %end of fragment
18302
18303@subsubheading Agent zabbix
18304@cindex zabbix zabbix-agent
18305
18306L'agent Zabbix récupère des informations pour le serveur Zabbix.
18307
18308@c %start of fragment
18309
18310Les champs de @code{zabbix-agent-configuration} disponibles sont :
18311
18312@deftypevr {paramètre de @code{zabbix-agent-configuration}} package zabbix-agent
18313Le paquet zabbix-agent.
18314
18315@end deftypevr
18316
18317@deftypevr {paramètre de @code{zabbix-agent-configuration}} string user
18318Utilisateur qui lancera l'agent Zabbix.
18319
18320La valeur par défaut est @samp{"zabbix"}.
18321
18322@end deftypevr
18323
18324@deftypevr {paramètre de @code{zabbix-agent-configuration}} group group
18325Groupe qui lancera l'agent Zabbix.
18326
18327La valeur par défaut est @samp{"zabbix"}.
18328
18329@end deftypevr
18330
18331@deftypevr {paramètre de @code{zabbix-agent-configuration}} string hostname
18332Noms d'hôte unique et sensible à la casse requis pour les vérifications
18333actives et qui doit correspondre au nom d'hôte configuré sur le serveur.
18334
18335La valeur par défaut est @samp{"Zabbix server"}.
18336
18337@end deftypevr
18338
18339@deftypevr {paramètre de @code{zabbix-agent-configuration}} string log-type
18340Spécifie où les messages de journalisation seront écrits :
18341
18342@itemize @bullet
18343@item
18344@code{system} - syslog.
18345
18346@item
18347@code{file} - fichier spécifié par le paramètre @code{log-file}.
18348
18349@item
18350@code{console} - sortie standard.
18351
18352@end itemize
18353
18354La valeur par défaut est @samp{""}.
18355
18356@end deftypevr
18357
18358@deftypevr {paramètre de @code{zabbix-agent-configuration}} string log-file
18359Nom du fichier de journal lorsque le paramètre @code{log-type} vaut
18360@code{file}.
18361
18362La valeur par défaut est @samp{"/var/log/zabbix/agent.log"}.
18363
18364@end deftypevr
18365
18366@deftypevr {paramètre de @code{zabbix-agent-configuration}} string pid-file
18367Nom du fichier de PID.
18368
18369La valeur par défaut est @samp{"/var/run/zabbix/zabbix_agent.pid"}.
18370
18371@end deftypevr
18372
18373@deftypevr {paramètre de @code{zabbix-agent-configuration}} list server
18374Liste d'adresses IP, éventuellement en notation CIDR ou de noms d'hôtes de
18375serveurs Zabbix et de mandataires Zabbix. Les connexions entrantes ne
18376seront acceptées que si elles viennent des hôtes listés ici.
18377
18378La valeur par défaut est @samp{("127.0.0.1")}.
18379
18380@end deftypevr
18381
18382@deftypevr {paramètre de @code{zabbix-agent-configuration}} list server-active
18383Liste de paires d'IP:port (ou nom d'hôte:port) de serveurs Zabbix et de
18384mandataires Zabbix pour les vérifications actives. Si le port n'est pas
18385spécifié, le port par défaut est utilisé. Si ce paramètre n'est pas
18386spécifié, les vérifications actives sont désactivées.
18387
18388La valeur par défaut est @samp{("127.0.0.1")}.
18389
18390@end deftypevr
18391
18392@deftypevr {paramètre de @code{zabbix-agent-configuration}} string extra-options
18393Options supplémentaires ajoutées à la fin du fichier de configuration du
18394serveur Zabbix.
18395
18396La valeur par défaut est @samp{""}.
18397
18398@end deftypevr
18399
18400@deftypevr {paramètre de @code{zabbix-agent-configuration}} include-files include-files
18401Vous pouvez inclure des fichiers individuels ou tous les fichiers d'un
18402répertoire dans le fichier de configuration.
18403
18404La valeur par défaut est @samp{()}.
18405
18406@end deftypevr
18407
18408@c %end of fragment
18409
18410@subsubheading Interface utilisateur Zabbix
18411@cindex zabbix zabbix-front-end
18412
18413Ce service fournit une interface WEB au serveur Zabbix.
18414
18415@c %start of fragment
18416
18417Les champs de @code{zabbix-front-end-configuration} disponibles sont :
18418
18419@deftypevr {paramètre de @code{zabbix-front-end-configuration}} nginx-server-configuration-list nginx
18420Configuration Nginx.
18421
18422@end deftypevr
18423
18424@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-host
18425Le nom d'hôte de la base de données.
18426
18427La valeur par défaut est @samp{"localhost"}.
18428
18429@end deftypevr
18430
18431@deftypevr {paramètre de @code{zabbix-front-end-configuration}} number db-port
18432Port de la base de données.
18433
18434La valeur par défaut est @samp{5432}.
18435
18436@end deftypevr
18437
18438@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-name
18439Nom de la base de données.
18440
18441La valeur par défaut est @samp{"zabbix"}.
18442
18443@end deftypevr
18444
18445@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-user
18446Utilisateur de la base de données.
18447
18448La valeur par défaut est @samp{"zabbix"}.
18449
18450@end deftypevr
18451
18452@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-password
18453Mot de passe de la base de données. Utilisez plutôt @code{db-secret-file}.
18454
18455La valeur par défaut est @samp{""}.
18456
18457@end deftypevr
18458
18459@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string db-secret-file
18460Fichier de secrets qui sera ajouté au fichier @file{zabbix.conf.php}. Ce
18461fichier contient les paramètres d'authentification utilisés par Zabbix. On
18462s'attend à ce que vous le créiez manuellement.
18463
18464La valeur par défaut est @samp{""}.
18465
18466@end deftypevr
18467
18468@deftypevr {paramètre de @code{zabbix-front-end-configuration}} string zabbix-host
18469Nom d'hôte du serveur Zabbix.
18470
18471La valeur par défaut est @samp{"localhost"}.
18472
18473@end deftypevr
18474
18475@deftypevr {paramètre de @code{zabbix-front-end-configuration}} number zabbix-port
18476Port du serveur Zabbix.
18477
18478La valeur par défaut est @samp{10051}.
18479
18480@end deftypevr
18481
18482
18483@c %end of fragment
18484
18485@node Services Kerberos
18486@subsection Services Kerberos
18487@cindex Kerberos
18488
18489Le module @code{(gnu services kerberos)} fournit des services liés au
18490protocole d'authentification @dfn{Kerberos}.
18491
18492@subsubheading Service Krb5
18493
18494Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
18495trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
18496génère un tel fichier à partir d'une définition fournie par la déclaration
18497de système d'exploitation. Il ne démarre aucun démon.
18498
18499Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
18500explicitement. Ce service est connu pour fonctionner avec la bibliothèque
18501cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
18502testées.
18503
18504@defvr {Variable Scheme} krb5-service-type
18505Un type de service pour les clients Kerberos 5.
18506@end defvr
18507
18508@noindent
18509Voici un exemple d'utilisation :
18510@lisp
18511(service krb5-service-type
18512 (krb5-configuration
18513 (default-realm "EXAMPLE.COM")
18514 (allow-weak-crypto? #t)
18515 (realms (list
18516 (krb5-realm
18517 (name "EXAMPLE.COM")
18518 (admin-server "groucho.example.com")
18519 (kdc "karl.example.com"))
18520 (krb5-realm
18521 (name "ARGRX.EDU")
18522 (admin-server "kerb-admin.argrx.edu")
18523 (kdc "keys.argrx.edu"))))))
18524@end lisp
18525
18526@noindent
18527Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
18528@itemize
18529@item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
18530aillant des serveurs d'administration et des centres de distribution de
18531clefs distincts ;
18532@item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
18533explicitement par les clients ;
18534@item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
18535@end itemize
18536
18537Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
18538champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
18539et plus de détails sur chacun d'entre eux, voir la documentation de MIT
18540@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
18541
18542
18543@deftp {Type de données} krb5-realm
18544@cindex domaine, kerberos
18545@table @asis
18546@item @code{name}
18547Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
18548courante est d'utiliser le nom pleinement qualifié de votre organisation,
18549converti en majuscule.
18550
18551@item @code{admin-server}
18552Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
18553tourne.
18554
18555@item @code{kdc}
18556Ce champ est une chaîne identifiant le centre de distribution de clefs pour
18557ce domaine.
18558@end table
18559@end deftp
18560
18561@deftp {Type de données} krb5-configuration
18562
18563@table @asis
18564@item @code{allow-weak-crypto?} (par défaut : @code{#f})
18565Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
18566de chiffrement faibles seront acceptés.
18567
18568@item @code{default-realm} (par défaut : @code{#f})
18569Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
18570pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
18571ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
18572pour chaque principal Kerberos à l'invocation des programmes comme
18573@command{kinit}.
18574
18575@item @code{realms}
18576Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
18577clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
18578@code{name} qui correspond au champ @code{default-realm}.
18579@end table
18580@end deftp
18581
18582
18583@subsubheading Service PAM krb5
18584@cindex pam-krb5
18585
18586Le service @code{pam-krb5} permet la connexion et la gestion des mots de
18587passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
18588applications qui utilisent PAM puissent authentifier automatiquement les
18589utilisateurs avec Kerberos.
18590
18591@defvr {Variable Scheme} pam-krb5-service-type
18592Un type de service pour le module PAM Kerberos 5.
18593@end defvr
18594
18595@deftp {Type de données} pam-krb5-configuration
18596Type de données représentant la configuration du module PAM Kerberos 5. Ce
18597type a les paramètres suivants :
18598@table @asis
18599@item @code{pam-krb5} (par défaut : @code{pam-krb5})
18600Le paquet pam-krb5 à utiliser.
18601
18602@item @code{minimum-uid} (par défaut : @code{1000})
18603Le plus petite ID utilisateur pour lequel les authentifications Kerberos
18604devraient être tentées. Les comptes locaux avec une valeur plus petite
18605échoueront silencieusement leur authentification Kerberos.
18606@end table
18607@end deftp
18608
18609
18610@node Services LDAP
18611@subsection Services LDAP
18612@cindex LDAP
18613@cindex nslcd, service LDAP
18614
18615Le module @code{(gnu services authentication)} fournit le type de service
18616@code{nslcd-service-type}, qui peut être utilisé pour l'authentification par
18617LDAP. En plus de configurer le service lui-même, vous pouvez ajouter
18618@code{ldap} comme service de noms au Name Service Switch. @xref{Name Service Switch} pour des informations détaillées.
18619
18620Voici une déclaration de système d'exploitation simple avec une
18621configuration par défaut pour @code{nslcd-service-type} et une configuration
18622du Name Service Switch qui consulte le service de noms @code{ldap} en
18623dernier :
18624
18625@example
18626(use-service-modules authentication)
18627(use-modules (gnu system nss))
18628...
18629(operating-system
18630 ...
18631 (services
18632 (cons*
18633 (service nslcd-service-type)
18634 (service dhcp-client-service-type)
18635 %base-services))
18636 (name-service-switch
18637 (let ((services (list (name-service (name "db"))
18638 (name-service (name "files"))
18639 (name-service (name "ldap")))))
18640 (name-service-switch
18641 (inherit %mdns-host-lookup-nss)
18642 (password services)
18643 (shadow services)
18644 (group services)
18645 (netgroup services)
18646 (gshadow services)))))
18647@end example
18648
18649@c %start of generated documentation for nslcd-configuration
18650
18651Les champs de @code{nslcd-configuration} disponibles sont :
18652
18653@deftypevr {paramètre de @code{nslcd-configuration}} package nss-pam-ldapd
18654Le paquet @code{nss-pam-ldapd} à utiliser.
18655
18656@end deftypevr
18657
18658@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number threads
18659Le nombre de threads à démarrer qui peuvent gérer les requête et effectuer
18660des requêtes LDAP. Chaque thread ouvre une connexion séparée au serveur
18661LDAP. La valeur par défaut est de 5 threads.
18662
18663La valeur par défaut est @samp{disabled}.
18664
18665@end deftypevr
18666
18667@deftypevr {paramètre de @code{nslcd-configuration}} string uid
18668Cela spécifie l'id de l'utilisateur sous lequel le démon devrait tourner.
18669
18670La valeur par défaut est @samp{"nslcd"}.
18671
18672@end deftypevr
18673
18674@deftypevr {paramètre de @code{nslcd-configuration}} string gid
18675Cela spécifie l'id du groupe sous lequel le démon devrait tourner.
18676
18677La valeur par défaut est @samp{"nslcd"}.
18678
18679@end deftypevr
18680
18681@deftypevr {paramètre de @code{nslcd-configuration}} log-option log
18682Cette option contrôle la journalisation via une liste contenant le schéma et
18683le niveau. Le schéma peut être soit un symbole « none », « syslog », soit
18684un nom de fichier absolu. Le niveau est facultatif et spécifie le niveau de
18685journalisation. Le niveau de journalisation peut être l'un des symboles
18686suivants : « crit », « error », « warning », « notice », « info » ou « debug
18687». Tous les messages avec le niveau spécifié ou supérieurs sont
18688enregistrés.
18689
18690La valeur par défaut est @samp{("/var/log/nslcd" info)}.
18691
18692@end deftypevr
18693
18694@deftypevr {paramètre de @code{nslcd-configuration}} list uri
18695La liste des URI des serveurs LDAP. Normalement, seul le premier serveur
18696sera utilisé avec les serveurs suivants comme secours.
18697
18698La valeur par défaut est @samp{("ldap://localhost:389/")}.
18699
18700@end deftypevr
18701
18702@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string ldap-version
18703La version du protocole LDAP à utiliser. La valeur par défaut est
18704d'utiliser la version maximum supportée par la bibliothèque LDAP.
18705
18706La valeur par défaut est @samp{disabled}.
18707
18708@end deftypevr
18709
18710@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string binddn
18711Spécifie le nom distingué avec lequel se lier au serveur de répertoire pour
18712les recherches. La valeur par défaut est de se lier anonymement.
18713
18714La valeur par défaut est @samp{disabled}.
18715
18716@end deftypevr
18717
18718@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string bindpw
18719Spécifie le mot de passe avec lequel se lier. Cette option n'est valable
18720que lorsqu'elle est utilisée avec binddn.
18721
18722La valeur par défaut est @samp{disabled}.
18723
18724@end deftypevr
18725
18726@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string rootpwmoddn
18727Spécifie le nom distingué à utiliser lorsque l'utilisateur root essaye de
18728modifier le mot de passe d'un utilisateur avec le module PAM.
18729
18730La valeur par défaut est @samp{disabled}.
18731
18732@end deftypevr
18733
18734@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string rootpwmodpw
18735Spécifie le mot de passe à utiliser pour se lier si l'utilisateur root
18736essaye de modifier un mot de passe utilisateur. Cette option n'est valable
18737que si elle est utilisée avec rootpwmoddn
18738
18739La valeur par défaut est @samp{disabled}.
18740
18741@end deftypevr
18742
18743@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-mech
18744Spécifie le mécanisme SASL à utiliser lors de l'authentification SASL.
18745
18746La valeur par défaut est @samp{disabled}.
18747
18748@end deftypevr
18749
18750@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-realm
18751Spécifie le royaume SASL à utiliser pour effectuer une authentification
18752SASL.
18753
18754La valeur par défaut est @samp{disabled}.
18755
18756@end deftypevr
18757
18758@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-authcid
18759Spécifie l'identité d'authentification à utiliser pour effectuer une
18760authentification SASL.
18761
18762La valeur par défaut est @samp{disabled}.
18763
18764@end deftypevr
18765
18766@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string sasl-authzid
18767Spécifie l'identité d'autorisation à utiliser lors d'une authentification
18768SASL.
18769
18770La valeur par défaut est @samp{disabled}.
18771
18772@end deftypevr
18773
18774@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean sasl-canonicalize?
18775Détermine si le nom d'hôte du serveur LDAP devrait être canonalisé. Si
18776c'est activé la bibliothèque LDAP effectuera une recherche de nom d'hôte
18777inversée. Par défaut, il est laissé à la bibliothèque LDAP le soin de
18778savoir si la vérification doit être effectuée ou non.
18779
18780La valeur par défaut est @samp{disabled}.
18781
18782@end deftypevr
18783
18784@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string krb5-ccname
18785Indique le nom du cache d'informations de connexion de GSS-API Kerberos.
18786
18787La valeur par défaut est @samp{disabled}.
18788
18789@end deftypevr
18790
18791@deftypevr {paramètre de @code{nslcd-configuration}} string base
18792La base de recherche de répertoires.
18793
18794La valeur par défaut est @samp{"dc=example,dc=com"}.
18795
18796@end deftypevr
18797
18798@deftypevr {paramètre de @code{nslcd-configuration}} scope-option scope
18799Spécifie la portée de la recherche (subtree, onelevel, base ou children).
18800La portée par défaut est subtree ; la portée base n'est presque jamais utile
18801pour les recherches de service de noms ; la portée children n'est pas prise
18802en charge par tous les serveurs.
18803
18804La valeur par défaut est @samp{(subtree)}.
18805
18806@end deftypevr
18807
18808@deftypevr {paramètre de @code{nslcd-configuration}} maybe-deref-option deref
18809Spécifie la politique de déréférencement des alias. La politique par défaut
18810est de ne jamais déréférencer d'alias.
18811
18812La valeur par défaut est @samp{disabled}.
18813
18814@end deftypevr
18815
18816@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean referrals
18817Spécifie s'il faut activer le suivi de référence. Le comportement par
18818défaut est de suivre les références.
18819
18820La valeur par défaut est @samp{disabled}.
18821
18822@end deftypevr
18823
18824@deftypevr {paramètre de @code{nslcd-configuration}} list-of-map-entries maps
18825Cette option permet d'ajouter des attributs personnalisés à rechercher à la
18826place des attributs par défaut de la RFC 2307. C'est une liste de
18827correspondances, consistant chacune en un nom, en l'attribut RFC 2307 à
18828utiliser et l'expression de la requête pour l'attribut tel qu'il sera
18829disponible dans le répertoire.
18830
18831La valeur par défaut est @samp{()}.
18832
18833@end deftypevr
18834
18835@deftypevr {paramètre de @code{nslcd-configuration}} list-of-filter-entries filters
18836Une liste de filtres consistant en le nom d'une correspondance à laquelle
18837applique le filtre et en une expression de filtre de recherche LDAP.
18838
18839La valeur par défaut est @samp{()}.
18840
18841@end deftypevr
18842
18843@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number bind-timelimit
18844Spécifie la limite de temps en seconds à utiliser lors de la connexion au
18845serveur de répertoire. La valeur par défaut est de 10 secondes.
18846
18847La valeur par défaut est @samp{disabled}.
18848
18849@end deftypevr
18850
18851@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number timelimit
18852Spécifie la limite de temps (en secondes) à attendre une réponse d'un
18853serveur LDAP. La valeur de zéro, par défaut, permet d'attendre indéfiniment
18854la fin des recherches.
18855
18856La valeur par défaut est @samp{disabled}.
18857
18858@end deftypevr
18859
18860@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number idle-timelimit
18861Spécifie la période d'inactivité (en seconde) après laquelle la connexion au
18862serveur LDAP sera fermée. La valeur par défaut est de ne jamais la fermer.
18863
18864La valeur par défaut est @samp{disabled}.
18865
18866@end deftypevr
18867
18868@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number reconnect-sleeptime
18869Spécifie le nombre de secondes pendant laquelle attendre lorsque la
18870connexion à tous les serveurs LDAP a échouée. Par défaut, il y a une
18871seconde d'attente entre le premier échec et la tentative suivante.
18872
18873La valeur par défaut est @samp{disabled}.
18874
18875@end deftypevr
18876
18877@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number reconnect-retrytime
18878Spécifie la durée après laquelle le serveur LDAP est considéré comme
18879définitivement inatteignable. Une fois cette durée atteinte, les tentatives
18880de connexions n'auront plus lieu qu'une fois par cet intervalle de temps.
18881La valeur par défaut est de 10 secondes.
18882
18883La valeur par défaut est @samp{disabled}.
18884
18885@end deftypevr
18886
18887@deftypevr {paramètre de @code{nslcd-configuration}} maybe-ssl-option ssl
18888Spécifie s'il faut utiliser SSL/TLS ou non (la valeur par défaut est non).
18889Si 'start-tls est spécifié alors StartTLS est utilisé à la place de LDAP sur
18890SSL.
18891
18892La valeur par défaut est @samp{disabled}.
18893
18894@end deftypevr
18895
18896@deftypevr {paramètre de @code{nslcd-configuration}} maybe-tls-reqcert-option tls-reqcert
18897Spécifie quelles vérifications effectuer sur les certificats donnés par les
18898serveurs. La signification des valeurs est décrite dans la page de manuel
18899de ldap.conf(5).
18900
18901La valeur par défaut est @samp{disabled}.
18902
18903@end deftypevr
18904
18905@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cacertdir
18906Spécifie le répertoire contenant les certificats X.509 pour
18907l'authentification des pairs. Ce paramètre est ignoré quand il est utilisé
18908avec GnuTLS.
18909
18910La valeur par défaut est @samp{disabled}.
18911
18912@end deftypevr
18913
18914@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cacertfile
18915Spécifie le chemin des certificats X.509 pour l'authentification des pairs.
18916
18917La valeur par défaut est @samp{disabled}.
18918
18919@end deftypevr
18920
18921@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-randfile
18922Spécifie le chemin d'une source d'entropie. Ce paramètre est ignoré quand
18923il est utilisé avec GnuTLS.
18924
18925La valeur par défaut est @samp{disabled}.
18926
18927@end deftypevr
18928
18929@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-ciphers
18930Spécifie les suites de chiffrements à utiliser pour TLS en tant que chaîne
18931de caractères.
18932
18933La valeur par défaut est @samp{disabled}.
18934
18935@end deftypevr
18936
18937@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-cert
18938Spécifie le chemin vers le fichier contenant le certificat local pour
18939l'authentification TLS du client.
18940
18941La valeur par défaut est @samp{disabled}.
18942
18943@end deftypevr
18944
18945@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string tls-key
18946Spécifie le chemin du fichier contenant la clef privée pour
18947l'authentification TLS du client.
18948
18949La valeur par défaut est @samp{disabled}.
18950
18951@end deftypevr
18952
18953@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number pagesize
18954Indiquez un nombre plus grand que 0 pour demander des résultats paginés au
18955serveur LDAP en accord avec la RFC 2696. La valeur par défaut (0) est de ne
18956pas demander de pagination des résultats.
18957
18958La valeur par défaut est @samp{disabled}.
18959
18960@end deftypevr
18961
18962@deftypevr {paramètre de @code{nslcd-configuration}} maybe-ignore-users-option nss-initgroups-ignoreusers
18963Cette option évite les recherches d'appartenance au groupe à travers le LDAP
18964pour les utilisateurs spécifiés. Autrement, la valeur 'all-local peut être
18965utilisée. Avec cette valeur nslcd construit une liste complète des
18966utilisateurs non-LDAP au démarrage.
18967
18968La valeur par défaut est @samp{disabled}.
18969
18970@end deftypevr
18971
18972@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-min-uid
18973Cette option s'assure que les utilisateurs LDAP avec un id utilisateur
18974numérique plus petit que la valeur spécifiée sont ignorés.
18975
18976La valeur par défaut est @samp{disabled}.
18977
18978@end deftypevr
18979
18980@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-uid-offset
18981Cette option spécifie un décalage à ajouter à tous les id utilisateurs
18982numériques LDAP. Cela peut être utile pour éviter des collisions d'id
18983utilisateurs avec des utilisateurs locaux.
18984
18985La valeur par défaut est @samp{disabled}.
18986
18987@end deftypevr
18988
18989@deftypevr {paramètre de @code{nslcd-configuration}} maybe-number nss-gid-offset
18990Cette option spécifie un décalage à ajouter à tous les id de groupe
18991numériques LDAP. Cela peut être utile pour éviter des collisions d'id
18992utilisateurs avec des groupes locaux.
18993
18994La valeur par défaut est @samp{disabled}.
18995
18996@end deftypevr
18997
18998@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-nested-groups
18999Si cette option est indiquée, l'attribut de membre de groupe peut pointer
19000vers un autre groupe. Les membres de groupes imbriqués sont aussi renvoyés
19001dans le groupe de haut-niveau et les groupes parents sont renvoyés lorsqu'on
19002recherche un utilisateur spécifique. La valeur par défaut est de ne pas
19003effectuer de recherche supplémentaire sur les groupes imbriqués.
19004
19005La valeur par défaut est @samp{disabled}.
19006
19007@end deftypevr
19008
19009@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-getgrent-skipmembers
19010Si cette option est indiqée, la liste de membres du groupe n'est pas
19011récupérée lorsqu'on cherche un groupe. Les recherches pour trouver les
19012groupes auxquels un utilisateur appartient resteront fonctionnelles donc
19013l'utilisateur obtiendra probablement les bons groupes à la connexion.
19014
19015La valeur par défaut est @samp{disabled}.
19016
19017@end deftypevr
19018
19019@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean nss-disable-enumeration
19020Si cette option est indiquée, les fonctions qui causent le chargement de
19021toutes les entrées d'utilisateur et de groupe depuis le répertoire ne
19022pourront pas le faire. Cela peut grandement diminuer la charge du serveur
19023LDAP dans des situations où il y a beaucoup d'utilisateurs et de groupes.
19024Cette option n'est pas recommandées pour la plupart des configurations.
19025
19026La valeur par défaut est @samp{disabled}.
19027
19028@end deftypevr
19029
19030@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string validnames
19031Cette option peut être utilisée pour spécifier comment les noms
19032d'utilisateurs et de groupes sont vérifiés sur le système. Ce motif est
19033utilisé pour vérifier tous les noms d'utilisateurs et de groupes qui sont
19034demandés et renvoyés par le LDAP.
19035
19036La valeur par défaut est @samp{disabled}.
19037
19038@end deftypevr
19039
19040@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean ignorecase
19041Cela spécifie s'il faut ou non effectuer des recherches avec une
19042correspondance sensible à la casse. Activer cela pourrait mener à des
19043vulnérabilités de type contournement d'authentification sur le système et
19044introduire des vulnérabilité d'empoisonnement de cache nscd qui permettent
19045un déni de service.
19046
19047La valeur par défaut est @samp{disabled}.
19048
19049@end deftypevr
19050
19051@deftypevr {paramètre de @code{nslcd-configuration}} maybe-boolean pam-authc-ppolicy
19052Cette option spécifie si des contrôles de la politique de mots de passe sont
19053demandés et gérés par le serveur LDAP à l'authentification de l'utilisateur.
19054
19055La valeur par défaut est @samp{disabled}.
19056
19057@end deftypevr
19058
19059@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-authc-search
19060Par défaut nslcd effectue une recherche LDAP avec le mot de passe de
19061l'utilisateur après BIND (authentification) pour s'assurer que l'opération
19062BIND a bien réussi. La recherche par défaut est une simple vérification que
19063le DN de l'utilisateur existe. Un filtre de recherche peut être spécifié
19064pour l'utiliser à la place. Il devrait renvoyer au moins une entrée.
19065
19066La valeur par défaut est @samp{disabled}.
19067
19068@end deftypevr
19069
19070@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-authz-search
19071Cette option permet la configuration fine et flexible de la vérification
19072d'autorisation qui devrait être effectuée. Le filtre de recherche est
19073exécuté et si une entrée correspond, l'accès est autorisé, sinon il est
19074refusé.
19075
19076La valeur par défaut est @samp{disabled}.
19077
19078@end deftypevr
19079
19080@deftypevr {paramètre de @code{nslcd-configuration}} maybe-string pam-password-prohibit-message
19081Si cette option est indiquée, la modification de mot de passe par pam_ldap
19082sera refusée et le message spécifié sera présenté à l'utilisateur à la
19083place. Le message peut être utilisé pour rediriger les utilisateurs vers
19084une autre méthode pour changer leur mot de passe.
19085
19086La valeur par défaut est @samp{disabled}.
19087
19088@end deftypevr
19089
19090@deftypevr {paramètre de @code{nslcd-configuration}} list pam-services
19091Liste de noms de service pam pour lesquels l'authentification LDAP devrait
19092suffire.
19093
19094La valeur par défaut est @samp{()}.
19095
19096@end deftypevr
19097
19098@c %end of generated documentation for nslcd-configuration
19099
19100
19101@node Services web
19102@subsection Services web
19103
19104@cindex web
19105@cindex www
19106@cindex HTTP
19107Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
19108serveur web nginx et aussi un démon fastcgi.
19109
19110@subsubheading Serveur Apache HTTP
19111
19112@deffn {Variable Scheme} httpd-service-type
19113Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
19114(@dfn{httpd}). La valeur de ce type de service est un enregistrement
19115@code{httpd-configuration}.
19116
19117Un exemple de configuration simple est donné ci-dessous.
19118
19119@example
19120(service httpd-service-type
19121 (httpd-configuration
19122 (config
19123 (httpd-config-file
19124 (server-name "www.example.com")
19125 (document-root "/srv/http/www.example.com")))))
19126@end example
19127
19128D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
19129ajouté à la configuration.
19130
19131@example
19132(simple-service 'my-extra-server httpd-service-type
19133 (list
19134 (httpd-virtualhost
19135 "*:80"
19136 (list (string-append
19137 "ServerName "www.example.com
19138 DocumentRoot \"/srv/http/www.example.com\"")))))
19139@end example
19140@end deffn
19141
19142Les détails des types d'enregistrement @code{httpd-configuration},
19143@code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
19144sont donnés plus bas.
19145
19146@deffn {Type de données} httpd-configuration
19147Ce type de données représente la configuration du service httpd.
19148
19149@table @asis
19150@item @code{package} (par défaut : @code{httpd})
19151Le paquet httpd à utiliser.
19152
19153@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
19154Le fichier de pid utilisé par le service shepherd.
19155
19156@item @code{config} (par défaut : @code{(httpd-config-file)})
19157Le fichier de configuration à utiliser avec le service httpd. La valeur par
19158défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
19159être un G-expression qui génère un fichier, par exemple un
19160@code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
19161avec une chaîne de caractères.
19162
19163@end table
19164@end deffn
19165
19166@deffn {Type de données} httpd-module
19167Ce type de données représente un module pour le service httpd.
19168
19169@table @asis
19170@item @code{name}
19171Le nom du module.
19172
19173@item @code{file}
19174Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
19175l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
19176le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
19177
19178@end table
19179@end deffn
19180
19181@defvr {Variable Scheme} %default-httpd-modules
19182Une liste par défaut des objets @code{httpd-module}.
19183@end defvr
19184
19185@deffn {Type de données} httpd-config-file
19186Ce type de données représente un fichier de configuration pour le service
19187httpd.
19188
19189@table @asis
19190@item @code{modules} (par défaut : @code{%default-httpd-modules})
19191Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
19192ou chargés par des configuration supplémentaires.
19193
19194Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
19195utiliser le module @code{mod_proxy_fcgi} d'Apache avec
19196@code{php-fpm-service-type} :
19197
19198@example
19199(service httpd-service-type
19200 (httpd-configuration
19201 (config
19202 (httpd-config-file
19203 (modules (cons*
19204 (httpd-module
19205 (name "proxy_module")
19206 (file "modules/mod_proxy.so"))
19207 (httpd-module
19208 (name "proxy_fcgi_module")
19209 (file "modules/mod_proxy_fcgi.so"))
19210 %default-httpd-modules))
19211 (extra-config (list "\
19212<FilesMatch \\.php$>
19213 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
19214</FilesMatch>"))))))
19215(service php-fpm-service-type
19216 (php-fpm-configuration
19217 (socket "/var/run/php-fpm.sock")
19218 (socket-group "httpd")))
19219@end example
19220
19221@item @code{server-root} (par défaut : @code{httpd})
19222Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
19223httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
19224relativement à la racine du serveur.
19225
19226@item @code{server-name} (par défaut : @code{#f})
19227Le @code{ServerName} dans le fichier de configuration, utilisé pour
19228spécifier le schéma de requête, le nom d'hôte et le port que le serveur
19229utilise pour s'identifier.
19230
19231Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
19232spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
19233ne pas spécifier de @code{ServerName}.
19234
19235@item @code{document-root} (par défaut : @code{"/srv/http"})
19236Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
19237
19238@item @code{listen} (par défaut : @code{'("80")})
19239La liste des valeurs pour les directives @code{Listen} dans le fichier de
19240configuration. La valeur devrait être une liste de chaînes, où chacune
19241spécifie le port sur lequel écouter et éventuellement une adresse IP et un
19242protocole à utiliser.
19243
19244@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
19245Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
19246indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
19247correctement configuré.
19248
19249@item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
19250Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
19251
19252@item @code{user} (par défaut : @code{"httpd"})
19253Le @code{User} en tant que lequel le serveur répondra aux requêtes.
19254
19255@item @code{group} (par défaut : @code{"httpd"})
19256Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
19257
19258@item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
19259Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
19260du fichier de configuration.
19261
19262N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
19263cette liste.
19264
19265@end table
19266@end deffn
19267
19268@deffn {Type de données} httpd-virtualhost
19269Ce type de données représente la configuration d'un hôte virtuel pour le
19270service httpd.
19271
19272Ils devraient être ajoutés à extra-config dans httpd-service.
19273
19274@example
19275(simple-service 'my-extra-server httpd-service-type
19276 (list
19277 (httpd-virtualhost
19278 "*:80"
19279 (list (string-append
19280 "ServerName "www.example.com
19281 DocumentRoot \"/srv/http/www.example.com\"")))))
19282@end example
19283
19284@table @asis
19285@item @code{addresses-and-ports}
19286L'adresse et le port pour la directive @code{VirtualHost}.
19287
19288@item @code{contents}
19289Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
19290de chaîne et de G-expressions.
19291
19292@end table
19293@end deffn
19294
19295@subsubheading NGINX
19296
19297@deffn {Variable Scheme} nginx-service-type
19298Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
19299valeur de ce service est un enregistrement @code{<nginx-configuration>}.
19300
19301Un exemple de configuration simple est donné ci-dessous.
19302
19303@example
19304(service nginx-service-type
19305 (nginx-configuration
19306 (server-blocks
19307 (list (nginx-server-configuration
19308 (server-name '("www.example.com"))
19309 (root "/srv/http/www.example.com"))))))
19310@end example
19311
19312En plus d'ajouter des blocs de serveurs dans la configuration du service
19313directement, ce service peut être étendu par d'autres services pour ajouter
19314des blocs de serveurs, comme dans cet exemple :
19315
19316@example
19317(simple-service 'my-extra-server nginx-service-type
19318 (list (nginx-server-configuration
19319 (root "/srv/http/extra-website")
19320 (try-files (list "$uri" "$uri/index.html")))))
19321@end example
19322@end deffn
19323
19324Au démarrage, @command{nginx} n'a pas encore lu son fichier de
19325configuration, donc il utilise les fichiers par défaut pour les messages
19326d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
19327seront enregistrés. Après la lecture du fichier de configuration, le
19328fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
19329notre cas, les messages d'erreur au démarrage se trouvent dans
19330@file{/var/run/nginx/logs/error.log} et après la configuration dans
19331@file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
19332avec l'option de configuration @var{log-directory}.
19333
19334@deffn {Type de données} nginx-configuration
19335Ce type de données représente la configuration de NGinx. Certaines
19336configurations peuvent se faire ici et d'autres fournissent des types
19337d'enregistrement ou éventuellement, on peut fournir un fichier de
19338configuration.
19339
19340@table @asis
19341@item @code{nginx} (par défaut : @code{nginx})
19342Le paquet nginx à utiliser.
19343
19344@item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
19345Le répertoire dans lequel NGinx écrira ses fichiers journaux.
19346
19347@item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
19348Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
19349fichiers temporaires.
19350
19351@item @code{server-blocks} (par défaut : @code{'()})
19352Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
19353généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
19354
19355L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
19356le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
19357@example
19358(service nginx-service-type
19359 (nginx-configuration
19360 (server-blocks
19361 (list (nginx-server-configuration
19362 (server-name '("www.example.com"))
19363 (root "/srv/http/www.example.com"))))))
19364@end example
19365
19366@item @code{upstream-blocks} (par défaut : @code{'()})
19367Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
19368généré, dont les éléments sont de type
19369@code{<nginx-upstream-configuration>}.
19370
19371Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
19372utile en combinaison avec @code{locations} dans les enregistrements
19373@code{<nginx-server-configuration>}. L'exemple suivant crée une
19374configuration de serveur avec une configuration « location » qui sera
19375mandataire pour une configuration amont, qui gérera les requêtes avec deux
19376serveurs.
19377
19378@example
19379(service
19380 nginx-service-type
19381 (nginx-configuration
19382 (server-blocks
19383 (list (nginx-server-configuration
19384 (server-name '("www.example.com"))
19385 (root "/srv/http/www.example.com")
19386 (locations
19387 (list
19388 (nginx-location-configuration
19389 (uri "/path1")
19390 (body '("proxy_pass http://server-proxy;"))))))))
19391 (upstream-blocks
19392 (list (nginx-upstream-configuration
19393 (name "server-proxy")
19394 (servers (list "server1.example.com"
19395 "server2.example.com")))))))
19396@end example
19397
19398@item @code{file} (par défaut : @code{#f})
19399Si un fichier de configuration @var{file} est fourni, il sera utilisé au
19400lieu de générer un fichier de configuration à partir des
19401@code{log-directory}, @code{run-directory}, @code{server-blocks} et
19402@code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
19403devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
19404les répertoires sont créé lorsque le service est activé.
19405
19406Cela peut être utile si vous avez déjà un fichier de configuration existant
19407ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
19408parties de l'enregistrement nginx-configuration.
19409
19410@item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
19411Taille du seau pour les tables de hashage des noms de serveurs, par dauft
19412@code{#f} pour utilise la taille des lignes de cache du processeur.
19413
19414@item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
19415Taille maximum des seaux pour les tables de hashage des serveurs de noms.
19416
19417@item @code{extra-content} (par défaut : @code{""})
19418Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
19419un G-expression.
19420
19421@end table
19422@end deffn
19423
19424@deftp {Type de données} nginx-server-configuration
19425Type de données représentant la configuration d'un bloc serveur de nginx.
19426Ce type a les paramètres suivants :
19427
19428@table @asis
19429@item @code{listen} (par défaut : @code{'("80" "443 ssl")})
19430Chaque directive @code{listen} indique l'adresse et le port pour le
19431protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
19432acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
19433l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
19434exemple :
19435
19436@example
19437'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
19438@end example
19439
19440@item @code{server-name} (par défaut : @code{(list 'default)})
19441Une liste de noms de serveurs que ce serveur représente. @code{'default}
19442représente le serveur par défaut pour les connexions qui ne correspondent à
19443aucun autre serveur.
19444
19445@item @code{root} (par défaut : @code{"/srv/http"})
19446Racine du site web que sert nginx.
19447
19448@item @code{locations} (par défaut : @code{'()})
19449Une liste d'enregistrements @dfn{nginx-location-configuration} ou
19450@dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
19451
19452@item @code{index} (par défaut : @code{(list "index.html")})
19453Fichiers d'index à chercher lorsque les clients demandent un répertoire.
19454S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
19455répertoire.
19456
19457@item @code{try-files} (par défaut : @code{'()})
19458Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
19459spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
19460la requête.
19461
19462@item @code{ssl-certificate} (par défaut : @code{#f})
19463Où trouver les certificats pour les connexions sécurisées. Indiquez
19464@code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
19465utiliser HTTPS.
19466
19467@item @code{ssl-certificate-key} (par défaut : @code{#f})
19468Où trouver la clef privée pour les connexions sécurisées. Indiquez
19469@code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
19470HTTPS.
19471
19472@item @code{server-tokens?} (par défaut : @code{#f})
19473Indique si le serveur devrait ajouter sa configuration dans les réponses.
19474
19475@item @code{raw-content} (par défaut : @code{'()})
19476Une liste de lignes brutes à ajouter dans le bloc serveur.
19477
19478@end table
19479@end deftp
19480
19481@deftp {Type de données} nginx-upstream-configuration
19482Type de données représentant la configuration d'un bloc @code{upstream}
19483nginx. Ce type a les paramètres suivants :
19484
19485@table @asis
19486@item @code{name}
19487Nome de ces groupe de serveurs.
19488
19489@item @code{serveurs}
19490Spécifie les adresses des serveurs dans le groupe. L'adresse peut être
19491spécifié avec une adresse IP (p.@: ex.@: @samp{127.0.0.1}), un nom de
19492domaine (p.@: ex.@: @samp{backend1.example.com}) ou un chemin vers un socket
19493UNIX avec le préfixe @samp{unix:}. Pour les adresse utilisant une adresse
19494IP ou un nom de domaine, le port par défaut est 80 et un port différent peut
19495être spécifié explicitement.
19496
19497@end table
19498@end deftp
19499
19500@deftp {Type de données} nginx-location-configuration
19501Type de données représentant la configuration d'un bloc @code{location}
19502nginx. Ce type a les paramètres suivants :
19503
19504@table @asis
19505@item @code{uri}
19506URI qui correspond à ce bloc.
19507
19508@anchor{nginx-location-configuration body}
19509@item @code{body}
19510Corps du block location, spécifié comme une liste de chaînes de caractères.
19511Cela peut contenir de nombreuses directives de configuration. Par exemple,
19512pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
19513@code{nginx-upstream-configuration}, la directive suivante peut être
19514spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
19515
19516@end table
19517@end deftp
19518
19519@deftp {Type de données} nginx-named-location-configuration
19520Type de données représentant la configuration d'un bloc location nginx
19521nommé. Les blocs location nommés sont utilisé les redirections de requêtes
19522et pas pour le traitement des requêtes normales. Ce type a les paramètres
19523suivants :
19524
19525@table @asis
19526@item @code{name}
19527Nom pour identifier ce bloc location.
19528
19529@item @code{body}
19530@xref{nginx-location-configuration body}, comme le corps d'un bloc location
19531nommé peut être utilisé de la même manière que
19532@code{nginx-location-configuration body}. Une restriction est que le corps
19533d'un bloc location nommé ne peut pas contenir de bloc location.
19534
19535@end table
19536@end deftp
19537
19538@subsubheading Cache Varnish
19539@cindex Varnish
19540Varnish est un serveur de cache rapide qui se trouve entre les applications
19541web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
19542des clients et met les URL accédées en cache pour que plusieurs requêtes à
19543la même ressource ne crée qu'une requête au moteur.
19544
19545@defvr {Variable Scheme} varnish-service-type
19546Type de service pour le démon Varnish.
19547@end defvr
19548
19549@deftp {Type de données} varnish-configuration
19550Type de données représentant la configuration du service @code{varnish}. Ce
19551type a les paramètres suivants :
19552
19553@table @asis
19554@item @code{package} (par défaut : @code{varnish})
19555Le paquet Varnish à utiliser.
19556
19557@item @code{name} (par défaut : @code{"default"})
19558Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
19559@file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
19560endroit. Si le nom commence par une barre oblique, il est interprété comme
19561un nom de répertoire absolu.
19562
19563Passez l'argument @code{-n} aux autres programmes Varnish pour vous
19564connecter à l'instance nommée, p.@: ex.@: @command{varnishncsa -n default}.
19565
19566@item @code{backend} (par défaut : @code{"localhost:8080"})
19567Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
19568
19569@item @code{vcl} (par défaut : #f)
19570Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
19571valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
19572la configuration par défaut. Sinon, ce doit être un objet simili-fichier
19573avec une syntaxe VCL valide.
19574
19575@c Varnish does not support HTTPS, so keep this URL to avoid confusion.
19576Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
19577avec VCL vous pouvez faire quelque chose comme cela :
19578
19579@example
19580(define %gnu-mirror
19581 (plain-file
19582 "gnu.vcl"
19583 "vcl 4.1;
19584backend gnu @{ .host = "www.gnu.org"; @}"))
19585
19586(operating-system
19587 ...
19588 (services (cons (service varnish-service-type
19589 (varnish-configuration
19590 (listen '(":80"))
19591 (vcl %gnu-mirror)))
19592 %base-services)))
19593@end example
19594
19595On peut inspecter la configuration d'une instance Varnish actuellement
19596lancée en utilisant le programme @command{varnishadm}.
19597
19598Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
19599varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
19600pour une documentation complète sur Varnish et son langage de configuration.
19601
19602@item @code{listen} (par défaut : @code{'("localhost:80")})
19603Liste des adresses sur lesquelles écoute Varnish.
19604
19605@item @code{storage} (par défaut : @code{'("malloc,128m")})
19606Liste de moteurs de stockage qui seront disponibles en VCL.
19607
19608@item @code{parameters} (par défaut : @code{'()})
19609Liste des paramètres à l'exécution de la forme @code{'(("parameter"
19610. "value"))}.
19611
19612@item @code{extra-options} (par défaut : @code{'()})
19613Arguments supplémentaires à passer au processus @command{varnishd}.
19614
19615@end table
19616@end deftp
19617
19618@subsubheading FastCGI
19619@cindex fastcgi
19620@cindex fcgiwrap
19621FastCGI est une interface entre le frontal et le moteur d'un service web.
19622C'est un dispositif quelque peu désuet ; les nouveaux services devraient
19623généralement juste parler HTTP entre le frontal et le moteur. Cependant il
19624y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
19625Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
19626Guix.
19627
19628Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
19629nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
19630écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
19631intermédiaire qui se trouve entre le processus du moteur et le serveur web.
19632Le frontal indique quel moteur lancer, en passant cette information au
19633processus @code{fcgiwrap}.
19634
19635@defvr {Variable Scheme} fcgiwrap-service-type
19636Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
19637@end defvr
19638
19639@deftp {Type de données} fcgiwrap-configuration
19640Type de données représentant la configuration du service @code{fcgiwrap}.
19641Ce type a les paramètres suivants :
19642@table @asis
19643@item @code{package} (par défaut : @code{fcgiwrap})
19644Le paquet fcgiwrap à utiliser.
19645
19646@item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
19647Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
19648de caractères. Les valeurs valides de @var{socket} sont
19649@code{unix:@var{/path/to/unix/socket}},
19650@code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
19651@code{tcp6:[@var{ipv6_addr}]:port}.
19652
19653@item @code{user} (par défaut : @code{fcgiwrap})
19654@itemx @code{group} (par défaut : @code{fcgiwrap})
19655Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
19656sous lesquels lancer le processus @code{fcgiwrap}. Le service
19657@code{fastcgi} s'assurera que si l'utilisateur demande les noms
19658d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
19659correspondant seront présents sur le système.
19660
19661Il est possible de configurer un service web soutenu par FastCGI pour passer
19662les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
19663et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
19664l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
19665moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
19666@code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
19667sur le frontal.
19668@end table
19669@end deftp
19670
19671@cindex php-fpm
19672PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
19673alternative avec quelques fonctionnalités supplémentaires utiles pour les
19674sites de toutes tailles.
19675
19676Ces fonctionnalités comprennent :
19677@itemize @bullet
19678@item La création de processus adaptative
19679@item Des statistiques de base (comme le mod_status d'Apache)
19680@item La gestion des processus avancée avec arrêt et démarrage sans heurts
19681@item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
19682et différents php.ini (à la place de safe_mode)
19683@item L'enregistrement des journaux sur stdout et stderr
19684@item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
19685@item Le support des téléversements accélérés
19686@item Le support de « showlog »
19687@item Des améliorations à FastCGI, comme fastcgi_finish_request() -
19688une fonction spéciale pour terminer la requête et nettoyer toutes les
19689données tout en continuant à faire d'autres choses qui prennent du temps
19690(conversion vidéo, gestion des stats, etc…).
19691@end itemize
19692…@: et bien plus.
19693
19694@defvr {Variable Scheme} php-fpm-service-type
19695Un type de service pour @code{php-fpm}.
19696@end defvr
19697
19698@deftp {Type de données} php-fpm-configuration
19699Type de données pour la configuration du service php-fpm.
19700@table @asis
19701@item @code{php} (par défaut : @code{php})
19702Le paquet php à utiliser.
19703@item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
19704L'adresse sur laquelle accepter les requêtes FastCGI. Les syntaxes valides
19705sont :
19706@table @asis
19707@item @code{"ip.add.re.ss:port"}
19708Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
19709@item @code{"port"}
19710Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
19711@item @code{"/path/to/unix/socket"}
19712Écoute sur un socket unix.
19713@end table
19714
19715@item @code{user} (par défaut : @code{php-fpm})
19716Utilisateur à qui appartiendra le processus de travail de php.
19717@item @code{group} (par défaut : @code{php-fpm})
19718Groupe du processus de travail.
19719@item @code{socket-user} (par défaut : @code{php-fpm})
19720Utilisateur qui peut parler au socket php-fpm.
19721@item @code{socket-group} (par défaut : @code{php-fpm})
19722Groupe qui peut parler au socket php-fpm.
19723@item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
19724Le pid de php-fpm est écrit dans ce fichier une fois que le service a
19725démarré.
19726@item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
19727Fichier de journal pour le processus maître de php-fpm.
19728@item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
19729Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
19730doit s'agir soit de :
19731@table @asis
19732@item @code{<php-fpm-dynamic-process-manager-configuration>}
19733@item @code{<php-fpm-static-process-manager-configuration> ou}
19734@item @code{<php-fpm-on-demand-process-manager-configuration>}
19735@end table
19736@item @code{display-errors} (par défaut : @code{#f})
19737Détermine si les erreurs et les avertissements php doivent être envoyés aux
19738clients et affichés dans leur navigateur. Cela est utile pour un
19739développement php local, mais un risque pour la sécurité pour les sites
19740publics, comme les messages d'erreur peuvent révéler des mots de passes et
19741des données personnelles.
19742@item @code{timezone} (par défaut : @code{#f})
19743Spécifie le paramètre @code{php_admin_value[date.timezone]}.
19744@item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
19745Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
19746php. On peut indiquer @code{#f} pour désactiver la journalisation.
19747@item @code{file} (par défaut : @code{#f})
19748Une version alternative de la configuration complète. Vous pouvez utiliser
19749la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
19750@end table
19751@end deftp
19752
19753@deftp {Type de données} php-fpm-dynamic-process-manager-configuration
19754Type de données pour le gestionnaire de processus @code{dynamic} de
19755php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
19756travail de secours sont gardés en fonction des limites configurées.
19757@table @asis
19758@item @code{max-children} (par défaut : @code{5})
19759Nombre maximum de processus de travail.
19760@item @code{start-servers} (par défaut : @code{2})
19761Nombre de processus de travail au démarrage.
19762@item @code{min-spare-servers} (par défaut : @code{1})
19763Nombre de processus de travail de secours minimum qui doivent rester à
19764disposition.
19765@item @code{max-spare-servers} (par défaut : @code{3})
19766Nombre maximum de processus de travail de secours qui peuvent rester à
19767disposition.
19768@end table
19769@end deftp
19770
19771@deftp {Type de données} php-fpm-static-process-manager-configuration
19772Type de données pour le gestionnaire de processus @code{static} de php-fpm.
19773Avec le gestionnaire de processus @code{static}, un nombre constant de
19774processus de travail est créé.
19775@table @asis
19776@item @code{max-children} (par défaut : @code{5})
19777Nombre maximum de processus de travail.
19778@end table
19779@end deftp
19780
19781@deftp {Type de données} php-fpm-on-demand-process-manager-configuration
19782Type de données pour le gestionnaire de processus @code{on-demand} de
19783php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
19784de travail ne sont créés que lorsque les requêtes arrivent.
19785@table @asis
19786@item @code{max-children} (par défaut : @code{5})
19787Nombre maximum de processus de travail.
19788@item @code{process-idle-timeout} (par défaut : @code{10})
19789La durée en secondes après laquelle un processus sans requête sera tué.
19790@end table
19791@end deftp
19792
19793
19794@deffn {Procédure Scheme} nginx-php-fpm-location @
19795 [#:nginx-package nginx] @
19796[socket (string-append "/var/run/php" @
19797(version-major (package-version php)) @
19798"-fpm.sock")]
19799Une fonction d'aide pour ajouter rapidement php à un
19800@code{nginx-server-configuration}.
19801@end deffn
19802
19803Une configuration simple de services pour php ressemble à ceci :
19804@example
19805(services (cons* (service dhcp-client-service-type)
19806 (service php-fpm-service-type)
19807 (service nginx-service-type
19808 (nginx-server-configuration
19809 (server-name '("example.com"))
19810 (root "/srv/http/")
19811 (locations
19812 (list (nginx-php-location)))
19813 (listen '("80"))
19814 (ssl-certificate #f)
19815 (ssl-certificate-key #f)))
19816 %base-services))
19817@end example
19818
19819@cindex cat-avatar-generator
19820Le générateur d'avatar de chat est un simple service pour démontrer
19821l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
19822avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
19823courriel d'un utilisateur.
19824
19825@deffn {Procédure Scheme} cat-avatar-generator-service @
19826 [#:cache-dir "/var/cache/cat-avatar-generator"] @
19827[#:package cat-avatar-generator] @
19828[#:configuration (nginx-server-configuration)]
19829Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
19830Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
19831@code{package}, une version de cat-avatar-generator. Pendant l'exécution,
19832cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
19833cache.
19834@end deffn
19835
19836Une configuration simple de cat-avatar-generator ressemble à ceci :
19837@example
19838(services (cons* (cat-avatar-generator-service
19839 #:configuration
19840 (nginx-server-configuration
19841 (server-name '("example.com"))))
19842 ...
19843 %base-services))
19844@end example
19845
19846@subsubheading Hpcguix-web
19847
19848@cindex hpcguix-web
19849Le programme @uref{hpcguix-web,
19850https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
19851personnalisable pour naviguer dans les paquets Guix, initialement conçue
19852pour les utilisateurs des grappes de calcul de haute performance (HPC).
19853
19854@defvr {Variable Scheme} hpcguix-web-service-type
19855Le type de service pour @code{hpcguix-web}.
19856@end defvr
19857
19858@deftp {Type de données} hpcguix-web-configuration
19859Type de données pour la configuration du service hpcguix-web.
19860
19861@table @asis
19862@item @code{specs}
19863Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
19864hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
19865
19866@table @asis
19867@item @code{title-prefix} (par défaut : @code{"hpcguix | "})
19868Le préfixe du titre des pages.
19869
19870@item @code{guix-command} (par défaut : @code{"guix"})
19871La commande @command{guix}
19872
19873@item @code{package-filter-proc} (par défaut : @code{(const #t)})
19874Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
19875
19876@item @code{package-page-extension-proc} (par défaut : @code{(const '())})
19877Paquet d'extensions pour @code{hpcguix-web}.
19878
19879@item @code{menu} (par défaut : @code{'()})
19880Entrée supplémentaire dans la page @code{menu}.
19881
19882@item @code{channels} (par défaut : @code{%default-channels})
19883Liste des canaux depuis lesquels la liste des paquets est construite
19884(@pxref{Canaux}).
19885
19886@item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
19887Le temps d'expiration, en secondes, après lequel la liste des paquets est
19888reconstruite depuis les dernières instance des canaux donnés.
19889@end table
19890
19891Voir le dépôt hpcguix-web pour un
19892@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
19893exemple complet}
19894
19895@item @code{package} (par défaut : @code{hpcguix-web})
19896Le paquet hpcguix-web à utiliser.
19897@end table
19898@end deftp
19899
19900Une déclaration de service hpcguix-web typique ressemble à cela :
19901
19902@example
19903(service hpcguix-web-service-type
19904 (hpcguix-web-configuration
19905 (specs
19906 #~(define site-config
19907 (hpcweb-configuration
19908 (title-prefix "Guix-HPC - ")
19909 (menu '(("/about" "ABOUT"))))))))
19910@end example
19911
19912@quotation Remarque
19913Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
19914publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
19915certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
19916communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
19917certificats.
19918
19919Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
19920certificats dans le champ @code{packages} de votre configuration.
19921@ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
19922@end quotation
19923
19924@node Services de certificats
19925@subsection Services de certificats
19926
19927@cindex Web
19928@cindex HTTP, HTTPS
19929@cindex Let's Encrypt
19930@cindex certificats TLS
19931Le module @code{(gnu services certbot)} fournit un service qui récupère
19932automatiquement un certificat TLS valide de l'autorité de certification
19933Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
19934contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
19935en sachant que le client sera capable de vérifier l'authenticité du serveur.
19936
19937@url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
19938pour automatiser le processus de certification. Cet outil génère d'abord un
19939clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
19940de certification Let's Encrypt de signer la clef. La CA vérifie que la
19941requête provient de l'hôte en question en utilisant un protocole de
19942défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
19943Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
19944certificat. Ce certificat est valide pour une durée limitée et donc, pour
19945continuer à fournir des services en TLS, le serveur doit régulièrement
19946demander à la CA de renouveler sa signature.
19947
19948Le service certbot automatise ce processus : la génération initiale de la
19949clef, la demande de certification initiale au service Let's Encrypt,
19950l'intégration du protocole de défi/réponse dans le serveur web, l'écriture
19951du certificat sur le disque, les renouvellements périodiques et les taches
19952de déploiement avec le renouvellement (p.@: ex.@: recharger les services,
19953copier les clefs avec d'autres permissions).
19954
19955Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
19956Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
19957révoqués, mais le lancer régulièrement permettra à vos services de rester en
19958ligne si Let's Encrypt décide de révoquer votre certificat.
19959
19960En utilisant ce service, vous acceptez le document « ACME Subscriber
19961Agreement », qu'on peut trouver ici :
19962@url{https://acme-v01.api.letsencrypt.org/directory}.
19963
19964@defvr {Variable Scheme} certbot-service-type
19965Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
19966doit être un enregistrement @code{certbot-configuration} comme dans cet
19967exemple :
19968
19969@example
19970(define %nginx-deploy-hook
19971 (program-file
19972 "nginx-deploy-hook"
19973 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
19974 (kill pid SIGHUP))))
19975
19976(service certbot-service-type
19977 (certbot-configuration
19978 (email "foo@@example.net")
19979 (certificates
19980 (list
19981 (certificate-configuration
19982 (domains '("example.net" "www.example.net"))
19983 (deploy-hook %nginx-deploy-hook))
19984 (certificate-configuration
19985 (domains '("bar.example.net")))))))
19986@end example
19987
19988Voir plus bas pour des détails sur @code{certbot-configuration}.
19989@end defvr
19990
19991@deftp {Type de données} certbot-configuration
19992Type données représentant la configuration du service @code{certbot}. Ce
19993type a les paramètres suivants :
19994
19995@table @asis
19996@item @code{package} (par défaut : @code{certbot})
19997Le paquet certbot à utiliser.
19998
19999@item @code{webroot} (par défaut : @code{/var/www})
20000Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
20001Encrypt.
20002
20003@item @code{certificates} (par défaut : @code{()})
20004Une liste de @code{certificates-configuration} pour lesquels générer des
20005certificats et demander des signatures. Chaque certificat a un @code{name}
20006et plusieurs @code{domains}.
20007
20008@item @code{email}
20009Courriel obligatoire utilisé pour la création de compte, le contact en cas
20010de problème et des notifications importantes sur le compte.
20011
20012@item @code{rsa-key-size} (par défaut : @code{2048})
20013Taille de la clef RSA.
20014
20015@item @code{default-location} (par défaut : @i{voir plus bas})
20016Le @code{nginx-location-configuration} par défaut. Comme @code{certbot}
20017doit pouvoir servir les défis et les réponses, il doit être capable de
20018lancer un serveur web. Cela se fait en étendant le service web @code{nginx}
20019avec un @code{nginx-server-configuration} qui écoute sur les @var{domains}
20020sur le port 80 et qui a un @code{nginx-location-configuration} pour le
20021chemin @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web}
20022pour plus d'information sur les types de données de la configuration de
20023nginx.
20024
20025Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
20026s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
20027
20028Par défaut, le @code{default-location} sera une redirection de
20029@code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
20030laissant définir ce que vous voulez servir sur votre site en @code{https}.
20031
20032Passez @code{#f} pour ne pas utiliser de location par défaut.
20033@end table
20034@end deftp
20035
20036@deftp {Type de données} certificate-configuration
20037Type de données représentant la configuration d'un certificat. Ce type a
20038les paramètres suivants :
20039
20040@table @asis
20041@item @code{name} (par défaut : @i{voir plus bas})
20042Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
20043chemins de fichiers ; il n'affecte pas le contenu des certificats
20044eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
20045certificates}.
20046
20047Sa valeur par défaut est le premier domaine spécifié.
20048
20049@item @code{domains} (par défaut : @code{()})
20050Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
20051domaines seront les noms alternatifs du sujet dans le certificat.
20052
20053@item @code{deploy-hook} (par défaut : @code{#f})
20054Commande à lancer dans un shell une fois par certificat récupéré avec
20055succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
20056sur le sous-répertoire live (par exemple,
20057@samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
20058et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
20059domaines séparés par des espaces (par exemple @samp{"example.com
20060www.example.com"}).
20061
20062@end table
20063@end deftp
20064
20065Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
20066dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
20067sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
20068@node Services DNS
20069@subsection Services DNS
20070@cindex DNS (domain name system)
20071@cindex domain name system (DNS)
20072
20073Le module @code{(gnu services dns)} fournit des services liés au
20074@dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
20075pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
20076en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
20077Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
20078LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
20079dnsmasq}.
20080
20081@subsubheading Service Knot
20082
20083Voici un exemple de configuration pour un serveur faisant autorité sur deux
20084zone, un maître et un esclave :
20085
20086@lisp
20087(define-zone-entries example.org.zone
20088;; Name TTL Class Type Data
20089 ("@@" "" "IN" "A" "127.0.0.1")
20090 ("@@" "" "IN" "NS" "ns")
20091 ("ns" "" "IN" "A" "127.0.0.1"))
20092
20093(define master-zone
20094 (knot-zone-configuration
20095 (domain "example.org")
20096 (zone (zone-file
20097 (origin "example.org")
20098 (entries example.org.zone)))))
20099
20100(define slave-zone
20101 (knot-zone-configuration
20102 (domain "plop.org")
20103 (dnssec-policy "default")
20104 (master (list "plop-master"))))
20105
20106(define plop-master
20107 (knot-remote-configuration
20108 (id "plop-master")
20109 (address (list "208.76.58.171"))))
20110
20111(operating-system
20112 ;; ...
20113 (services (cons* (service knot-service-type
20114 (knot-configuration
20115 (remotes (list plop-master))
20116 (zones (list master-zone slave-zone))))
20117 ;; ...
20118 %base-services)))
20119@end lisp
20120
20121@deffn {Variable Scheme} knot-service-type
20122C'est le type pour le serveur DNS Knot.
20123
20124Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
20125servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
20126un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
20127peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
20128serveur peut être configuré pour servir des zones comme un serveur maître ou
20129comme un serveur esclave, en fonction des zones. Les zones esclaves
20130récupèrent leurs données des maîtres, et seront servies comme faisant
20131autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
20132un maître et un esclave@footnote{NdT : Voir la conférence en Français de
20133Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
20134@url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
20135
20136Les types de données suivants sont utilisés pour configurer le serveur DNS
20137Knot :
20138@end deffn
20139
20140@deftp {Type de données} knot-key-configuration
20141Type de données représentant une clef. Ce type a les paramètres suivants :
20142
20143@table @asis
20144@item @code{id} (par défaut : @code{""})
20145Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
20146clef. Les ID doivent être uniques et non vides.
20147
20148@item @code{algorithm} (par défaut : @code{#f})
20149L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
20150@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
20151@code{'hmac-sha384} et @code{'hmac-sha512}.
20152
20153@item @code{secret} (par défaut : @code{""})
20154La clef secrète elle-même.
20155
20156@end table
20157@end deftp
20158
20159@deftp {Type de données} knot-acl-configuration
20160Type de données représentant une configuration de liste de contrôle d'accès
20161(ACL). Ce type a les paramètres suivants :
20162
20163@table @asis
20164@item @code{id} (par défaut : @code{""})
20165Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
20166clef. Les ID doivent être uniques et non vides.
20167
20168@item @code{address} (par défaut : @code{'()})
20169Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
20170réseaux représentés par des chaînes de caractères. La requête doit
20171correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
20172n'a pas besoin de correspondre.
20173
20174@item @code{key} (par défaut : @code{'()})
20175Une liste ordonnées de références à des clefs représentés par des chaînes.
20176La chaîne doit correspondre à un ID définie dans un
20177@code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
20178nécessaire pour correspondre à l'ACL.
20179
20180@item @code{action} (par défaut : @code{'()})
20181Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
20182valeurs possibles sont une liste de zéro ou plus d'éléments entre
20183@code{'transfer}, @code{'notify} et @code{'update}.
20184
20185@item @code{deny?} (par défaut : @code{#f})
20186Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
20187listées sont interdites. Lorsque la valeur est fausse, les actions listées
20188sont autorisées.
20189
20190@end table
20191@end deftp
20192
20193@deftp {Type de données} zone-entry
20194Type de données représentant une entrée dans un fichier de zone. Ce type a
20195les paramètres suivants :
20196
20197@table @asis
20198@item @code{name} (par défaut : @code{"@@"})
20199Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
20200Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
20201@code{example.org}, @code{"ns.example.org"} se réfère en fait à
20202@code{ns.example.org.example.org}. Les noms qui finissent par un point sont
20203absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
20204@code{ns.example.org}.
20205
20206@item @code{ttl} (par défaut : @code{""})
20207La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
20208par défaut est utilisé.
20209
20210@item @code{class} (par défaut : @code{"IN"})
20211La classe de l'enregistrement. Knot ne supporte actuellement que
20212@code{"IN"} et partiellement @code{"CH"}.
20213
20214@item @code{type} (par défaut : @code{"A"})
20215Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
20216(serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
20217définis.
20218
20219@item @code{data} (par défaut : @code{""})
20220Les données contenues dans l'enregistrement. Par exemple une adresse IP
20221associée à un enregistrement A, ou un nom de domaine associé à un
20222enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
20223l'origine à moins qu'ils ne finissent par un point.
20224
20225@end table
20226@end deftp
20227
20228@deftp {Type de données} zone-file
20229Type données représentant le contenu d'un fichier de zone. Ce type a les
20230paramètres suivants :
20231
20232@table @asis
20233@item @code{entries} (par défaut : @code{'()})
20234La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
20235pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
20236contenir une entrée pour votre serveur DNS primaire faisant autorité. En
20237plus d'utiliser une liste des entrées directement, vous pouvez utiliser
20238@code{define-zone-entries} pour définir un objet contenant la liste des
20239entrées plus facilement, que vous pouvez ensuite passer au champ
20240@code{entries} de @code{zone-file}.
20241
20242@item @code{origin} (par défaut : @code{""})
20243Le nom de votre zone. Ce paramètre ne peut pas être vide.
20244
20245@item @code{ns} (par défaut : @code{"ns"})
20246Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
20247relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
20248que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
20249et qu'il soit associé à une adresse IP dans la liste des entrées.
20250
20251@item @code{mail} (par défaut : @code{"hostmaster"})
20252Une adresse de courriel pour vous contacter en tant que propriétaire de la
20253zone. Cela se transforme en @code{<mail>@@<origin>}.
20254
20255@item @code{serial} (par défaut : @code{1})
20256Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
20257changements à la fois par les esclaves et par les résolveurs, il est
20258nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
20259vous faites un changement sur votre zone.
20260
20261@item @code{refresh} (par défaut : @code{(* 2 24 3600)})
20262La fréquence à laquelle les esclaves demanderont un transfert de zone.
20263Cette valeur est un nombre de secondes. On peut le calculer avec des
20264multiplications ou avec @code{(string->duration)}.
20265
20266@item @code{retry} (par défaut : @code{(* 15 60)})
20267La période après laquelle un esclave essaiera de contacter son maître
20268lorsqu'il échoue à le faire la première fois.
20269
20270@item @code{expiry} (par défaut : @code{(* 14 24 3600)})
20271TTL par défaut des enregistrements. Les enregistrements existants sont
20272considérés corrects pour au moins cette durée. Après cette période, les
20273résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
20274toujours.
20275
20276@item @code{nx} (par défaut : @code{3600})
20277TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
20278court parce que vous voulez que vous nouveaux domaines soient disponibles
20279pour tout le monde le plus rapidement possible.
20280
20281@end table
20282@end deftp
20283
20284@deftp {Type de données} knot-remote-configuration
20285Type de données représentant une configuration de serveurs distants. Ce
20286type a les paramètres suivants :
20287
20288@table @asis
20289@item @code{id} (par défaut : @code{""})
20290Un identifiant pour que les autres champs de configuration se réfèrent à ce
20291serveur distant. les ID doivent être uniques et non vides.
20292
20293@item @code{address} (par défaut : @code{'()})
20294Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
20295en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
20296exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
2029753.
20298
20299@item @code{via} (par défaut : @code{'()})
20300Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
20301IP source appropriée à Knot. Un port facultatif peut être donné avec le
20302séparateur @@. La valeur par défaut est de choisir aléatoirement.
20303
20304@item @code{key} (par défaut : @code{#f})
20305Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
20306d'une clef définie dans un champ @code{knot-key-configuration}.
20307
20308@end table
20309@end deftp
20310
20311@deftp {Type de données} knot-keystore-configuration
20312Type de données représentant une base de clefs pour garder les clefs
20313dnssec. Ce type a les paramètres suivants :
20314
20315@table @asis
20316@item @code{id} (par défaut : @code{""})
20317L'id de cette base de clefs. Il ne doit pas être vide.
20318
20319@item @code{backend} (par défaut : @code{'pem})
20320Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
20321@code{'pkcs11}.
20322
20323@item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
20324La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
20325@code{"pkcs11:token=knot;pin-value=1234
20326/gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
20327représente un chemin dans le système de fichiers.
20328
20329@end table
20330@end deftp
20331
20332@deftp {Type de données} knot-policy-configuration
20333Type de données représentant une politique dnssec. Knot DNS est capable de
20334signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
20335automatiquement ou utiliser des clefs que vous générez.
20336
20337Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
20338key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
20339est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
20340doit être présente dans la zone parente (normalement un domaine de haut
20341niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
20342hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
20343zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
20344fois que vous changerez votre KSK.
20345
20346La politique définie aussi la durée de vie des clefs. Habituellement, la
20347ZSK peut être changée facilement et utilise des fonctions cryptographiques
20348plus faibles (avec un paramètre plus faible) pour signer les enregistrements
20349rapidement, donc elles sont changées très régulièrement. La KSK en revanche
20350requiert une interaction manuelle avec le registrar, donc elle change moins
20351souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
20352seul enregistrement.
20353
20354Ce type a les paramètres suivants :
20355
20356@table @asis
20357@item @code{id} (par défaut : @code{""})
20358L'id de la politique. Il ne doit pas être vide.
20359
20360@item @code{keystore} (par défaut : @code{"default"})
20361Une référence à une base de clefs, c'est-à-dire une chaîne contenant
20362l'identifiant d'une base de clefs définie dans un champ
20363@code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
20364la base par défaut (une base de données kasp initialisée par ce service).
20365
20366@item @code{manual?} (par défaut : @code{#f})
20367Indique si la clef est gérée manuellement ou automatiquement.
20368
20369@item @code{single-type-signing?} (par défaut : @code{#f})
20370Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type.
20371
20372@item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
20373Un algorithme de clef de signature et de signatures.
20374
20375@item @code{ksk-size} (par défaut : @code{256})
20376La longueur de la KSK. Remarquez que cette valeur est correcte pour
20377l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
20378algorithmes.
20379
20380@item @code{zsk-size} (par défaut : @code{256})
20381La longueur de la ZSK. Remarquez que cette valeur est correcte pour
20382l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
20383algorithmes.
20384
20385@item @code{dnskey-ttl} (par défaut : @code{'default})
20386La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
20387zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
20388du SOA de la zone.
20389
20390@item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
20391La période entre la publication d'une ZSK et l'initialisation d'un nouveau
20392changement.
20393
20394@item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
20395Un délai supplémentaire pour chaque étape du changement. Cette valeur
20396devrait être assez grande pour couvrir le temps de propagation des données
20397entre le serveur primaire et tous les secondaires.
20398
20399@item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
20400Une période de validité des nouvelles signatures.
20401
20402@item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
20403Une période qui indique combien de temps avant l'expiration d'une signature
20404elle sera rafraîchie.
20405
20406@item @code{nsec3?} (par défaut : @code{#f})
20407Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
20408
20409@item @code{nsec3-iterations} (par défaut : @code{5})
20410Le nombre de fois supplémentaires que le hash est effectué.
20411
20412@item @code{nsec3-salt-length} (par défaut : @code{8})
20413La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
20414de hasher.
20415
20416@item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
20417La période de validité des nouveaux champs sel.
20418
20419@end table
20420@end deftp
20421
20422@deftp {Type de données} knot-zone-configuration
20423Type de données représentant la zone servie par Knot. ce type a les
20424paramètres suivants :
20425
20426@table @asis
20427@item @code{domain} (par défaut : @code{""})
20428Le domaine servi par cette configuration. Il ne doit pas être vide.
20429
20430@item @code{file} (par défaut : @code{""})
20431Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
20432zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
20433du nom de domaine.
20434
20435@item @code{zone} (par défaut : @code{(zone-file)})
20436Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
20437esclaves. Il doit contenir un enregistrement zone-file.
20438
20439@item @code{master} (par défaut : @code{'()})
20440Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
20441zone est un maître. Lorsque la valeur est indiquée, cette zone est un
20442esclave. C'est al liste des identifiants des serveurs distants.
20443
20444@item @code{ddns-master} (par défaut : @code{#f})
20445Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
20446le premier maître de la liste des maîtres.
20447
20448@item @code{notify} (par défaut : @code{'()})
20449Une liste d'identifiants de groupe de serveurs esclaves.
20450
20451@item @code{acl} (par défaut : @code{'()})
20452Une liste d'identifiants d'ACL.
20453
20454@item @code{semantic-checks?} (par défaut : @code{#f})
20455Lorsque la valeur est indiquée, cela ajoute plus de vérifications
20456sémantiques à la zone.
20457
20458@item @code{disable-any?} (par défaut : @code{#f})
20459Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
20460
20461@item @code{zonefile-sync} (par défaut : @code{0})
20462Le délai entre une modification en mémoire et sur le disque. 0 signifie une
20463synchronisation immédiate.
20464
20465@item @code{serial-policy} (par défaut : @code{'increment})
20466Une politique entre @code{'increment} et @code{'unixtime}.
20467
20468@end table
20469@end deftp
20470
20471@deftp {Type de données} knot-configuration
20472Type de données représentant la configuration de Knot. Ce type a les
20473paramètres suivants :
20474
20475@table @asis
20476@item @code{knot} (par défaut : @code{knot})
20477Le paquet Knot.
20478
20479@item @code{run-directory} (par défaut : @code{"/var/run/knot"})
20480Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
20481les sockets.
20482
20483@item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
20484Une adresse IP sur laquelle écouter.
20485
20486@item @code{listen-v6} (par défaut : @code{"::"})
20487Une adresse IP sur laquelle écouter.
20488
20489@item @code{listen-port} (par défaut : @code{53})
20490Un port sur lequel écouter.
20491
20492@item @code{keys} (par défaut : @code{'()})
20493La liste des knot-key-configuration utilisés par cette configuration.
20494
20495@item @code{acls} (par défaut : @code{'()})
20496La liste des knot-acl-configuration utilisés par cette configuration.
20497
20498@item @code{remotes} (par défaut : @code{'()})
20499La liste des knot-remote-configuration utilisés par cette configuration.
20500
20501@item @code{zones} (par défaut : @code{'()})
20502La liste des knot-zone-configuration utilisés par cette configuration.
20503
20504@end table
20505@end deftp
20506
20507@subsubheading Services Dnsmasq
20508
20509@deffn {Variable Scheme} dnsmasq-service-type
20510C'est le type du service dnsmasq, dont la valeur devrait être un objet
20511@code{dnsmasq-configuration} comme dans cet exemple :
20512
20513@example
20514(service dnsmasq-service-type
20515 (dnsmasq-configuration
20516 (no-resolv? #t)
20517 (servers '("192.168.1.1"))))
20518@end example
20519@end deffn
20520
20521@deftp {Type de données} dnsmasq-configuration
20522Type de données qui représente la configuration de dnsmasq.
20523
20524@table @asis
20525@item @code{package} (par défaut : @var{dnsmasq})
20526L'objet de paquet du serveur dnsmasq.
20527
20528@item @code{no-hosts?} (par défaut : @code{#f})
20529Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
20530
20531@item @code{port} (par défaut : @code{53})
20532Le port sur lequel écouter. Le mettre à zéro désactive complètement les
20533réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
20534
20535@item @code{local-service?} (par défaut : @code{#t})
20536Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
20537sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
20538existe sur le serveur.
20539
20540@item @code{listen-addresses} (par défaut : @code{'()})
20541Écoute sur le adresses IP données.
20542
20543@item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
20544Le fichier où lire l'adresse IP des serveurs de noms en amont.
20545
20546@item @code{no-resolv?} (par défaut : @code{#f})
20547Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
20548
20549@item @code{servers} (par défaut : @code{'()})
20550Spécifiez l'adresse IP des serveurs en amont directement.
20551
20552@item @code{cache-size} (par défaut : @code{150})
20553Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
20554
20555@item @code{negative-cache?} (par défaut : @code{#t})
20556Lorsque la valeur est fausse, désactive le cache des réponses négatives.
20557
20558@end table
20559@end deftp
20560
20561@subsubheading Service ddclient
20562
20563@cindex ddclient
20564Le service ddclient décrit plus bas lance le démon ddclient, qui prend en
20565charge la mise à jour automatique des entrées DNS pour les fournisseurs de
20566service comme @uref{https://dyn.com/dns/, Dyn}.
20567
20568L'exemple suivant montre comment instantier le service avec sa configuration
20569par défaut :
20570
20571@example
20572(service ddclient-service-type)
20573@end example
20574
20575Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
20576@dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
20577@code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
20578manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
20579fichier dans une partie de votre configuration, par exemple avec
20580@code{plain-file}, mais il serait lisible pour tout le monde via
20581@file{/gnu/store}). Vois les exemples dans le répertoire
20582@file{share/ddclient} du paquet @code{ddclient}.
20583
20584@c %start of fragment
20585
20586Les champs de @code{ddclient-configuration} disponibles sont :
20587
20588@deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
20589Le paquet ddclient.
20590
20591@end deftypevr
20592
20593@deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
20594La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
20595domaine.
20596
20597La valeur par défaut est @samp{300}.
20598
20599@end deftypevr
20600
20601@deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
20602Utiliser syslog pour la sortie.
20603
20604La valeur par défaut est @samp{#t}.
20605
20606@end deftypevr
20607
20608@deftypevr {paramètre de @code{ddclient-configuration}} string mail
20609Courriel de l'utilisateur.
20610
20611La valeur par défaut est @samp{"root"}.
20612
20613@end deftypevr
20614
20615@deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
20616Courriel de l'utilisateur pour les échecs.
20617
20618La valeur par défaut est @samp{"root"}.
20619
20620@end deftypevr
20621
20622@deftypevr {paramètre de @code{ddclient-configuration}} string pid
20623Le fichier de PID de ddclient.
20624
20625La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
20626
20627@end deftypevr
20628
20629@deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
20630Activer le support de SSL.
20631
20632La valeur par défaut est @samp{#t}.
20633
20634@end deftypevr
20635
20636@deftypevr {paramètre de @code{ddclient-configuration}} string user
20637Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
20638programme ddclient.
20639
20640La valeur par défaut est @samp{"ddclient"}.
20641
20642@end deftypevr
20643
20644@deftypevr {paramètre de @code{ddclient-configuration}} string group
20645Groupe de l'utilisateur qui lancera le programme ddclient.
20646
20647La valeur par défaut est @samp{"ddclient"}.
20648
20649@end deftypevr
20650
20651@deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
20652Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
20653fichier contient les paramètres d'authentification utilisés par ddclient.
20654On s'attend à ce que vous le créiez manuellement.
20655
20656La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
20657
20658@end deftypevr
20659
20660@deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
20661Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
20662
20663La valeur par défaut est @samp{()}.
20664
20665@end deftypevr
20666
20667
20668@c %end of fragment
20669
20670
20671@node Services VPN
20672@subsection Services VPN
20673@cindex VPN (réseau privé virtuel)
20674@cindex réseau privé virtuel (VPN)
20675
20676Le module @code{(gnu services vpn)} fournit des services liés aux
20677@dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
20678pour que votre machine se connecte à un VPN et un service @emph{serveur}
20679pour que votre machine héberge un VPN. Les deux services utilisent
20680@uref{https://openvpn.net/, OpenVPN}.
20681
20682@deffn {Procédure Scheme} openvpn-client-service @
20683 [#:config (openvpn-client-configuration)]
20684
20685Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
20686client.
20687@end deffn
20688
20689@deffn {Procédure Scheme} openvpn-server-service @
20690 [#:config (openvpn-server-configuration)]
20691
20692Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
20693serveur.
20694
20695Les deux services peuvent être lancés en même temps.
20696@end deffn
20697
20698@c %automatically generated documentation
20699
20700Les champs de @code{openvpn-client-configuration} disponibles sont :
20701
20702@deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
20703Le paquet OpenVPN.
20704
20705@end deftypevr
20706
20707@deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
20708Le fichier de PID d'OpenVPN.
20709
20710La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
20711
20712@end deftypevr
20713
20714@deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
20715Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
20716les serveurs.
20717
20718La valeur par défaut est @samp{udp}.
20719
20720@end deftypevr
20721
20722@deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
20723Le périphérique utilisé pour représenter la connexion VPN.
20724
20725La valeur par défaut est @samp{tun}.
20726
20727@end deftypevr
20728
20729@deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
20730L'autorité de certification qui sert à vérifier les connexions.
20731
20732La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
20733
20734@end deftypevr
20735
20736@deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
20737Le certificat de la machine sur laquelle tourne le démon. Il devrait être
20738signé par l'autorité indiquée dans @code{ca}.
20739
20740La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
20741
20742@end deftypevr
20743
20744@deftypevr {paramètre de @code{openvpn-client-configuration}} string key
20745La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
20746dont le certificat est donné dans @code{cert}.
20747
20748La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
20749
20750@end deftypevr
20751
20752@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
20753Indique s'il faut utiliser l'algorithme de compression lzo.
20754
20755La valeur par défaut est @samp{#t}.
20756
20757@end deftypevr
20758
20759@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
20760Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
20761
20762La valeur par défaut est @samp{#t}.
20763
20764@end deftypevr
20765
20766@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
20767Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
20768démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
20769
20770La valeur par défaut est @samp{#t}.
20771
20772@end deftypevr
20773
20774@deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
20775Niveau de verbosité.
20776
20777La valeur par défaut est @samp{3}.
20778
20779@end deftypevr
20780
20781@deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
20782Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
20783de contrôle TLS pour se protéger contre les attaques DoS.
20784
20785La valeur par défaut est @samp{#f}.
20786
20787@end deftypevr
20788
20789@deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
20790Indique s'il faut vérifier que le certificat du serveur a l'extension
20791d'utilisation.
20792
20793La valeur par défaut est @samp{#t}.
20794
20795@end deftypevr
20796
20797@deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
20798Se lier à un port spécifique.
20799
20800La valeur par défaut est @samp{#f}.
20801
20802@end deftypevr
20803
20804@deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
20805Réessayer de résoudre l'adresse du serveur.
20806
20807La valeur par défaut est @samp{#t}.
20808
20809@end deftypevr
20810
20811@deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
20812Une liste de serveurs distants sur lesquels se connecter.
20813
20814La valeur par défaut est @samp{()}.
20815
20816Les champs de @code{openvpn-remote-configuration} disponibles sont :
20817
20818@deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
20819Nom du serveur.
20820
20821La valeur par défaut est @samp{"my-server"}.
20822
20823@end deftypevr
20824
20825@deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
20826Numéro de port sur lequel écoute le serveur.
20827
20828La valeur par défaut est @samp{1194}.
20829
20830@end deftypevr
20831
20832@end deftypevr
20833@c %end of automatic openvpn-client documentation
20834
20835@c %automatically generated documentation
20836
20837Les champs de @code{openvpn-server-configuration} disponibles sont :
20838
20839@deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
20840Le paquet OpenVPN.
20841
20842@end deftypevr
20843
20844@deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
20845Le fichier de PID d'OpenVPN.
20846
20847La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
20848
20849@end deftypevr
20850
20851@deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
20852Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
20853les serveurs.
20854
20855La valeur par défaut est @samp{udp}.
20856
20857@end deftypevr
20858
20859@deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
20860Le périphérique utilisé pour représenter la connexion VPN.
20861
20862La valeur par défaut est @samp{tun}.
20863
20864@end deftypevr
20865
20866@deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
20867L'autorité de certification qui sert à vérifier les connexions.
20868
20869La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
20870
20871@end deftypevr
20872
20873@deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
20874Le certificat de la machine sur laquelle tourne le démon. Il devrait être
20875signé par l'autorité indiquée dans @code{ca}.
20876
20877La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
20878
20879@end deftypevr
20880
20881@deftypevr {paramètre de @code{openvpn-server-configuration}} string key
20882La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
20883dont le certificat est donné dans @code{cert}.
20884
20885La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
20886
20887@end deftypevr
20888
20889@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
20890Indique s'il faut utiliser l'algorithme de compression lzo.
20891
20892La valeur par défaut est @samp{#t}.
20893
20894@end deftypevr
20895
20896@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
20897Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
20898
20899La valeur par défaut est @samp{#t}.
20900
20901@end deftypevr
20902
20903@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
20904Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
20905démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
20906
20907La valeur par défaut est @samp{#t}.
20908
20909@end deftypevr
20910
20911@deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
20912Niveau de verbosité.
20913
20914La valeur par défaut est @samp{3}.
20915
20916@end deftypevr
20917
20918@deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
20919Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
20920de contrôle TLS pour se protéger contre les attaques DoS.
20921
20922La valeur par défaut est @samp{#f}.
20923
20924@end deftypevr
20925
20926@deftypevr {paramètre de @code{openvpn-server-configuration}} number port
20927Spécifie le numéro de port sur lequel les serveurs écoutent.
20928
20929La valeur par défaut est @samp{1194}.
20930
20931@end deftypevr
20932
20933@deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
20934Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
20935virtuel.
20936
20937La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
20938
20939@end deftypevr
20940
20941@deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
20942Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
20943
20944La valeur par défaut est @samp{#f}.
20945
20946@end deftypevr
20947
20948@deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
20949Le fichier de paramètres Diffie-Hellman.
20950
20951La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
20952
20953@end deftypevr
20954
20955@deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
20956Le fichier qui enregistre les IP des clients.
20957
20958La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
20959
20960@end deftypevr
20961
20962@deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
20963Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
20964clients.
20965
20966La valeur par défaut est @samp{#f}.
20967
20968@end deftypevr
20969
20970@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
20971Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
20972eux dans le VPN.
20973
20974La valeur par défaut est @samp{#f}.
20975
20976@end deftypevr
20977
20978@deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
20979Fait que des messages de ping sont envoyés régulièrement dans les deux sens
20980pour que chaque côté sache quand l'autre n'est plus disponible.
20981@code{keepalive} a besoin d'une paire. Le premier élément est la période
20982d'envoi du ping, et le second élément est le délai d'attente avant de
20983considéré que l'autre côté n'est plus disponible.
20984
20985@end deftypevr
20986
20987@deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
20988Le nombre maximum de clients.
20989
20990La valeur par défaut est @samp{100}.
20991
20992@end deftypevr
20993
20994@deftypevr {paramètre de @code{openvpn-server-configuration}} string status
20995Le fichier de statut. Ce fichier montre un court rapport sur les connexions
20996actuelles. Il est tronqué et réécrit toutes les minutes.
20997
20998La valeur par défaut est @samp{"/var/run/openvpn/status"}.
20999
21000@end deftypevr
21001
21002@deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
21003La liste des configuration pour certains clients.
21004
21005La valeur par défaut est @samp{()}.
21006
21007Les champs de @code{openvpn-ccd-configuration} disponibles sont :
21008
21009@deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
21010Nom du client.
21011
21012La valeur par défaut est @samp{"client"}.
21013
21014@end deftypevr
21015
21016@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
21017Le réseau du client
21018
21019La valeur par défaut est @samp{#f}.
21020
21021@end deftypevr
21022
21023@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
21024IP du client sur le VPN.
21025
21026La valeur par défaut est @samp{#f}.
21027
21028@end deftypevr
21029
21030@end deftypevr
21031
21032
21033@c %end of automatic openvpn-server documentation
21034
21035
21036@node Système de fichiers en réseau
21037@subsection Système de fichiers en réseau
21038@cindex NFS
21039
21040Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
21041tous utilisés pour monter et exporter des arborescences de répertoires en
21042@dfn{network file systems} (NFS).
21043
21044@subsubheading Service RPC Bind
21045@cindex rpcbind
21046
21047Le service RPC Bind fournit un dispositif pour faire correspondre les
21048numéros de programmes à des adresses universelles. De nombreux services
21049liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
21050lorsqu'un service qui en dépend est démarré.
21051
21052@defvr {Variable Scheme} rpcbind-service-type
21053Un type de service pour le démon RPC portmapper.
21054@end defvr
21055
21056
21057@deftp {Type de données} rpcbind-configuration
21058Type données représentant la configuration du service RPC Bind. Ce type a
21059les paramètres suivants :
21060@table @asis
21061@item @code{rpcbind} (par défaut : @code{rpcbind})
21062Le paquet rpcbind à utiliser.
21063
21064@item @code{warm-start?} (par défaut : @code{#t})
21065Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
21066démarrage ce qui lui fait recharger les informations d'états sauvegardés par
21067une instance précédente.
21068@end table
21069@end deftp
21070
21071
21072@subsubheading Pseudo-système de fichiers Pipefs
21073@cindex pipefs
21074@cindex rpc_pipefs
21075
21076Le système de fichiers pipefs est utilisé pour transférer des données liées
21077à NFS entre le noyau et les programmes en espace utilisateur.
21078
21079@defvr {Variable Scheme} pipefs-service-type
21080Un type de service pour le pseudo-système de fichiers pipefs.
21081@end defvr
21082
21083@deftp {Type de données} pipefs-configuration
21084Type de données représentant la configuration du service du pseudo-système
21085de fichiers pipefs. Ce type a les paramètres suivants :
21086@table @asis
21087@item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
21088Le répertoire dans lequel le système de fichiers est attaché.
21089@end table
21090@end deftp
21091
21092
21093@subsubheading Service de démon GSS
21094@cindex GSSD
21095@cindex GSS
21096@cindex système de sécurité global
21097
21098Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
21099forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
21100RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
21101fait avec la commande Kerberos @command{kinit} ou automatiquement à la
21102connexion avec les services PAM (@pxref{Services Kerberos}).
21103
21104@defvr {Variable Scheme} gss-service-type
21105Un type de service pour le démon du système de sécurité global (GSS).
21106@end defvr
21107
21108@deftp {Type de données} gss-configuration
21109Type de données représentant la configuration du service du démon GSS. Ce
21110type a les paramètres suivants :
21111@table @asis
21112@item @code{nfs-utils} (par défaut : @code{nfs-utils})
21113Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
21114
21115@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
21116Le répertoire où le système de fichier pipefs doit être monté.
21117
21118@end table
21119@end deftp
21120
21121
21122@subsubheading Service de démon IDMAP
21123@cindex idmapd
21124@cindex correspondance de nom
21125
21126Le service du démon idmap fournit une correspondance entre les ID
21127utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
21128accéder aux systèmes de fichiers montés via NFSv4.
21129
21130@defvr {Variable Scheme} idmap-service-type
21131Un type de service pour le démon de correspondance d'identité (IDMAP).
21132@end defvr
21133
21134@deftp {Type de données} idmap-configuration
21135Type de données représentant la configuration du service du démon IDMAP. Ce
21136type a les paramètres suivants :
21137@table @asis
21138@item @code{nfs-utils} (par défaut : @code{nfs-utils})
21139Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
21140
21141@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
21142Le répertoire où le système de fichier pipefs doit être monté.
21143
21144@item @code{domain} (par défaut : @code{#f})
21145Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
21146ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
21147domaine pleinement qualifié de l'hôte.
21148
21149@end table
21150@end deftp
21151
21152@node Intégration continue
21153@subsection Intégration continue
21154
21155@cindex intégration continue
21156@uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
21157un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
21158pour le développement que pour fournir des substituts à d'autres
21159(@pxref{Substituts}).
21160
21161Le module @code{(gnu services cuirass)} fournit le service suivant.
21162
21163@defvr {Procédure Scheme} cuirass-service-type
21164Le type du service Cuirass. Sa valeur doit être un objet
21165@code{cuirass-configuration}, décrit ci-dessous.
21166@end defvr
21167
21168Pour ajouter des travaux de construction, vous devez indiquer le champ
21169@code{specifications} de la configuration. Voici un exemple de service qui
21170récupère le dépôt Guix et construit les paquets depuis un manifeste.
21171Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
21172qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
21173
21174@example
21175(define %cuirass-specs
21176 #~(list
21177 '((#:name . "my-manifest")
21178 (#:load-path-inputs . ("guix"))
21179 (#:package-path-inputs . ("custom-packages"))
21180 (#:proc-input . "guix")
21181 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
21182 (#:proc . cuirass-jobs)
21183 (#:proc-args . ((subset . "manifests")
21184 (systems . ("x86_64-linux"))
21185 (manifests . (("config" . "guix/manifest.scm")))))
21186 (#:inputs . (((#:name . "guix")
21187 (#:url . "git://git.savannah.gnu.org/guix.git")
21188 (#:load-path . ".")
21189 (#:branch . "master")
21190 (#:no-compile? . #t))
21191 ((#:name . "config")
21192 (#:url . "git://git.example.org/config.git")
21193 (#:load-path . ".")
21194 (#:branch . "master")
21195 (#:no-compile? . #t))
21196 ((#:name . "custom-packages")
21197 (#:url . "git://git.example.org/custom-packages.git")
21198 (#:load-path . ".")
21199 (#:branch . "master")
21200 (#:no-compile? . #t)))))))
21201
21202(service cuirass-service-type
21203 (cuirass-configuration
21204 (specifications %cuirass-specs)))
21205@end example
21206
21207Tandis que les informations liés aux travaux de construction sont
21208directement dans les spécifications, les paramètres globaux pour le
21209processus @command{cuirass} sont accessibles dans les autres champs de
21210@code{cuirass-configuration}.
21211
21212@deftp {Type de données} cuirass-configuration
21213Type de données représentant la configuration de Cuirass.
21214
21215@table @asis
21216@item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
21217Emplacement du fichier de journal.
21218
21219@item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
21220Emplacement du cache du dépôt.
21221
21222@item @code{user} (par défaut : @code{"cuirass"})
21223Propriétaire du processus @code{cuirass}.
21224
21225@item @code{group} (par défaut : @code{"cuirass"})
21226Groupe du propriétaire du processus @code{cuirass}.
21227
21228@item @code{interval} (par défaut : @code{60})
21229Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
21230Cuirass.
21231
21232@item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
21233Emplacement de la base de données sqlite qui contient les résultats de
21234construction et les spécifications précédemment ajoutées.
21235
21236@item @code{ttl} (par défaut : @code{(* 30 24 3600)})
21237Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
21238sont enregistrés comme des résultats de construction. Cela signifie que les
21239résultats de construction ne seront pas glanés pendant au moins @var{ttl}
21240secondes.
21241
21242@item @code{port} (par défaut : @code{8081})
21243Numéro de port utilisé pour le serveur HTTP.
21244
21245@item --listen=@var{hôte}
21246Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
21247d'accepter les connexions depuis localhost.
21248
21249@item @code{specifications} (par défaut : @code{#~'()})
21250Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
21251spécifications, où une spécification est une liste d'association
21252(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
21253clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
21254l'exemple plus haut.
21255
21256@item @code{use-substitutes?} (par défaut : @code{#f})
21257Cela permet d'utiliser des substituts pour éviter de construire toutes les
21258dépendance d'un travail depuis les sources.
21259
21260@item @code{one-shot?} (par défaut : @code{#f})
21261N'évaluer les spécification et construire les dérivations qu'une seule fois.
21262
21263@item @code{fallback?} (par défaut : @code{#f})
21264Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
21265construction locale du paquet.
21266
21267@item @code{cuirass} (par défaut : @code{cuirass})
21268Le paquet Cuirass à utiliser.
21269@end table
21270@end deftp
21271
21272@node Services de gestion de l'énergie
21273@subsection Services de gestion de l'énergie
21274
21275@cindex tlp
21276@cindex gestion de l'énergie avec TLP
21277@subsubheading démon TLP
21278
21279Le module @code{(gnu services pm)} fournit une définition de service Guix
21280pour l'outil de gestion d'énergie Linux TLP.
21281
21282TLP active plusieurs modes un espace utilisateur et dans le noyau.
21283Contrairement à @code{upower-service}, ce n'est pas un outil passif de
21284surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
21285qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
21286d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
21287d'accueil de TLP}.
21288
21289@deffn {Variable Scheme} tlp-service-type
21290Le type de service pour l'outil TLP. Sa valeur devrait être une
21291configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
21292par défaut, écrivez simplement :
21293@example
21294(service tlp-service-type)
21295@end example
21296@end deffn
21297
21298Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
21299des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
21300
21301Chaque définition de paramètre est précédée par son type ; par exemple,
21302@samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
21303comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
21304paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
21305valeur est @code{'disabled}.
21306
21307@c The following documentation was initially generated by
21308@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
21309@c documentation is better, so we shouldn't hesitate to edit below as
21310@c needed. However if the change you want to make to this documentation
21311@c can be done in an automated way, it's probably easier to change
21312@c (generate-documentation) than to make it below and have to deal with
21313@c the churn as TLP updates.
21314
21315Les champs de @code{tlp-configuration} disponibles sont :
21316
21317@deftypevr {paramètre de @code{tlp-configuration}} package tlp
21318Le paquet TLP.
21319
21320@end deftypevr
21321
21322@deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
21323Indiquez vrai si vous souhaitez activer TLP.
21324
21325La valeur par défaut est @samp{#t}.
21326
21327@end deftypevr
21328
21329@deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
21330Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
21331possibilités sont AC et BAT.
21332
21333La valeur par défaut est @samp{"AC"}.
21334
21335@end deftypevr
21336
21337@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
21338Nombre de secondes que le noyau Linux doit attendre après que les disques
21339s'arrêtent pour se synchroniser quand il est sur secteur.
21340
21341La valeur par défaut est @samp{0}.
21342
21343@end deftypevr
21344
21345@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
21346Comme @code{disk-idle-ac} mais en mode batterie.
21347
21348La valeur par défaut est @samp{2}.
21349
21350@end deftypevr
21351
21352@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
21353Périodicité du nettoyage des pages invalidées, en secondes.
21354
21355La valeur par défaut est @samp{15}.
21356
21357@end deftypevr
21358
21359@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
21360Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
21361
21362La valeur par défaut est @samp{60}.
21363
21364@end deftypevr
21365
21366@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
21367Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
21368les possibilités sont powersave et performance. Avec le pilote
21369acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
21370conservative.
21371
21372La valeur par défaut est @samp{disabled}.
21373
21374@end deftypevr
21375
21376@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
21377Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
21378
21379La valeur par défaut est @samp{disabled}.
21380
21381@end deftypevr
21382
21383@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
21384Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
21385
21386La valeur par défaut est @samp{disabled}.
21387
21388@end deftypevr
21389
21390@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
21391Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
21392
21393La valeur par défaut est @samp{disabled}.
21394
21395@end deftypevr
21396
21397@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
21398Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
21399
21400La valeur par défaut est @samp{disabled}.
21401
21402@end deftypevr
21403
21404@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
21405Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
21406
21407La valeur par défaut est @samp{disabled}.
21408
21409@end deftypevr
21410
21411@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
21412Limite le P-état minimum pour contrôler la dissipation de puissance dans le
21413CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
21414performances disponibles.
21415
21416La valeur par défaut est @samp{disabled}.
21417
21418@end deftypevr
21419
21420@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
21421Limite le P-état maximum pour contrôler la dissipation de puissance dans le
21422CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
21423performances disponibles.
21424
21425La valeur par défaut est @samp{disabled}.
21426
21427@end deftypevr
21428
21429@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
21430Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
21431
21432La valeur par défaut est @samp{disabled}.
21433
21434@end deftypevr
21435
21436@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
21437Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
21438
21439La valeur par défaut est @samp{disabled}.
21440
21441@end deftypevr
21442
21443@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
21444Active la fonctionnalité turbo boost du CPU sur secteur.
21445
21446La valeur par défaut est @samp{disabled}.
21447
21448@end deftypevr
21449
21450@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
21451Comme @code{cpu-boost-on-ac?} mais en mode batterie.
21452
21453La valeur par défaut est @samp{disabled}.
21454
21455@end deftypevr
21456
21457@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
21458Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
21459utilisés lorsque la charge est faible.
21460
21461La valeur par défaut est @samp{#f}.
21462
21463@end deftypevr
21464
21465@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
21466Comme @code{sched-powersave-on-ac?} mais en mode batterie.
21467
21468La valeur par défaut est @samp{#t}.
21469
21470@end deftypevr
21471
21472@deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
21473Active le chien de garde NMI du noyau Linux.
21474
21475La valeur par défaut est @samp{#f}.
21476
21477@end deftypevr
21478
21479@deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
21480Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
21481valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
21482
21483La valeur par défaut est @samp{disabled}.
21484
21485@end deftypevr
21486
21487@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
21488Indique le niveau de performance du CPU par rapport à la politique de
21489gestion de l'énergie sur secteur. Les possibilités sont performance, normal
21490et powersave.
21491
21492La valeur par défaut est @samp{"performance"}.
21493
21494@end deftypevr
21495
21496@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
21497Comme @code{energy-perf-policy-ac} mais en mode batterie.
21498
21499La valeur par défaut est @samp{"powersave"}.
21500
21501@end deftypevr
21502
21503@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
21504Périphériques de disque dur.
21505
21506@end deftypevr
21507
21508@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
21509Niveau de gestion de l'énergie avancé des disques durs.
21510
21511@end deftypevr
21512
21513@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
21514Comme @code{disk-apm-bat} mais en mode batterie.
21515
21516@end deftypevr
21517
21518@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
21519Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
21520être spécifiée pour chaque disque dur déclaré.
21521
21522La valeur par défaut est @samp{disabled}.
21523
21524@end deftypevr
21525
21526@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
21527Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
21528
21529La valeur par défaut est @samp{disabled}.
21530
21531@end deftypevr
21532
21533@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
21534Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
21535doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
21536exemple cfq, deadline et noop.
21537
21538La valeur par défaut est @samp{disabled}.
21539
21540@end deftypevr
21541
21542@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
21543Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
21544possibilités sont min_power, medium_power et max_performance.
21545
21546La valeur par défaut est @samp{"max_performance"}.
21547
21548@end deftypevr
21549
21550@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
21551Comme @code{sata-linkpwr-ac} mais en mode batterie.
21552
21553La valeur par défaut est @samp{"min_power"}.
21554
21555@end deftypevr
21556
21557@deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
21558Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
21559
21560La valeur par défaut est @samp{disabled}.
21561
21562@end deftypevr
21563
21564@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
21565Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
21566les disques, sur secteur.
21567
21568La valeur par défaut est @samp{disabled}.
21569
21570@end deftypevr
21571
21572@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
21573Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
21574
21575La valeur par défaut est @samp{disabled}.
21576
21577@end deftypevr
21578
21579@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
21580Secondes d'inactivités avant de suspendre les disques.
21581
21582La valeur par défaut est @samp{15}.
21583
21584@end deftypevr
21585
21586@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
21587Niveau de gestion de l'énergie des états actifs de PCI Express. Les
21588possibilités sont default, performance et powersave.
21589
21590La valeur par défaut est @samp{"performance"}.
21591
21592@end deftypevr
21593
21594@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
21595Comme @code{pcie-aspm-ac} mais en mode batterie.
21596
21597La valeur par défaut est @samp{"powersave"}.
21598
21599@end deftypevr
21600
21601@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
21602Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
21603possibilités sont low, mid, high, auto et default.
21604
21605La valeur par défaut est @samp{"high"}.
21606
21607@end deftypevr
21608
21609@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
21610Comme @code{radeon-power-ac} mais en mode batterie.
21611
21612La valeur par défaut est @samp{"low"}.
21613
21614@end deftypevr
21615
21616@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
21617Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
21618sont battery et performance.
21619
21620La valeur par défaut est @samp{"performance"}.
21621
21622@end deftypevr
21623
21624@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
21625Comme @code{radeon-dpm-state-ac} mais en mode batterie.
21626
21627La valeur par défaut est @samp{"battery"}.
21628
21629@end deftypevr
21630
21631@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
21632Niveau de performance de DPM. Les possibilités sont auto, low et high.
21633
21634La valeur par défaut est @samp{"auto"}.
21635
21636@end deftypevr
21637
21638@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
21639Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
21640
21641La valeur par défaut est @samp{"auto"}.
21642
21643@end deftypevr
21644
21645@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
21646Mode de gestion de l'énergie wifi.
21647
21648La valeur par défaut est @samp{#f}.
21649
21650@end deftypevr
21651
21652@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
21653Comme @code{wifi-power-ac?} mais en mode batterie.
21654
21655La valeur par défaut est @samp{#t}.
21656
21657@end deftypevr
21658
21659@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
21660Désactive wake on LAN.
21661
21662La valeur par défaut est @samp{#t}.
21663
21664@end deftypevr
21665
21666@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
21667Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
21668sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
21669de l'énergie.
21670
21671La valeur par défaut est @samp{0}.
21672
21673@end deftypevr
21674
21675@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
21676Comme @code{sound-powersave-ac} mais en mode batterie.
21677
21678La valeur par défaut est @samp{1}.
21679
21680@end deftypevr
21681
21682@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
21683Désactive le contrôleur en mode de gestion de l'énergie sur les
21684périphériques Intel HDA.
21685
21686La valeur par défaut est @samp{#t}.
21687
21688@end deftypevr
21689
21690@deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
21691Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
21692périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
21693levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
21694plus récents.
21695
21696La valeur par défaut est @samp{#f}.
21697
21698@end deftypevr
21699
21700@deftypevr {paramètre de @code{tlp-configuration}} string bay-device
21701Nom du périphérique optique à éteindre.
21702
21703La valeur par défaut est @samp{"sr0"}.
21704
21705@end deftypevr
21706
21707@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
21708Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
21709sont on et auto.
21710
21711La valeur par défaut est @samp{"on"}.
21712
21713@end deftypevr
21714
21715@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
21716Comme @code{runtime-pm-ac} mais en mode batterie.
21717
21718La valeur par défaut est @samp{"auto"}.
21719
21720@end deftypevr
21721
21722@deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
21723Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
21724liste noire.
21725
21726La valeur par défaut est @samp{#t}.
21727
21728@end deftypevr
21729
21730@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
21731Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
21732l'énergie à l'exécution.
21733
21734La valeur par défaut est @samp{disabled}.
21735
21736@end deftypevr
21737
21738@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
21739Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
21740de l'énergie à l'exécution.
21741
21742@end deftypevr
21743
21744@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
21745Active la fonctionnalité de mise en veille automatique de l'USB.
21746
21747La valeur par défaut est @samp{#t}.
21748
21749@end deftypevr
21750
21751@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
21752Exclue les périphériques spécifiés de la mise en veille automatique de
21753l'USB.
21754
21755La valeur par défaut est @samp{disabled}.
21756
21757@end deftypevr
21758
21759@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
21760Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
21761
21762La valeur par défaut est @samp{#t}.
21763
21764@end deftypevr
21765
21766@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
21767Inclue les périphériques spécifiés dans la mise en veille automatique de
21768l'USB, même s'ils sont déjà exclus par le pilote ou via
21769@code{usb-blacklist-wwan?}.
21770
21771La valeur par défaut est @samp{disabled}.
21772
21773@end deftypevr
21774
21775@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
21776Active la mise en veille de l'USB avant l'arrêt.
21777
21778La valeur par défaut est @samp{disabled}.
21779
21780@end deftypevr
21781
21782@deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
21783Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
21784arrêt au démarrage du système.
21785
21786La valeur par défaut est @samp{#f}.
21787
21788@end deftypevr
21789
21790@cindex thermald
21791@cindex gestion de la fréquence du CPU avec thermald
21792@subsubheading démon Thermald
21793
21794Le module @code{(gnu services pm)} fournit une interface pour thermald, un
21795service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
21796
21797@defvr {Variable Scheme} thermald-service-type
21798C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
21799thermald}, le démon de température de Linux, responsable du contrôle de
21800l'état thermique des processeurs et d'éviter la surchauffe.
21801@end defvr
21802
21803@deftp {Type de données} thermald-configuration
21804Type de données représentant la configuration de
21805@code{thermald-service-type}.
21806
21807@table @asis
21808@item @code{ignore-cpuid-check?} (par défaut : @code{#f})
21809Ignore la vérification des modèles CPU supportés avec cpuid.
21810
21811@item @code{thermald} (par défaut : @var{thermald})
21812Objet du paquet de thermald.
21813
21814@end table
21815@end deftp
21816
21817@node Services audio
21818@subsection Services audio
21819
21820Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
21821démon de lecture de musique).
21822
21823@cindex mpd
21824@subsubheading Music Player Daemon
21825
21826Le démon de lecture de musique (MPD) est un service qui joue de la musique
21827tout en étant contrôlé depuis la machine locale ou à travers le réseau par
21828divers clients.
21829
21830L'exemple suivant montre comment on peut lancer @code{mpd} en tant
21831qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
21832pour la sortie audio.
21833
21834@example
21835(service mpd-service-type
21836 (mpd-configuration
21837 (user "bob")
21838 (port "6666")))
21839@end example
21840
21841@defvr {Variable Scheme} mpd-service-type
21842Le type de service pour @command{mpd}.
21843@end defvr
21844
21845@deftp {Type de données} mpd-configuration
21846Type de données représentant la configuration de @command{mpd}.
21847
21848@table @asis
21849@item @code{user} (par défaut : @code{"mpd"})
21850L'utilisateur qui lance mpd.
21851
21852@item @code{music-dir} (par défaut : @code{"~/Music"})
21853Le répertoire à scanner pour trouver les fichiers de musique.
21854
21855@item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
21856Le répertoire où stocker les playlists.
21857
21858@item @code{db-file} (par défaut : @code{"~/.mpd/tag_cache"})
21859Emplacement de la base de données de musiques.
21860
21861@item @code{state-file} (par défaut : @code{"~/.mpd/state"})
21862Emplacement du fichier qui stocke l'état actuel de MPD.
21863
21864@item @code{sticker-file} (par défaut : @code{"~/.mpd/sticker.sql"})
21865Emplacement de la base de données de stickers.
21866
21867@item @code{port} (par défaut : @code{"6600"})
21868Le port sur lequel lancer mpd.
21869
21870@item @code{address} (par défaut : @code{"any"})
21871L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
21872chemin absolu peut être spécifié ici.
21873
21874@end table
21875@end deftp
21876
21877@node Services de virtualisation
21878@subsection services de virtualisation
21879
21880Le module @code{(gnu services virtualization)} fournit des services pour les
21881démons libvirt et virtlog, ainsi que d'autres services liés à la
21882virtualisation.
21883
21884@subsubheading démon libvirt
21885@code{libvirtd} est le démon côté serveur du système de gestion de
21886virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
21887les taches de gestion requises pour les clients virtualisés.
21888
21889@deffn {Variable Scheme} libvirt-service-type
21890C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
21891être un @code{libvirt-configuration}.
21892
21893@example
21894(service libvirt-service-type
21895 (libvirt-configuration
21896 (unix-sock-group "libvirt")
21897 (tls-port "16555")))
21898@end example
21899@end deffn
21900
21901@c Auto-generated with (generate-libvirt-documentation)
21902Les champs de @code{libvirt-configuration} disponibles sont :
21903
21904@deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
21905Paquet libvirt.
21906
21907@end deftypevr
21908
21909@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
21910Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
21911public. Vous devez remplir le champ @code{listen} pour que cela ait un
21912effet.
21913
21914Il est nécessaire de mettre en place une CA et de créer un certificat
21915serveur avant d'utiliser cette fonctionnalité.
21916
21917La valeur par défaut est @samp{#t}.
21918
21919@end deftypevr
21920
21921@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
21922Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
21923remplir le champ @code{listen} pour que cela ait un effet.
21924
21925L'utilisation des sockets TCP requiert une authentification SASL par
21926défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
21927sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
21928
21929La valeur par défaut est @samp{#f}.
21930
21931@end deftypevr
21932
21933@deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
21934Port pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
21935numéro de port ou d'un nom de service
21936
21937La valeur par défaut est @samp{"16514"}.
21938
21939@end deftypevr
21940
21941@deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
21942Port sur lequel accepter les connexions TCP non sécurisées. Cela peut être
21943un numéro de port ou un nom de service
21944
21945La valeur par défaut est @samp{"16509"}.
21946
21947@end deftypevr
21948
21949@deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
21950Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
21951
21952La valeur par défaut est @samp{"0.0.0.0"}.
21953
21954@end deftypevr
21955
21956@deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
21957Indique s'il faut publier le service libvirt en mDNS.
21958
21959Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
21960démon Avahi.
21961
21962La valeur par défaut est @samp{#f}.
21963
21964@end deftypevr
21965
21966@deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
21967Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
21968
21969La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
21970
21971@end deftypevr
21972
21973@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
21974Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
21975permettre à un ensemble d'utilisateurs « de confiance » de gérer les
21976fonctionnalités sans devenir root.
21977
21978La valeur par défaut est @samp{"root"}.
21979
21980@end deftypevr
21981
21982@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
21983Permission Unix pour le socket en lecture seule. Il est utilisé pour
21984surveiller le statut des VM uniquement.
21985
21986La valeur par défaut est @samp{"0777"}.
21987
21988@end deftypevr
21989
21990@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
21991Permission Unix pour le socket en lecture-écriture. La valeur par défaut
21992n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
21993défaut change et permet tout le monde (c.-à-d.@: 0777).
21994
21995La valeur par défaut est @samp{"0770"}.
21996
21997@end deftypevr
21998
21999@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
22000Permissions Unix pour le socket d'administration. La valeur par défaut ne
22001permet que le propriétaire (root), ne la changez pas à moins que vous ne
22002soyez sûr de savoir à qui vous exposez cet accès.
22003
22004La valeur par défaut est @samp{"0777"}.
22005
22006@end deftypevr
22007
22008@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
22009Le répertoire dans lequel les sockets sont créés.
22010
22011La valeur par défaut est @samp{"/var/run/libvirt"}.
22012
22013@end deftypevr
22014
22015@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
22016Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
22017les permissions des socket permettent à n'importe qui de se connecter
22018
22019La valeur par défaut est @samp{"polkit"}.
22020
22021@end deftypevr
22022
22023@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
22024Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
22025défaut les permissions du socket ne permettent que root. Si le support de
22026PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
22027l'authentification « polkit ».
22028
22029La valeur par défaut est @samp{"polkit"}.
22030
22031@end deftypevr
22032
22033@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
22034Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
22035SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
22036scénario de développement ou de test.
22037
22038La valeur par défaut est @samp{"sasl"}.
22039
22040@end deftypevr
22041
22042@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
22043Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
22044chiffrés par la couche TLS, et une authentification limitée est effectuée
22045avec les certificats.
22046
22047Il est possible d'utiliser de n'importe quel mécanisme d'authentification
22048SASL en utilisant « sasl » pour cette option
22049
22050La valeur par défaut est @samp{"none"}.
22051
22052@end deftypevr
22053
22054@deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
22055Schéma de contrôle d'accès à l'API.
22056
22057Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
22058pilotes d'accès peuvent placer des restrictions là-dessus.
22059
22060La valeur par défaut est @samp{()}.
22061
22062@end deftypevr
22063
22064@deftypevr {paramètre de @code{libvirt-configuration}} string key-file
22065Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
22066aucune clef privée n'est chargée.
22067
22068La valeur par défaut est @samp{""}.
22069
22070@end deftypevr
22071
22072@deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
22073Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
22074certificat n'est chargé.
22075
22076La valeur par défaut est @samp{""}.
22077
22078@end deftypevr
22079
22080@deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
22081Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
22082certificat de CA n'est chargé.
22083
22084La valeur par défaut est @samp{""}.
22085
22086@end deftypevr
22087
22088@deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
22089Chemin de la liste de révocation des certificats. Si la chaîne est vide,
22090aucun CRL n'est chargé.
22091
22092La valeur par défaut est @samp{""}.
22093
22094@end deftypevr
22095
22096@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
22097Désactive la vérification de nos propres certificats serveurs.
22098
22099Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
22100propres certificats.
22101
22102La valeur par défaut est @samp{#f}.
22103
22104@end deftypevr
22105
22106@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
22107Désactive la vérification des certificats clients.
22108
22109La vérification des certificats clients est le mécanisme d'authentification
22110principal. Tout client qui ne présent pas de certificat signé par la CA
22111sera rejeté.
22112
22113La valeur par défaut est @samp{#f}.
22114
22115@end deftypevr
22116
22117@deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
22118Liste blanche des Distinguished Name x509 autorisés.
22119
22120La valeur par défaut est @samp{()}.
22121
22122@end deftypevr
22123
22124@deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
22125Liste blanche des noms d'utilisateur SASL permis. Le format des noms
22126d'utilisateurs dépend du mécanisme d'authentification SASL.
22127
22128La valeur par défaut est @samp{()}.
22129
22130@end deftypevr
22131
22132@deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
22133Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
22134valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
22135modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
22136agisse différemment des paramètres par défaut globaux.
22137
22138La valeur par défaut est @samp{"NORMAL"}.
22139
22140@end deftypevr
22141
22142@deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
22143Nombre maximum de connexions clientes en même temps sur tous les sockets.
22144
22145La valeur par défaut est @samp{5000}.
22146
22147@end deftypevr
22148
22149@deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
22150Longueur maximum de la queue de connexions en attente d'acceptation du
22151démon. Remarquez que certains protocoles supportant la retransmission
22152peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
22153
22154La valeur par défaut est @samp{1000}.
22155
22156@end deftypevr
22157
22158@deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
22159Longueur maximum de la queue des clients acceptés mais pas authentifiés.
22160Indiquez zéro pour désactiver ce paramètre
22161
22162La valeur par défaut est @samp{20}.
22163
22164@end deftypevr
22165
22166@deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
22167Nombre de processus de travail démarrés initialement.
22168
22169La valeur par défaut est @samp{5}.
22170
22171@end deftypevr
22172
22173@deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
22174Nombre maximum de threads de travail.
22175
22176Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
22177seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
22178que max_workers soit égal au nombre maximum de clients permis.
22179
22180La valeur par défaut est @samp{20}.
22181
22182@end deftypevr
22183
22184@deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
22185Nombre de travailleurs prioritaires. Si tous les threads de travail du
22186groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
22187(notamment domainDestroy) peuvent être exécutés par ce groupe.
22188
22189La valeur par défaut est @samp{5}.
22190
22191@end deftypevr
22192
22193@deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
22194Limite globale totale sur les appels RPC concurrents.
22195
22196La valeur par défaut est @samp{20}.
22197
22198@end deftypevr
22199
22200@deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
22201Limite de requêtes concurrentes depuis une connexion cliente unique. Pour
22202éviter qu'un client ne monopolise le serveur, vous devriez indiquer une
22203petite partie des paramètres global max_requests et max_workers.
22204
22205La valeur par défaut est @samp{5}.
22206
22207@end deftypevr
22208
22209@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
22210Comme @code{min-workers} mais pour l'interface d'administration.
22211
22212La valeur par défaut est @samp{1}.
22213
22214@end deftypevr
22215
22216@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
22217Comme @code{max-workers} mais pour l'interface d'administration.
22218
22219La valeur par défaut est @samp{5}.
22220
22221@end deftypevr
22222
22223@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
22224Comme @code{max-clients} mais pour l'interface d'administration.
22225
22226La valeur par défaut est @samp{5}.
22227
22228@end deftypevr
22229
22230@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
22231Comme @code{max-queued-clients} mais pour l'interface d'administration.
22232
22233La valeur par défaut est @samp{5}.
22234
22235@end deftypevr
22236
22237@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
22238Comme @code{max-client-requests} mais pour l'interface d'administration.
22239
22240La valeur par défaut est @samp{5}.
22241
22242@end deftypevr
22243
22244@deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
22245Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
222461 : débogage.
22247
22248La valeur par défaut est @samp{3}.
22249
22250@end deftypevr
22251
22252@deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
22253Filtres de journalisation.
22254
22255Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
22256pour une catégorie donnée. Le format d'un filtre est :
22257
22258@itemize @bullet
22259@item
22260x:nom
22261
22262@item
22263x:+nom
22264
22265@end itemize
22266
22267où @code{nom} est une chaîne de caractères qui correspond à la catégorie
22268donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
22269libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
22270filtre peut être une sous-chaîne du nom complet de la catégorie, pour
22271pouvoir correspondre à plusieurs catégories similaires), le préfixe
22272facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
22273message qui correspond au nom, et @code{x} est le niveau minimal des
22274messages qui devraient être enregistrés :
22275
22276@itemize @bullet
22277@item
222781 : DEBUG
22279
22280@item
222812 : INFO
22282
22283@item
222843 : WARNING
22285
22286@item
222874 : ERROR
22288
22289@end itemize
22290
22291On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
22292doivent juste être séparés par des espaces.
22293
22294La valeur par défaut est @samp{"3:remote 4:event"}.
22295
22296@end deftypevr
22297
22298@deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
22299Sorties de débogage.
22300
22301Une sortie est l'un des endroits où les journaux sont enregistrés. Le
22302format d'une sortie peut être :
22303
22304@table @code
22305@item x:stderr
22306la sortie va vers stderr
22307
22308@item x:syslog:nom
22309utilise syslog comme sortie et utilise le nom donné comme identifiant
22310
22311@item x:file:chemin_fichier
22312la sortie va vers un fichier, avec le chemin donné
22313
22314@item x:journald
22315la sortie va vers le système de journalisation journald
22316
22317@end table
22318
22319Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
22320filtre
22321
22322@itemize @bullet
22323@item
223241 : DEBUG
22325
22326@item
223272 : INFO
22328
22329@item
223303 : WARNING
22331
22332@item
223334 : ERROR
22334
22335@end itemize
22336
22337Plusieurs sorties peuvent être définies, elles doivent juste être séparées
22338par des espaces.
22339
22340La valeur par défaut est @samp{"3:stderr"}.
22341
22342@end deftypevr
22343
22344@deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
22345Permet de modifier l'utilisation du sous-système d'audit
22346
22347@itemize @bullet
22348@item
223490 : désactive tout audit
22350
22351@item
223521 : active l'audit, seulement s'il est activé sur l'hôte
22353
22354@item
223552 : active l'audit, et quitte s'il est désactivé sur l'hôte.
22356
22357@end itemize
22358
22359La valeur par défaut est @samp{1}.
22360
22361@end deftypevr
22362
22363@deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
22364Envoie les messages d'audit via l'infrastructure de journalisation de
22365libvirt.
22366
22367La valeur par défaut est @samp{#f}.
22368
22369@end deftypevr
22370
22371@deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
22372UUID de l'hôte. L'UUID ne doit pas avoir tous ses nombres identiques.
22373
22374La valeur par défaut est @samp{""}.
22375
22376@end deftypevr
22377
22378@deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
22379Source où lire l'UUID de l'hôte.
22380
22381@itemize @bullet
22382@item
22383@code{smbios} : récupère l'UUID à partir de @code{dmidecode -s system-uuid}
22384
22385@item
22386@code{machine-id} : récupère l'UUID à partir de @code{/etc/machine-id}
22387
22388@end itemize
22389
22390Si @code{dmidecode} ne fournit pas un UUID valide, un UUID temporaire sera
22391généré.
22392
22393La valeur par défaut est @samp{"smbios"}.
22394
22395@end deftypevr
22396
22397@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
22398Un message keepalive est envoyé au client après @code{keepalive_interval}
22399secondes d'inactivité pour vérifier si le client répond toujours. Si la
22400valeur est -1, libvirtd n'enverra jamais de requête keepalive ; cependant
22401les clients peuvent toujours en envoyer et le démon y répondra.
22402
22403La valeur par défaut est @samp{5}.
22404
22405@end deftypevr
22406
22407@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
22408Nombre maximum de messages keepalive qui peuvent être envoyés au client sans
22409réponse avant que la connexion ne soit considérée comme cassée.
22410
22411En d'autres termes, la connexion est approximativement fermée après
22412@code{keepalive_interval * (keepalive_count + 1)} secondes après le dernier
22413message reçu de la part du client. Lorsque @code{keepalive-count} est à 0,
22414les connexions seront automatiquement fermées après
22415@code{keepalive-interval} secondes d'inactivité sans envoyer le moindre
22416message keepalive.
22417
22418La valeur par défaut est @samp{5}.
22419
22420@end deftypevr
22421
22422@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
22423Comme précédemment, mais pour l'interface d'administration.
22424
22425La valeur par défaut est @samp{5}.
22426
22427@end deftypevr
22428
22429@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
22430Comme précédemment, mais pour l'interface d'administration.
22431
22432La valeur par défaut est @samp{5}.
22433
22434@end deftypevr
22435
22436@deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
22437Délai d'attente pour les appels Open vSwitch.
22438
22439L'utilitaire @code{ovs-vsctl} est utilisé pour la configuration et son
22440option de délai d'attente est à 5 secondes pour éviter qu'une attente
22441infinie ne bloque libvirt.
22442
22443La valeur par défaut est @samp{5}.
22444
22445@end deftypevr
22446
22447@c %end of autogenerated docs
22448
22449@subsubheading démon Virrlog
22450Le service virtlogd est un démon côté serveur qui fait partie de libvirt,
22451utilisé pour gérer les journaux des consoles des machines virtuelles.
22452
22453Ce démon n'est pas utilisé directement par les clients libvirt, mais il est
22454appelé pour eux par @code{libvirtd}. En maintenant les journaux dans un
22455démon séparé, le démon @code{libvirtd} principal peut être redémarré sans
22456risque de perte de journaux. Le démon @code{virtlogd} a la possibilité de
22457ré-exécuter exec() sur lui-même quand il reçoit @code{SIGUSR1}, pour
22458permettre des mises à jour à chaux sans temps mort.
22459
22460@deffn {Variable Scheme} virtlog-service-type
22461Le type de service pour le démon virtlogd. Sa valeur doit être un
22462@code{virtlog-configuration}.
22463
22464@example
22465(service virtlog-service-type
22466 (virtlog-configuration
22467 (max-clients 1000)))
22468@end example
22469@end deffn
22470
22471@deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
22472Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
224731 : débogage.
22474
22475La valeur par défaut est @samp{3}.
22476
22477@end deftypevr
22478
22479@deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
22480Filtres de journalisation.
22481
22482Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
22483pour une catégorie donnée. Le format d'un filtre est :
22484
22485@itemize @bullet
22486@item
22487x:nom
22488
22489@item
22490x:+nom
22491
22492@end itemize
22493
22494où @code{nom} est une chaîne de caractères qui correspond à la catégorie
22495donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
22496libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
22497filtre peut être une sous-chaîne du nom complet de la catégorie, pour
22498pouvoir correspondre à plusieurs catégories similaires), le préfixe
22499facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
22500message qui correspond au nom, et @code{x} est le niveau minimal des
22501messages qui devraient être enregistrés :
22502
22503@itemize @bullet
22504@item
225051 : DEBUG
22506
22507@item
225082 : INFO
22509
22510@item
225113 : WARNING
22512
22513@item
225144 : ERROR
22515
22516@end itemize
22517
22518On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
22519doivent juste être séparés par des espaces.
22520
22521La valeur par défaut est @samp{"3:remote 4:event"}.
22522
22523@end deftypevr
22524
22525@deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
22526Sorties de débogage.
22527
22528Une sortie est l'un des endroits où les journaux sont enregistrés. Le
22529format d'une sortie peut être :
22530
22531@table @code
22532@item x:stderr
22533la sortie va vers stderr
22534
22535@item x:syslog:nom
22536utilise syslog comme sortie et utilise le nom donné comme identifiant
22537
22538@item x:file:chemin_fichier
22539la sortie va vers un fichier, avec le chemin donné
22540
22541@item x:journald
22542la sortie va vers le système de journalisation journald
22543
22544@end table
22545
22546Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
22547filtre
22548
22549@itemize @bullet
22550@item
225511 : DEBUG
22552
22553@item
225542 : INFO
22555
22556@item
225573 : WARNING
22558
22559@item
225604 : ERROR
22561
22562@end itemize
22563
22564Plusieurs sorties peuvent être définies, elles doivent juste être séparées
22565par des espaces.
22566
22567La valeur par défaut est @samp{"3:stderr"}.
22568
22569@end deftypevr
22570
22571@deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
22572Nombre maximum de connexions clientes en même temps sur tous les sockets.
22573
22574La valeur par défaut est @samp{1024}.
22575
22576@end deftypevr
22577
22578@deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
22579Taille de fichier maximale avant roulement.
22580
22581La valeur par défaut est @samp{2MB}.
22582
22583@end deftypevr
22584
22585@deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
22586Nombre maximal de fichiers de sauvegardes à garder.
22587
22588La valeur par défaut est @samp{3}.
22589
22590@end deftypevr
22591
22592@subsubheading Émulation transparente avec QEMU
22593
22594@cindex émulation
22595@cindex @code{binfmt_misc}
22596@code{qemu-binfmt-service-type} fournit le support de l'émulation
22597transparente de binaires construits pour des architectures différentes —
22598p.@: ex.@: il permet d'exécuter de manière transparente des programmes ARMv
22599sur une machine x86_64. Cela se fait en combinant l'émulateur
22600@uref{https://www.qemu.org, QEMU} et la fonctionnalité @code{binfmt_misc} du
22601noyau Linux.
22602
22603@defvr {Variable Scheme} qemu-binfmt-service-type
22604Le type du service QEMU/binfmt pour l'émulation transparente. Sa valeur
22605doit être un objet @code{qemu-binfmt-configuration}, qui spécifie le paquet
22606QEMU à utiliser ainsi que l'architecture que vous voulez émuler :
22607
22608@example
22609(service qemu-binfmt-service-type
22610 (qemu-binfmt-configuration
22611 (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el"))))
22612@end example
22613
22614Dans cet exemple, on active l'émulation transparente pour les plateformes
22615ARM et aarch64. Lancer @code{herd stop qemu-binfmt} l'éteint et lancer
22616@code{herd start qemu-binfmt} le rallume (@pxref{Invoking herd, the
22617@command{herd} command,, shepherd, The GNU Shepherd Manual}).
22618@end defvr
22619
22620@deftp {Type de données} qemu-binfmt-configuration
22621La configuration du service @code{qemu-binfmt}.
22622
22623@table @asis
22624@item @code{platforms} (par défaut : @code{'()})
22625La liste des plates-formes émulées par QEMU. Chaque élément doit être un
22626objet @dfn{platform object} tel que renvoyé par @code{lookup-qemu-platforms}
22627(voir plus bas).
22628
22629@item @code{guix-support?} (par défaut : @code{#f})
22630Lorsque la valeur est vraie, QEMU et toutes ses dépendances sont ajoutés à
22631l'environnement de construction de @command{guix-daemon} (@pxref{Invoquer guix-daemon, @code{--chroot-directory} option}). Cela permet d'utiliser les
22632gestionnaires @code{binfmt_misc} dans l'environnement de cosntruction, ce
22633qui signifie que vous pouvez construire des programmes pour d'autres
22634architectures de manière transparente.
22635
22636Par exemple, supposons que vous soyez sur une machine x86_64 et que vous
22637avez ce services :
22638
22639@example
22640(service qemu-binfmt-service-type
22641 (qemu-binfmt-configuration
22642 (platforms (lookup-qemu-platforms "arm"))
22643 (guix-support? #t)))
22644@end example
22645
22646Vous pouvez lancer :
22647
22648@example
22649guix build -s armhf-linux inkscape
22650@end example
22651
22652@noindent
22653et cela construira Inkscape pour ARMv7 @emph{comme s'il s'agissait d'une
22654construction native}, de manière transparente avec QEMU pour émuler un CPU
22655ARMv7. Plutôt pratique si vous voulez tester un paquet construit pour une
22656architecture à laquelle vous n'avez pas accès !
22657
22658@item @code{qemu} (par défaut : @code{qemu})
22659Le paquet QEMU à utiliser.
22660@end table
22661@end deftp
22662
22663@deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
22664Renvoie la liste des objets de plates-formes QEMU correspondant à
22665@var{platforms}@dots{}. @var{platforms} doit être une liste de chaînes de
22666caractères correspondant aux noms de plates-formes, comme @code{"arm"},
22667@code{"sparc"}, @code{"mips64el"} etc.
22668@end deffn
22669
22670@deffn {Procédure Scheme} qemu-platform? @var{obj}
22671Renvoie vrai s i@var{obj} est un objet de plate-forme.
22672@end deffn
22673
22674@deffn {Procédure Scheme} qemu-platform-name @var{platform}
22675Renvoie le nom de @var{platform} — une chaîne comme @code{"arm"}.
22676@end deffn
22677
22678@node Services de contrôle de version
22679@subsection Services de contrôle de version
22680
22681Le module @code{(gnu services version-control)} fournit un service pour
22682permettre l'accès à distance à des dépôts Git locaux. Il y a trois options
22683: en utilisant @code{git-daemon-service} qui fournit un accès aux dépôts via
22684le protocole non sécurisé @code{git://} basé sur TCP, en étendant le serveur
22685web @code{nginx} pour relayer les requêtes vers @code{git-http-backend} ou
22686en fournissant une interface web avec @code{cgit-service-type}.
22687
22688@deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
22689
22690Renvoie un service qui lance @command{git daemon}, un serveur TCP simple
22691pour exposer des dépôts sur le protocole Git pour des accès anonymes.
22692
22693L'argument facultatif @var{config} devrait être un objet
22694@code{<git-daemon-configuration>}, par défaut il permet l'accès en
22695lecture-seule aux dépôts exportés@footnote{En créant le fichier magique «
22696git-daemon-export-ok » dans le répertoire du dépôt.} dans @file{/srv/git}.
22697
22698@end deffn
22699
22700@deftp {Type de données} git-daemon-configuration
22701Type de données représentnt la configuration de @code{git-daemon-service}.
22702
22703@table @asis
22704@item @code{package} (par défaut : @var{git})
22705Objet de paquet du système de contrôle de version distribué Git.
22706
22707@item @code{export-all?} (par défaut : @var{#f})
22708Indique s'il faut permettre l'accès à tous les dépôts Git, même s'ils n'ont
22709pas le fichier @file{git-daemon-export-ok}.
22710
22711@item @code{base-path} (par défaut : @file{/srv/git})
22712Indique s'il faut traduire toutes les requêtes de chemins relativement au
22713chemin actuel. Si vous lancez le démon git avec @var{(base-path
22714"/srv/git")} sur example.com, si vous essayez ensuite de récupérer
22715@code{git://example.com/hello.git}, le démon git interprétera ce chemin
22716comme étant @code{/srv/git/hello.git}.
22717
22718@item @code{user-path} (par défaut : @var{#f})
22719Indique s'il faut permettre la notation @code{~user} dans les requêtes.
22720Lorsque spécifié avec une chaîne vide, les requêtes à
22721@code{git://host/~alice/foo} sont des requêtes d'accès au dépôt @code{foo}
22722dans le répertoire personnel de l'utilisateur @code{alice}. Si
22723@var{(user-path "chemin")} est spécifié, la même requête est interprétée
22724comme accédant au répertoire @code{chemin/foo} dans le répertoire personnel
22725de l'utilisateur @code{alice}.
22726
22727@item @code{listen} (par défaut : @var{'()})
22728Indique s'il faut écouter sur des adresses IP ou des noms d'hôtes
22729particuliers, par défaut tous.
22730
22731@item @code{port} (par défaut : @var{#f})
22732Indique s'il faut écouter sur un port particulier, par défaut le 9418.
22733
22734@item @code{whitelist} (par défaut : @var{'()})
22735Si la liste n'est pas vide, n'autoriser l'accès qu'aux dossiers spécifiés.
22736
22737@item @code{extra-options} (par défaut : @var{'()})
22738Options supplémentaires qui seront passées à @code{git daemon}, lancez
22739@command{man git-daemon} pour plus d'informations.
22740
22741@end table
22742@end deftp
22743
22744Le protocole @code{git://} ne permet pas l'authentification. Lorsque vous
22745récupérez un dépôt via @code{git://}, vous ne pouvez pas savoir si les
22746données que vous recevez ont été modifiées ou si elles viennent bien de
22747l'hôte spécifié, et votre connexion pourrait être espionnée. Il est
22748préférable d'utiliser un protocole de transport authentifié et chiffré,
22749comme @code{https}. Bien que Git vous permette de servir des dépôts avec un
22750serveur web peu sophistiqué basé sur les fichiers, il y a un protocole plus
22751rapide implémenté par le programme @code{git-http-backend}. Ce programme
22752est le moteur des services web Git corrects. Il est conçu pour se trouver
22753derrière un mandataire FastCGI. @xref{Services web} pour plus
22754d'informations sur la manière de lancer le démon @code{fcgiwrap} nécessaire.
22755
22756Guix a un type de données de configuration séparé pour servir des dépôts Git
22757par HTTP.
22758
22759@deftp {Type de données} git-http-configuration
22760Type de données représentant la configuration de @code{git-http-service}.
22761
22762@table @asis
22763@item @code{package} (par défaut : @var{git})
22764Objet de paquet du système de contrôle de version distribué Git.
22765
22766@item @code{git-root} (par défaut : @file{/srv/git})
22767Répertoire contenant les dépôts Git à exposer au monde.
22768
22769@item @code{export-all?} (par défaut : @var{#f})
22770Indique s'il faut exposer l'accès de tous les dépôts Git dans
22771@var{git-root}, même s'ils n'ont pas le fichier @file{git-daemon-export-ok}.
22772
22773@item @code{uri-path} (par défaut : @file{/git/})
22774Préfixe du chemin pour l'accès Git. Avec le préfixe @code{/git/} par
22775défaut, cela traduira @code{http://@var{server}/git/@var{repo}.git} en
22776@code{/sr/git/@var{repo}.git}. Les requêtes dont les chemins d'URI ne
22777commencent pas par ce préfixe ne seront pas passées à cette instance de Git.
22778
22779@item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
22780Le socket sur lequel le démon @code{fcgiwrap} écoute. @xref{Services web}.
22781@end table
22782@end deftp
22783
22784Il n'y a pas de @code{git-http-service-type}, actuellement ; à la place vous
22785pouvez créer un @code{nginx-location-configuration} à partir d'un
22786@code{git-http-configuration} puis ajouter cela au serveur web.
22787
22788@deffn {Procédure Scheme} git-http-nginx-location-configuration @
22789 [config=(git-http-configuration)]
22790Calcule un @code{nginx-location-configuration} qui correspond à la
22791configuration http Git donnée. Voici un exemple de définition de service
22792nginx qui sert le répertoire @file{/srv/git} par défaut en HTTPS :
22793
22794@example
22795(service nginx-service-type
22796 (nginx-configuration
22797 (server-blocks
22798 (list
22799 (nginx-server-configuration
22800 (listen '("443 ssl"))
22801 (server-name "git.my-host.org")
22802 (ssl-certificate
22803 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
22804 (ssl-certificate-key
22805 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
22806 (locations
22807 (list
22808 (git-http-nginx-location-configuration
22809 (git-http-configuration (uri-path "/"))))))))))
22810@end example
22811
22812Ce exemple suppose que vous utilisez Let's Encrypt pour récupérer votre
22813certificat TLS. @xref{Services de certificats}. Le service @code{certbot} par
22814défaut redirigera tout le trafic HTTP de @code{git.my-host.org} en HTTPS.
22815Vous devrez aussi ajouter un mandataire @code{fcgiwrap} à vos services
22816systèmes. @xref{Services web}.
22817@end deffn
22818
22819@subsubheading Service Cgit
22820
22821@cindex service cgit
22822@cindex git, interface web
22823@uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
22824dépôts Git écrite en C.
22825
22826L'exemple suivant configurera le service avec les valeurs par défaut. Par
22827défaut, on peut accéder à Cgit sur le port (@code{http://localhost:80}).
22828
22829@example
22830(service cgit-service-type)
22831@end example
22832
22833Le type @code{file-object} désigne soit un objet simili-fichier
22834(@pxref{G-Expressions, file-like objects}), soit une chaîne.
22835
22836@c %start of fragment
22837
22838Les champs de @code{cgit-configuration} disponibles sont :
22839
22840@deftypevr {paramètre de @code{cgit-configuration}} package package
22841Le paquet cgit.
22842
22843@end deftypevr
22844
22845@deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
22846Configuration Nginx.
22847
22848@end deftypevr
22849
22850@deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
22851Spécifie une commande qui doit être invoquée pour formater le contenu des
22852pages « à propos » (au plus haut niveau et pour chaque dépôt).
22853
22854La valeur par défaut est @samp{""}.
22855
22856@end deftypevr
22857
22858@deftypevr {paramètre de @code{cgit-configuration}} string agefile
22859Spécifie un chemin, relativement à chaque dépôt, qui peut être utilisé pour
22860spécifier la date et l'heure du plus récent commit du dépôt.
22861
22862La valeur par défaut est @samp{""}.
22863
22864@end deftypevr
22865
22866@deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
22867Spécifie une commande qui sera invoquée pour authentifier l'accès au dépôt.
22868
22869La valeur par défaut est @samp{""}.
22870
22871@end deftypevr
22872
22873@deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
22874Drapeau qui, lorsqu'il vaut @samp{age}, active le trie par date dans la
22875liste des branches, et le trie par nom lorsqu'il vaut @samp{name}.
22876
22877La valeur par défaut est @samp{"name"}.
22878
22879@end deftypevr
22880
22881@deftypevr {paramètre de @code{cgit-configuration}} string cache-root
22882Chemin utilisé pour stocker les entrées de cache de cgit.
22883
22884La valeur par défaut est @samp{"/var/cache/cgit"}.
22885
22886@end deftypevr
22887
22888@deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
22889Nombre qui spécifie le temps de vie, en minute, des versions en cache des
22890pages du dépôt accédées par leur SHA-1.
22891
22892La valeur par défaut est @samp{-1}.
22893
22894@end deftypevr
22895
22896@deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
22897Nombre qui spécifie le temps de vie, en minutes, des version en cache des
22898pages du dépôt accédées sans leur SHA1.
22899
22900La valeur par défaut est @samp{5}.
22901
22902@end deftypevr
22903
22904@deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
22905Nombre qui spécifie le temps de vie, en minute, des version en cache de la
22906page de résumé du dépôt.
22907
22908La valeur par défaut est @samp{5}.
22909
22910@end deftypevr
22911
22912@deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
22913Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
22914la page d'index du dépôt.
22915
22916La valeur par défaut est @samp{5}.
22917
22918@end deftypevr
22919
22920@deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
22921Nombre qui spécifie le temps de vie, en minutes, de la version en cache du
22922résultat du scan d'un chemin dans le dépôt Git.
22923
22924La valeur par défaut est @samp{15}.
22925
22926@end deftypevr
22927
22928@deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
22929Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
22930la page « à propos » du dépôt.
22931
22932La valeur par défaut est @samp{15}.
22933
22934@end deftypevr
22935
22936@deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
22937Nombre qui spécifie le temps de vie, en minutes, de la version en cache des
22938archives.
22939
22940La valeur par défaut est @samp{5}.
22941
22942@end deftypevr
22943
22944@deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
22945Le nombre maximum d'entrées dans le cache de cgit. Lorsque la valeur est
22946@samp{0}, le cache est désactivé.
22947
22948La valeur par défaut est @samp{0}.
22949
22950@end deftypevr
22951
22952@deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
22953Indique si le tri des éléments est sensible à la casse.
22954
22955La valeur par défaut est @samp{#t}.
22956
22957@end deftypevr
22958
22959@deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
22960Liste des préfixes communs qui, lorsqu'ils sont combinés à l'URL du dépôt,
22961génèrent des URL de clone valides pour le dépôt.
22962
22963La valeur par défaut est @samp{()}.
22964
22965@end deftypevr
22966
22967@deftypevr {paramètre de @code{cgit-configuration}} list clone-url
22968Liste des modèles @code{clone-url}
22969
22970La valeur par défaut est @samp{()}.
22971
22972@end deftypevr
22973
22974@deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
22975Commande qui sera invoquée pour formater les messages de commit.
22976
22977La valeur par défaut est @samp{""}.
22978
22979@end deftypevr
22980
22981@deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
22982Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
22983messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
22984
22985La valeur par défaut est @samp{"git log"}.
22986
22987@end deftypevr
22988
22989@deftypevr {paramètre de @code{cgit-configuration}} file-object css
22990URL qui spécifie le document css à inclure dans les pages cgit.
22991
22992La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
22993
22994@end deftypevr
22995
22996@deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
22997Spécifie une commande qui sera invoquée pour formater les noms et l'adresse
22998de courriel des commiteurs, des auteurs et des taggueurs, représentés à
22999plusieurs endroits dans l'interface cgit.
23000
23001La valeur par défaut est @samp{""}.
23002
23003@end deftypevr
23004
23005@deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
23006Drapeau qui, s'il vaut @samp{#t}, fera générer un fragment HTML à cgit qu'il
23007sera possible d'inclure dans d'autres pages HTML.
23008
23009La valeur par défaut est @samp{#f}.
23010
23011@end deftypevr
23012
23013@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
23014Drapeau qui, lorsqu'il vaut @samp{#t}, fera afficher un historique en
23015ASCII-art à gauche des messages de commit dans la page de log du dépôt.
23016
23017La valeur par défaut est @samp{#f}.
23018
23019@end deftypevr
23020
23021@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
23022Drapeau qui, lorsqu'il vaut @samp{#t}, permet à tous les paramètres de
23023filtrage d'être modifiés dans des fichiers cgitrc spécifiques au dépôt.
23024
23025La valeur par défaut est @samp{#f}.
23026
23027@end deftypevr
23028
23029@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
23030Drapeau qui, s'il vaut @samp{#t}, permet aux utilisateurs de suivre un
23031fichier dans la vue « log ».
23032
23033La valeur par défaut est @samp{#f}.
23034
23035@end deftypevr
23036
23037@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
23038Si la valeur est @samp{#t}, cgit agira comme un point d'accès HTTP idiot
23039pour les clones Git.
23040
23041La valeur par défaut est @samp{#t}.
23042
23043@end deftypevr
23044
23045@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
23046Drapeau qui, s'il vaut @samp{#t}, fera générer des liens « résumé », «
23047commit » et « arborescence » supplémentaires poru chaque dépôt dans l'index
23048des dépôts.
23049
23050La valeur par défaut est @samp{#f}.
23051
23052@end deftypevr
23053
23054@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
23055Drapeau qui, s'il vaut @samp{#t}, fera afficher le propriétaire de chaque
23056dépôt dans l'index des dépôts.
23057
23058La valeur par défaut est @samp{#t}.
23059
23060@end deftypevr
23061
23062@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
23063Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de fichiers
23064modifiés pour chaque commit sur la page de log du dépôt.
23065
23066La valeur par défaut est @samp{#f}.
23067
23068@end deftypevr
23069
23070@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
23071Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de lignes
23072ajoutées et enlevées pour chaque commit de la page de log du dépôt.
23073
23074La valeur par défaut est @samp{#f}.
23075
23076@end deftypevr
23077
23078@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
23079Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
23080les vues du résumé et des références.
23081
23082La valeur par défaut est @samp{#f}.
23083
23084@end deftypevr
23085
23086@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
23087Drapeau qui, s'il vaut @samp{1}, fera utiliser à cgit le sujet du commit
23088parent comme texte du lien lors de la génération des liens vers les commits
23089parents dans la vue des commits.
23090
23091La valeur par défaut est @samp{#f}.
23092
23093@end deftypevr
23094
23095@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
23096Drapeau qui, s'il vaut @samp{#t}, fera utiliser à cgit l esujet du commit
23097parent comme texte du lien lors de la génération des liens vers le commit
23098parent dans la vue des commits.
23099
23100La valeur par défaut est @samp{#f}.
23101
23102@end deftypevr
23103
23104@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
23105Drapeau qui, s'il vaut @samp{#t}, fera générer à cgit des liens vers le
23106numéro de ligne pour les blobs en texte brut affichés dans la vue de
23107l'arborescence.
23108
23109La valeur par défaut est @samp{#t}.
23110
23111@end deftypevr
23112
23113@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
23114Drapeau qui, s'il vaut @samp{#t}, permettra à cgit d'utiliser la
23115configuration Git pour spécifier des paramètres spécifiques au dépôt.
23116
23117La valeur par défaut est @samp{#f}.
23118
23119@end deftypevr
23120
23121@deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
23122URL utilisée comme lien vers un icône pour cgit.
23123
23124La valeur par défaut est @samp{"/favicon.ico"}.
23125
23126@end deftypevr
23127
23128@deftypevr {paramètre de @code{cgit-configuration}} string footer
23129Le contenu du fichier spécifié avec cette option sera inclus directement au
23130bas de toutes les pages (c.-à-d.@: qu'il remplace le message « généré par
23131…@: » générique).
23132
23133La valeur par défaut est @samp{""}.
23134
23135@end deftypevr
23136
23137@deftypevr {paramètre de @code{cgit-configuration}} string head-include
23138Le contenu du fichier spécifié dans cette option sera inclus directement
23139dans la section HEAD HTML de toutes les pages.
23140
23141La valeur par défaut est @samp{""}.
23142
23143@end deftypevr
23144
23145@deftypevr {paramètre de @code{cgit-configuration}} string header
23146Le contenu du fichier spécifié avec cette option sera inclus directement au
23147début de toutes les pages.
23148
23149La valeur par défaut est @samp{""}.
23150
23151@end deftypevr
23152
23153@deftypevr {paramètre de @code{cgit-configuration}} file-object include
23154Nom d'un fichier de configuration à inclure avant que le reste du fichier de
23155configuration actuel ne soit analysé.
23156
23157La valeur par défaut est @samp{""}.
23158
23159@end deftypevr
23160
23161@deftypevr {paramètre de @code{cgit-configuration}} string index-header
23162Le contenu du fichier spécifié avec cette option sera inclus directement au
23163dessus de l'index des dépôts.
23164
23165La valeur par défaut est @samp{""}.
23166
23167@end deftypevr
23168
23169@deftypevr {paramètre de @code{cgit-configuration}} string index-info
23170Le contenu du fichier spécifié avec cette option sera inclus directement en
23171dessous de l'en-tête sur la page d'index du dépôt.
23172
23173La valeur par défaut est @samp{""}.
23174
23175@end deftypevr
23176
23177@deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
23178Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit l'heure et la date de
23179commit et de tag dans le fuseau horaire du serveur.
23180
23181La valeur par défaut est @samp{#f}.
23182
23183@end deftypevr
23184
23185@deftypevr {paramètre de @code{cgit-configuration}} file-object logo
23186URL qui spécifie la source d'une image utilisé comme logo sur toutes les
23187pages cgit.
23188
23189La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
23190
23191@end deftypevr
23192
23193@deftypevr {paramètre de @code{cgit-configuration}} string logo-link
23194URL chargée lors du clic sur l'image du logo de cgit.
23195
23196La valeur par défaut est @samp{""}.
23197
23198@end deftypevr
23199
23200@deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
23201Commande qui sera invoquée pour formater la colonne propriétaire sur la page
23202principale.
23203
23204La valeur par défaut est @samp{""}.
23205
23206@end deftypevr
23207
23208@deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
23209Nombre d'éléments à afficher dans la vue des flux atom.
23210
23211La valeur par défaut est @samp{10}.
23212
23213@end deftypevr
23214
23215@deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
23216Nombre d'éléments à lister par page dans la vue « log ».
23217
23218La valeur par défaut est @samp{50}.
23219
23220@end deftypevr
23221
23222@deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
23223Nombre caractères de messages de commit à afficher dans la vue « log ».
23224
23225La valeur par défaut est @samp{80}.
23226
23227@end deftypevr
23228
23229@deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
23230Spécifie le nombre d'éléments à lister par page sur la page de l'index des
23231dépôts.
23232
23233La valeur par défaut est @samp{50}.
23234
23235@end deftypevr
23236
23237@deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
23238Spécifie le nombre maximum de caractères de description de dépôts à afficher
23239sur la page d'index des dépôts.
23240
23241La valeur par défaut est @samp{80}.
23242
23243@end deftypevr
23244
23245@deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
23246Spécifie la taille maximale d'un blob pour lequel afficher du HTML en
23247kilo-octets.
23248
23249La valeur par défaut est @samp{0}.
23250
23251@end deftypevr
23252
23253@deftypevr {paramètre de @code{cgit-configuration}} string max-stats
23254Période de statistiques maximale. Les valeurs valides sont @samp{week},
23255@samp{month}, @samp{quarter} et @samp{year}.
23256
23257La valeur par défaut est @samp{""}.
23258
23259@end deftypevr
23260
23261@deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
23262Type mime pour l'extension de fichier spécifiée.
23263
23264La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
23265"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
23266(svg "image/svg+xml"))}.
23267
23268@end deftypevr
23269
23270@deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
23271Spécifie le fichier à utiliser pour la recherche automatique de type mime.
23272
23273La valeur par défaut est @samp{""}.
23274
23275@end deftypevr
23276
23277@deftypevr {paramètre de @code{cgit-configuration}} string module-link
23278Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
23279lorsqu'un sous-module est affiché dans la liste du répertoire.
23280
23281La valeur par défaut est @samp{""}.
23282
23283@end deftypevr
23284
23285@deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
23286Si la valeur est @samp{#t}, le cache est désactivé.
23287
23288La valeur par défaut est @samp{#f}.
23289
23290@end deftypevr
23291
23292@deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
23293Si la valeur est @samp{#t}, l'affichage des adresse de courriel des auteurs
23294sera désactivé.
23295
23296La valeur par défaut est @samp{#f}.
23297
23298@end deftypevr
23299
23300@deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
23301Drapeau qui, s'il vaut @samp{#t}, fera omettre à cgit l'en-tête standard sur
23302toutes les pages.
23303
23304La valeur par défaut est @samp{#f}.
23305
23306@end deftypevr
23307
23308@deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
23309UNe liste de sous-répertoires dans @code{repository-directory}, relativement
23310à lui, qui devrait être chargé comme des dépôts Git. Une liste vide
23311signifie que tous les sous-répertoires seront chargés.
23312
23313La valeur par défaut est @samp{()}.
23314
23315@end deftypevr
23316
23317@deftypevr {paramètre de @code{cgit-configuration}} file-object readme
23318Texte utilisé comme valeur par défaut pour @code{cgit-repo-readme}.
23319
23320La valeur par défaut est @samp{""}.
23321
23322@end deftypevr
23323
23324@deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
23325Si la valeur est @code{#t} et que @code{repository-directory} est activé, si
23326un dépôt avec un suffixe de @code{.git} est trouvé, ce suffixe sera supprimé
23327de l'URL et du nom.
23328
23329La valeur par défaut est @samp{#f}.
23330
23331@end deftypevr
23332
23333@deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
23334Nombre maximum de fichiers à considérer lors de la détection des renommages.
23335
23336La valeur par défaut est @samp{-1}.
23337
23338@end deftypevr
23339
23340@deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
23341La manière dont les dépôt de chaque section sont rangés.
23342
23343La valeur par défaut est @samp{""}.
23344
23345@end deftypevr
23346
23347@deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
23348Texte utilisé comme contenu du méta-attribut @code{robots}.
23349
23350La valeur par défaut est @samp{("noindex" "nofollow")}.
23351
23352@end deftypevr
23353
23354@deftypevr {paramètre de @code{cgit-configuration}} string root-desc
23355Texte affiché en dessous de l'en-tête de la page d'index des dépôts.
23356
23357La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
23358
23359@end deftypevr
23360
23361@deftypevr {paramètre de @code{cgit-configuration}} string root-readme
23362Le contenu du fichier spécifié avec cette option sera inclus directement en
23363dessous du lien « à propos » sur la page d'index du dépôt.
23364
23365La valeur par défaut est @samp{""}.
23366
23367@end deftypevr
23368
23369@deftypevr {paramètre de @code{cgit-configuration}} string root-title
23370Texte affiché sur la page d'index des dépôts.
23371
23372La valeur par défaut est @samp{""}.
23373
23374@end deftypevr
23375
23376@deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
23377Si la valeur est @samp{#t} et que repository-directory est activé,
23378repository-directory recherchera de manière récursive dans les répertoires
23379dont le nom commence par un point. Sinon, repository-directory restera hors
23380de ces répertoires, considérés comme « cachés ». Remarquez que cela ne
23381s'applique pas au répertoire « .git » dans le dépôts.
23382
23383La valeur par défaut est @samp{#f}.
23384
23385@end deftypevr
23386
23387@deftypevr {paramètre de @code{cgit-configuration}} list snapshots
23388Texte qui spécifie l'ensemble des formats d'archives par défaut pour
23389lesquelles cgit générera un lien.
23390
23391La valeur par défaut est @samp{()}.
23392
23393@end deftypevr
23394
23395@deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
23396Nom du répertoire à scanner pour trouver les dépôts (représente
23397@code{scan-path}).
23398
23399La valeur par défaut est @samp{"/srv/git"}.
23400
23401@end deftypevr
23402
23403@deftypevr {paramètre de @code{cgit-configuration}} string section
23404Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
23405point hériterons du nom de section actuel.
23406
23407La valeur par défaut est @samp{""}.
23408
23409@end deftypevr
23410
23411@deftypevr {paramètre de @code{cgit-configuration}} string section-sort
23412Drapeau qui, s'il vaut @samp{1}, triera les sections dans la liste des
23413dépôts par nom.
23414
23415La valeur par défaut est @samp{""}.
23416
23417@end deftypevr
23418
23419@deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
23420Un nombre qui, s'il est défini avant repository-directory, spécifier combien
23421d'éléments de chemin de chaque chemin de dépôt utiliser comme nom de section
23422par défaut.
23423
23424La valeur par défaut est @samp{0}.
23425
23426@end deftypevr
23427
23428@deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
23429Si la valeur est @samp{#t}, afficher des diffs côte à côte au lieu des
23430unidiffs par défaut.
23431
23432La valeur par défaut est @samp{#f}.
23433
23434@end deftypevr
23435
23436@deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
23437Spécifie une commande qui sera invoquée pour formater les blobs en texte
23438brut dans la vue de l'arborescence.
23439
23440La valeur par défaut est @samp{""}.
23441
23442@end deftypevr
23443
23444@deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
23445Spécifie le nombre de branches à afficher dans la vue de résumé du dépôt.
23446
23447La valeur par défaut est @samp{10}.
23448
23449@end deftypevr
23450
23451@deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
23452Spécifie le nombre d'élément du journal à afficher dans la vue résumé du
23453dépôt.
23454
23455La valeur par défaut est @samp{10}.
23456
23457@end deftypevr
23458
23459@deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
23460Spécifie le nombre de tags à afficher dans la vue résumé du dépôt.
23461
23462La valeur par défaut est @samp{10}.
23463
23464@end deftypevr
23465
23466@deftypevr {paramètre de @code{cgit-configuration}} string strict-export
23467Nom de fichier qui, s'il est spécifié, doit être présent dans le dépôt pour
23468que cgit accorde l'accès à ce dépôt.
23469
23470La valeur par défaut est @samp{""}.
23471
23472@end deftypevr
23473
23474@deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
23475URL qui, si elle est spécifiée, sera utilisée comme racine pour tous les
23476liens cgit.
23477
23478La valeur par défaut est @samp{"/"}.
23479
23480@end deftypevr
23481
23482@deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
23483Une liste d'enregistrements @dfn{cgit-repo} à utiliser avec config.
23484
23485La valeur par défaut est @samp{()}.
23486
23487Les champs de @code{repository-cgit-configuration} disponibles sont :
23488
23489@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
23490Un masque de formats d'archives pour ce dépôt pour lesquelles cgit générera
23491un lien, restreint par le paramètre @code{snapshots} global.
23492
23493La valeur par défaut est @samp{()}.
23494
23495@end deftypevr
23496
23497@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
23498Modifie le @code{source-filter} par défaut.
23499
23500La valeur par défaut est @samp{""}.
23501
23502@end deftypevr
23503
23504@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
23505URL relative utilisée pour accéder au dépôt.
23506
23507La valeur par défaut est @samp{""}.
23508
23509@end deftypevr
23510
23511@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
23512Modifie le paramètre @code{about-filter} par défaut.
23513
23514La valeur par défaut est @samp{""}.
23515
23516@end deftypevr
23517
23518@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
23519Drapeau qui, s'il vaut @samp{age}, active le tri par date dans la liste des
23520branches, et lorsqu'il vaut @samp{name}, le tri par nom.
23521
23522La valeur par défaut est @samp{""}.
23523
23524@end deftypevr
23525
23526@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
23527Un liste d'URL qui peuvent être utilisées pour cloner ce dépôt.
23528
23529La valeur par défaut est @samp{()}.
23530
23531@end deftypevr
23532
23533@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
23534Modifie le paramètre @code{commit-filter} par défaut.
23535
23536La valeur par défaut est @samp{""}.
23537
23538@end deftypevr
23539
23540@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
23541Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
23542messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
23543
23544La valeur par défaut est @samp{""}.
23545
23546@end deftypevr
23547
23548@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
23549Le nom de la branche par défaut de ce dépôt. Si cette branche n'existe pas
23550dans le dépôt, le premier nom de branche (trié) sera utilisé par défaut.
23551Par défaut la branche pointée par HEAD, ou « master » s'il n'y a pas de HEAD
23552convenable.
23553
23554La valeur par défaut est @samp{""}.
23555
23556@end deftypevr
23557
23558@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
23559La valeur à afficher comme description du dépôt.
23560
23561La valeur par défaut est @samp{""}.
23562
23563@end deftypevr
23564
23565@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
23566La valeur à afficher comme page d'accueil du dépôt.
23567
23568La valeur par défaut est @samp{""}.
23569
23570@end deftypevr
23571
23572@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
23573Modifie le paramètre @code{email-filter} par défaut.
23574
23575La valeur par défaut est @samp{""}.
23576
23577@end deftypevr
23578
23579@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
23580Un drapeau qui peut être utilisé pour désactiver le paramètre
23581@code{enable-commit-graph?} global.
23582
23583La valeur par défaut est @samp{disabled}.
23584
23585@end deftypevr
23586
23587@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
23588Un drapeau qui peut être utilisé pour désactiver le paramètre
23589@code{enable-log-filecount?} global.
23590
23591La valeur par défaut est @samp{disabled}.
23592
23593@end deftypevr
23594
23595@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
23596Un drapeau qui peut être utilisé pour désactiver le paramètre
23597@code{enable-log-linecount?} global.
23598
23599La valeur par défaut est @samp{disabled}.
23600
23601@end deftypevr
23602
23603@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
23604Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
23605les vues du résumé et des références.
23606
23607La valeur par défaut est @samp{disabled}.
23608
23609@end deftypevr
23610
23611@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
23612Un drapeau qui peut être utilisé pour modifier le paramètre
23613@code{enable-subject-links?} global.
23614
23615La valeur par défaut est @samp{disabled}.
23616
23617@end deftypevr
23618
23619@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
23620Un drapeau qui peut être utilisé pour modifier le paramètre
23621@code{enable-html-serving?} global.
23622
23623La valeur par défaut est @samp{disabled}.
23624
23625@end deftypevr
23626
23627@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
23628Drapeau qui, s'il vaut @code{#t}, cache le dépôt de l'index des dépôts.
23629
23630La valeur par défaut est @samp{#f}.
23631
23632@end deftypevr
23633
23634@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
23635Drapeau qui, s'il vaut @code{#t}, ignore le dépôt.
23636
23637La valeur par défaut est @samp{#f}.
23638
23639@end deftypevr
23640
23641@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
23642URL qui spécifie la source d'une image qui sera utilisée comme logo sur les
23643pages de ce dépôt.
23644
23645La valeur par défaut est @samp{""}.
23646
23647@end deftypevr
23648
23649@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
23650URL chargée lors du clic sur l'image du logo de cgit.
23651
23652La valeur par défaut est @samp{""}.
23653
23654@end deftypevr
23655
23656@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
23657Modifie le paramètre @code{owner-filter} par défaut.
23658
23659La valeur par défaut est @samp{""}.
23660
23661@end deftypevr
23662
23663@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
23664Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
23665lorsqu'un sous-module est affiché dans une liste de fichiers. Les arguments
23666pour la chaîne de formatage sont le chemin et le SHA1 du commit du
23667sous-module.
23668
23669La valeur par défaut est @samp{""}.
23670
23671@end deftypevr
23672
23673@deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
23674Texte qui sera utilisé comme chaîne de formatage lorsqu'un sous-module avec
23675un chemin spécifié sera affiché dans une liste de fichiers.
23676
23677La valeur par défaut est @samp{()}.
23678
23679@end deftypevr
23680
23681@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
23682Modifie la période de statistique maximale par défaut.
23683
23684La valeur par défaut est @samp{""}.
23685
23686@end deftypevr
23687
23688@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
23689La valeur à afficher comme nom de dépôt.
23690
23691La valeur par défaut est @samp{""}.
23692
23693@end deftypevr
23694
23695@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
23696Une valeur utilisée pour identifier le propriétaire du dépôt.
23697
23698La valeur par défaut est @samp{""}.
23699
23700@end deftypevr
23701
23702@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
23703Un chemin absolu vers le répertoire du dépôt.
23704
23705La valeur par défaut est @samp{""}.
23706
23707@end deftypevr
23708
23709@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
23710Un chemin (relatif au dépôt) qui spécifie un fichier à inclure directement
23711comme page « À propos » pour ce dépôt.
23712
23713La valeur par défaut est @samp{""}.
23714
23715@end deftypevr
23716
23717@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
23718Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
23719point hériterons du nom de section actuel.
23720
23721La valeur par défaut est @samp{""}.
23722
23723@end deftypevr
23724
23725@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
23726Options supplémentaires ajoutées à la fin du fichier cgitrc.
23727
23728La valeur par défaut est @samp{()}.
23729
23730@end deftypevr
23731
23732@end deftypevr
23733
23734@deftypevr {paramètre de @code{cgit-configuration}} list extra-options
23735Options supplémentaires ajoutées à la fin du fichier cgitrc.
23736
23737La valeur par défaut est @samp{()}.
23738
23739@end deftypevr
23740
23741
23742@c %end of fragment
23743
23744Cependant, vous pourriez vouloir simplement récupérer un @code{cgitrc} et
23745l'utiliser. Dans ce cas, vous pouvez passer un
23746@code{opaque-cgit-configuration} comme enregistrement à
23747@code{cgit-service-type}. Comme son nom l'indique, une configuration opaque
23748n'a pas de capacité de réflexion facile.
23749
23750Les champs de @code{opaque-cgit-configuration} disponibles sont :
23751
23752@deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
23753Le paquet cgit.
23754@end deftypevr
23755
23756@deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
23757Le contenu de @code{cgitrc}, en tant que chaîne de caractère.
23758@end deftypevr
23759
23760Par exemple, si votre @code{cgitrc} est juste la chaîne vide, vous pouvez
23761instancier un service cgit ainsi :
23762
23763@example
23764(service cgit-service-type
23765 (opaque-cgit-configuration
23766 (cgitrc "")))
23767@end example
23768
23769@subsubheading Service Gitolite
23770
23771@cindex service Gitolite
23772@cindex Git, hébergement
23773@uref{http://gitolite.com/gitolite/, Gitolite} est un outil pour héberger
23774des dépôts Git sur un serveur central.
23775
23776Gitolite peut gérer plusieurs dépôts et utilisateurs et supporte une
23777configuration flexible des permissions pour les utilisateurs sur ces dépôts.
23778
23779L'exemple suivant configure Gitolite en utilisant l'utilisateur @code{git}
23780par défaut et la clef SSH fournie.
23781
23782@example
23783(service gitolite-service-type
23784 (gitolite-configuration
23785 (admin-pubkey (plain-file
23786 "yourname.pub"
23787 "ssh-rsa AAAA... guix@@example.com"))))
23788@end example
23789
23790Gitolite est configuré via un dépôt d'administration spécial que vous pouvez
23791cloner. Par exemple, si vous hébergez Gitolite sur @code{example.com}, vous
23792pouvez lancer la commande suivante pour cloner le dépôt d'administration.
23793
23794@example
23795git clone git@@example.com:gitolite-admin
23796@end example
23797
23798Lorsque le service Gitolite est activé, la clef @code{admin-pubkey} fournie
23799sera insérée dans le répertoire @file{keydir} du dépôt gitolite-admin. Si
23800cela change le dépôt, un commit sera effectué avec le message « gitolite
23801setup by GNU Guix ».
23802
23803@deftp {Type de données} gitolite-configuration
23804Type de données représentant la configuration de
23805@code{gitolite-service-type}.
23806
23807@table @asis
23808@item @code{package} (par défaut : @var{gitolite})
23809Le paquet Gitolite à utiliser.
23810
23811@item @code{user} (par défaut : @var{git})
23812Utilisateur pour utiliser Gitolite. Cela sera l'utilisateur à utiliser pour
23813accéder à Gitolite par SSH.
23814
23815@item @code{group} (par défaut : @var{git})
23816Groupe à utiliser pour Gitolite.
23817
23818@item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
23819Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
23820
23821@item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
23822Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
23823représentant la configuration de Gitolite.
23824
23825@item @code{admin-pubkey} (par défaut : @var{#f})
23826Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
23827utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
23828@file{keydir} dans le dépôt gitolite-admin.
23829
23830Pour spécifier la clef SSH comme chaîne de caractère, utilisez la fonction
23831@code{plain-file}.
23832
23833@example
23834(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
23835@end example
23836
23837@end table
23838@end deftp
23839
23840@deftp {Type de données} gitolite-rc-file
23841Type de données représentant le fichier RC de Gitolite.
23842
23843@table @asis
23844@item @code{umask} (par défaut : @code{#o0077})
23845Cela contrôle les permissions que Gitolite propose sur les dépôts et leur
23846contenu.
23847
23848Une valeur comme @code{#o0027} donnera accès en lecture au groupe utilisé
23849par Gitolite (par défaut : @code{git}). Cel aest nécessaire lorsque vous
23850utilise Gitolite avec un logiciel comme cgit ou gitweb.
23851
23852@item @code{git-config-keys} (par défaut : @code{""})
23853Gitolite vous permet de modifier les configurations git avec le mot-clef «
23854config ». Ce paramètre vous permet de contrôler les clefs de configuration
23855acceptables.
23856
23857@item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
23858Indique les noms des rôles qui peuvent être utilisés par les utilisateurs
23859avec la commande perms.
23860
23861@item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
23862Ce paramètre contrôle les commandes et les fonctionnalités à activer dans
23863Gitolite.
23864
23865@end table
23866@end deftp
23867
23868
23869@node Services de jeu
23870@subsection Services de jeu
23871
23872@subsubheading Le service de la Bataille pour Wesnoth
23873@cindex wesnothd
23874@uref{https://wesnoth.org, La Bataille pour Wesnoth} est un jeu de stratégie
23875en tour par tour dans un univers fantastique, avec plusieurs campagnes solo
23876et des parties multijoueurs (en réseau et en local).
23877
23878@defvar {Variable Scheme} wesnothd-service-type
23879Type de service pour le service wesnothd. Sa valeur doit être un objet
23880@code{wesnothd-configuration}. Pour lancer wesnothd avec la configuration
23881par défaut, instanciez-le ainsi :
23882
23883@example
23884(service wesnothd-service-type)
23885@end example
23886@end defvar
23887
23888@deftp {Type de données} wesnothd-configuration
23889Type de donées représentant la configuration de @command{wesnothd}.
23890
23891@table @asis
23892@item @code{package} (par défaut : @code{wesnoth-server})
23893Le paquet de serveur de wesnoth à utiliser.
23894
23895@item @code{port} (par défaut : @code{15000})
23896Le pour sur lequel lier le serveur.
23897@end table
23898@end deftp
23899
23900@node Services divers
23901@subsection Services divers
23902
23903@cindex empreinte digitale
23904@subsubheading Service d'empreintes digitales
23905
23906The @code{(gnu services authentication)} module provides a DBus service to
23907read and identify fingerprints via a fingerprint sensor.
23908
23909@defvr {Variable Scheme} fprintd-service-type
23910Le type de service pour @command{fprintd}, qui fournit des capacités de
23911lecture d'empreinte.
23912
23913@example
23914(service fprintd-service-type)
23915@end example
23916@end defvr
23917
23918@cindex sysctl
23919@subsubheading Service de contrôle du système
23920
23921Le module @code{(gnu services sysctl)} fournit un service pour configurer
23922les paramètres du noyau au démarrage.
23923
23924@defvr {Variable Scheme} sysctl-service-type
23925Le type de service pour @command{sysctl}, qui modifie les paramètres du
23926noyau dans @file{/proc/sys/}. Pour activer le transfert d'IPv4, vous pouvez
23927l'instancier ainsi :
23928
23929@example
23930(service sysctl-service-type
23931 (sysctl-configuration
23932 (settings '(("net.ipv4.ip_forward" . "1")))))
23933@end example
23934@end defvr
23935
23936@deftp {Type de données} sysctl-configuration
23937Le type de données représentant la configuration de @command{sysctl}.
23938
23939@table @asis
23940@item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
23941L'exécutable @command{sysctl} à utiliser.
23942
23943@item @code{settings} (par défaut : @code{'()})
23944Une liste d'association spécifiant les paramètres du noyau et leur valeur.
23945@end table
23946@end deftp
23947
23948@cindex pcscd
23949@subsubheading Service du démon PC/SC Smart Card
23950
23951Le module @code{(gnu services security-token)} fournit le service suivant
23952qui lance @command{pcscd}, le démon PC/SC Smart Card. @command{pcscd} est
23953le démon pour pcsc-lite et MuscleCard. C'est un gestionnaire de ressource
23954qui coordonne les communications avec les lecteurs de smart cards, les smart
23955cards et les jetons cryptographiques connectés au système.
23956
23957@defvr {Variable Scheme} pcscd-service-type
23958Le type de service pour le service @command{pcscd}. Sa valeur doit être un
23959objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
23960par défaut, instantiez-le avec :
23961
23962@example
23963(service pcscd-service-type)
23964@end example
23965@end defvr
23966
23967@deftp {Type de données} pcscd-configuration
23968Type de données représentant la configuration de @command{pcscd}.
23969
23970@table @asis
23971@item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
23972Le paquet pcsc-lite qui fournit pcscd.
23973@item @code{usb-drivers} (par défaut : @code{(list ccid)})
23974Liste des paquets qui fournissent des pilotes USB à pcscd. Les pilotes
23975doivent être dans @file{pcsc/drivers} dans le répertoire du dépôt du paquet.
23976@end table
23977@end deftp
23978
23979@cindex lirc
23980@subsubheading Service Lirc
23981
23982Le module @code{(gnu services lirc)} fournit le service suivant.
23983
23984@deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
23985 [#:device #f] [#:driver #f] [#:config-file #f] @
23986[#:extra-options '()]
23987Renvoie un service qui lance @url{http://www.lirc.org,LIRC}, un démon qui
23988décode les signaux infrarouges des télécommandes.
23989
23990Éventuellement, @var{device}, @var{driver} et @var{config-file} (le nom du
23991fichier de configuration) peuvent être spécifiés. Voir le manuel de
23992@command{lircd} pour plus de détails.
23993
23994Enfin, @var{extra-options} est une liste d'options de la ligne de commande
23995supplémentaires à passer à @command{lircd}.
23996@end deffn
23997
23998@cindex spice
23999@subsubheading Service Spice
24000
24001Le module @code{(gnu services spice)} fournit le service suivant.
24002
24003@deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
24004Renvoie un service qui lance @url{http://www.spice-space.org,VDAGENT}, un
24005démon qui permet le partage du presse-papier avec une vm et de configurer la
24006résolution d'affichage du client lorsque la fenêtre de la console graphique
24007est redimensionnée.
24008@end deffn
24009
24010@cindex inputattach
24011@subsubheading Service inputattach
24012
24013@cindex entrée tablette, pour Xorg
24014@cindex écran tactile, pour Xorg
24015Le service @uref{https://linuxwacom.github.io/, inputattach} vous permet
24016d'utiliser des périphériques d'entrée comme les tablettes Wacom, les écrans
24017tactiles ou les joysticks avec le serveur d'affichage Xorg.
24018
24019@deffn {Variable Scheme} inputattach-service-type
24020Type d'un service qui lance @command{inputattach} sur un appareil et envie
24021les événements qu'il reçoit.
24022@end deffn
24023
24024@deftp {Type de données} inputattach-configuration
24025@table @asis
24026@item @code{device-type} (par défaut : @code{"wacom"})
24027Le type du périphérique à gérer. Lancez @command{inputattach --help}, du
24028paquet @code{inputattach}, pour voir la liste des types de périphériques
24029supportés.
24030
24031@item @code{device} (par défaut : @code{"/dev/ttyS0"})
24032Le fichier de périphérique pour s'y connecter.
24033
24034@item @code{log-file} (par défaut : @code{#f})
24035Si la valeur est vraie, cela doit être le nom d'un fichier où enregistrer
24036les messages.
24037@end table
24038@end deftp
24039
24040@subsection Services de dictionnaires
24041@cindex dictionnaire
24042Le module @code{(gnu services dict)} fournit le service suivant :
24043
24044@deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
24045Renvoie un service qui lance le démon @command{dicod}, une implémentation du
24046serveur DICT (@pxref{Dicod,,, dico, GNU Dico Manual}).
24047
24048L'argument @var{config} facultatif spécifie la configuration pour
24049@command{dicod}, qui devrait être un objet @code{<dicod-configuration>}, par
24050défaut il sert le dictionnaire international collaboratif de GNU pour
24051l'anglais.
24052
24053Vous pouvez ajouter @command{open localhost} à votre fichier @file{~/.dico}
24054pour faire de @code{localhost} le serveur par défaut du client
24055@command{dico} (@pxref{Initialization File,,, dico, GNU Dico Manual}).
24056@end deffn
24057
24058@deftp {Type de données} dicod-configuration
24059Type de données représentant la configuration de dicod.
24060
24061@table @asis
24062@item @code{dico} (par défaut : @var{dico})
24063Objet de paquet du serveur de dictionnaire GNU Dico.
24064
24065@item @code{interfaces} (par défaut : @var{'("localhost")})
24066C'est la liste des adresses IP et des ports et éventuellement des noms de
24067fichiers de socket sur lesquels écouter (@pxref{Server Settings,
24068@code{listen} directive,, dico, GNU Dico Manual}).
24069
24070@item @code{handlers} (par défaut : @var{'()})
24071Liste des objets @code{<dicod-handler>} qui définissent des gestionnaires
24072(des instances de modules).
24073
24074@item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
24075Liste d'objets @code{<dicod-database>} qui définissent des dictionnaires à
24076servir.
24077@end table
24078@end deftp
24079
24080@deftp {Type de données} dicod-handler
24081Type de données représentant un gestionnaire de dictionnaire (instance de
24082module).
24083
24084@table @asis
24085@item @code{name}
24086Nom du gestionnaire (instance de module).
24087
24088@item @code{module} (par défaut : @var{#f})
24089Nom du module dicod du gestionnaire (instance). Si la valeur est @code{#f},
24090le module a le même nom que le gestionnaire. (@pxref{Modules,,, dico, GNU
24091Dico Manual}).
24092
24093@item @code{options}
24094Liste de chaînes ou de gexps représentant les arguments pour le gestionnaire
24095de module
24096@end table
24097@end deftp
24098
24099@deftp {Type de données} dicod-database
24100Type de données représentant une base de données de dictionnaire.
24101
24102@table @asis
24103@item @code{name}
24104Nom de la base de données, qui sera utilisée dans les commande DICT.
24105
24106@item @code{handler}
24107Nom du gestionnaire dicod (instance de module) utilisé par cette base de
24108données (@pxref{Handlers,,, dico, GNU Dico Manual}).
24109
24110@item @code{complex?} (par défaut : @var{#f})
24111Indique si la configuration est pour une base de données complexe. La
24112configuration complexe a besoin d'un objet @code{<dicod-handler>}
24113correspondant, sinon inutile.
24114
24115@item @code{options}
24116Liste de chaînes ou de gexps représentant les arguments pour la base de
24117données (@pxref{Databases,,, dico, GNU Dico Manual}).
24118@end table
24119@end deftp
24120
24121@defvr {Variable Scheme} %dicod-database:gcide
24122Un objet @code{<dicod-database>} servant le dictionnaire international
24123collaboratif en anglais via le paquet @code{gcide}.
24124@end defvr
24125
24126Voici un exemple de configuration de @code{dicod-service}.
24127
24128@example
24129(dicod-service #:config
24130 (dicod-configuration
24131 (handlers (list (dicod-handler
24132 (name "wordnet")
24133 (module "dictorg")
24134 (options
24135 (list #~(string-append "dbdir=" #$wordnet))))))
24136 (databases (list (dicod-database
24137 (name "wordnet")
24138 (complex? #t)
24139 (handler "wordnet")
24140 (options '("database=wn")))
24141 %dicod-database:gcide))))
24142@end example
24143
24144@cindex Docker
24145@subsubheading Service Docker
24146
24147Le module @code{(gnu services docker)} fournit le service suivant.
24148
24149@defvr {Variable Scheme} docker-service-type
24150
24151C'est le type du service qui lance @url{http://www.docker.com,Docker}, un
24152démon qui peut exécuter des lots applicatifs (aussi appelés « conteneurs »)
24153dans des environnements isolés.
24154
24155@end defvr
24156
24157@deftp {Type de données} docker-configuration
24158Le type de données qui représente la configuration de Docker et Containerd.
24159
24160@table @asis
24161
24162@item @code{package} (par défaut : @code{docker})
24163Le paquet Docker à utiliser.
24164
24165@item @code{containerd} (par défaut : @var{containerd})
24166Le paquet Containerd à utiliser.
24167
24168@end table
24169@end deftp
24170
24171@node Programmes setuid
24172@section Programmes setuid
24173
24174@cindex programmes setuid
24175Certains programmes doivent être lancés avec les privilèges « root » même
24176lorsqu'ils sont lancés par un utilisateur non privilégié. Un exemple
24177notoire est le programme @command{passwd}, que les utilisateurs peuvent
24178appeler pour modifier leur mot de passe et qui doit accéder à
24179@file{/etc/passwd} et @file{/etc/shadow} — ce qui est normalement réservé à
24180root, pour des raisons de sécurité évidentes. Pour contourner cela, ces
24181exécutables sont @dfn{setuid-root}, ce qui signifie qu'ils seront toujours
24182lancés avec les privilèges root (@pxref{How Change Persona,,, libc, The GNU
24183C Library Reference Manual}, pour plus d'informations sur le mécanisme
24184setuid).
24185
24186Le dépôt lui-même ne @emph{peut pas} contenir de programmes setuid ; cela
24187serait un problème de sécurité puisque n'importe quel utilisateur du système
24188peut écrire une dérivation qui rempli le dépôt (@pxref{Le dépôt}). Donc,
24189un mécanisme différent est utilisé : au lieu de changer le bit setuid
24190directement sur les fichiers qui sont dans le dépôt, nous laissons à
24191l'administrateur système le soit de @emph{déclarer} les programmes qui
24192devraient être setuid root.
24193
24194Le champ @code{setuid-programs} d'une déclaration @code{operating-system}
24195contient une liste de G-expressions qui dénotent les noms des programmes à
24196rendre setuid-root (@pxref{Utiliser le système de configuration}). Par exemple,
24197le programme @command{passwd}, qui fait partie du paquet Shadow, peut être
24198désigné par cette G-expression (@pxref{G-Expressions}) :
24199
24200@example
24201#~(string-append #$shadow "/bin/passwd")
24202@end example
24203
24204Un ensemble de programmes par défaut est défini par la variable
24205@code{%setuid-programs} du module @code{(gnu system)}.
24206
24207@defvr {Variable Scheme} %setuid-programs
24208Une liste de G-expressions qui dénotent les programmes communément
24209setuid-root.
24210
24211La liste inclus des commandes comme @command{passwd}, @command{ping},
24212@command{su} et @command{sudo}.
24213@end defvr
24214
24215Sous le capot, les programmes setuid sont créés dans le répertoire
24216@file{/run/setuid-programs} au moment de l'activation du système. Les
24217fichiers dans ce répertoire se réfèrent aux « vrais » binaires, qui sont
24218dans le dépot.
24219
24220@node Certificats X.509
24221@section Certificats X.509
24222
24223@cindex HTTPS, certificats
24224@cindex certificats X.509
24225@cindex TLS
24226Les serveurs web disponibles par HTTPS (c'est-à-dire HTTP sur le mécanisme
24227de la couche de transport sécurisée, TLS) envoient aux clients un
24228@dfn{certificat X.509} que les clients peuvent utiliser pour
24229@emph{authentifier} le serveur. Pour cela, les clients vérifient que le
24230certificat du serveur est signé par une @dfn{autorité de certification} (AC
24231ou CA). Mais pour vérifier la signature de la CA, les clients doivent
24232d'abord avoir récupéré le certificat de la CA.
24233
24234Les navigateurs web comme GNU@tie{}IceCat incluent leur propre liste de
24235certificats, pour qu'ils puissent vérifier les signatures des CA
24236directement.
24237
24238Cependant, la plupart des autres programmes qui peuvent parler HTTPS —
24239@command{wget}, @command{git}, @command{w3m}, etc — doivent savoir où
24240trouver les certificats des CA.
24241
24242@cindex @code{nss-certs}
24243Dans Guix, cela se fait en ajoutant un paquet qui fournit les certificats
24244dans le champ @code{packages} de la déclaration @code{operating-system}
24245(@pxref{Référence de système d'exploitation}). Guix inclut l'un de ces paquets,
24246@code{nss-certs}, qui est un ensemble de certificats de CA fourni par les
24247services de sécurité réseau de Mozilla (nss).
24248
24249Remarquez qu'il ne fait @emph{pas} partie de @var{%base-packages}, donc vous
24250devez explicitement l'ajouter. Le répertoire @file{/etc/ssl/certs}, là où
24251la plupart des applications et bibliothèques vont rechercher les certificats
24252par défaut, pointe vers les certificats installés globalement.
24253
24254Les utilisateurs non privilégiés, dont les utilisateurs de Guix sur une
24255distro externe, peuvent aussi installer leur propre paquet de certificats
24256dans leur profil. Un certain nombre de variables d'environnement doivent
24257être définies pour que les applications et les bibliothèques puissent les
24258trouver. En particulier, la bibliothèque OpenSSL honore les variables
24259@code{SSL_CERT_DIR} et @code{SSL_CERT_FILE}. Certaines applications
24260ajoutent leurs propres variables, par exemple le système de contrôle de
24261version Git honore le lot de certificats pointé par la variable
24262d'environnement @code{GIT_SSL_CAINFO}. Ainsi, vous lanceriez quelque chose
24263comme ceci :
24264
24265@example
24266$ guix package -i nss-certs
24267$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
24268$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
24269$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
24270@end example
24271
24272Un autre exemple serait R, qui requière que la variable d'environnement
24273@code{CURL_CA_BUNDLE} pointe sur le lot de certificats, donc vous lanceriez
24274quelque chose comme ceci :
24275
24276@example
24277$ guix package -i nss-certs
24278$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
24279@end example
24280
24281Pour d'autres applications vous pourriez avoir besoin de chercher la
24282variable d'environnement requise dans leur documentation.
24283
24284
24285@node Name Service Switch
24286@section Name Service Switch
24287
24288@cindex name service switch
24289@cindex NSS
24290Le module @code{(gnu system nss)} fournit des liaisons pour le fichier de
24291configuration du @dfn{name service switch} ou @dfn{NSS} de la libc
24292(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
24293Manual}). En résumé, NSS est un mécanisme qui permet à la libc d'être
24294étendue avec de nouvelles méthodes de résolution de « noms » dans les bases
24295de données du système, comme les noms d'hôtes, les noms des services, les
24296comptes utilisateurs et bien plus (@pxref{Name Service Switch, System
24297Databases and Name Service Switch,, libc, The GNU C Library Reference
24298Manual}).
24299
24300La configuration de NSS spécifie, pour chaque base de données du système,
24301quelle méthode de résolution utiliser, et comment les diverses méthodes sont
24302enchaînées — par exemple, sous certaines circonstances, NSS devrait essayer
24303la méthode suivante de la liste. La configuration de NSS est donnée dans le
24304champ @code{name-service-switch} de la déclaration @code{operating-system}
24305(@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
24306
24307@cindex nss-mdns
24308@cindex .local, résolution de nom d'hôte
24309Par exemple, la déclation ci-dessous configure NSS pour utiliser le
24310@uref{http://0pointer.de/lennart/projects/nss-mdns/, moteur
24311@code{nss-mdns}}, qui supporte la résolution de nom d'hôte sur le DNS
24312multicast (mDNS) pour les noms d'hôtes terminant par @code{.local} :
24313
24314@example
24315(name-service-switch
24316 (hosts (list %files ;first, check /etc/hosts
24317
24318 ;; Si ce qui précède n'a pas fonctionné, essayer
24319 ;; avec « mdns_minimal ».
24320 (name-service
24321 (name "mdns_minimal")
24322
24323 ;; « mdns_minimal » fait autorité pour
24324 ;; « .local ». Lorsqu'il renvoie « pas trouvé »,
24325 ;; inutile d'essayer la méthode suivante.
24326 (reaction (lookup-specification
24327 (not-found => return))))
24328
24329 ;; Puis revenir sur DNS.
24330 (name-service
24331 (name "dns"))
24332
24333 ;; Enfin, essayer avec « mdns complet ».
24334 (name-service
24335 (name "mdns")))))
24336@end example
24337
24338Ne vous inquiétez pas : la variable @code{%mdns-host-lookup-nss} (voir plus
24339bas) contient cette configuration, donc vous n'avez pas besoin de tout taper
24340si vous voulez simplement que la résolution de nom en @code{.local}
24341fonctionne.
24342
24343Remarquez que dans ce cas, en plus de mettre en place le
24344@code{name-service-switch} de la déclaration @code{operating-system}, vous
24345devez aussi utiliser @code{avahi-service-type} (@pxref{Services réseau,
24346@code{avahi-service}}), ou @var{%desktop-services} qui l'inclut
24347(@pxref{Services de bureaux}). Cela rend @code{nss-mdns} accessible au démon
24348de cache du service de nom (@pxref{Services de base, @code{nscd-service}}).
24349
24350Pour votre confort, les variables suivantes contiennent des configurations
24351NSS typiques.
24352
24353@defvr {Variable Scheme} %default-nss
24354C'est la configuration NSS par défaut, un objet @code{name-service-switch}.
24355@end defvr
24356
24357@defvr {Variable Scheme} %mdns-host-lookup-nss
24358C'est la configuration NSS avec le support de la résolution de noms sur DNS
24359multicast (mDNS) pour les noms d'hôtes en @code{.local}.
24360@end defvr
24361
24362La référence pour la configuration de NSS est donnée ci-dessous. C'est une
24363correspondance directe avec le format de fichier de la bibliothèque C, donc
24364référez-vous au manuel de la bibliothèque C pour plus d'informations
24365(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
24366Manual}). Comparé au format de fichier de configuration de NSS, cette
24367configuration a l'avantage non seulement d'ajouter ces bonnes vieilles
24368parenthèses, mais aussi des vérifications statiques ; vous saurez s'il y a
24369des erreurs de syntaxe et des coquilles dès que vous lancerez @command{guix
24370system}.
24371
24372@deftp {Type de données} name-service-switch
24373
24374C'est le type de données représentant la configuration de NSS. Chaque champ
24375ci-dessous représente l'un des système de bases de données supportés.
24376
24377@table @code
24378@item aliases
24379@itemx ethers
24380@itemx group
24381@itemx gshadow
24382@itemx hosts
24383@itemx initgroups
24384@itemx netgroup
24385@itemx networks
24386@itemx password
24387@itemx public-key
24388@itemx rpc
24389@itemx services
24390@itemx shadow
24391Les bases de données du système gérées par NSS. Chaque champ doit être une
24392liste d'objets @code{<name-service>} (voir plus bas).
24393@end table
24394@end deftp
24395
24396@deftp {Type de données} name-service
24397
24398C'est le type de données représentant un service de noms et l'action de
24399résolution associée.
24400
24401@table @code
24402@item name
24403Une chaîne dénotant le service de nom (@pxref{Services in the NSS
24404configuration,,, libc, The GNU C Library Reference Manual}).
24405
24406Remarquez que les services de dnoms listés ici doivent être visibles à
24407nscd. Cela se fait en passant la liste des paquets fournissant les services
24408de noms à l'argument @code{#:name-services} de @code{nscd-service}
24409(@pxref{Services de base, @code{nscd-service}}).
24410
24411@item reaction
24412Une action spécifiée par la macro @code{lookup-specification}
24413(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
24414Reference Manual}). Par exemple :
24415
24416@example
24417(lookup-specification (unavailable => continue)
24418 (success => return))
24419@end example
24420@end table
24421@end deftp
24422
24423@node Disque de RAM initial
24424@section Disque de RAM initial
24425
24426@cindex initrd
24427@cindex disque de RAM initial
24428Pour le démarrage, on passe au noyau Linux-Libre un @dfn{disque de RAM
24429initial} ou @dfn{initrd}. Un initrd contient un système de fichier racine
24430temporaire ainsi qu'un script d'initialisation. Ce dernier est responsable
24431du montage du vrai système de fichier racine et du chargement des modules du
24432noyau qui peuvent être nécessaires à cette tâche.
24433
24434Le champ @code{initrd-modules} d'une déclaration @code{operating-system}
24435vous permet de spécifier les modules du noyau Linux-Libre qui doivent être
24436disponibles dans l'initrd. En particulier, c'est là où vous devez lister
24437les modules requis pour effectivement piloter le disque dur où se trouve la
24438partition racine — bien que la valeur par défaut de @code{initrd-modules}
24439couvre la plupart des cas. Par exemple, en supposant que vous ayez besoin
24440du module @code{megaraid_sas} en plus des modules par défaut pour accéder à
24441votre système de fichiers racine, vous écririez :
24442
24443@example
24444(operating-system
24445 ;; @dots{}
24446 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
24447@end example
24448
24449@defvr {Variable Scheme} %base-initrd-modules
24450C'est la liste des modules du noyau inclus dans l'initrd par défaut.
24451@end defvr
24452
24453En plus, si vous avez besoin de paramétrages plus bas niveau, le champ
24454@code{initrd} d'une déclaration @code{operating-system} vous permet de
24455spécifier quel initrd vous voudriez utiliser. Le module @code{(gnu system
24456linux-initrd)} fournit trois manières de construire un initrd : la procédure
24457@code{base-initrd} de haut niveau et les procédures @code{raw-initrd} et
24458@code{expression->initrd} de bas niveau.
24459
24460La procédure @code{base-initrd} est conçue pour couvrir la plupart des
24461usages courants. Par exemple, si vous voulez ajouter des modules du noyau à
24462charger au démarrage, vous pouvez définir le champ @code{initrd} de votre
24463déclaration de système d'exploitation ainsi :
24464
24465@example
24466(initrd (lambda (file-systems . rest)
24467 ;; Crée un initrd standard mais paramètre le réseau
24468 ;; avec les paramètres que QEMU attend par défaut.
24469 (apply base-initrd file-systems
24470 #:qemu-networking? #t
24471 rest)))
24472@end example
24473
24474La procédure @code{base-initrd} gère aussi les cas d'utilisation courants
24475qui concernent l'utilisation du système comme client QEMU, ou comme un
24476système « live » avec un système de fichier racine volatile.
24477
24478La procédure @code{base-initrd} est construite à partir de la procédure
24479@code{raw-initrd}. Contrairement à @code{base-initrd}, @code{raw-initrd} ne
24480fait rien à haut-niveau, comme essayer de deviner les modules du noyau et
24481les paquets qui devraient être inclus dans l'initrd. Un exemple
24482d'utilisation de @code{raw-initrd} serait si un utilisateur a une
24483configuration personnalisée du noyau Linux et que les modules du noyau
24484inclus par défaut par @code{base-initrd} ne sont pas disponibles.
24485
24486Le disque de RAM initial produit par @code{base-initrd} ou @code{raw-initrd}
24487honore plusieurs options passées par la ligne de commande du noyau Linux
24488(c'est-à-dire les arguments passés via la commande @code{linux} de GRUB ou
24489l'option @code{-append} de QEMU), notamment :
24490
24491@table @code
24492@item --load=@var{boot}
24493Dit au disque de RAM initial de charger @var{boot}, un fichier contenant un
24494programme Scheme, une fois qu'il a monté le système de fichier racine.
24495
24496Guix utilise cette option pour donner le contrôle à un programme de
24497démarrage qui lance les programmes d'activation de services puis démarre le
24498GNU@tie{}Shepherd, le système d'initialisation.
24499
24500@item --root=@var{root}
24501Monte @var{root} comme système de fichier racine. @var{root} peut être un
24502nom de périphérique comme @code{/dev/sda1}, une étiquette de système de
24503fichiers ou un UUID de système de fichiers.
24504
24505@item --system=@var{système}
24506S'assure que @file{/run/booted-system} et @file{/run/current-system}
24507pointent vers @var{system}.
24508
24509@item modprobe.blacklist=@var{modules}@dots{}
24510@cindex module, black-list
24511@cindex black-list, des modules du noyau
24512Dit au disque de RAM initial ainsi qu'à la commande @command{modprobe} (du
24513paquet kmod) de refuser de charger @var{modules}. @var{modules} doit être
24514une liste de noms de modules séparés par des virgules — p.@: ex.@:
24515@code{usbkbd,9pnet}.
24516
24517@item --repl
24518Démarre une boucle lecture-évaluation-affichage (REPL) depuis le disque de
24519RAM initial avant qu'il n'essaye de charger les modules du noyau et de
24520monter le système de fichiers racine. Notre équipe commerciale appelle cela
24521@dfn{boot-to-Guile}. Le Schemeur en vous va adorer. @xref{Using Guile
24522Interactively,,, guile, GNU Guile Reference Manual}, pour plus d'information
24523sur le REPL de Guile.
24524
24525@end table
24526
24527Maintenant que vous connaissez toutes les fonctionnalités des disques de RAM
24528initiaux produits par @code{base-initrd} et @code{raw-initrd}, voici comment
24529l'utiliser le personnalisé plus avant.
24530
24531@cindex initrd
24532@cindex disque de RAM initial
24533@deffn {Procédure Scheme} raw-initrd @var{file-systems} @
24534 [#:linux-modules '()] [#:mapped-devices '()] @
24535[#:keyboard-layout #f] @
24536[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
24537Renvoie une dérivation qui construit un initrd. @var{file-systems} est une
24538liste de systèmes de fichiers à monter par l'initrd, éventuellement en plus
24539du système de fichier racine spécifié sur la ligne de commande du noyau via
24540@code{--root}. @var{linux-modules} est une liste de modules du noyau à
24541charger au démarrage. @var{mapped-devices} est une liste de correspondances
24542de périphériques à réaliser avant que les @var{file-systems} ne soient
24543montés (@pxref{Périphériques mappés}). @var{helper-packages} est une liste de
24544paquets à copier dans l'initrd. Elle peut inclure @code{e2fsck/static} ou
24545d'autres paquets requis par l'initrd pour vérifier le système de fichiers
24546racine.
24547
24548Lorsque la valeur est vraie, @var{keyboard-layout} est un enregistrement
24549@code{<keyboard-layout>} dénotant la disposition du clavier désirée pour la
24550console. Cela est effectuée avant que les @var{mapped-devices} ne soient
24551créés et avant que les @var{file-systems} ne soient montés, de sorte que, si
24552l'utilisateur au besoin de saisir une phrase de passe ou d'utiliser le REPL,
24553cela arrive avec la disposition du clavier voulue.
24554
24555Lorsque @var{qemu-networking?} est vrai, paramètre le réseau avec les
24556paramètres QEMU standards. Lorsque @var{virtio?} est vrai, charge des
24557modules supplémentaires pour que l'initrd puisse être utilisé comme client
24558QEMU avec les pilotes I/O para-virtualisés.
24559
24560Lorsque @var{volatile-root?} est vrai, le système de fichier racine est
24561inscriptible mais tous les changements seront perdus.
24562@end deffn
24563
24564@deffn {Procédure Scheme} base-initrd @var{file-systems} @
24565 [#:mapped-devices '()] [#:keyboard-layout #f] @
24566[#:qemu-networking? #f] [#:volatile-root? #f] @
24567[#:linux-modules '()]
24568Renvoie un objet simili-fichier contenant un initrd générique, avec les
24569modules du noyau de @var{linux}. @var{file-systems} est une liste de
24570systèmes de fichiers à monter par l'initrd, éventuellement en plus du
24571système de fichiers racine spécifié sur la ligne de commande du noyau via
24572@code{--root}. @var{mapped-devices} est une liste de correspondances de
24573périphériques à réaliser avant de monter les @var{file-systems}.
24574
24575Lorsque la valeur est vraie, @var{keyboard-layout} est un enregistrement
24576@code{<keyboard-layout>} dénotant la disposition du clavier désirée pour la
24577console. Cela est effectuée avant que les @var{mapped-devices} ne soient
24578créés et avant que les @var{file-systems} ne soient montés, de sorte que, si
24579l'utilisateur au besoin de saisir une phrase de passe ou d'utiliser le REPL,
24580cela arrive avec la disposition du clavier voulue.
24581
24582@var{qemu-networking?} et @var{volatile-root?} se comportent comme pour
24583@code{raw-initrd}.
24584
24585L'initrd est automatiquement remplie avec tous les modules du noyau requis
24586pour @var{file-systems} et pour les options données. On peut lister des
24587modules supplémentaires dans @var{linux-modules}. Ils seront ajoutés à
24588l'initrd et chargés au démarrage dans l'ordre dans lequel ils apparaissent.
24589@end deffn
24590
24591Inutile de le dire, les initrds que nous produisons et utilisons incluent
24592une version de Guile liée statiquement, et le programme d'initialisation est
24593un programme Guile. Cela donne beaucoup de flexibilité. La procédure
24594@code{expression->initrd} construit un tel initrd, étant donné le programme
24595à lancer dans cet initrd.
24596
24597@deffn {Procédure Scheme} expression->initrd @var{exp} @
24598 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
24599Renvoie un objet simili-fichier contenant un initrd Linux (une archive cpio
24600compressée avec gzip) contenant @var{guile} et qui évalue @var{exp}, une
24601G-expression, au démarrage. Toutes les dérivations référencées par
24602@var{exp} sont automatiquement copiées dans l'initrd.
24603@end deffn
24604
24605@node Configuration du chargeur d'amorçage
24606@section Configuration du chargeur d'amorçage
24607
24608@cindex bootloader
24609@cindex chargeur d'amorçage
24610
24611Le système d'exploitation supporte plusieurs chargeurs d'amorçage. La
24612configuration du chargeur d'amorçage se fait avec la déclaration
24613@code{bootloader-configuration}. Tous les champs de cette structure sont
24614indépendants du chargeur d'amorçage sauf un, @code{bootloader} qui indique
24615le chargeur d'amorçage à configurer et à installer.
24616
24617Certains chargeurs d'amorçage ne respectent pas tous les champs de
24618@code{bootloader-configuration}. Par exemple, le chargeur d'amorçage
24619extlinux ne supporte pas les thèmes et ignore donc le champ @code{theme}.
24620
24621@deftp {Type de données} bootloader-configuration
24622Le type d'une déclaration de configuration de chargeur d'amorçage.
24623
24624@table @asis
24625
24626@item @code{bootloader}
24627@cindex EFI, chargeur d'amorçage
24628@cindex UEFI, chargeur d'amorçage
24629@cindex BIOS, chargeur d'amorçage
24630Le chargeur d'amorçage à utiliser, comme objet @code{bootloader}. Pour
24631l'instant @code{grub-bootloader}, @code{grub-efi-bootloader},
24632@code{extlinux-bootloader} et @code{u-boot-bootloader} sont supportés.
24633
24634@vindex grub-efi-bootloader
24635@code{grub-efi-bootloader} permet de démarrer sur un système moderne qui
24636utilise l'UEFI (@dfn{Unified Extensible Firmware Interface}). C'est ce que
24637vous devriez utiliser si l'image d'installation contient un répertoire
24638@file{/sys/firmware/efi} lorsque vous démarrez dessus sur votre machine.
24639
24640@vindex grub-bootloader
24641@code{grub-bootloader} vous permet de démarrer en particulier sur des
24642machines Intel en mode BIOS « legacy ».
24643
24644@cindex ARM, chargeurs d'amorçage
24645@cindex AArch64, chargeurs d'amorçage
24646Les chargeurs d'amorçage disponibles sont décrits dans les modules
24647@code{(gnu bootloader @dots{})}. En particulier, @code{(gnu bootloader
24648u-boot)} contient des définitions de chargeurs d'amorçage pour une large
24649gamme de systèmes ARM et AArch, à l'aide du
24650@uref{http://www.denx.de/wiki/U-Boot/, chargeur d'amorçage U-Boot}
24651
24652@item @code{target}
24653C'est une chaîne qui dénote la cible sur laquelle installer le chargeur
24654d'amorçage.
24655
24656L'interprétation dépend du chargeur d'amorçage en question. Pour
24657@code{grub-bootloader} par exemple, cela devrait être un nom de périphérique
24658compris par la commande @command{installer} du chargeur d'amorçage, comme
24659@code{/dev/sda} ou @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU
24660GRUB Manual}). Pour @code{grub-efi-bootloader}, cela devrait être le point
24661de montage du système de fichiers EFI, typiquement @file{/boot/efi}.
24662
24663@item @code{menu-entries} (par défaut : @code{()})
24664Une liste éventuellement vide d'objets @code{menu-entry} (voir plus bas),
24665dénotant les entrées qui doivent apparaître dans le menu du chargeur
24666d'amorçage, en plus de l'entrée pour le système actuel et l'entrée pointant
24667vers les générations précédentes.
24668
24669@item @code{default-entry} (par défaut : @code{0})
24670L'index de l'entrée du menu de démarrage par défaut. L'index 0 correspond
24671au système actuel.
24672
24673@item @code{timeout} (par défaut : @code{5})
24674Le nombre de secondes à attendre une entrée clavier avant de démarrer.
24675Indiquez 0 pour démarre immédiatement, et -1 pour attendre indéfiniment.
24676
24677@cindex disposition du clavier, pour le chargeur d'amorçage
24678@item @code{keyboard-layout} (par défaut : @code{#f})
24679Si c'est @code{#f}, le menu du chargeur d'amorçage (s'il y en a un) utilise
24680la disposition du clavier par défaut, normalement pour l'anglais américain
24681(« qwerty »).
24682
24683Sinon, cela doit être un objet @code{keyboard-layout} (@pxref{Disposition du clavier}).
24684
24685@quotation Remarque
24686Cette option est actuellement ignorée par les chargeurs d'amorçage autre que
24687@code{grub} et @code{grub-efi}.
24688@end quotation
24689
24690@item @code{theme} (par défaut : @var{#f})
24691L'objet de thème du chargeur d'amorçage décrivant le thème utilisé. Si
24692aucun thème n'est fournit, certains chargeurs d'amorçage peuvent utiliser un
24693thème par défaut, c'est le cas de GRUB.
24694
24695@item @code{terminal-outputs} (par défaut : @code{'gfxterm})
24696Les terminaux de sortie utilisés par le menu de démarrage du chargeur
24697d'amorçage, en tant que liste de symboles. GRUB accepte les valeurs
24698@code{console}, @code{serial}, @code{serial_@{0-3@}}, @code{gfxterm},
24699@code{vga_text}, @code{mda_text}, @code{morse} et @code{pkmodem}. Ce champ
24700correspond à la variable GRUB @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
24701configuration,,, grub,GNU GRUB manual}).
24702
24703@item @code{terminal-inputs} (par défaut : @code{'()})
24704Les terminaux d'entrée utilisés par le menu de démarrage du chargeur
24705d'amorçage, en tant que liste de symboles. Pour GRUB, la valeur par défaut
24706est le terminal natif de la plate-forme déterminé à l'exécution. GRUB
24707accepte les valeurs @code{console}, @code{serial}, @code{serial_@{0-3@}},
24708@code{at_keyboard} et @code{usb_keyboard}. Ce champ correspond à la
24709variable GRUB @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,,
24710grub,GNU GRUB manual}).
24711
24712@item @code{serial-unit} (par défaut : @code{#f})
24713L'unitié série utilisée par le chargeur d'amorçage, en tant qu'entier entre
247140 et 3. Pour GRUB, il est choisi à l'exécution ; actuellement GRUB choisi
247150, ce qui correspond à COM1 (@pxref{Serial terminal,,, grub,GNU GRUB
24716manual}).
24717
24718@item @code{serial-speed} (par défaut : @code{#f})
24719La vitesse de l'interface série, en tant qu'entier. Pour GRUB, la valeur
24720par défaut est choisie à l'exécution ; actuellement GRUB choisi
247219600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
24722@end table
24723
24724@end deftp
24725
24726@cindex dual boot
24727@cindex menu de démarrage
24728Si vous voulez lister des entrées du menu de démarrage supplémentaires via
24729le champ @code{menu-entries} ci-dessus, vous devrez les créer avec la forme
24730@code{menu-entry}. Par exemple, imaginons que vous souhaitiez pouvoir
24731démarrer sur une autre distro (c'est difficile à concevoir !), vous pourriez
24732alors définir une entrée du menu comme ceci :
24733
24734@example
24735(menu-entry
24736 (label "L'autre distro")
24737 (linux "/boot/old/vmlinux-2.6.32")
24738 (linux-arguments '("root=/dev/sda2"))
24739 (initrd "/boot/old/initrd"))
24740@end example
24741
24742Les détails suivent.
24743
24744@deftp {Type de données} menu-entry
24745Le type d'une entrée dans le menu du chargeur d'amorçage.
24746
24747@table @asis
24748
24749@item @code{label}
24750L'étiquette à montrer dans le menu — p.@: ex.@: @code{"GNU"}.
24751
24752@item @code{linux}
24753L'image du noyau Linux à démarrer, par exemple :
24754
24755@example
24756(file-append linux-libre "/bzImage")
24757@end example
24758
24759Pour GRUB, il est aussi possible de spécifier un périphérique explicitement
24760dans le chemin de fichier avec la convention de nommage de GRUB
24761(@pxref{Naming convention,,, grub, GNU GRUB manual}), par exemple :
24762
24763@example
24764"(hd0,msdos1)/boot/vmlinuz"
24765@end example
24766
24767Si le périphérique est spécifié explicitement comme au-dessus, le champ
24768@code{device} est complètement ignoré.
24769
24770@item @code{linux-arguments} (par défaut : @code{()})
24771La liste des arguments de la ligne de commande du noyau supplémentaires —
24772p.@: ex.@: @code{("console=ttyS0")}.
24773
24774@item @code{initrd}
24775Une G-expression ou une chaîne dénotant le nom de fichier du disque de RAM
24776initial à utiliser (@pxref{G-Expressions}).
24777@item @code{device} (par défaut : @code{#f})
24778Le périphérique où le noyau et l'initrd se trouvent — c.-à-d.@: pour GRUB,
24779l'option @dfn{root} de cette entrée de menu (@pxref{root,,, grub, GNU GRUB
24780manual}).
24781
24782Cela peut être une étiquette de système de fichiers (une chaîne), un UUID de
24783système de fichiers (un vecteur d'octets, @pxref{Systèmes de fichiers}) ou
24784@code{#f}, auquel cas le chargeur d'amorçage recherchera le périphérique
24785contenant le fichier spécifié par le champ @code{linux} (@pxref{search,,,
24786grub, GNU GRUB manual}). Cela ne doit @emph{pas} être un nom de
24787périphérique donné par l'OS comme @file{/dev/sda1}.
24788
24789@end table
24790@end deftp
24791
24792@c FIXME: Write documentation once it's stable.
24793For now only GRUB has theme support. GRUB themes are created using the
24794@code{grub-theme} form, which is not documented yet.
24795
24796@defvr {Variable Scheme} %default-theme
24797C'est le thème par défaut de GRUB utilisé par le système d'exploitation si
24798aucun champ @code{theme} n'est spécifié dans l'enregistrement
24799@code{bootloader-configuration}.
24800
24801Il contient une image de fond sympathique avec les logos de GNU et de Guix.
24802@end defvr
24803
24804
24805@node Invoquer guix system
24806@section Invoquer @code{guix system}
24807
24808Une fois que vous avez écrit une déclaration de système d'exploitation comme
24809nous l'avons vu dans les sections précédentes, elle peut être instanciée
24810avec la commande @command{guix system}. Voici le résumé de la commande :
24811
24812@example
24813guix system @var{options}@dots{} @var{action} @var{file}
24814@end example
24815
24816@var{file} doit être le nom d'un fichier contenant une déclaration
24817@code{operating-system}. @var{action} spécifie comme le système
24818d'exploitation est instancié. Actuellement les valeurs suivantes sont
24819supportées :
24820
24821@table @code
24822@item search
24823Affiche les définitions des types de services disponibles qui correspondent
24824aux expressions régulières données, triées par pertinence :
24825
24826@example
24827$ guix system search console font
24828name: console-fonts
24829location: gnu/services/base.scm:773:2
24830extends: shepherd-root
24831description: Installe des polices données sur les ttys spécifiés (les polices sont par console virtuelle sous GNU/Linux). la valeur de ces service est une liste de paires
24832+ de tty/police comme ceci :
24833+
24834+ '(("tty1" . "LatGrkCyr-8x16"))
24835relevance: 16
24836
24837name: mingetty
24838location: gnu/services/base.scm:1144:2
24839extends: shepherd-root
24840description: Fournit la connexion en console avec le programme `mingetty'.
24841relevance: 4
24842
24843name: login
24844location: gnu/services/base.scm:819:2
24845extends: pam
24846description: Fournit un service de connexion en console tel que spécifié par sa valeur de configuration, un objet `login-configuration'.
24847relevance: 4
24848
24849@dots{}
24850@end example
24851
24852Comme pour @command{guix package --search}, le résultat est écrit au format
24853@code{recutils}, ce qui rend facile le filtrage de la sortie (@pxref{Top,
24854GNU recutils databases,, recutils, GNU recutils manual}).
24855
24856@item reconfigure
24857Construit le système d'exploitation décrit dans @var{file}, l'active et
24858passe dessus@footnote{Cette action (et les action liées que sont
24859@code{switch-generation} et @code{roll-back}) ne sont utilisables que sur
24860les systèmes sous Guix System.}.
24861
24862Cela met en application toute la configuration spécifiée dans @var{file} :
24863les comptes utilisateurs, les services du système, la liste globale des
24864paquets, les programmes setuid, etc. La commande démarre les services
24865systèmes spécifiés dans @var{file} qui ne sont pas actuellement lancés ; si
24866un service est actuellement exécuté cette commande s'arrange pour qu'il soit
24867mis à jour la prochaine fois qu'il est stoppé (p.@: ex@: par @code{herd stop
24868X} ou @code{herd restart X}).
24869
24870Cette commande crée une nouvelle génération dont le numéro est un de plus
24871que la génération actuelle (rapportée par @command{guix system
24872list-generations}). Si cette génération existe déjà, elle sera réécrite.
24873Ce comportement correspond à celui de @command{guix package}
24874(@pxref{Invoquer guix package}).
24875
24876Elle ajoute aussi une entrée de menu du chargeur d'amorçage pour la nouvelle
24877configuration, à moins que @option{--no-bootloader} ne soit passé. Pour
24878GRUB, elle déplace les entrées pour les anciennes configurations dans un
24879sous-menu, ce qui vous permet de choisir une ancienne génération au
24880démarrage si vous en avez besoin.
24881
24882@quotation Remarque
24883@c The paragraph below refers to the problem discussed at
24884@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
24885Il est grandement recommandé de lancer @command{guix pull} une fois avant de
24886lancer @command{guix system reconfigure} pour la première fois
24887(@pxref{Invoquer guix pull}). Sans cela, vous verriez une version plus
24888ancienne de Guix une fois @command{reconfigure} terminé.
24889@end quotation
24890
24891@item switch-generation
24892@cindex générations
24893Passe à une génération existante du système. Cette action change
24894automatiquement le profil système vers la génération spécifiée. Elle
24895réarrange aussi les entrées existantes du menu du chargeur d'amorçage du
24896système. Elle fait de l'entrée du menu pour la génération spécifiée
24897l'entrée par défaut et déplace les entrées pour les autres générations dans
24898un sous-menu, si cela est supporté par le chargeur d'amorçage utilisé. Lors
24899du prochain démarrage du système, la génération du système spécifiée sera
24900utilisée.
24901
24902Le chargeur d'amorçage lui-même n'est pas réinstallé avec cette commande.
24903Ainsi, le chargeur d'amorçage est utilisé avec un fichier de configuration
24904plus à jour.
24905
24906La génération cible peut être spécifiée explicitement par son numéro de
24907génération. Par exemple, l'invocation suivante passerait à la génération 7
24908du système :
24909
24910@example
24911guix system switch-generation 7
24912@end example
24913
24914La génération cible peut aussi être spécifiée relativement à la génération
24915actuelle avec la forme @code{+N} ou @code{-N}, où @code{+3} signifie « trois
24916générations après la génération actuelle » et @code{-1} signifie « une
24917génération précédent la génération actuelle ». Lorsque vous spécifiez un
24918nombre négatif comme @code{-1}, il doit être précédé de @code{--} pour
24919éviter qu'il ne soit compris comme une option. Par exemple :
24920
24921@example
24922guix system switch-generation -- -1
24923@end example
24924
24925Actuellement, l'effet de l'invocation de cette action est @emph{uniquement}
24926de passer au profil du système vers une autre génération existante et de
24927réarranger le menu du chargeur d'amorçage. Pour vraiment commencer à
24928utiliser la génération spécifiée, vous devez redémarrer après avoir lancé
24929cette action. Dans le futur, elle sera corrigée pour faire la même chose
24930que @command{reconfigure}, comme réactiver et désactiver les services.
24931
24932Cette action échouera si la génération spécifiée n'existe pas.
24933
24934@item roll-back
24935@cindex revenir en arrière
24936Passe à la génération précédente du système. Au prochain démarrage, la
24937génération précédente sera utilisée. C'est le contraire de
24938@command{reconfigure}, et c'est exactement comme invoquer
24939@command{switch-generation} avec pour argument @code{-1}.
24940
24941Actuellement, comme pour @command{switch-generation}, vous devez redémarrer
24942après avoir lancé cette action pour vraiment démarrer sur la génération
24943précédente du système.
24944
24945@item delete-generations
24946@cindex supprimer des générations du système
24947@cindex gagner de la place
24948Supprimer des générations du système, ce qui les rend disponibles pour le
24949ramasse-miettes (@pxref{Invoquer guix gc}, pour des informations sur la
24950manière de lancer le « ramasse-miettes »).
24951
24952Cela fonctionne comme pour @command{guix package --delete-generations}
24953(@pxref{Invoquer guix package, @code{--delete-generations}}). Avec aucun
24954argument, toutes les générations du système sauf la génération actuelle sont
24955supprimées :
24956
24957@example
24958guix system delete-generations
24959@end example
24960
24961Vous pouvez aussi choisir les générations que vous voulez supprimer.
24962L'exemple plus bas supprime toutes les génération du système plus vieilles
24963que deux mois :
24964
24965@example
24966guix system delete-generations 2m
24967@end example
24968
24969Lancer cette commande réinstalle automatiquement le chargeur d'amorçage avec
24970une liste à jour d'entrées de menu — p.@: ex.@: le sous-menu « anciennes
24971générations » dans GRUB ne liste plus les générations qui ont été
24972supprimées.
24973
24974@item build
24975Construit la dérivation du système d'exploitation, ce qui comprend tous les
24976fichiers de configuration et les programmes requis pour démarrer et lancer
24977le système. Cette action n'installe rien.
24978
24979@item init
24980Rempli le répertoire donné avec tous les fichiers nécessaires à lancer le
24981système d'exploitation spécifié dans @var{file}. C'est utile pour la
24982première installation de Guix System. Par exemple :
24983
24984@example
24985guix system init my-os-config.scm /mnt
24986@end example
24987
24988copie tous les éléments du dépôt requis par la configuration spécifiée dans
24989@file{my-os-config.scm} dans @file{/mnt}. Cela comprend les fichiers de
24990configuration, les paquets, etc. Elle crée aussi d'autres fichiers
24991essentiels requis pour que le système fonctionne correctement — p.@: ex.@:
24992les répertoires @file{/etc}, @file{/var} et @file{/run} et le fichier
24993@file{/bin/sh}.
24994
24995Cette commande installe aussi le chargeur d'amorçage sur la cible spécifiée
24996dans @file{my-os-config}, à moins que l'option @option{--no-bootloader} ne
24997soit passée.
24998
24999@item vm
25000@cindex machine virtuelle
25001@cindex VM
25002@anchor{guix system vm}
25003Construit une machine virtuelle qui contient le système d'exploitation
25004déclaré dans @var{file} et renvoie un script pour lancer cette machine
25005virtuelle (VM).
25006
25007@quotation Remarque
25008Les actions @code{vm} et les autres plus bas peuvent utiliser la prise en
25009charge KVM du noyau Linux-libre. Plus spécifiquement, si la machine prend
25010en charge la virtualisation matérielle, le module noyau KVM correspondant
25011devrait être chargé, et le nœud de périphérique @file{/dev/kvm} devrait
25012exister et être lisible et inscriptible pour l'utilisateur et pour les
25013utilisateurs de construction du démon (@pxref{Réglages de l'environnement de construction}).
25014@end quotation
25015
25016Les arguments passés au script sont passés à QEMU comme dans l'exemple
25017ci-dessous, qui active le réseau et demande 1@tie{}Go de RAM pour la machine
25018émulée :
25019
25020@example
25021$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
25022@end example
25023
25024La VM partage sont dépôt avec le système hôte.
25025
25026Vous pouvez partager des fichiers supplémentaires entre l'hôte et la VM avec
25027les options en ligne de commande @code{--share} et @code{--expose} : la
25028première spécifie un répertoire à partager avec accès en écriture, tandis
25029que le deuxième fournit un accès en lecture-seule au répertoire partagé.
25030
25031L'exemple ci-dessous crée une VM dans laquelle le répertoire personnel de
25032l'utilisateur est accessible en lecture-seule, et où le répertoire
25033@file{/exchange} est une correspondance en lecture-écriture à
25034@file{$HOME/tmp} sur l'hôte :
25035
25036@example
25037guix system vm my-config.scm \
25038 --expose=$HOME --share=$HOME/tmp=/exchange
25039@end example
25040
25041Sur GNU/Linux, le comportement par défaut consiste à démarrer directement
25042sur le noyau ; cela a l'avantage de n'avoir besoin que d'une toute petite
25043image disque puisque le dépôt de l'hôte peut ensuite être monté.
25044
25045L'option @code{--full-boot} force une séquence de démarrage complète, en
25046commençant par le chargeur d'amorçage. Cela requiert plus d'espace disque
25047puisqu'une image racine contenant au moins le noyau, l'initrd et les
25048fichiers de données du chargeur d'amorçage doit être créé. On peut utiliser
25049l'option @code{--image-size} pour spécifier la taille de l'image.
25050
25051@cindex Images système, création en divers formats
25052@cindex Créer des images systèmes sous différents formats
25053@item vm-image
25054@itemx disk-image
25055@itemx docker-image
25056Renvoie une machine virtuelle, une image disque ou une image Docker du
25057système d'exploitation déclaré dans @var{file} qui se suffit à elle-même.
25058Par défaut, @command{guix system} estime la taille de l'image requise pour
25059stocker le système, mais vous pouvez utiliser l'option @option{--image-size}
25060pour spécifier une valeur. Les images Docker sont construites pour contenir
25061exactement ce dont elles ont besoin, donc l'option @option{--image-size} est
25062ignorée dans le cas de @code{docker-image}.
25063
25064Vous pouvez spécifier le type de système de fichiers racine avec l'option
25065@option{--file-system-type}. La valeur par défaut est @code{ext4}.
25066
25067Lorsque vous utilisez @code{vm-image}, l'image renvoyée est au format qcow2,
25068que l'émulateur QEMU peut utiliser efficacement. @xref{Lancer Guix dans une VM}, pour plus d'informations sur la manière de lancer l'image dans une
25069machine virtuelle.
25070
25071Lorsque vous utilisez @code{disk-image}, une image disque brute est produite
25072; elle peut être copiée telle quelle sur un périphérique USB. En supposant
25073que @code{/dev/sdc} est le périphérique correspondant à une clef USB, on
25074peut copier l'image dessus avec la commande suivante :
25075
25076@example
25077# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
25078@end example
25079
25080En utilisant @code{docker-image}, on produit une image Docker. Guix
25081construit l'image de zéro, et non à partir d'une image Docker de base
25082pré-existante. En conséquence, elle contient @emph{exactly} ce que vous
25083avez défini dans le fichier de configuration du système. Vous pouvez
25084ensuite charger l'image et lancer un conteneur Docker avec des commande
25085comme :
25086
25087@example
25088image_id="$(docker load < guix-system-docker-image.tar.gz)"
25089docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
25090 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
25091 $image_id /var/guix/profiles/system/boot
25092@end example
25093
25094Cette commande démarre un nouveau conteneur Docker à partir de l'image
25095spécifiée. Il démarrera le système Guix de la manière habituelle, ce qui
25096signifie qu'il démarrera tous les services que vous avez définis dans la
25097configuration du système d'exploitation. En fonction de ce que vous lancez
25098dans le conteneur Docker, il peut être nécessaire de donner des permissions
25099supplémentaires au conteneur. Par exemple, si vous voulez construire des
25100paquets avec Guix dans le conteneur Docker, vous devriez passer
25101@option{--privileged} à @code{docker run}.
25102
25103@item conteneur
25104Renvoie un script qui lance le système d'exploitation déclaré dans
25105@var{file} dans un conteneur. Les conteneurs sont un ensemble de mécanismes
25106d'isolation légers fournis par le noyau Linux-libre. Les conteneurs sont
25107substantiellement moins gourmands en ressources que les machines virtuelles
25108complètes car le noyau, les objets partagés et d'autres ressources peuvent
25109être partagés avec le système hôte ; cela signifie aussi une isolation moins
25110complète.
25111
25112Actuellement, le script doit être lancé en root pour pouvoir supporter plus
25113d'un utilisateur et d'un groupe. Le conteneur partage son dépôt avec le
25114système hôte.
25115
25116Comme avec l'action @code{vm} (@pxref{guix system vm}), des systèmes de
25117fichiers supplémentaires peuvent être partagés entre l'hôte et le conteneur
25118avec les options @option{--share} et @option{--expose} :
25119
25120@example
25121guix system container my-config.scm \
25122 --expose=$HOME --share=$HOME/tmp=/exchange
25123@end example
25124
25125@quotation Remarque
25126Cette option requiert Linux-libre ou supérieur.
25127@end quotation
25128
25129@end table
25130
25131@var{options} peut contenir n'importe quelle option commune de construction
25132(@pxref{Options de construction communes}). En plus, @var{options} peut contenir l'une
25133de ces options :
25134
25135@table @option
25136@item --expression=@var{expr}
25137@itemx -e @var{expr}
25138Considère le système d'exploitation en lequel s'évalue @var{expr}. C'est
25139une alternative à la spécification d'un fichier qui s'évalue en un système
25140d'exploitation. C'est utilisé pour générer l'installateur du système Guix
25141(@pxref{Construire l'image d'installation}).
25142
25143@item --system=@var{système}
25144@itemx -s @var{système}
25145Essaye de construire pour @var{system} au lieu du type du système hôte.
25146Cela fonction comme pour @command{guix build} (@pxref{Invoquer guix build}).
25147
25148@item --derivation
25149@itemx -d
25150Renvoie le nom du fichier de dérivation du système d'exploitation donné sans
25151rien construire.
25152
25153@item --file-system-type=@var{type}
25154@itemx -t @var{type}
25155Pour l'action @code{disk-image}, crée un système de fichier du @var{type}
25156donné sur l'image.
25157
25158Lorsque cette option est omise, @command{guix system} utilise @code{ext4}.
25159
25160@cindex format ISO-9660
25161@cindex format d'image de CD
25162@cindex format d'image de DVD
25163@code{--file-system-type=iso9660} produit une image ISO-9660, qu'il est
25164possible de graver sur un CD ou un DVD.
25165
25166@item --image-size=@var{size}
25167Pour les actions @code{vm-image} et @code{disk-image}, crée une image de la
25168taille donnée @var{size}. @var{size} peut être un nombre d'octets ou
25169contenir un suffixe d'unité (@pxref{Block size, size specifications,,
25170coreutils, GNU Coreutils}).
25171
25172Lorsque cette option est omise, @command{guix system} calcule une estimation
25173de la taille de l'image en fonction de la taille du système déclaré dans
25174@var{file}.
25175
25176@item --root=@var{fichier}
25177@itemx -r @var{fichier}
25178Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
25179en tant que racine du ramasse-miettes.
25180
25181@item --skip-checks
25182Passe les vérifications de sécurité avant l'installation.
25183
25184Par défaut, @command{guix system init} et @command{guix system reconfigure}
25185effectuent des vérifications de sécurité : ils s'assurent que les systèmes
25186de fichiers qui apparaissent dans la déclaration @code{operating-system}
25187existent vraiment (@pxref{Systèmes de fichiers}) et que les modules de noyau Linux
25188qui peuvent être requis au démarrage sont listés dans @code{initrd-modules}
25189(@pxref{Disque de RAM initial}). Passer cette option saute ces vérifications
25190complètement.
25191
25192@cindex on-error
25193@cindex stratégie on-error
25194@cindex stratégie en cas d'erreur
25195@item --on-error=@var{strategy}
25196Applique @var{strategy} lorsqu'une erreur arrive lors de la lecture de
25197@var{file}. @var{strategy} peut être l'une des valeurs suivantes :
25198
25199@table @code
25200@item nothing-special
25201Rapporte l'erreur de manière concise et quitte. C'est la stratégie par
25202défaut.
25203
25204@item backtrace
25205Pareil, mais affiche aussi une trace de débogage.
25206
25207@item debug
25208Rapporte l'erreur et entre dans le débogueur Guile. À partir de là, vous
25209pouvez lancer des commandes comme @code{,bt} pour obtenir une trace de
25210débogage, @code{,locals} pour afficher les valeurs des variables locales et
25211plus généralement inspecter l'état du programme. @xref{Debug Commands,,,
25212guile, GNU Guile Reference Manual}, pour une liste de commandes de débogage
25213disponibles.
25214@end table
25215@end table
25216
25217Une fois que vous avez construit, re-configuré et re-re-configuré votre
25218installation Guix, vous pourriez trouver utile de lister les générations du
25219système disponibles sur le disque — et que vous pouvez choisir dans le menu
25220du chargeur d'amorçage :
25221
25222@table @code
25223
25224@item list-generations
25225Affiche un résumé de chaque génération du système d'exploitation disponible
25226sur le disque, dans un format lisible pour un humain. C'est similaire à
25227l'option @option{--list-generations} de @command{guix package}
25228(@pxref{Invoquer guix package}).
25229
25230Éventuellement, on peut spécifier un motif, avec la même syntaxe utilisée
25231pour @command{guix package --list-generations}, pour restreindre la liste
25232des générations affichées. Par exemple, la commande suivante affiche les
25233générations de moins de 10 jours :
25234
25235@example
25236$ guix system list-generations 10d
25237@end example
25238
25239@end table
25240
25241La commande @command{guix system} a même plus à proposer ! Les
25242sous-commandes suivantes vous permettent de visualiser comme vos services
25243systèmes sont liés les uns aux autres :
25244
25245@anchor{system-extension-graph}
25246@table @code
25247
25248@item extension-graph
25249Affiche le @dfn{graphe d'extension des services} du système d'exploitation
25250défini dans @var{file} au format Dot/Graphviz sur la sortie standard
25251(@pxref{Composition de services}, pour plus d'informations sur l'extension des
25252services).
25253
25254La commande :
25255
25256@example
25257$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
25258@end example
25259
25260produit un fichier PDF montrant les relations d'extension entre les
25261services.
25262
25263@anchor{system-shepherd-graph}
25264@item shepherd-graph
25265Affiche le @dfn{graphe de dépendance} des services shepherd du système
25266d'exploitation défini dans @var{file} au format Dot/Graphviz sur la sortie
25267standard. @xref{Services Shepherd}, pour plus d'informations et un exemple
25268de graphe.
25269
25270@end table
25271
25272@node Lancer Guix dans une VM
25273@section Exécuter Guix sur une machine virtuelle
25274
25275@cindex machine virtuelle
25276Pour exécuter GuixSD sur une machine virtuelle (VM), on peut soit utiliser
25277l'image de VM GuixSD pré-construite sur
25278@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-vm-image-@value{VERSION}.@var{système}.xz}
25279ou construire sa propre image de machine virtuelle avec @command{guix system
25280vm-image} (@pxref{Invoquer guix system}). L'image renvoyée est au format
25281qcow2, que l'@uref{http://qemu.org/,émulateur QEMU} peut utiliser
25282efficacement.
25283
25284@cindex QEMU
25285Si vous construisez votre propre image, vous devez la copier en dehors du
25286dépôt (@pxref{Le dépôt}) et vous donner la permission d'écrire sur la copie
25287avant de pouvoir l'utiliser. Lorsque vous invoquez QEMU, vous devez choisir
25288un émulateur système correspondant à votre plate-forme matérielle. Voici
25289une invocation minimale de QEMU qui démarrera le résultat de @command{guix
25290system vm-image} sur un matériel x8_64 :
25291
25292@example
25293$ qemu-system-x86_64 \
25294 -net user -net nic,model=virtio \
25295 -enable-kvm -m 256 /tmp/qemu-image
25296@end example
25297
25298Voici la signification de ces options :
25299
25300@table @code
25301@item qemu-system-x86_64
25302Cela spécifie la plate-forme matérielle à émuler. Elle doit correspondre à
25303l'hôte.
25304
25305@item -net user
25306Active la pile réseau non privilégiée en mode utilisateur. L'OS émulé peut
25307accéder à l'hôte mais pas l'inverse. C'est la manière la plus simple de
25308connecter le client.
25309
25310@item -net nic,model=virtio
25311Vous devez créer une interface réseau d'un modèle donné. Si vous ne créez
25312pas de NIC, le démarrage échouera. En supposant que votre plate-forme est
25313x86_64, vous pouvez récupérer une liste des modèles de NIC disponibles en
25314lançant @command{qemu-system-x86_64 -net nic,model=help}.
25315
25316@item -enable-kvm
25317Si votre système a des extensions de virtualisation matérielle, activer le
25318support des machines virtuelles de Linux (KVM) accélérera les choses.
25319
25320@item -m 256
25321RAM disponible sur l'OS émulé, en mébioctets. La valeur par défaut est
25322128@tie{}Mo, ce qui peut ne pas suffire pour certaines opérations.
25323
25324@item /tmp/qemu-image
25325Le nom de fichier de l'image qcow2.
25326@end table
25327
25328Le script @command{run-vm.sh} par défaut renvoyé par une invocation de
25329@command{guix system vm} n'ajoute pas le drapeau @command{-net user} par
25330défaut. Pour avoir accès au réseau dans la vm, ajoutez le
25331@code{(dhcp-client-service)} à votre définition et démarrez la VM avec
25332@command{`guix system vm config.scm` -net user}. Un problème important avec
25333@command{-net user} pour le réseau, est que @command{ping} ne fonctionnera
25334pas, car il utilise le protocole ICMP. Vous devrez utiliser une autre
25335commande pour vérifier la connectivité réseau, par exemple @command{guix
25336download}.
25337
25338@subsection Se connecter par SSH
25339
25340@cindex SSH
25341@cindex serveur SSH
25342Pour activer SSH dans une VM vous devez ajouter un serveur SSH comme
25343@code{(dropbear-service)} ou @code{(lsh-service)} à votre VM. Le service
25344@code{(lsh-service)} ne peut actuellement pas démarrer sans supervision. Il
25345a besoin que vous tapiez quelques caractères pour initialiser le générateur
25346d'aléatoire. En plus vous devez transférer le port 22, par défaut, à
25347l'hôte. Vous pouvez faire cela avec
25348
25349@example
25350`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
25351@end example
25352
25353Pour vous connecter à la VM vous pouvez lancer
25354
25355@example
25356ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
25357@end example
25358
25359Le @command{-p} donne le port auquel vous voulez vous connecter à
25360@command{ssh}, @command{-o UserKnownHostsFile=/dev/null} évite que
25361@command{ssh} ne se plaigne à chaque fois que vous modifiez le fichier
25362@command{config.scm} et @command{-o StrictHostKeyChecking=no} évite que vous
25363n'ayez à autoriser une connexion à un hôte inconnu à chaque fois que vous
25364vous connectez.
25365
25366@subsection Utiliser @command{virt-viewer} avec Spice
25367
25368Alternativement au client graphique @command{qemu} par défaut vous pouvez
25369utiliser @command{remote-viewer} du paquet @command{virt-viewer}. Pour vous
25370connecter, passez le drapeau @command{-spice port=5930,disable-ticketing} à
25371@command{qemu}. Voir les sections précédentes pour plus d'informations sur
25372comment faire cela.
25373
25374Spice a aussi de chouettes fonctionnalités comme le partage de votre
25375presse-papier avec la VM. Pour activer cela vous devrez aussi passer les
25376drapeaux suivants à @command{qemu} :
25377
25378@example
25379-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
25380-chardev spicevmc,name=vdagent,id=vdagent
25381-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
25382name=com.redhat.spice.0
25383@end example
25384
25385Vous devrez aussi ajouter le @pxref{Services divers, Spice service}.
25386
25387@node Définir des services
25388@section Définir des services
25389
25390Les sections précédentes montrent les services disponibles et comment on
25391peut les combiner dans une déclaration @code{operating-system}. Mais, déjà,
25392comment les définir ? Et qu'est-ce qu'un service au fait ?
25393
25394@menu
25395* Composition de services:: Le modèle de composition des services.
25396* Types service et services:: Types et services.
25397* Référence de service:: Référence de l'API@.
25398* Services Shepherd:: Un type de service particulier.
25399@end menu
25400
25401@node Composition de services
25402@subsection Composition de services
25403
25404@cindex services
25405@cindex démons
25406Ici nous définissons un @dfn{service} comme étant, assez largement, quelque
25407chose qui étend la fonctionnalité d'un système d'exploitation. Souvent un
25408service est un processus — un @dfn{démon} — démarré lorsque le système
25409démarre : un serveur ssh, un serveur web, le démon de construction de Guix,
25410etc. Parfois un service est un démon dont l'exécution peut être déclenchée
25411par un autre démon — p.@: ex.@: un serveur FTP démarré par @command{inetd}
25412ou un service D-Bus activé par @command{dbus-daemon}. Parfois, un service
25413ne correspond pas à un démon. Par exemple, le service « de comptes »
25414récupère la liste des comptes utilisateurs et s'assure qu'ils existent bien
25415lorsque le système est lancé ; le service « udev » récupère les règles de
25416gestion des périphériques et les rend disponible au démon eudev ; le service
25417@file{/etc} rempli le répertoire @file{/etc} du système.
25418
25419@cindex extensions de service
25420Les services de Guix sont connectés par des @dfn{extensions}. Par exemple,
25421le service ssh @dfn{étend} le Shepherd — le système d'initialisation de
25422GuixSD, qui tourne en tant que PID@tie{}1 — en lui donnant les lignes de
25423commande pour démarrer et arrêter le démon ssh (@pxref{Services réseau,
25424@code{lsh-service}}) ; le service UPower étend le service D-Bus en lui
25425passant sa spécification @file{.service} et étend le service udev en lui
25426passant des règles de gestion de périphériques (@pxref{Services de bureaux,
25427@code{upower-service}}) ; le démon Guix étend le Shepherd en lui passant les
25428lignes de commande pour démarrer et arrêter le démon et étend le service de
25429comptes en lui passant une liste des comptes utilisateurs de constructions
25430requis (@pxref{Services de base}).
25431
25432En définitive, les services et leurs relation « d'extensions » forment un
25433graphe orienté acyclique (DAG). Si nous représentons les services comme des
25434boîtes et les extensions comme des flèches, un système typique pourrait
25435fournir quelque chose comme cela :
25436
25437@image{images/service-graph,,5in,Graphe d'extension des services typique.}
25438
25439@cindex service système
25440En bas, on voit le @dfn{service système} qui produit le répertoire contenant
25441tout et lançant et démarrant le système, renvoyé par la commande
25442@command{guix system build}. @xref{Référence de service}, pour apprendre les
25443autres types de services montrés ici. @xref{system-extension-graph, the
25444@command{guix system extension-graph} command}, pour plus d'informations sur
25445la manière de générer cette représentation pour une définition de système
25446d'exploitation particulière.
25447
25448@cindex types de services
25449Techniquement, les développeurs peuvent définir des @dfn{types de services}
25450pour exprimer ces relations. Il peut y avoir n'importe quel quantité de
25451services d'un type donné sur le système — par exemple, un système sur lequel
25452tournent deux instances du serveur ssh de GNU (lsh) a deux instance de
25453@var{lsh-service-type}, avec des paramètres différents.
25454
25455La section suivante décrit l'interface de programmation des types de
25456services et des services.
25457
25458@node Types service et services
25459@subsection Types service et services
25460
25461Un @dfn{type de service} est un nœud dans le DAG décrit plus haut.
25462Commençons avec un exemple simple, le type de service pour le démon de
25463construction de Guix (@pxref{Invoquer guix-daemon}) :
25464
25465@example
25466(define guix-service-type
25467 (service-type
25468 (name 'guix)
25469 (extensions
25470 (list (service-extension shepherd-root-service-type guix-shepherd-service)
25471 (service-extension account-service-type guix-accounts)
25472 (service-extension activation-service-type guix-activation)))
25473 (default-value (guix-configuration))))
25474@end example
25475
25476@noindent
25477Il définit trois choses :
25478
25479@enumerate
25480@item
25481Un nom, dont le seul but de rendre l'inspection et le débogage plus faciles.
25482
25483@item
25484Une liste d'@dfn{extensions de services}, où chaque extension désigne le
25485type de service cible et une procédure qui, étant donné les paramètres du
25486service, renvoie une liste d'objets pour étendre le service de ce type.
25487
25488Chaque type de service a au moins une extension de service. La seule
25489exception est le @dfn{type de service boot}, qui est le service ultime.
25490
25491@item
25492Éventuellement, une valeur par défaut pour les instances de ce type.
25493@end enumerate
25494
25495In this example, @code{guix-service-type} extends three services:
25496
25497@table @code
25498@item shepherd-root-service-type
25499The @code{guix-shepherd-service} procedure defines how the Shepherd service
25500is extended. Namely, it returns a @code{<shepherd-service>} object that
25501defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
25502
25503@item account-service-type
25504This extension for this service is computed by @code{guix-accounts}, which
25505returns a list of @code{user-group} and @code{user-account} objects
25506representing the build user accounts (@pxref{Invoquer guix-daemon}).
25507
25508@item activation-service-type
25509Here @code{guix-activation} is a procedure that returns a gexp, which is a
25510code snippet to run at ``activation time''---e.g., when the service is
25511booted.
25512@end table
25513
25514Un service de ce type est instancié de cette manière :
25515
25516@example
25517(service guix-service-type
25518 (guix-configuration
25519 (build-accounts 5)
25520 (use-substitutes? #f)))
25521@end example
25522
25523Le deuxième argument de la forme @code{service} est une valeur représentant
25524les paramètres de cet instance spécifique du service.
25525@xref{guix-configuration-type, @code{guix-configuration}}, pour plus
25526d'informations sur le type de données @code{guix-configuration}. Lorsque la
25527valeur est omise, la valeur par défaut spécifiée par
25528@code{guix-service-type} est utilisée :
25529
25530@example
25531(service guix-service-type)
25532@end example
25533
25534@code{guix-service-type} is quite simple because it extends other services
25535but is not extensible itself.
25536
25537@c @subsubsubsection Extensible Service Types
25538
25539Le type de service pour un service @emph{extensible} ressemble à ceci :
25540
25541@example
25542(define udev-service-type
25543 (service-type (name 'udev)
25544 (extensions
25545 (list (service-extension shepherd-root-service-type
25546 udev-shepherd-service)))
25547
25548 (compose concatenate) ; concatène la liste des règles
25549 (extend (lambda (config rules)
25550 (match config
25551 (($ <udev-configuration> udev initial-rules)
25552 (udev-configuration
25553 (udev udev) ; le paquet udev à utiliser
25554 (rules (append initial-rules rules)))))))))
25555@end example
25556
25557This is the service type for the
25558@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
25559daemon}. Compared to the previous example, in addition to an extension of
25560@code{shepherd-root-service-type}, we see two new fields:
25561
25562@table @code
25563@item compose
25564C'est la procédure pour @dfn{composer} la liste des extensions de services
25565de ce type.
25566
25567Les services peuvent étendre le service udev en lui passant des listes de
25568règles ; on compose ces extensions simplement en les concaténant.
25569
25570@item extend
25571Cette procédure définie comme la valeur du service est @dfn{étendue} avec la
25572composition des extensions.
25573
25574Les extensions Udev sont composés en une liste de règles, mais la valeur du
25575service udev est elle-même un enregistrement @code{<udev-configuration>}.
25576Donc ici, nous étendons cet enregistrement en ajoutant la liste des règle
25577contribuées à la liste des règles qu'il contient déjà.
25578
25579@item description
25580C'est une chaîne donnant un aperçu du type de service. Elle peut contenir
25581du balisage Texinfo (@pxref{Overview,,, texinfo, GNU Texinfo}). La commande
25582@command{guix system search} permet de rechercher dans ces chaînes et de les
25583afficher (@pxref{Invoquer guix system}).
25584@end table
25585
25586There can be only one instance of an extensible service type such as
25587@code{udev-service-type}. If there were more, the @code{service-extension}
25588specifications would be ambiguous.
25589
25590Toujours ici ? La section suivante fournit une référence de l'interface de
25591programmation des services.
25592
25593@node Référence de service
25594@subsection Référence de service
25595
25596Nous avons vu un résumé des types de services (@pxref{Types service et services}). Cette section fournit une référence sur la manière de manipuler
25597les services et les types de services. Cette interface est fournie par le
25598module @code{(gnu services)}.
25599
25600@deffn {Procédure Scheme} service @var{type} [@var{value}]
25601Renvoie un nouveau service de type @var{type}, un objet
25602@code{<service-type>} (voir plus bas). @var{value}peut être n'importe quel
25603objet ; il représente les paramètres de cette instance particulière du
25604service.
25605
25606Lorsque @var{value} est omise, la valeur par défaut spécifiée par @var{type}
25607est utilisée ; si @var{type} ne spécifie pas de valeur par défaut, une
25608erreur est levée.
25609
25610Par exemple ceci :
25611
25612@example
25613(service openssh-service-type)
25614@end example
25615
25616@noindent
25617est équivalent à ceci :
25618
25619@example
25620(service openssh-service-type
25621 (openssh-configuration))
25622@end example
25623
25624Dans les deux cas le résultat est une instance de
25625@code{openssh-service-type} avec la configuration par défaut.
25626@end deffn
25627
25628@deffn {Procédure Scheme} service? @var{obj}
25629Renvoie vrai si @var{obj} est un service.
25630@end deffn
25631
25632@deffn {Procédure Scheme} service-kind @var{service}
25633Renvoie le type de @var{service} — c.-à-d.@: un objet @code{<service-type>}.
25634@end deffn
25635
25636@deffn {Procédure Scheme} service-value @var{service}
25637Renvoie la valeur associée à @var{service}. Elle représente ses paramètres.
25638@end deffn
25639
25640Voici un exemple de la manière dont un service est créé et manipulé :
25641
25642@example
25643(define s
25644 (service nginx-service-type
25645 (nginx-configuration
25646 (nginx nginx)
25647 (log-directory log-directory)
25648 (run-directory run-directory)
25649 (file config-file))))
25650
25651(service? s)
25652@result{} #t
25653
25654(eq? (service-kind s) nginx-service-type)
25655@result{} #t
25656@end example
25657
25658The @code{modify-services} form provides a handy way to change the
25659parameters of some of the services of a list such as @code{%base-services}
25660(@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
25661services. Of course, you could always use standard list combinators such as
25662@code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
25663GNU Guile Reference Manual}); @code{modify-services} simply provides a more
25664concise form for this common pattern.
25665
25666@deffn {Syntaxe Scheme} modify-services @var{services} @
25667 (@var{type} @var{variable} => @var{body}) @dots{}
25668
25669Modifie les services listés dans @var{services} en fonction des clauses
25670données. Chaque clause à la forme :
25671
25672@example
25673(@var{type} @var{variable} => @var{body})
25674@end example
25675
25676où @var{type} est un type de service — p.@: ex.@: @code{guix-service-type} —
25677et @var{variable} est un identifiant lié dans @var{body} aux paramètres du
25678service — p.@: ex.@: une instance de @code{guix-configuration} — du service
25679original de ce @var{type}.
25680
25681La variable @var{body} devrait s'évaluer en de nouveaux paramètres de
25682service, qui seront utilisés pour configurer le nouveau service. Ce nouveau
25683service remplacera l'original dans la liste qui en résulte. Comme les
25684paramètres d'un service sont créés avec @code{define-record-type*}, vous
25685pouvez écrire un @var{body} court qui s'évalue en de nouveaux paramètres
25686pour le services en utilisant @code{inherit}, fourni par
25687@code{define-record-type*}.
25688
25689@xref{Utiliser le système de configuration} pour des exemples d'utilisation.
25690
25691@end deffn
25692
25693Suit l'interface de programmation des types de services. Vous devrez la
25694connaître pour écrire de nouvelles définitions de services, mais pas
25695forcément lorsque vous cherchez des manières simples de personnaliser votre
25696déclaration @code{operating-system}.
25697
25698@deftp {Type de données} service-type
25699@cindex type de service
25700C'est la représentation d'un @dfn{type de service} (@pxref{Types service et services}).
25701
25702@table @asis
25703@item @code{name}
25704C'est un symbole, utilisé seulement pour simplifier l'inspection et le
25705débogage.
25706
25707@item @code{extensions}
25708Une liste non-vide d'objets @code{<service-extension>} (voir plus bas).
25709
25710@item @code{compose} (par défaut : @code{#f})
25711S'il s'agit de @code{#f}, le type de service dénote des services qui ne
25712peuvent pas être étendus — c.-à-d.@: qui ne reçoivent pas de « valeurs »
25713d'autres services.
25714
25715Sinon, ce doit être une procédure à un argument. La procédure est appelée
25716par @code{fold-services} et on lui passe une liste de valeurs collectées par
25717les extensions. Elle peut renvoyer n'importe quelle valeur simple.
25718
25719@item @code{extend} (par défaut : @code{#f})
25720Si la valeur est @code{#f}, les services de ce type ne peuvent pas être
25721étendus.
25722
25723Sinon, il doit s'agir 'une procédure à deux arguments : @code{fold-services}
25724l'appelle et lui passe la valeur initiale du service comme premier argument
25725et le résultat de l'application de @code{compose} sur les valeurs
25726d'extension en second argument. Elle doit renvoyer une valeur qui est une
25727valeur de paramètre valide pour l'instance du service.
25728@end table
25729
25730@xref{Types service et services}, pour des exemples.
25731@end deftp
25732
25733@deffn {Procédure Scheme} service-extension @var{target-type} @
25734 @var{compute}
25735Renvoie une nouvelle extension pour les services de type @var{target-type}.
25736@var{compute} doit être une procédure à un argument : @code{fold-services}
25737l'appelle et lui passe la valeur associée au service qui fournit cette
25738extension ; elle doit renvoyer une valeur valide pour le service cible.
25739@end deffn
25740
25741@deffn {Procédure Scheme} service-extension? @var{obj}
25742Renvoie vrai si @var{obj} est une extension de service.
25743@end deffn
25744
25745Parfois, vous voudrez simplement étendre un service existant. Cela implique
25746de créer un nouveau type de service et de spécifier l'extension qui vous
25747intéresse, ce qui peut être assez verbeux ; la procédure
25748@code{simple-service} fournit un raccourci pour ce cas.
25749
25750@deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
25751Renvoie un service qui étend @var{target} avec @var{value}. Cela fonctionne
25752en créant un type de service singleton @var{name}, dont le service renvoyé
25753est une instance.
25754
25755Par exemple, cela étend mcron (@pxref{Exécution de tâches planifiées}) avec une
25756tâche supplémentaire :
25757
25758@example
25759(simple-service 'my-mcron-job mcron-service-type
25760 #~(job '(next-hour (3)) "guix gc -F 2G"))
25761@end example
25762@end deffn
25763
25764Au cœur de l'abstraction des services se cache la procédure
25765@code{fold-services}, responsable de la « compilation » d'une liste de
25766services en un répertoire unique qui contient tout ce qui est nécessaire au
25767démarrage et à l'exécution du système — le répertoire indiqué par la
25768commande @command{guix system build} (@pxref{Invoquer guix system}). En
25769soit, elle propage les extensions des services le long du graphe des
25770services, en mettant à jour chaque paramètre des nœuds sur son chemin,
25771jusqu'à atteindre le nœud racine.
25772
25773@deffn {Procédure Scheme} fold-services @var{services} @
25774 [#:target-type @var{system-service-type}]
25775Replie @var{services} en propageant leurs extensions jusqu'à la racine de
25776type @var{target-type} ; renvoie le service racine ajusté de cette manière.
25777@end deffn
25778
25779Enfin, le module @code{(gnu services)} définie aussi divers types de
25780services essentiels, dont certains sont listés ci-dessous.
25781
25782@defvr {Variable Scheme} system-service-type
25783C'est la racine du graphe des services. Il produit le répertoire du système
25784renvoyé par la commande @command{guix system build}.
25785@end defvr
25786
25787@defvr {Variable Scheme} boot-service-type
25788Le type du service « boot », qui produit le @dfn{script de démarrage}. Le
25789script de démarrage est ce que le disque de RAM initial lance au démarrage.
25790@end defvr
25791
25792@defvr {Variable Scheme} etc-service-type
25793Le type du service @file{/etc}. Ce service est utilisé pour créer des
25794fichiers dans @file{/etc} et peut être étendu en lui passant des tuples
25795nom/fichier comme ceci :
25796
25797@example
25798(list `("issue" ,(plain-file "issue" "Bienvenue !\n")))
25799@end example
25800
25801Dans cet exemple, l'effet serait d'ajouter un fichier @file{/etc/issue}
25802pointant vers le fichier donné.
25803@end defvr
25804
25805@defvr {Variable Scheme} setuid-program-service-type
25806Le type du « service setuid ». Ce service récupère des listes de noms de
25807fichiers exécutables, passés en tant que gexps, et les ajoute à l'ensemble
25808des programmes setuid root sur le système (@pxref{Programmes setuid}).
25809@end defvr
25810
25811@defvr {Variable Scheme} profile-service-type
25812De type du service qui rempli le @dfn{profil du système} — c.-à-d.@: les
25813programmes dans @file{/run/current-system/profile}. Les autres services
25814peuvent l'étendre en lui passant des listes de paquets à ajouter au profil
25815du système.
25816@end defvr
25817
25818
25819@node Services Shepherd
25820@subsection Services Shepherd
25821
25822@cindex services shepherd
25823@cindex PID 1
25824@cindex système d'init
25825Le module @code{(gnu services shepherd)} fournit une manière de définir les
25826services gérés par le GNU@tie{}Shepherd, qui est le système d'initialisation
25827— le premier processus démarré lorsque le système démarre, aussi connu comme
25828étant le PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd
25829Manual}).
25830
25831Les services dans le Shepherd peuvent dépendre les uns des autres. Par
25832exemple, le démon SSH peut avoir besoin d'être démarré après le démon
25833syslog, qui à son tour doit être démarré après le montage des systèmes de
25834fichiers. Le système d'exploitation simple déclaré précédemment
25835(@pxref{Utiliser le système de configuration}) crée un graphe de service comme
25836ceci :
25837
25838@image{images/shepherd-graph,,5in,Graphe de service typique du shepherd.}
25839
25840Vous pouvez générer un tel graphe pour n'importe quelle définition de
25841système d'exploitation avec la commande @command{guix system shepherd-graph}
25842(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
25843
25844The @code{%shepherd-root-service} is a service object representing
25845PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended by
25846passing it lists of @code{<shepherd-service>} objects.
25847
25848@deftp {Type de données} shepherd-service
25849Le type de données représentant un service géré par le Shepherd.
25850
25851@table @asis
25852@item @code{provision}
25853C'est une liste de symboles dénotant ce que le service fournit.
25854
25855Ce sont les noms qui peuvent être passés à @command{herd start},
25856@command{herd status} et les commandes similaires (@pxref{Invoking herd,,,
25857shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
25858@code{provides} slot,, shepherd, The GNU Shepherd Manual}, pour plus de
25859détails.
25860
25861@item @code{requirements} (par défaut : @code{'()})
25862Liste de symboles dénotant les services du Shepherd dont celui-ci dépend.
25863
25864@item @code{respawn?} (par défaut : @code{#t})
25865Indique s'il faut redémarrer le service lorsqu'il s'arrête, par exemple si
25866le processus sous-jacent meurt.
25867
25868@item @code{start}
25869@itemx @code{stop} (par défaut : @code{#~(const #f)})
25870Les champs @code{start} et @code{stop} se réfèrent à la capacité du Shepherd
25871de démarrer et d'arrêter des processus (@pxref{Service De- and
25872Constructors,,, shepherd, The GNU Shepherd Manual}). Ils sont donnés comme
25873des G-expressions qui sont étendues dans le fichier de configuration du
25874Shepherd (@pxref{G-Expressions}).
25875
25876@item @code{actions} (par défaut : @code{'()})
25877@cindex action, des services Shepherd
25878C'est une liste d'objets @code{shepherd-action} (voir plus bas) définissant
25879des @dfn{actions} supportées par le service, en plus des actions
25880@code{start} et @code{stop} standards. Les actions listées ici sont
25881disponibles en tant que sous-commande de @command{herd} :
25882
25883@example
25884herd @var{action} @var{service} [@var{arguments}@dots{}]
25885@end example
25886
25887@item @code{documentation}
25888Une chaîne de documentation, montrée lorsqu'on lance :
25889
25890@example
25891herd doc @var{service-name}
25892@end example
25893
25894where @var{service-name} is one of the symbols in @code{provision}
25895(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
25896
25897@item @code{modules} (default: @code{%default-modules})
25898C'est la liste des modules qui doivent être dans le contexte lorsque
25899@code{start} et @code{stop} sont évalués.
25900
25901@end table
25902@end deftp
25903
25904@deftp {Type de données} shepherd-action
25905C'est le type de données qui définie des actions supplémentaires
25906implémentées par un service Shepherd (voir au-dessus).
25907
25908@table @code
25909@item name
25910Symbole nommant l'action.
25911
25912@item documentation
25913C'est une chaîne de documentation pour l'action. Elle peut être consultée
25914avec :
25915
25916@example
25917herd doc @var{service} action @var{action}
25918@end example
25919
25920@item procedure
25921Cela devrait être une gexp qui s'évalue en une procédure à au moins un
25922argument, la « valeur de lancement » du service (@pxref{Slots of services,,,
25923shepherd, The GNU Shepherd Manual}).
25924@end table
25925
25926L'exemple suivant définie une action nommée @code{dire-bonjour} qui salue
25927amicalement l'utilisateur :
25928
25929@example
25930(shepherd-action
25931 (name 'dire-bonjour)
25932 (documentation "Dit salut !")
25933 (procedure #~(lambda (running . args)
25934 (format #t "Salut, l'ami ! arguments : ~s\n"
25935 args)
25936 #t)))
25937@end example
25938
25939En supposant que cette action est ajoutée dans le service @code{example},
25940vous pouvez écrire :
25941
25942@example
25943# herd dire-bonjour example
25944Salut, l'ami ! arguments : ()
25945# herd dire-bonjour example a b c
25946Salut, l'ami ! arguments : ("a" "b" "c")
25947@end example
25948
25949Comme vous pouvez le voir, c'est une manière assez sophistiquée de dire
25950bonjour. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual},
25951pour plus d'informations sur les actions.
25952@end deftp
25953
25954@defvr {Variable Scheme} shepherd-root-service-type
25955Le type de service pour le « service racine » du Shepherd — c.-à-d.@: le
25956PID@tie{}1.
25957
25958C'est le type de service que les extensions ciblent lorqu'elles veulent
25959créer un service shepherd (@pxref{Types service et services}, pour un
25960exemple). Chaque extension doit passer une liste de
25961@code{<shepherd-service>}.
25962@end defvr
25963
25964@defvr {Variable Scheme} %shepherd-root-service
25965Ce service représente le PID@tie{}1.
25966@end defvr
25967
25968
25969@node Documentation
25970@chapter Documentation
25971
25972@cindex documentation, recherche
25973@cindex chercher de la documentation
25974@cindex Info, format de documentation
25975@cindex man, pages de manuel
25976@cindex pages de manuel
25977Dans la plupart des cas les paquets installés avec Guix ont une
25978documentation. Il y a deux formats de documentation principaux : « Info »,
25979un format hypertexte navigable utilisé par les logiciels GNU et les « pages
25980de manuel » (ou « pages de man »), le format de documentation linéaire
25981traditionnel chez Unix. Les manuels Info sont disponibles via la commande
25982@command{info} ou avec Emacs, et les pages de man sont accessibles via la
25983commande @command{man}.
25984
25985Vous pouvez chercher de la documentation pour les logiciels installés sur
25986votre système par mot-clef. Par exemple, la commande suivante recherche des
25987informations sur « TLS » dans les manuels Info :
25988
25989@example
25990$ info -k TLS
25991"(emacs)Network Security" -- STARTTLS
25992"(emacs)Network Security" -- TLS
25993"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
25994"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
25995@dots{}
25996@end example
25997
25998@noindent
25999La commande suivante recherche le même mot-clef dans les pages de man :
26000
26001@example
26002$ man -k TLS
26003SSL (7) - OpenSSL SSL/TLS library
26004certtool (1) - GnuTLS certificate tool
26005@dots {}
26006@end example
26007
26008Ces recherches sont purement locales à votre ordinateur donc vous savez que
26009la documentation trouvée correspond à ce qui est effectivement installé,
26010vous pouvez y accéder hors ligne et votre vie privée est préservée.
26011
26012Une fois que vous avez ces résultats, vous pouvez visualiser la
26013documentation appropriée avec, disons :
26014
26015@example
26016$ info "(gnutls)Core TLS API"
26017@end example
26018
26019@noindent
26020ou :
26021
26022@example
26023$ man certtool
26024@end example
26025
26026Les manuels Info contiennent des sections et des indexs ainsi que des
26027hyperliens comme ce qu'on trouve sur les pages Web. Le lecteur
26028@command{info} (@pxref{Top, Info reader,, info-stnd, Stand-alone GNU Info})
26029et sa contre-partie dans Emacs (@pxref{Misc Help,,, emacs, The GNU Emacs
26030Manual}) fournissent des raccourcis claviers intuitifs pour naviguer dans
26031les manuels @xref{Getting Started,,, info, Info: An Introduction} pour
26032trouver une introduction sur la navigation dans info.
26033
26034@node Installer les fichiers de débogage
26035@chapter Installer les fichiers de débogage
26036
26037@cindex fichiers de débogage
26038Les binaires des programmes, produits par les compilateurs GCC par exemple,
26039sont typiquement écrits au format ELF, avec une section contenant des
26040@dfn{informations de débogage}. Les informations de débogage sont ce qui
26041permet au débogueur, GDB, de relier le code binaire et le code source ;
26042elles sont requises pour déboguer un programme compilé dans de bonnes
26043conditions.
26044
26045Le problème avec les informations de débogage est qu'elles prennent pas mal
26046de place sur le disque. Par exemple, les informations de débogage de la
26047bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
26048garder toutes les informations de débogage de tous les programmes installés
26049n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
26050pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
26051faciliter pour ses utilisateurs l'exercice de leurs libertés
26052(@pxref{Distribution GNU}).
26053
26054Heureusement, les utilitaires binaires de GNU (Binutils) et GDB fournissent
26055un mécanisme qui permet aux utilisateurs d'avoir le meilleur des deux mondes
26056: les informations de débogage peuvent être nettoyées des binaires et
26057stockées dans des fichiers séparés. GDB peut ensuite charger les
26058informations de débogage depuis ces fichiers, lorsqu'elles sont disponibles
26059(@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
26060
26061La distribution GNU se sert de cela pour stocker les informations de
26062débogage dans le sous-répertoire @code{lib/debug} d'une sortie séparée du
26063paquet appelée sans grande imagination @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Les utilisateurs peuvent choisir d'installer la sortie
26064@code{debug} d'un paquet lorsqu'ils en ont besoin. Par exemple, la commande
26065suivante installe les informations de débogage pour la bibliothèque C de GNU
26066et pour GNU Guile :
26067
26068@example
26069guix package -i glibc:debug guile:debug
26070@end example
26071
26072On doit ensuite dire à GDB de chercher les fichiers de débogage dans le
26073profil de l'utilisateur, en remplissant la variable
26074@code{debug-file-directory} (vous pourriez aussi l'instancier depuis le
26075fichier @file{~/.gdbinit}, @pxref{Startup,,, gdb, Debugging with GDB}) :
26076
26077@example
26078(gdb) set debug-file-directory ~/.guix-profile/lib/debug
26079@end example
26080
26081À partir de maintenant, GDB récupérera les informations de débogage dans les
26082fichiers @code{.debug} de @file{~/.guix-profile/lib/debug}.
26083
26084EN plus, vous voudrez sans doute que GDB puisse montrer le code source
26085débogué. Pour cela, vous devrez désarchiver le code source du paquet qui
26086vous intéresse (obtenu via @code{guix build --source}, @pxref{Invoquer guix build}) et pointer GDB vers ce répertoire des sources avec la commande
26087@code{directory} (@pxref{Source Path, @code{directory},, gdb, Debugging with
26088GDB}).
26089
26090@c XXX: keep me up-to-date
26091Le mécanisme de la sortie @code{debug} dans Guix est implémenté par le
26092@code{gnu-build-system} (@pxref{Systèmes de construction}). Actuellement, ce n'est pas
26093obligatoire — les informations de débogage sont disponibles uniquement si
26094les définitions déclarent explicitement une sortie @code{debug}. Cela
26095pourrait être modifié tout en permettant aux paquets de s'en passer dans le
26096futur si nos serveurs de construction peuvent tenir la charge. Pour
26097vérifier si un paquet a une sortie @code{debug}, utilisez @command{guix
26098package --list-available} (@pxref{Invoquer guix package}).
26099
26100
26101@node Mises à jour de sécurité
26102@chapter Mises à jour de sécurité
26103
26104@cindex mises à jour de sécurité
26105@cindex vulnérabilités
26106Parfois, des vulnérabilités importantes sont découvertes dans les paquets
26107logiciels et doivent être corrigées. Les développeurs de Guix essayent de
26108suivre les vulnérabilités connues et d'appliquer des correctifs aussi vite
26109que possible dans la branche @code{master} de Guix (nous n'avons pas encore
26110de branche « stable » contenant seulement des mises à jour de sécurité).
26111L'outil @command{guix lint} aide les développeurs à trouver les versions
26112vulnérables des paquets logiciels dans la distribution :
26113
26114@smallexample
26115$ guix lint -c cve
26116gnu/packages/base.scm:652:2: glibc@@2.21: probablement vulnérable à CVE-2015-1781, CVE-2015-7547
26117gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probablement vulnérable à CVE-2015-5276
26118gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probablement vulnérable à CVE-2016-1923, CVE-2016-1924
26119@dots{}
26120@end smallexample
26121
26122@xref{Invoquer guix lint}, pour plus d'informations.
26123
26124@quotation Remarque
26125À la version @value{VERSION}, la fonctionnalité ci-dessous est considérée
26126comme « bêta ».
26127@end quotation
26128
26129Guix suit une discipline de gestion de paquets fonctionnelle
26130(@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
26131@emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
26132peut grandement ralentir le déploiement de corrections dans les paquets du
26133cœur comme libc ou bash comme presque toute la distribution aurait besoin
26134d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
26135(@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
26136temps de souhaité.
26137
26138@cindex greffes
26139Pour corriger cela, Guix implémente les @dfn{greffes}, un mécanisme qui
26140permet un déploiement rapide des mises à jour de sécurité critiques sans le
26141coût associé à une reconstruction complète de la distribution. L'idée est
26142de reconstruire uniquement le paquet qui doit être corrigé puis de le «
26143greffer » sur les paquets qui sont explicitement installés par l'utilisateur
26144et qui se référaient avant au paquet d'origine. Le coût d'une greffe est
26145typiquement très bas, et plusieurs ordres de grandeurs moins élevé que de
26146reconstruire tout la chaîne de dépendance.
26147
26148@cindex remplacement de paquet, pour les greffes
26149For instance, suppose a security update needs to be applied to Bash. Guix
26150developers will provide a package definition for the ``fixed'' Bash, say
26151@code{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
26152original package definition is augmented with a @code{replacement} field
26153pointing to the package containing the bug fix:
26154
26155@example
26156(define bash
26157 (package
26158 (name "bash")
26159 ;; @dots{}
26160 (replacement bash-fixed)))
26161@end example
26162
26163From there on, any package depending directly or indirectly on Bash---as
26164reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
26165is installed is automatically ``rewritten'' to refer to @code{bash-fixed}
26166instead of @code{bash}. This grafting process takes time proportional to
26167the size of the package, usually less than a minute for an ``average''
26168package on a recent machine. Grafting is recursive: when an indirect
26169dependency requires grafting, then grafting ``propagates'' up to the package
26170that the user is installing.
26171
26172Currently, the length of the name and version of the graft and that of the
26173package it replaces (@code{bash-fixed} and @code{bash} in the example above)
26174must be equal. This restriction mostly comes from the fact that grafting
26175works by patching files, including binary files, directly. Other
26176restrictions may apply: for instance, when adding a graft to a package
26177providing a shared library, the original shared library and its replacement
26178must have the same @code{SONAME} and be binary-compatible.
26179
26180L'option en ligne de commande @option{--no-grafts} vous permet d'éviter les
26181greffes (@pxref{Options de construction communes, @option{--no-grafts}}). Donc la
26182commande :
26183
26184@example
26185guix build bash --no-grafts
26186@end example
26187
26188@noindent
26189renvoie le nom de fichier dans les dépôt du Bash original, alors que :
26190
26191@example
26192guix build bash
26193@end example
26194
26195@noindent
26196renvoie le nom de fichier du Bash « corrigé » de remplacement. Cela vous
26197permet de distinguer les deux variantes de Bash.
26198
26199Pour vérifier à quel Bash votre profil se réfère, vous pouvez lancer
26200(@pxref{Invoquer guix gc}) :
26201
26202@example
26203guix gc -R `readlink -f ~/.guix-profile` | grep bash
26204@end example
26205
26206@noindent
26207@dots{} et comparer les noms de fichiers que vous obtenez avec ceux du
26208dessus. De la même manière pour une génération du système Guix :
26209
26210@example
26211guix gc -R `guix system build my-config.scm` | grep bash
26212@end example
26213
26214Enfin, pour vérifier quelles processus Bash lancés vous utilisez, vous
26215pouvez utiliser la commande @command{lsof} :
26216
26217@example
26218lsof | grep /gnu/store/.*bash
26219@end example
26220
26221
26222@node Bootstrapping
26223@chapter Bootstrapping
26224
26225@c Adapted from the ELS 2013 paper.
26226
26227@cindex bootstrap
26228
26229Dans notre contexte, le bootstrap se réfère à la manière dont la
26230distribution est construite « à partir de rien ». Rappelez-vous que
26231l'environnement de construction d'une dérivation ne contient rien d'autre
26232que les entrées déclarées (@pxref{Introduction}). Donc il y a un problème
26233évident de poule et d'œuf : comment le premier paquet est-il construit ?
26234Comment le premier compilateur est-il construit ? Remarquez que c'est une
26235question qui intéressera uniquement le hacker curieux, pas l'utilisateur
26236normal, donc vous pouvez sauter cette section sans avoir honte si vous vous
26237considérez comme un « utilisateur normal ».
26238
26239@cindex binaires de bootstrap
26240Le système GNU est surtout fait de code C, avec la libc en son cœur. Le
26241système de construction GNU lui-même suppose la disponibilité d'un shell
26242Bourne et d'outils en ligne de commande fournis par GNU Coreutils, Awk,
26243Findutils, sed et grep. En plus, les programmes de construction — les
26244programmes qui exécutent @code{./configure}, @code{make} etc — sont écrits
26245en Guile Scheme (@pxref{Dérivations}). En conséquence, pour pouvoir
26246construire quoi que ce soit, de zéro, Guix a besoin de binaire
26247pré-construits de Guile, GCC, Binutils, la libc et des autres paquets
26248mentionnés plus haut — les @dfn{binaires de bootstrap}.
26249
26250Ces binaires de bootstrap sont pris comme des acquis, bien qu'on puisse les
26251recréer (ça arrive plus tard).
26252
26253@unnumberedsec Se préparer à utiliser les binaires de bootstrap
26254
26255@c As of Emacs 24.3, Info-mode displays the image, but since it's a
26256@c large image, it's hard to scroll. Oh well.
26257@image{images/bootstrap-graph,6in,,Graphe de dépendance des premières
26258dérivations de bootstrap}
26259
26260La figure ci-dessus montre le tout début du graphe de dépendances de la
26261distribution, correspondant aux définitions des paquets du module @code{(gnu
26262packages bootstrap)}. Une figure similaire peut être générée avec
26263@command{guix graph} (@pxref{Invoquer guix graph}), de cette manière :
26264
26265@example
26266guix graph -t derivation \
26267 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
26268 | dot -Tps > t.ps
26269@end example
26270
26271À ce niveau de détails, les choses sont légèrement complexes. Tout d'abord,
26272Guile lui-même consiste en an exécutable ELF, avec plusieurs fichiers Scheme
26273sources et compilés qui sont chargés dynamiquement quand il est exécuté.
26274Cela est stocké dans l'archive @file{guile-2.0.7.tar.xz} montrée dans ce
26275graphe. Cette archive fait parti de la distribution « source » de Guix, et
26276est insérée dans le dépôt avec @code{add-to-store} (@pxref{Le dépôt}).
26277
26278Mais comment écrire une dérivation qui décompresse cette archive et l'ajoute
26279au dépôt ? Pour résoudre ce problème, la dérivation
26280@code{guile-bootstrap-2.0.drv} — la première qui est construite — utilise
26281@code{bash} comme constructeur, qui lance @code{build-bootstrap-guile.sh},
26282qui à son tour appelle @code{tar} pour décompresser l'archive. Ainsi,
26283@file{bash}, @file{tar}, @file{xz} et @file{mkdir} sont des binaires liés
26284statiquement, qui font aussi partie de la distribution source de Guix, dont
26285le seul but est de permettre à l'archive de Guile d'être décompressée.
26286
26287Une fois que @code{guile-bootstrap-2.0.drv} est construit, nous avons un
26288Guile fonctionnel qui peut être utilisé pour exécuter les programmes de
26289construction suivants. Sa première tâche consiste à télécharger les
26290archives contenant les autres binaires pré-construits — c'est ce que la
26291dérivation @code{.tar.xz.drv} fait. Les modules Guix comme
26292@code{ftp-client.scm} sont utilisés pour cela. Les dérivations
26293@code{module-import.drv} importent ces modules dans un répertoire dans le
26294dépôt, en utilisant la disposition d'origine. Les dérivations
26295@code{module-import-compiled.drv} compilent ces modules, et les écrivent
26296dans un répertoire de sortie avec le bon agencement. Cela correspond à
26297l'argument @code{#:modules} de @code{build-expression->derivation}
26298(@pxref{Dérivations}).
26299
26300Enfin, les diverses archives sont décompressées par les dérivations
26301@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc, à partir de
26302quoi nous avons une chaîne de compilation C fonctionnelle.
26303
26304
26305@unnumberedsec Construire les outils de construction
26306
26307Le bootstrap est complet lorsque nous avons une chaîne d'outils complète qui
26308ne dépend pas des outils de bootstrap pré-construits dont on vient de
26309parler. Ce pré-requis d'indépendance est vérifié en s'assurant que les
26310fichiers de la chaîne d'outil finale ne contiennent pas de référence vers
26311les répertoires @file{/gnu/store} des entrées de bootstrap. Le processus
26312qui mène à cette chaîne d'outils « finale » est décrit par les définitions
26313de paquets qui se trouvent dans le module @code{(gnu packages
26314commencement)}.
26315
26316La commande @command{guix graph} nous permet de « dézoomer » comparé au
26317graphe précédent, en regardant au niveau des objets de paquets plutôt que
26318des dérivations individuelles — rappelez-vous qu'un paquet peut se traduire
26319en plusieurs dérivations, typiquement une dérivation pour télécharger ses
26320sources, une pour les modules Guile dont il a besoin et une pour
26321effectivement compiler le paquet depuis les sources. La commande :
26322
26323@example
26324guix graph -t bag \
26325 -e '(@@@@ (gnu packages commencement)
26326 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
26327@end example
26328
26329@noindent
26330produit le graphe de dépendances qui mène à la bibliothèque C « finale
26331»@footnote{Vous remarquerez qu'elle s'appelle @code{glibc-intermediate}, ce
26332qui suggère qu'elle n'est pas @emph{tout à fait} finale, mais c'est une
26333bonne approximation tout de même.}, que voici :
26334
26335@image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
26336paquets}
26337
26338@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
26339Le premier outil construit avec les binaires de bootstrap est GNU@tie{}Make
26340— appelé @code{make-boot0} ci-dessus — qui est un prérequis de tous les
26341paquets suivants . Ensuite, Findutils et Diffutils sont construits.
26342
26343Ensuite vient la première passe de Binutils et GCC, construits comme des
26344pseudo outils croisés — c.-à-d.@: dont @code{--target} égal à
26345@code{--host}. Ils sont utilisés pour construire la libc. Grâce à cette
26346astuce de compilation croisée, la libc est garantie de ne contenir aucune
26347référence à la chaîne d'outils initiale.
26348
26349À partir de là, les Bintulis et GCC finaux (pas visibles ci-dessus) sont
26350construits. GCC utilise @code{ld} du Binutils final et lie les programme
26351avec la libc qui vient d'être construite. Cette chaîne d'outils est
26352utilisée pour construire les autres paquets utilisés par Guix et par le
26353système de construction de GNU : Guile, Bash, Coreutils, etc.
26354
26355Et voilà ! À partir de là nous avons l'ensemble complet des outils auxquels
26356s'attend le système de construction GNU. Ils sont dans la variable
26357@code{%final-inputs} du module @code{(gnu packages commencement)} et sont
26358implicitement utilisés par tous les paquets qui utilisent le
26359@code{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
26360
26361
26362@unnumberedsec Construire les binaires de bootstrap
26363
26364@cindex binaires de bootstrap
26365Comme la chaîne d'outils finale ne dépend pas des binaires de bootstrap, ils
26366ont rarement besoin d'être mis à jour. Cependant, il est utile d'avoir une
26367manière de faire cela automatiquement, dans le cas d'une mise à jour et
26368c'est ce que le module @code{(gnu packages make-bootstrap)} fournit.
26369
26370La commande suivante construit les archives contenant les binaires de
26371bootstrap (Guile, Binutils, GCC, la libc et une archive contenant un mélange
26372de Coreutils et d'autres outils en ligne de commande de base) :
26373
26374@example
26375guix build bootstrap-tarballs
26376@end example
26377
26378Les archives générées sont celles qui devraient être référencées dans le
26379module @code{(gnu packages bootstrap)} au début de cette section.
26380
26381Vous êtes toujours là ? Alors peut-être que maintenant vous vous demandez,
26382quand est-ce qu'on atteint un point fixe ? C'est une question intéressante
26383! La réponse est inconnue, mais si vous voulez enquêter plus profondément
26384(et que vous avez les ressources en puissance de calcul et en capacité de
26385stockage pour cela), dites-le nous.
26386
26387@unnumberedsec Réduire l'ensemble des binaires de bootstrap
26388
26389Nous binaires de bootstrap incluent actuellement GCC, Guile, etc. C'est
26390beaucoup de code binaire ! Pourquoi est-ce un problème ? C'est un problème
26391parce que ces gros morceaux de code binaire sont en pratique impossibles à
26392auditer, ce qui fait qu'il est difficile d'établir quel code source les a
26393produit. Chaque binaire non auditable nous rend aussi vulnérable à des
26394portes dérobées dans les compilateurs comme le décrit Ken Thompson dans le
26395papier de 1984 @emph{Reflections on Trusting Trust}.
26396
26397Cela est rendu moins inquiétant par le fait que les binaires de bootstrap
26398ont été générés par une révision antérieure de Guix. Cependant, il leur
26399manque le niveau de transparence que l'on obtient avec le reste des paquets
26400du graphe de dépendance, où Guix nous donne toujours une correspondance
26401source-binaire. Ainsi, notre but est de réduire l'ensemble des binaires de
26402bootstrap au minimum.
26403
26404Le @uref{http://bootstrappable.org, site web Bootstrappable.org} liste les
26405projets en cours à ce sujet. L'un d'entre eux parle de remplacer le GCC de
26406bootstrap par une série d'assembleurs, d'interpréteurs et de compilateurs
26407d'une complexité croissante, qui pourraient être construits à partir des
26408sources à partir d'un assembleur simple et auditable. Votre aide est la
26409bienvenue !
26410
26411
26412@node Porter
26413@chapter Porter vers une nouvelle plateforme
26414
26415Comme nous en avons discuté plus haut, la distribution GNU est
26416auto-contenue, et cela est possible en se basant sur des « binaires de
26417bootstrap » pré-construits (@pxref{Bootstrapping}). Ces binaires sont
26418spécifiques au noyau de système d'exploitation, à l'architecture CPU et à
26419l'interface applicative binaire (ABI). Ainsi, pour porter la distribution
26420sur une plateforme qui n'est pas encore supportée, on doit construire ces
26421binaires de bootstrap et mettre à jour le module @code{(gnu packages
26422bootstrap)} pour les utiliser sur cette plateforme.
26423
26424Heureusement, Guix peut effectuer une @emph{compilation croisée} de ces
26425binaires de bootstrap. Lorsque tout va bien, et en supposant que la chaîne
26426d'outils GNU supporte la plateforme cible, cela peut être aussi simple que
26427de lancer une commande comme ceci :
26428
26429@example
26430guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
26431@end example
26432
26433Pour que cela fonctione, la procédure @code{glibc-dynamic-linker} dans
26434@code{(gnu packages bootstrap)} doit être augmentée pour renvoyer le bon nom
26435de fichier pour l'éditeur de lien dynamique de la libc sur cette plateforme
26436; de même, il faut indiquer cette nouvelle platefore à
26437@code{system->linux-architecture} dans @code{(gnu packages linux)}.
26438
26439Une fois qu'ils sont construits, le module @code{(gnu packages bootstrap)}
26440doit être mis à jour pour se référer à ces binaires sur la plateforme
26441cible. C'est à dire que les hashs et les URL des archives de bootstrap pour
26442la nouvelle plateforme doivent être ajoutés avec ceux des plateformes
26443actuellement supportées. L'archive de bootstrap de Guile est traitée
26444séparément : elle doit être disponible localement, et @file{gnu/local.mk} a
26445une règle pour la télécharger pour les architectures supportées ; vous devez
26446également ajouter une règle pour la nouvelle plateforme.
26447
26448En pratique, il peut y avoir des complications. Déjà, il se peut que le
26449triplet GNU étendu qui spécifie l'ABI (comme le suffixe @code{eabi}
26450ci-dessus) ne soit pas reconnu par tous les outils GNU. Typiquement, la
26451glibc en reconnais certains, alors que GCC utilise un drapeau de configure
26452@code{--with-abi} supplémentaire (voir @code{gcc.scm} pour trouver des
26453exemples où ce cas est géré). Ensuite, certains des paquets requis
26454pourraient échouer à se construire pour cette plateforme. Enfin, les
26455binaires générés pourraient être cassé pour une raison ou une autre.
26456
26457@c *********************************************************************
26458@include contributing.fr.texi
26459
26460@c *********************************************************************
26461@node Remerciements
26462@chapter Remerciements
26463
26464Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
26465Nix} conçu et implémenté par Eelco Dolstra, avec des contributions d'autres
26466personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
26467gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
26468comme les mises à jour de paquets transactionnelles et les retours en
26469arrière, les profils par utilisateurs et les processus de constructions
26470transparents pour les références. Sans ce travail, Guix n'existerait pas.
26471
26472Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
26473été une inspiration pour Guix.
26474
26475GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
26476grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
26477plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
26478liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
26479de l'infrastructure, en fournissant des images et des thèmes, en faisant des
26480suggestions et bien plus. Merci !
26481
26482
26483@c *********************************************************************
26484@node La licence GNU Free Documentation
26485@appendix La licence GNU Free Documentation
26486@cindex license, GNU Free Documentation License
26487@include fdl-1.3.texi
26488
26489@c *********************************************************************
26490@node Index des concepts
26491@unnumbered Index des concepts
26492@printindex cp
26493
26494@node Index de programmation
26495@unnumbered Index de programmation
26496@syncodeindex tp fn
26497@syncodeindex vr fn
26498@printindex fn
26499
26500@bye
26501
26502@c Local Variables:
26503@c ispell-local-dictionary: "american";
26504@c End: