gnu: emacs-slime-company: Don't use unstable tarball.
[jackhill/guix/guix.git] / doc / guix.fr.texi
CommitLineData
bf5c74e7
JL
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
3cacfa9e 13@frenchspacing on
bf5c74e7
JL
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
adfb167f 21@set KEY-SERVER pool.sks-keyservers.net
bf5c74e7 22
15f1bff4
JL
23@c The official substitute server used by default.
24@set SUBSTITUTE-SERVER ci.guix.fr.info
25
bf5c74e7 26@copying
15f1bff4
JL
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@*
bf5c74e7
JL
31Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
322015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
15f1bff4 33Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo
bf5c74e7
JL
34Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
352016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
36Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
47956fa0 37@copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017,
15f1bff4
JL
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@*
adfb167f
JL
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@*
bf5c74e7
JL
48Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
49Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
50@copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
51Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
524756d1 52Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
adfb167f
JL
53@copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
54Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
552018 Alex Vong@*
bf5c74e7
JL
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
3cacfa9e
LC
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 ».
bf5c74e7
JL
63@end copying
64
65@dircategory Administration système
66@direntry
2cf2c778 67* Guix: (guix.fr). Gérer les logiciels installés et la
bf5c74e7 68 configuration du système.
15f1bff4 69* guix package : (guix.fr)Invoquer guix package. Installer, supprimer et
2cf2c778
JL
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.
bf5c74e7
JL
78@end direntry
79
80@dircategory Développement logiciel
81@direntry
2cf2c778
JL
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.
bf5c74e7
JL
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
3cacfa9e
LC
108Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
109gestion de paquets fonctionnel écrit pour le système GNU@.
bf5c74e7 110
524756d1
JL
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.
adfb167f
JL
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}.
524756d1 122
bf5c74e7
JL
123@menu
124* Introduction:: Qu'est-ce que Guix ?
125* Installation:: Installer Guix.
15f1bff4 126* Installation du système:: Installer le système d'exploitation complet.
bf5c74e7 127* Gestion de paquets:: Installation des paquets, mises à jour, etc.
15f1bff4 128* Development:: Guix-aided software development.
bf5c74e7
JL
129* Interface de programmation:: Utiliser Guix en Scheme.
130* Utilitaires:: Commandes de gestion de paquets.
15f1bff4
JL
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.
bf5c74e7
JL
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
15f1bff4
JL
151Introduction
152
153
154
155* Managing Software the Guix Way:: What's special.
156* Distribution GNU:: The packages and tools.
157
bf5c74e7
JL
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
15f1bff4
JL
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* Effectuer l'installation:: Pour de vrai.
192* Installing Guix in a VM:: Guix System playground.
193* Construire l'image d'installation:: D'où vient tout cela.
194
bf5c74e7
JL
195Gestion de paquets
196
197
198
199* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
3cacfa9e 200* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
bf5c74e7
JL
201* Substituts:: Télécharger des binaire déjà construits.
202* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
203 résultats.
204* Invoquer guix gc:: Lancer le ramasse-miettes.
205* Invoquer guix pull:: Récupérer la dernière version de Guix et de
206 la distribution.
adfb167f
JL
207* Canaux:: Personnaliser la collection des paquets.
208* Inférieurs:: Interagir avec une autre révision de Guix.
209* Invoquer guix describe:: Affiche des informations sur la révision Guix
210 actuelle.
bf5c74e7
JL
211* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
212
213Substituts
214
215
216
217* Serveur de substituts officiel:: Une source particulière de substituts.
218* Autoriser un serveur de substituts:: Comment activer ou désactiver les
219 substituts.
15f1bff4 220* Authentification des substituts:: Comment Guix vérifie les substituts.
bf5c74e7
JL
221* Paramètres de serveur mandataire:: Comment récupérer des substituts à
222 travers un serveur mandataire.
223* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
224* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
225 un paquet binaire ?
226
15f1bff4
JL
227Development
228
229
230
231* Invoquer guix environment:: Mettre en place des environnements de
232 développement.
233* Invoquer guix pack:: Créer des lots de logiciels.
234
bf5c74e7
JL
235Interface de programmation
236
237
238
15f1bff4 239* Modules de paquets:: Les paquets du point de vu du programmeur.
bf5c74e7
JL
240* Définition des paquets:: Définir de nouveaux paquets.
241* Systèmes de construction:: Spécifier comment construire les paquets.
242* Le dépôt:: Manipuler le dépôt de paquets.
243* Dérivations:: Interface de bas-niveau avec les dérivations
244 de paquets.
15f1bff4 245* La monade du dépôt:: Interface purement fonctionnelle avec le
bf5c74e7
JL
246 dépôt.
247* G-Expressions:: Manipuler les expressions de construction.
adfb167f 248* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
bf5c74e7
JL
249
250Définition des paquets
251
252
253
1d8d69c8 254* Référence de paquet:: Le type de donnée des paquets.
bf5c74e7
JL
255* Référence d'origine:: Le type de données d'origine.
256
257Utilitaires
258
259
260
261* Invoquer guix build:: Construire des paquets depuis la ligne de
262 commande.
263* Invoquer guix edit:: Modifier les définitions de paquets.
264* Invoquer guix download:: Télécharger un fichier et afficher son hash.
265* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
266* Invoquer guix import:: Importer des définitions de paquets.
267* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
268* Invoquer guix lint:: Trouver des erreurs dans les définitions de
269 paquets.
270* Invoquer guix size:: Profiler l'utilisation du disque.
271* Invoquer guix graph:: Visualiser le graphe des paquets.
bf5c74e7
JL
272* Invoquer guix publish:: Partager des substituts.
273* Invoquer guix challenge:: Défier les serveurs de substituts.
274* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
275* Invoquer guix container:: Isolation de processus.
276* Invoquer guix weather:: Mesurer la disponibilité des substituts.
adfb167f 277* Invoquer guix processes:: Lister les processus clients.
bf5c74e7
JL
278
279Invoquer @command{guix build}
280
281
282
283* Options de construction communes:: Options de construction pour la
284 plupart des commandes.
285* Options de transformation de paquets:: Créer des variantes de paquets.
286* Options de construction supplémentaires:: Options spécifiques à «
287 guix build ».
288* Débogage des échecs de construction:: La vie d'un empaqueteur.
289
bf5c74e7
JL
290Configuration système
291
292
293
3cacfa9e
LC
294* Utiliser le système de configuration:: Personnaliser votre système
295 GNU@.
bf5c74e7
JL
296* Référence de système d'exploitation:: Détail sur la déclaration de
297 système d'exploitation.
298* Systèmes de fichiers:: Configurer les montages de systèmes de
299 fichiers.
300* Périphériques mappés:: Gestion des périphériques de bloc.
301* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
302* Régionalisation:: Paramétrer la langue et les conventions
303 culturelles.
304* Services:: Spécifier les services du système.
305* Programmes setuid:: Programmes tournant avec les privilèges root.
3cacfa9e 306* Certificats X.509:: Authentifier les serveurs HTTPS@.
bf5c74e7
JL
307* Name Service Switch:: Configurer le « name service switch » de la
308 libc.
309* Disque de RAM initial:: Démarrage de Linux-Libre.
310* Configuration du chargeur d'amorçage:: Configurer le chargeur
311 d'amorçage.
312* Invoquer guix system:: Instantier une configuration du système.
15f1bff4 313* Running Guix in a VM:: How to run Guix System in a virtual machine.
bf5c74e7
JL
314* Définir des services:: Ajouter de nouvelles définitions de services.
315
316Services
317
318
319
320* Services de base:: Services systèmes essentiels.
3cacfa9e
LC
321* Exécution de tâches planifiées:: Le service mcron.
322* Rotation des journaux:: Le service rottlog.
15f1bff4 323* Services réseau:: Paramètres réseau, démon SSH, etc.
3cacfa9e
LC
324* Système de fenêtrage X:: Affichage graphique.
325* Services d'impression:: Support pour les imprimantes locales et
326 distantes.
327* Services de bureaux:: D-Bus et les services de bureaux.
2cf2c778 328* Services de son:: Services ALSA et Pulseaudio.
3cacfa9e
LC
329* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
330* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
331* Services de messagerie:: Services de messagerie.
332* Services de téléphonie:: Services de téléphonie.
333* Services de surveillance:: Services de surveillance.
334* Services Kerberos:: Services Kerberos.
335* Services web:: Services web.
336* Services de certificats:: Certificats TLS via Let's Encrypt.
337* Services DNS:: Démons DNS@.
338* Services VPN:: Démons VPN
339* Système de fichiers en réseau:: Services liés à NFS@.
340* Intégration continue:: Le service Cuirass.
adfb167f
JL
341* Services de gestion de l'énergie:: Augmenter la durée de vie de la
342 batterie.
3cacfa9e
LC
343* Services audio:: MPD@.
344* Services de virtualisation:: Services de virtualisation.
345* Services de contrôle de version:: Fournit des accès distants à des
346 dépôts Git.
347* Services de jeu:: Serveurs de jeu.
348* Services divers:: D'autres services.
bf5c74e7
JL
349
350Définir des services
351
352
353
354* Composition de services:: Le modèle de composition des services.
355* Types service et services:: Types et services.
3cacfa9e 356* Référence de service:: Référence de l'API@.
bf5c74e7
JL
357* Services Shepherd:: Un type de service particulier.
358
bf5c74e7
JL
359@end detailmenu
360@end menu
361
362@c *********************************************************************
363@node Introduction
364@chapter Introduction
365
366@cindex but
15f1bff4
JL
367GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks'' using
368the international phonetic alphabet (IPA).} is a package management tool for
369and distribution of the GNU system. Guix makes it easy for unprivileged
370users to install, upgrade, or remove software packages, to roll back to a
371previous package set, to build packages from source, and generally assists
372with the creation and maintenance of software environments.
373
374@cindex Guix System
375@cindex GuixSD, now Guix System
376@cindex Guix System Distribution, now Guix System
377You can install GNU@tie{}Guix on top of an existing GNU/Linux system where
378it complements the available tools without interference
379(@pxref{Installation}), or you can use it as a standalone operating system
380distribution, @dfn{Guix@tie{}System}@footnote{We used to refer to Guix
381System as ``Guix System Distribution'' or ``GuixSD''. We now consider it
382makes more sense to group everything under the ``Guix'' banner since, after
383all, Guix System is readily available through the @command{guix system}
384command, even if you're using a different distro underneath!}. @xref{Distribution GNU}.
385
386@menu
387* Managing Software the Guix Way:: What's special.
388* Distribution GNU:: The packages and tools.
389@end menu
390
391@node Managing Software the Guix Way
392@section Managing Software the Guix Way
bf5c74e7
JL
393
394@cindex interfaces utilisateurs
15f1bff4
JL
395Guix provides a command-line package management interface (@pxref{Gestion de paquets}), tools to help with software development (@pxref{Development}),
396command-line utilities for more advanced usage, (@pxref{Utilitaires}), as well
397as Scheme programming interfaces (@pxref{Interface de programmation}).
bf5c74e7
JL
398@cindex démon de construction
399Son @dfn{démon de construction} est responsable de la construction des
400paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
401téléchargement des binaires pré-construits depuis les sources autorisées
402(@pxref{Substituts}).
403
404@cindex extensibilité de la distribution
405@cindex personnalisation, des paquets
406Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
407respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
3cacfa9e 408libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
bf5c74e7 409peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
3cacfa9e 410indépendants (@pxref{Modules de paquets}). Il est aussi
bf5c74e7
JL
411@emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
412définitions de paquets spécialisées à partir de définitions existantes, même
413depuis la ligne de commande (@pxref{Options de transformation de paquets}).
414
bf5c74e7 415@cindex gestion de paquet fonctionnelle
adfb167f 416@cindex isolation
bf5c74e7 417Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
3cacfa9e
LC
418fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
419processus de construction et d'installation des paquets est vu comme une
420@emph{fonction} dans le sens mathématique du terme. Cette fonction a des
bf5c74e7 421entrées (comme des scripts de construction, un compilateur et des
3cacfa9e
LC
422bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
423son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
424faire référence à des logiciels ou des scripts qui n'ont pas été
425explicitement passés en entrée. Une fonction de construction produit
426toujours le même résultat quand on lui donne le même ensemble d'entrée.
427Elle ne peut pas modifier l'environnement du système en cours d'exécution
428d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
429des fichiers en dehors de ses répertoires de construction et
430d'installation. Ce résultat s'obtient en lançant les processus de
431construction dans des environnements isolés (ou des @dfn{conteneurs}) où
432seules les entrées explicites sont visibles.
bf5c74e7
JL
433
434@cindex dépôt
435Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
436dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
3cacfa9e
LC
437(@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
438dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
bf5c74e7
JL
439contient un hash de toutes les entrées utilisées pour construire le paquet ;
440ainsi, changer une entrée donnera un nom de répertoire différent.
441
442Cette approche est le fondement des fonctionnalités les plus importante de
443Guix : le support des mises à jour des paquets et des retours en arrière
444transactionnels, l'installation différenciée par utilisateur et le ramassage
445de miettes pour les paquets (@pxref{Fonctionnalités}).
446
447
15f1bff4
JL
448@node Distribution GNU
449@section Distribution GNU
450
451@cindex Guix System
452Guix comes with a distribution of the GNU system consisting entirely of free
453software@footnote{The term ``free'' here refers to the
454@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to users of
455that software}.}. The distribution can be installed on its own
456(@pxref{Installation du système}), but it is also possible to install Guix as a
457package manager on top of an installed GNU/Linux system
458(@pxref{Installation}). When we need to distinguish between the two, we
459refer to the standalone distribution as Guix@tie{}System.
460
461la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
462Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
463complète des paquets disponibles se trouve
464@url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
465@command{guix package} (@pxref{Invoquer guix package}) :
466
467@example
468guix package --list-available
469@end example
470
471Notre but est de fournir une distribution logicielle entièrement libre de
472GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
473et l'intégration étroite des composants GNU en insistant sur les programmes
474et les outils qui aident l'utilisateur à exercer ses libertés.
475
476Les paquets sont actuellement disponibles pour les plateformes suivantes :
477
478@table @code
479
480@item x86_64-linux
481l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
482
483@item i686-linux
484l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
485
486@item armhf-linux
487l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
488NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
489Linux-libre ;
490
491@item aarch64-linux
492les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
493Le support est actuellement expérimental et limité. @xref{Contribuer},
494pour savoir comment aider !
495
496@item mips64el-linux
497les processeurs MIPS 64-bits little-endian, spécifiquement la série
498Loongson, ABI n32, avec le noyau Linux-libre.
499
500@end table
501
502With Guix@tie{}System, you @emph{declare} all aspects of the operating
503system configuration and Guix takes care of instantiating the configuration
504in a transactional, reproducible, and stateless fashion (@pxref{Configuration système}). Guix System uses the Linux-libre kernel, the Shepherd
505initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd
506Manual}), the well-known GNU utilities and tool chain, as well as the
507graphical environment or system services of your choice.
508
509Guix System is available on all the above platforms except
510@code{mips64el-linux}.
511
512@noindent
513Pour des informations sur comment porter vers d'autres architectures et
514d'autres noyau, @pxref{Porter}.
515
516La construction de cette distribution est un effort collaboratif et nous
517vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
518sur la manière de nous aider.
519
520
bf5c74e7
JL
521@c *********************************************************************
522@node Installation
523@chapter Installation
524
525@cindex installer Guix
bf5c74e7 526
15f1bff4
JL
527@quotation Remarque
528We recommend the use of this
529@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
530shell installer script} to install Guix on top of a running GNU/Linux
531system, thereafter called a @dfn{foreign distro}.@footnote{This section is
532concerned with the installation of the package manager, which can be done on
533top of a running GNU/Linux system. If, instead, you want to install the
534complete GNU operating system, @pxref{Installation du système}.} The script
535automates the download, installation, and initial configuration of Guix. It
536should be run as the root user.
537@end quotation
bf5c74e7
JL
538
539@cindex distro extérieure
adfb167f 540@cindex répertoires liés aux distro extérieures
15f1bff4
JL
541When installed on a foreign distro, GNU@tie{}Guix complements the available
542tools without interference. Its data lives exclusively in two directories,
543usually @file{/gnu/store} and @file{/var/guix}; other files on your system,
544such as @file{/etc}, are left untouched.
bf5c74e7
JL
545
546Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
547(@pxref{Invoquer guix pull}).
548
15f1bff4
JL
549If you prefer to perform the installation steps manually or want to tweak
550them, you may find the following subsections useful. They describe the
551software requirements of Guix, as well as how to install it manually and get
552ready to use it.
553
bf5c74e7
JL
554@menu
555* Installation binaire:: Commencer à utiliser Guix en un rien de temps
556 !
557* Prérequis:: Logiciels requis pour construire et lancer
558 Guix.
559* Lancer la suite de tests:: Tester Guix.
560* Paramétrer le démon:: Préparer l'environnement du démon de
561 construction.
562* Invoquer guix-daemon:: Lancer le démon de construction.
563* Réglages applicatifs:: Réglages spécifiques pour les application.
564@end menu
565
566@node Installation binaire
567@section Installation binaire
568
3cacfa9e 569@cindex installer Guix depuis les binaires
adfb167f 570@cindex script d'installation
15f1bff4 571Cette section décrit comment installer Guix sur un système quelconque depuis
3cacfa9e
LC
572un archive autonome qui fournit les binaires pour Guix et toutes ses
573dépendances. C'est souvent plus rapide que d'installer depuis les sources,
15f1bff4 574ce qui est décrit dans les sections suivantes. Le seul prérequis est
3cacfa9e 575d'avoir GNU@tie{}tar et Xz.
bf5c74e7 576
3cacfa9e 577L'installation se comme ceci :
bf5c74e7
JL
578
579@enumerate
580@item
3cacfa9e 581@cindex téléchargement du Guix binaire
adfb167f
JL
582Téléchargez l'archive binaire depuis
583@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
584où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
585laquelle tourne déjà le noyau Linux, etc.
bf5c74e7
JL
586
587@c The following is somewhat duplicated in ``System Installation''.
3cacfa9e
LC
588Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
589l'authenticité de l'archive avec, comme ceci :
bf5c74e7
JL
590
591@example
adfb167f
JL
592$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
593$ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
bf5c74e7
JL
594@end example
595
3cacfa9e
LC
596Si cette commande échoue parce que vous n'avez pas la clef publique requise,
597lancez cette commande pour l'importer :
bf5c74e7
JL
598
599@example
adfb167f
JL
600$ gpg --keyserver @value{KEY-SERVER} \
601 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
bf5c74e7
JL
602@end example
603
604@noindent
605@c end authentication part
3cacfa9e 606et relancez la commande @code{gpg --verify}.
bf5c74e7
JL
607
608@item
3cacfa9e
LC
609Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
610votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
611tant que @code{root}, lancez :
bf5c74e7
JL
612
613@example
614# cd /tmp
615# tar --warning=no-timestamp -xf \
3cacfa9e 616 guix-binary-@value{VERSION}.@var{système}.tar.xz
bf5c74e7
JL
617# mv var/guix /var/ && mv gnu /
618@end example
619
3cacfa9e 620Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
15f1bff4 621deuxième dossier contient un profil prêt à être utilisé pour @code{root}
3cacfa9e 622(voir les étapes suivantes).
bf5c74e7 623
3cacfa9e
LC
624Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
625écraserait ses propres fichiers essentiels.
bf5c74e7 626
3cacfa9e
LC
627L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
628pas d'avertissement disant que « l'horodatage est trop vieux pour être
629plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
630précédents ; les versions récentes n'ont pas ce problème). Cela vient du
631fait que les fichiers de l'archive ont pour date de modification zéro (ce
632qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
633contenu de l'archive ne dépende pas de la date de création, ce qui la rend
634reproductible.
bf5c74e7
JL
635
636@item
adfb167f
JL
637Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
638l'emplacement où @command{guix pull} installera les mises à jour
639(@pxref{Invoquer guix pull}) :
bf5c74e7
JL
640
641@example
adfb167f
JL
642# mkdir -p ~root/.config/guix
643# ln -sf /var/guix/profiles/per-user/root/current-guix \
644 ~root/.config/guix/current
bf5c74e7
JL
645@end example
646
3cacfa9e
LC
647Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
648variables d'environnement nécessaires :
bf5c74e7
JL
649
650@example
adfb167f 651# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
bf5c74e7
JL
652 source $GUIX_PROFILE/etc/profile
653@end example
654
655@item
3cacfa9e
LC
656Créez le groupe et les comptes utilisateurs pour les utilisateurs de
657construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
bf5c74e7
JL
658
659@item
3cacfa9e 660Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
bf5c74e7 661
3cacfa9e
LC
662Si votre distribution hôte utilise le système d'initialisation systemd, cela
663peut se faire avec ces commandes :
bf5c74e7
JL
664
665@c Versions of systemd that supported symlinked service files are not
666@c yet widely deployed, so we should suggest that users copy the service
667@c files into place.
668@c
669@c See this thread for more information:
670@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
671
672@example
adfb167f
JL
673# cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
674 /etc/systemd/system/
bf5c74e7
JL
675# systemctl start guix-daemon && systemctl enable guix-daemon
676@end example
677
3cacfa9e 678Si votre distribution hôte utilise le système d'initialisation Upstart :
bf5c74e7
JL
679
680@example
681# initctl reload-configuration
adfb167f
JL
682# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
683 /etc/init/
bf5c74e7
JL
684# start guix-daemon
685@end example
686
3cacfa9e 687Sinon, vous pouvez toujours démarrer le démon manuellement avec :
bf5c74e7
JL
688
689@example
adfb167f
JL
690# ~root/.config/guix/current/bin/guix-daemon \
691 --build-users-group=guixbuild
bf5c74e7
JL
692@end example
693
694@item
3cacfa9e
LC
695Rendez la commande @command{guix} disponible pour les autres utilisateurs
696sur la machine, par exemple avec :
bf5c74e7
JL
697
698@example
699# mkdir -p /usr/local/bin
700# cd /usr/local/bin
adfb167f 701# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
bf5c74e7
JL
702@end example
703
3cacfa9e
LC
704C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
705ici :
bf5c74e7
JL
706
707@example
708# mkdir -p /usr/local/share/info
709# cd /usr/local/share/info
adfb167f 710# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
bf5c74e7
JL
711 do ln -s $i ; done
712@end example
713
3cacfa9e
LC
714Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
715de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
716Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
717changer le chemin de recherche de Info).
bf5c74e7
JL
718
719@item
3cacfa9e 720@cindex substituts, autorisations
15f1bff4
JL
721To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its
722mirrors (@pxref{Substituts}), authorize them:
bf5c74e7
JL
723
724@example
adfb167f 725# guix archive --authorize < \
15f1bff4 726 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
bf5c74e7
JL
727@end example
728
729@item
3cacfa9e
LC
730Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
731pour que leur environnement Guix soit prêt à être utilisé,
732@pxref{Réglages applicatifs}.
bf5c74e7
JL
733@end enumerate
734
3cacfa9e 735Voilà, l'installation est terminée !
bf5c74e7 736
3cacfa9e
LC
737Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
738dans le profil de root :
bf5c74e7
JL
739
740@example
741# guix package -i hello
742@end example
743
3cacfa9e
LC
744Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
745ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
746retrouveriez gravement handicapé par l'absence de la commande
747@command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
748@code{guix package -r guix}.
bf5c74e7 749
3cacfa9e 750L'archive d'installation binaire peut être (re)produite et vérifiée
15f1bff4 751simplement en lançant la commande suivante dans l'arborescence des sources
3cacfa9e 752de Guix :
bf5c74e7
JL
753
754@example
755make guix-binary.@var{system}.tar.xz
756@end example
757
758@noindent
adfb167f 759...@: which, in turn, runs:
bf5c74e7
JL
760
761@example
adfb167f
JL
762guix pack -s @var{system} --localstatedir \
763 --profile-name=current-guix guix
bf5c74e7
JL
764@end example
765
3cacfa9e 766@xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
bf5c74e7
JL
767
768@node Prérequis
769@section Prérequis
770
15f1bff4 771Cette section dresse la liste des prérequis pour la construction de Guix
3cacfa9e
LC
772depuis les sources. La procédure de construction pour Guix est la même que
773pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
774fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
775Guix pour plus de détails.
bf5c74e7 776
15f1bff4
JL
777@cindex site officiel
778GNU Guix is available for download from its website at
779@url{https://www.gnu.org/software/guix/}.
780
3cacfa9e 781GNU Guix dépend des paquets suivants :
bf5c74e7
JL
782
783@itemize
15f1bff4 784@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.2.x;
adfb167f
JL
785@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
7860.1.0 ou supérieure,
bf5c74e7 787@item
3cacfa9e 788@uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
bf5c74e7 789(@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
3cacfa9e 790gnutls-guile, GnuTLS-Guile}),
bf5c74e7 791@item
adfb167f
JL
792@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
793version 0.1.0 ou supérieure,
2cf2c778
JL
794@item
795@c FIXME: Specify a version number once a release has been made.
3cacfa9e
LC
796@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
797ultérieur,
15f1bff4 798@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON};
3cacfa9e 799@item @url{http://zlib.net, zlib},
bf5c74e7
JL
800@item @url{http://www.gnu.org/software/make/, GNU Make}.
801@end itemize
802
3cacfa9e 803Les dépendances suivantes sont facultatives :
bf5c74e7
JL
804
805@itemize
bf5c74e7
JL
806@item
807@c Note: We need at least 0.10.2 for 'channel-send-eof'.
3cacfa9e
LC
808Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
809et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
bf5c74e7 810@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
15f1bff4 8110.10.2 ou ultérieure.
bf5c74e7
JL
812
813@item
3cacfa9e
LC
814Lorsque @url{http://www.bzip.org, libbz2} est disponible,
815@command{guix-daemon} peut l'utiliser pour compresser les journaux de
816construction.
bf5c74e7
JL
817@end itemize
818
3cacfa9e
LC
819À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
820paquets suivants sont aussi requis :
bf5c74e7
JL
821
822@itemize
adfb167f 823@item @url{http://gnupg.org/, GNU libgcrypt},
3cacfa9e
LC
824@item @url{http://sqlite.org, SQLite 3},
825@item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
826standard C++11.
bf5c74e7
JL
827@end itemize
828
3cacfa9e
LC
829@cindex répertoire d'état
830Lorsque vous configurez Guix sur un système qui a déjà une installation de
831Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
832existante avec l'option @code{--localstatedir} du script @command{configure}
bf5c74e7 833(@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
3cacfa9e
LC
834Standards}). Le script @command{configure} vous protège des mauvaises
835configurations involontaires de @var{localstatedir} pour éviter que vous ne
836corrompiez votre dépôt (@pxref{Le dépôt}).
837
838@cindex Nix, compatibilité
839Lorsque vous avez une installation fonctionnelle du
840@url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
841configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
842trois dépendances au dessus.
843
844Guix est compatible avec Nix, donc il est possible de partager le même dépôt
845entre les deux. Pour cela, vous devez passer à @command{configure} non
846seulement la même valeur de @code{--with-store-dir} mais aussi la même
847valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
848spécifie l'emplacement de la base de données qui stocke les métadonnées sur
849le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
850@code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
851Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
852partager le dépôt avec Nix.
bf5c74e7
JL
853
854@node Lancer la suite de tests
855@section Lancer la suite de tests
856
3cacfa9e
LC
857@cindex suite de tests
858Après avoir lancé @command{configure} et @code{make} correctement, c'est une
859bonne idée de lancer la suite de tests. Elle peut aider à trouver des
860erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
861lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
862d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
bf5c74e7
JL
863
864@example
865make check
866@end example
867
3cacfa9e
LC
868Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
869l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
870lancement peut prendre plusieurs minutes sur une machine récente ; les
871lancements suivants seront plus rapides car le dépôt créé pour les tests
872aura déjà plusieurs choses en cache.
bf5c74e7 873
3cacfa9e
LC
874Il est aussi possible de lancer un sous-ensemble des tests en définissant la
875variable makefile @code{TESTS} comme dans cet exemple :
bf5c74e7
JL
876
877@example
878make check TESTS="tests/store.scm tests/cpio.scm"
879@end example
880
3cacfa9e
LC
881Par défaut, les résultats des tests sont affichés au niveau du fichier.
882Pour voir les détails de chaque cas de test individuel, il est possible de
15f1bff4 883définir la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
3cacfa9e 884exemple :
bf5c74e7
JL
885
886@example
887make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
888@end example
889
3cacfa9e
LC
890Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
891le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
892ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
893dans votre message.
bf5c74e7 894
15f1bff4
JL
895Guix also comes with a whole-system test suite that tests complete Guix
896System instances. It can only run on systems where Guix is already
897installed, using:
bf5c74e7
JL
898
899@example
900make check-system
901@end example
902
903@noindent
3cacfa9e
LC
904Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
905des tests à lancer :
bf5c74e7
JL
906
907@example
908make check-system TESTS="basic mcron"
909@end example
910
911Ces tests systèmes sont définis dans les modules @code{(gnu tests
912@dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
3cacfa9e
LC
913avec une instrumentation légère dans une machine virtuelle (VM). Ils
914peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
915la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
916Certains requièrent beaucoup d'espace disque pour contenir les images des
917VM@.
bf5c74e7 918
3cacfa9e
LC
919De nouveau, en cas d'échec, envoyez tous les détails à
920@email{bug-guix@@gnu.org}.
bf5c74e7
JL
921
922@node Paramétrer le démon
923@section Paramétrer le démon
924
3cacfa9e
LC
925@cindex démon
926Les opérations comme la construction d'un paquet ou le lancement du
927ramasse-miettes sont toutes effectuées par un processus spécialisé, le
928@dfn{démon de construction}, pour le compte des clients. Seul le démon peut
929accéder au dépôt et à sa base de données associée. Ainsi, toute opération
930manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
931commande comme @command{guix package} et @command{guix build} communiquent
932avec le démon (@i{via} des appels de procédures distantes) pour lui dire
933quoi faire.
bf5c74e7
JL
934
935Les sections suivantes expliquent comment préparer l'environnement du démon
3cacfa9e 936de construction. Voir aussi @ref{Substituts} pour apprendre comment
bf5c74e7
JL
937permettre le téléchargement de binaires pré-construits.
938
939@menu
940* Réglages de l'environnement de construction:: Préparer l'environnement
941 de construction isolé.
942* Réglages du délestage du démon:: Envoyer des constructions à des
943 machines distantes.
944* Support de SELinux:: Utiliser une politique SELinux pour le démon.
945@end menu
946
947@node Réglages de l'environnement de construction
948@subsection Réglages de l'environnement de construction
949
3cacfa9e
LC
950@cindex environnement de construction
951Dans une installation standard multi-utilisateurs, Guix et son démon — le
952programme @command{guix-daemon} — sont installé par l'administrateur système
953; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
954lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
955outils Guix pour construire des paquets ou accéder au dépôt et le démon le
956fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
957permet le partage des paquets déjà construits entre les utilisateurs.
958
959@cindex utilisateurs de construction
960Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
961forcément envie que les processus de construction de paquets tournent aussi
962en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
963vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
964que les processus de construction démarrés par le démon utiliseront. Ces
965utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
966personnel ; ils seront seulement utilisés quand le démon délaissera ses
967privilèges @code{root} dans les processus de construction. En ayant
968plusieurs de ces utilisateurs, vous permettez au démon de lancer des
969processus de construction distincts sous des UID différent, ce qui garanti
970qu'aucune interférence n'ait lieu entre les uns et les autres — une
971fonctionnalité essentielle puisque les constructions sont supposées être des
972fonctions pures (@pxref{Introduction}).
973
974Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
975construction comme ceci (avec la syntaxe Bash et les commandes
976@code{shadow}) :
bf5c74e7
JL
977
978@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
979@c for why `-G' is needed.
980@example
981# groupadd --system guixbuild
982# for i in `seq -w 1 10`;
983 do
984 useradd -g guixbuild -G guixbuild \
985 -d /var/empty -s `which nologin` \
3cacfa9e 986 -c "Utilisateur de construction Guix $i" --system \
bf5c74e7
JL
987 guixbuilder$i;
988 done
989@end example
990
991@noindent
3cacfa9e
LC
992Le nombre d'utilisateurs de construction détermine le nombre de tâches de
993constructions qui peuvent tourner en parallèle, tel que spécifié par
994l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
995@option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
996commandes liées, vous devrez ajouter les utilisateurs de construction au
997groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
998@code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
999
1000Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
1001la commande suivante@footnote{Si votre machine utilise le système
1002d'initialisation systemd, copiez le fichier
1003@file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
1004@file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
1005démarré automatiquement. De même, si votre machine utilise le système
1006d'initialisation Upstart, copiez le fichier
1007@file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
1008@file{/etc/init}.} :
bf5c74e7
JL
1009
1010@example
1011# guix-daemon --build-users-group=guixbuild
1012@end example
1013
1014@cindex chroot
1015@noindent
3cacfa9e
LC
1016De cette façon, le démon démarre les processus de construction dans un
1017chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
1018défaut, l'environnement chroot ne contient rien d'autre que :
bf5c74e7
JL
1019
1020@c Keep this list in sync with libstore/build.cc! -----------------------
1021@itemize
1022@item
3cacfa9e
LC
1023un répertoire @code{/dev} minimal, créé presque indépendamment du
1024@code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
1025fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
1026l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
1027a pas.} ;
bf5c74e7
JL
1028
1029@item
3cacfa9e
LC
1030le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
1031on utilise une espace de nom séparé pour les PID ;
bf5c74e7
JL
1032
1033@item
3cacfa9e
LC
1034@file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
1035pour l'utilisateur @file{nobody} ;
bf5c74e7
JL
1036
1037@item
3cacfa9e 1038@file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
bf5c74e7
JL
1039
1040@item
3cacfa9e
LC
1041@file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
1042@code{127.0.0.1} ;
bf5c74e7
JL
1043
1044@item
3cacfa9e 1045un répertoire @file{/tmp} inscriptible.
bf5c74e7
JL
1046@end itemize
1047
3cacfa9e
LC
1048Vous pouvez influencer le répertoire où le démon stocke les arbres de
1049construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
1050l'arbre de construction dans le chroot sera toujours appelé
1051@file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
1052dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
1053@code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
1054ce qui évite des différences lorsque le processus de construction retient le
1055nom de leur répertoire de construction.
bf5c74e7
JL
1056
1057@vindex http_proxy
1058Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
1059pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
1060fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
1061
3cacfa9e
LC
1062Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
1063toujours possible de lancer @command{guix-daemon} si vous passez
1064@code{--disable-chroot}. Cependant, les processus de construction ne seront
1065pas isolés les uns des autres ni du reste du système. Ainsi les processus
1066de construction peuvent interférer les uns avec les autres, et peuvent
1067accéder à des programmes, des bibliothèques et d'autres fichiers présents
1068sur le système — ce qui rend plus difficile de les voir comme des fonctions
1069@emph{pures}.
bf5c74e7
JL
1070
1071
1072@node Réglages du délestage du démon
3cacfa9e
LC
1073@subsection Utiliser le dispositif de déchargement
1074
1075@cindex déchargement
1076@cindex crochet de construction
1077Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
1078constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
1079de construction} @code{offload}@footnote{Cette fonctionnalité n'est
1080disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
1081Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
1082lit une liste de machines de constructions spécifiée par l'utilisateur dans
1083@file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
1084demandée, par exemple par @code{guix build}, le démon essaie de la décharger
1085sur une des machines qui satisfont les contraintes de la dérivation, en
1086particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
1087prérequis manquants pour la construction sont copiés par SSH sur la machine
1088de construction qui procède ensuite à la construction ; si elle réussi, les
1089sorties de la construction sont copiés vers la machine de départ.
1090
1091Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
bf5c74e7
JL
1092
1093@example
1094(list (build-machine
1095 (name "eightysix.example.org")
1096 (system "x86_64-linux")
1097 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1098 (user "bob")
3cacfa9e 1099 (speed 2.)) ;très rapide !
bf5c74e7
JL
1100
1101 (build-machine
1102 (name "meeps.example.org")
1103 (system "mips64el-linux")
1104 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1105 (user "alice")
1106 (private-key
1107 (string-append (getenv "HOME")
1108 "/.ssh/identity-for-guix"))))
1109@end example
1110
1111@noindent
3cacfa9e
LC
1112Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
1113construction, une pour l'architecture @code{x86_64} et une pour
1114l'architecture @code{mips64el}.
1115
1116En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
1117fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
1118valeur de retour doit être une liste d'objets @code{build-machine}. Même si
1119cet exemple montre une liste fixée de machines de construction, on pourrait
1120imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
1121constructions potentielles découvertes sur le réseau local
bf5c74e7 1122(@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
3cacfa9e 1123Programs}). Le type de données @code{build-machine} est détaillé plus bas.
bf5c74e7 1124
3cacfa9e
LC
1125@deftp {Type de données} build-machine
1126Ce type de données représente les machines de construction sur lesquelles le
1127démon peut décharger des constructions. Les champs importants sont :
bf5c74e7
JL
1128
1129@table @code
1130
1131@item name
3cacfa9e 1132Le nom d'hôte de la machine distante.
bf5c74e7
JL
1133
1134@item system
3cacfa9e 1135Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
bf5c74e7
JL
1136
1137@item user
3cacfa9e
LC
1138Le compte utilisateur à utiliser lors de la connexion à la machine distante
1139par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
1140protégée par mot de passe pour permettre des connexions non-interactives.
bf5c74e7
JL
1141
1142@item host-key
3cacfa9e
LC
1143Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
1144OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
1145connexion. C'est une longue chaîne qui ressemble à cela :
bf5c74e7
JL
1146
1147@example
1148ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1149@end example
1150
3cacfa9e
LC
1151Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
1152trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
bf5c74e7 1153
3cacfa9e
LC
1154Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
1155@file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
1156convertie au format OpenSSH avec @command{lsh-export-key}
1157(@pxref{Converting keys,,, lsh, LSH Manual}) :
bf5c74e7
JL
1158
1159@example
1160$ lsh-export-key --openssh < /etc/lsh/host-key.pub
1161ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1162@end example
1163
1164@end table
1165
3cacfa9e 1166Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
bf5c74e7
JL
1167
1168@table @asis
1169
3cacfa9e
LC
1170@item @code{port} (par défaut : @code{22})
1171Numéro de port du serveur SSH sur la machine.
bf5c74e7 1172
3cacfa9e 1173@item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
adfb167f
JL
1174Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
1175au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
1176passe.
bf5c74e7 1177
3cacfa9e
LC
1178Remarquez que la valeur par défaut est la clef privée @emph{du compte
1179root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
bf5c74e7 1180
3cacfa9e
LC
1181@item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
1182@itemx @code{compression-level} (par défaut : @code{3})
1183Les méthodes de compression au niveau SSH et le niveau de compression
1184demandé.
bf5c74e7 1185
3cacfa9e
LC
1186Remarquez que le déchargement utilise la compression SSH pour réduire la
1187bande passante utilisée lors du transfert vers et depuis les machines de
1188construction.
bf5c74e7 1189
3cacfa9e
LC
1190@item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
1191Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
1192écoute sur cette machine.
bf5c74e7 1193
3cacfa9e
LC
1194@item @code{parallel-builds} (par défaut : @code{1})
1195Le nombre de constructions qui peuvent tourner simultanément sur la machine.
bf5c74e7 1196
3cacfa9e
LC
1197@item @code{speed} (par défaut : @code{1.0})
1198Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
1199à préférer les machines avec un plus grand facteur de vitesse.
bf5c74e7 1200
3cacfa9e
LC
1201@item @code{features} (par défaut : @code{'()})
1202Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
1203par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
1204module Linux KVM et le support matériel correspondant. Les dérivations
1205peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
1206les machines de construction correspondantes.
bf5c74e7
JL
1207
1208@end table
1209@end deftp
1210
15f1bff4
JL
1211The @command{guix} command must be in the search path on the build
1212machines. You can check whether this is the case by running:
bf5c74e7
JL
1213
1214@example
15f1bff4 1215ssh build-machine guix repl --version
bf5c74e7
JL
1216@end example
1217
3cacfa9e
LC
1218Il reste une dernière chose à faire maintenant que @file{machines.scm} est
1219en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
1220transférés entre les dépôts des machines. Pour que cela fonctionne, vous
1221devez d'abord générer une paire de clef sur chaque machine pour permettre au
1222démon d'exporter des archives signées des fichiers de son dépôt
1223(@pxref{Invoquer guix archive}) :
bf5c74e7
JL
1224
1225@example
1226# guix archive --generate-key
1227@end example
1228
1229@noindent
3cacfa9e
LC
1230Chaque machine de construction doit autoriser la clef de la machine
1231maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
bf5c74e7
JL
1232
1233@example
1234# guix archive --authorize < master-public-key.txt
1235@end example
1236
1237@noindent
3cacfa9e
LC
1238De même, la machine maîtresse doit autoriser les clefs de chaque machine de
1239construction.
bf5c74e7 1240
3cacfa9e
LC
1241Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
1242deux-à-deux entre le maître et les machines de construction. Concrètement,
1243lorsque le maître reçoit des fichiers d'une machine de construction (et
1244vice-versa), son démon de construction s'assure qu'ils sont authentiques,
1245n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
1246autorisée.
bf5c74e7 1247
3cacfa9e
LC
1248@cindex test du déchargement
1249Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
1250nœud maître :
bf5c74e7
JL
1251
1252@example
1253# guix offload test
1254@end example
1255
3cacfa9e
LC
1256Cela essaiera de se connecter à toutes les machines de construction
1257spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
1258modules Guix sont disponibles sur toutes les machines et tentera d'exporter
1259vers la machine et d'importer depuis elle, et rapportera toute erreur
1260survenu pendant le processus.
bf5c74e7 1261
3cacfa9e
LC
1262Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
1263la ligne de commande :
bf5c74e7
JL
1264
1265@example
1266# guix offload test machines-qualif.scm
1267@end example
1268
3cacfa9e
LC
1269Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
1270correspond à une expression rationnelle comme ceci :
bf5c74e7
JL
1271
1272@example
1273# guix offload test machines.scm '\.gnu\.org$'
1274@end example
1275
3cacfa9e
LC
1276@cindex statut du déchargement
1277Pour afficher la charge actuelle de tous les hôtes de construction, lancez
1278cette commande sur le nœud principal :
bf5c74e7
JL
1279
1280@example
1281# guix offload status
1282@end example
1283
1284
1285@node Support de SELinux
1286@subsection Support de SELinux
1287
3cacfa9e
LC
1288@cindex SELinux, politique du démon
1289@cindex contrôle d'accès obligatoire, SELinux
1290@cindex sécurité, guix-daemon
15f1bff4
JL
1291Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that can
1292be installed on a system where SELinux is enabled, in order to label Guix
1293files and to specify the expected behavior of the daemon. Since Guix System
1294does not provide an SELinux base policy, the daemon policy cannot be used on
1295Guix System.
bf5c74e7 1296
3cacfa9e
LC
1297@subsubsection Installer la politique SELinux
1298@cindex SELinux, installation de la politique
1299Pour installer la politique, lancez cette commande en root :
bf5c74e7
JL
1300
1301@example
1302semodule -i etc/guix-daemon.cil
1303@end example
1304
3cacfa9e
LC
1305Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
1306mécanisme différent fournit par votre système.
bf5c74e7 1307
3cacfa9e
LC
1308Une fois la politique installée, le système de fichier ré-étiqueté et le
1309démon redémarré, il devrait être lancé dans le contexte
1310@code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
bf5c74e7
JL
1311
1312@example
1313ps -Zax | grep guix-daemon
1314@end example
1315
3cacfa9e
LC
1316Surveillez les fichiers journaux de SELinux pendant que vous lancez une
1317commande comme @code{guix build hello} pour vous convaincre que SELniux
1318permet toutes les opérations nécessaires.
bf5c74e7
JL
1319
1320@subsubsection Limitations
3cacfa9e 1321@cindex SELinux, limites
bf5c74e7 1322
15f1bff4 1323La politique n'est pas parfaite. Voici une liste de limitations et de
3cacfa9e
LC
1324bizarreries qui vous devriez prendre en compte avant de déployer la
1325politique SELinux fournie pour le démon Guix.
bf5c74e7
JL
1326
1327@enumerate
1328@item
3cacfa9e
LC
1329@code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
1330opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
1331soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
1332une étiquette inutilisée, mais il serait préférable de définir des règles
1333sur les sockets uniquement pour cette étiquette.
bf5c74e7
JL
1334
1335@item
3cacfa9e
LC
1336@code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
1337Par conception, l'étiquette de fichier de la destination d'un lien
1338symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
1339les profils sous $localstatedir aient une étiquette, les liens vers ces
1340profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
1341Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
1342Mais pour les liens du répertoire personnel de l'utilisateur root, ou
1343@file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
1344fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
1345ces liens.
bf5c74e7
JL
1346
1347@item
3cacfa9e
LC
1348La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
1349fonctionner. Cela demande des règles supplémentaires car SELinux traite les
1350sockets réseau différemment des fichiers.
bf5c74e7
JL
1351
1352@item
3cacfa9e
LC
1353Actuellement tous les fichiers qui correspondent à l'expression rationnelle
1354@code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
1355@code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
1356nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
1357@code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
1358un paquet qui fournit cet exécutable et convaincre un utilisateur de
1359l'installer et de le lancer, ce qui l'élève dans le domaine
1360@code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
1361d'accéder à des fichiers autorisés pour les processus de ce domaine.
1362
1363Nous pourrions générer une politique bien plus restrictive à l'installation,
1364pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
1365@code{guix-daemon} actuellement installé soit étiqueté avec
1366@code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
1367plus large. L'inconvénient c'est que root devrait installer ou mettre à
1368jour la politique à l'installation à chaque fois que le paquet Guix qui
1369fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
1370jour.
bf5c74e7
JL
1371@end enumerate
1372
1373@node Invoquer guix-daemon
3cacfa9e 1374@section Invoquer @command{guix-daemon}
bf5c74e7 1375
3cacfa9e
LC
1376Le programme @command{guix-daemon} implémente toutes les fonctionnalités
1377d'accès au dépôt. Cela inclus le lancement des processus de construction,
1378le lancement du ramasse-miettes, la demande de disponibilité des résultats
1379de construction, etc. Il tourne normalement en @code{root} comme ceci :
bf5c74e7
JL
1380
1381@example
1382# guix-daemon --build-users-group=guixbuild
1383@end example
1384
1385@noindent
1386Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
1387
1388@cindex chroot
3cacfa9e
LC
1389@cindex conteneur, environnement de construction
1390@cindex environnement de construction
1391@cindex constructions reproductibles
bf5c74e7
JL
1392Par défaut, @command{guix-daemon} lance les processus de construction sous
1393différents UID récupérés depuis le groupe de construction spécifié avec
3cacfa9e 1394@code{--build-users-group}. En plus, chaque processus de construction est
bf5c74e7
JL
1395lancé dans un environnement chroot qui ne contient que le sous-ensemble du
1396dépôt dont le processus de construction dépend, tel que spécifié par sa
1397dérivation (@pxref{Interface de programmation, dérivation}), plus un
3cacfa9e
LC
1398ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
1399contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
1400l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
1401propre arborescence du système de fichier, elle a un espace de montage
1402séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
1403obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
1404
1405Lorsque le démon effectue une construction pour le compte de l'utilisateur,
1406il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
1407variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
adfb167f
JL
1408conteneur pendant la durée de la construction, bien que dans le conteneur,
1409l'arborescence de construction est toujours appelée
1410@file{/tmp/guix-build-@var{name}.drv-0}.
3cacfa9e
LC
1411
1412Le répertoire de construction est automatiquement supprimé à la fin, à moins
1413que la construction n'ait échoué et que le client ait spécifié
1414@option{--keep-failed} (@pxref{Invoquer guix build,
1415@option{--keep-failed}}).
1416
adfb167f
JL
1417Le démon écoute les connexions et démarre un sous-processus pour chaque
1418session démarrée par un client (l'une des sous-commandes de
1419@command{guix}). La commande @command{guix processes} vous permet d'obtenir
1420un aperçu de l'activité sur votre système en affichant chaque session et
1421client actif. @xref{Invoquer guix processes} pour plus d'informations.
1422
3cacfa9e 1423Les options en ligne de commande suivantes sont disponibles :
bf5c74e7
JL
1424
1425@table @code
3cacfa9e
LC
1426@item --build-users-group=@var{groupe}
1427Prendre les utilisateurs de @var{group} pour lancer les processus de
bf5c74e7
JL
1428construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
1429
1430@item --no-substitutes
3cacfa9e
LC
1431@cindex substituts
1432Ne pas utiliser de substitut pour les résultats de la construction.
1433C'est-à-dire, toujours construire localement plutôt que de permettre le
1434téléchargement de binaires pré-construits (@pxref{Substituts}).
bf5c74e7 1435
3cacfa9e
LC
1436Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
1437toujours activer explicitement la substitution @i{via} l'appel de procédure
1438distante @code{set-build-options} (@pxref{Le dépôt}).
bf5c74e7
JL
1439
1440@item --substitute-urls=@var{urls}
1441@anchor{daemon-substitute-urls}
15f1bff4
JL
1442Consider @var{urls} the default whitespace-separated list of substitute
1443source URLs. When this option is omitted,
1444@indicateurl{https://@value{SUBSTITUTE-SERVER}} is used.
bf5c74e7
JL
1445
1446Cela signifie que les substituts sont téléchargés depuis les @var{urls},
1447tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
1448
3cacfa9e 1449@cindex crochet de construction
bf5c74e7 1450@item --no-build-hook
3cacfa9e 1451Ne pas utiliser le @dfn{crochet de construction}.
bf5c74e7 1452
3cacfa9e
LC
1453Le crochet de construction est un programme d'aide qui le démon peut
1454démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
1455utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
bf5c74e7
JL
1456
1457@item --cache-failures
3cacfa9e
LC
1458Mettre les échecs de construction en cache. Par défaut, seules les
1459constructions réussies sont mises en cache.
bf5c74e7 1460
3cacfa9e
LC
1461Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
1462être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
1463échoués ; @command{guix gc --clear-failures} vide la liste des éléments
1464aillant échoué. @xref{Invoquer guix gc}.
bf5c74e7
JL
1465
1466@item --cores=@var{n}
1467@itemx -c @var{n}
3cacfa9e
LC
1468Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
1469signifie autant que possible.
bf5c74e7 1470
3cacfa9e
LC
1471La valeur par défaut est @code{0}, mais elle peut être modifiée par les
1472clients comme avec l'option @code{--cores} de @command{guix build}
1473(@pxref{Invoquer guix build}).
bf5c74e7 1474
3cacfa9e
LC
1475L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
1476dans le processus de construction, qui peut ensuite l'utiliser pour
1477exploiter le parallélisme en interne — par exemple en lançant @code{make
1478-j$NIX_BUILD_CORES}.
bf5c74e7
JL
1479
1480@item --max-jobs=@var{n}
1481@itemx -M @var{n}
3cacfa9e
LC
1482Permettre au plus @var{n} travaux de construction en parallèle. La valeur
1483par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
1484construction ne sera effectuée localement ; à la place, le démon déchargera
1485les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
bf5c74e7 1486
3cacfa9e
LC
1487@item --max-silent-time=@var{secondes}
1488Lorsque le processus de construction ou de substitution restent silencieux
1489pendant plus de @var{secondes}, le terminer et rapporter une erreur de
1490construction.
bf5c74e7 1491
3cacfa9e 1492La valeur par défaut est @code{0}, ce qui désactive le délai.
bf5c74e7 1493
3cacfa9e 1494La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
bf5c74e7 1495
3cacfa9e
LC
1496@item --timeout=@var{secondes}
1497De même, lorsque le processus de construction ou de substitution dure plus
1498de @var{secondes}, le terminer et rapporter une erreur de construction.
bf5c74e7 1499
3cacfa9e 1500La valeur par défaut est @code{0}, ce qui désactive le délai.
bf5c74e7 1501
3cacfa9e 1502La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
bf5c74e7
JL
1503
1504@item --rounds=@var{N}
3cacfa9e
LC
1505Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
1506si les résultats de construction consécutifs ne sont pas identiques
1507bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
1508comme @command{guix build} (@pxref{Invoquer guix build}).
bf5c74e7 1509
15f1bff4 1510Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
3cacfa9e
LC
1511dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
1512l'étude des différences entre les deux résultats.
bf5c74e7
JL
1513
1514@item --debug
3cacfa9e 1515Produire une sortie de débogage.
bf5c74e7 1516
3cacfa9e
LC
1517Cela est utile pour déboguer des problèmes de démarrage du démon, mais
1518ensuite elle peut être modifiée par les clients, par exemple par l'option
1519@code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
bf5c74e7 1520
3cacfa9e
LC
1521@item --chroot-directory=@var{rép}
1522Ajouter @var{rép} au chroot de construction
bf5c74e7 1523
3cacfa9e
LC
1524Cela peut changer le résultat d'un processus de construction — par exemple
1525s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
1526est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
1527d'utiliser cette option. À la place, assurez-vous que chaque dérivation
1528déclare toutes les entrées dont elle a besoin.
bf5c74e7
JL
1529
1530@item --disable-chroot
3cacfa9e 1531Désactive les constructions dans un chroot.
bf5c74e7 1532
3cacfa9e
LC
1533Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
1534processus de construction d'accéder à des dépendances non déclarées. Elle
1535est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
1536qu'utilisateur non privilégié.
bf5c74e7
JL
1537
1538@item --log-compression=@var{type}
3cacfa9e
LC
1539Compresser les journaux de construction suivant le @var{type}, parmi
1540@code{gzip}, @code{bzip2} ou @code{none}.
bf5c74e7 1541
3cacfa9e
LC
1542À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
1543construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
1544le démon les compresse automatiquement avec bzip2 par défaut.
bf5c74e7
JL
1545
1546@item --disable-deduplication
3cacfa9e
LC
1547@cindex déduplication
1548Désactiver la « déduplication » automatique des fichiers dans le dépôt.
bf5c74e7 1549
3cacfa9e
LC
1550Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
1551» : si un nouveau fichier est identique à un autre fichier trouvé dans le
1552dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
1553considérablement l'utilisation de l'espace disque au prix d'une charge en
1554entrée/sortie plus grande à la fin d'un processus de construction. Cette
1555option désactive cette optimisation.
bf5c74e7
JL
1556
1557@item --gc-keep-outputs[=yes|no]
3cacfa9e
LC
1558Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
1559utilisées.
bf5c74e7 1560
3cacfa9e
LC
1561@cindex racines du GC
1562@cindex racines du ramasse-miettes
adfb167f
JL
1563Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
1564dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
1565valeur par défaut est « no », ce qui signifie que les sorties des
1566dérivations ne sont gardées que si elles sont accessibles à partir d'une
1567racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
1568racines du GC.
bf5c74e7
JL
1569
1570@item --gc-keep-derivations[=yes|no]
3cacfa9e
LC
1571Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
1572des sorties utilisées.
1573
1574Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
1575dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
1576leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
1577trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
1578peu d'espace disque.
1579
adfb167f
JL
1580De cette manière, avec @code{--gc-keep-derivations} à « yes »,
1581l'accessibilité des sorties s'étend des sorties aux dérivations et avec
1582@code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
1583sorties. Quand les deux options sont à « yes », le GC gardera tous les
1584prérequis de construction (les sources, le compilateur, les bibliothèques,
1585et les autres outils de construction) des objets accessibles dans le dépôt,
1586indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
1587GC. Cela est pratique pour les développeurs car ça leur fait gagner du
1588temps de reconstruction et de téléchargement.
bf5c74e7
JL
1589
1590@item --impersonate-linux-2.6
3cacfa9e
LC
1591Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
1592signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
1593numéro de version.
bf5c74e7 1594
3cacfa9e
LC
1595Cela peut être utile pour construire des programmes qui dépendent
1596(généralement sans fondement) du numéro de version du noyau.
bf5c74e7
JL
1597
1598@item --lose-logs
3cacfa9e 1599Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
bf5c74e7
JL
1600@code{@var{localstatedir}/guix/log}.
1601
3cacfa9e
LC
1602@item --system=@var{système}
1603Supposer que @var{système} est le type de système actuel. Par défaut c'est
1604la paire architecture-noyau trouvée à la configuration, comme
bf5c74e7
JL
1605@code{x86_64-linux}.
1606
3cacfa9e
LC
1607@item --listen=@var{extrémité}
1608Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
1609comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
1610(barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
1611domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
bf5c74e7
JL
1612
1613@table @code
1614@item --listen=/gnu/var/daemon
3cacfa9e
LC
1615Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
1616le créant si besoin.
bf5c74e7
JL
1617
1618@item --listen=localhost
3cacfa9e
LC
1619@cindex démon, accès distant
1620@cindex accès distant au démon
1621@cindex démon, paramètres de grappes
1622@cindex grappes, paramètres du démon
1623Écouter les connexions TCP sur l'interface réseau correspondant à
1624@code{localhost} sur le port 44146.
bf5c74e7
JL
1625
1626@item --listen=128.0.0.42:1234
3cacfa9e
LC
1627Écouter les connexions TCP sur l'interface réseau correspondant à
1628@code{128.0.0.42} sur le port 1234.
bf5c74e7
JL
1629@end table
1630
3cacfa9e
LC
1631Cette option peut être répétée plusieurs fois, auquel cas
1632@command{guix-daemon} accepte des connexions sur toutes les extrémités
1633spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
1634extrémité se connecter en paramétrant la variable d'environnement
1635@code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
1636
1637@quotation Remarque
1638Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
1639@code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
1640grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
1641démon de construction. Dans les autres cas où l'accès à distance au démon
1642est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
bf5c74e7
JL
1643@end quotation
1644
3cacfa9e
LC
1645Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
1646connexions sur le socket Unix-domain situé à
bf5c74e7
JL
1647@file{@var{localstatedir}/guix/daemon-socket/socket}.
1648@end table
1649
1650
1651@node Réglages applicatifs
1652@section Réglages applicatifs
1653
1654@cindex distro extérieure
15f1bff4
JL
1655When using Guix on top of GNU/Linux distribution other than Guix System---a
1656so-called @dfn{foreign distro}---a few additional steps are needed to get
1657everything in place. Here are some of them.
bf5c74e7
JL
1658
1659@subsection Régionalisation
1660
1661@anchor{locales-and-locpath}
15f1bff4 1662@cindex locales, when not on Guix System
bf5c74e7
JL
1663@vindex LOCPATH
1664@vindex GUIX_LOCPATH
3cacfa9e
LC
1665Les paquets installés @i{via} Guix n'utiliseront pas les données de
1666régionalisation du système hôte. À la place, vous devrez d'abord installer
1667l'un des paquets linguistiques disponibles dans Guix puis définir la
1668variable d'environnement @code{GUIX_LOCPATH} :
bf5c74e7
JL
1669
1670@example
1671$ guix package -i glibc-locales
1672$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1673@end example
1674
3cacfa9e
LC
1675Remarquez que le paquet @code{glibc-locales} contient les données pour tous
1676les environnement linguistiques supportés par la GNU@tie{}libc et pèse
1677environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
1678petit mais limité à quelques environnements UTF-8.
bf5c74e7 1679
3cacfa9e 1680La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
bf5c74e7 1681(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
3cacfa9e 1682Manual}). Il y a deux différences importantes cependant :
bf5c74e7
JL
1683
1684@enumerate
1685@item
3cacfa9e
LC
1686@code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
1687libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
1688vous permet de vous assurer que les programmes de la distro externe ne
1689chargeront pas de données linguistiques incompatibles.
bf5c74e7
JL
1690
1691@item
3cacfa9e
LC
1692La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
1693@code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
1694@code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
1695de programmes liés avec des versions différentes de la libc, chaque version
1696de la libc essaiera de charger les environnements linguistiques dans le bon
1697format.
bf5c74e7
JL
1698@end enumerate
1699
3cacfa9e
LC
1700Cela est important car le format des données linguistiques utilisés par
1701différentes version de la libc peuvent être incompatibles.
bf5c74e7
JL
1702
1703@subsection Name Service Switch
1704
1705@cindex name service switch, glibc
1706@cindex NSS (name service switch), glibc
1707@cindex nscd (name service caching daemon)
1708@cindex name service caching daemon (nscd)
3cacfa9e
LC
1709Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
1710fortement} que ce système fasse tourner le @dfn{démon de cache de service de
1711noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
1712le socket @file{/var/run/nscd/socket}. Sans cela, les applications
1713installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
1714d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
1715pourquoi.
bf5c74e7
JL
1716
1717@cindex @file{nsswitch.conf}
3cacfa9e
LC
1718La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
1719est un mécanisme d'extension pour les « résolutions de noms » en général :
1720résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
bf5c74e7
JL
1721
1722@cindex Network information service (NIS)
1723@cindex NIS (Network information service)
3cacfa9e
LC
1724Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
1725nouvelle implémentation de résolution de nom : par exemple le greffon
1726@code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
1727greffon @code{nis} permet la résolution de comptes utilisateurs avec le
1728Network Information Service (NIS), etc. Ces « services de recherches »
1729supplémentaires sont configurés au niveau du système dans
1730@file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
1731système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
1732GNU C Reference Manual})
1733
1734Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
1735appelant la fonction @code{getaddrinfo} en C — les applications essayent
1736d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
15f1bff4
JL
1737résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectuent
1738la résolution eux-mêmes, en changeant les service de résolution dans leur
1739propre espace d'adressage et en le lançant. Ce services de résolution de
1740noms — les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils
1741peuvent provenir de la bibliothèque C du système, plutôt que de la
1742bibliothèque C à laquelle l'application est liée (la bibliothèque C de
1743Guix).
3cacfa9e
LC
1744
1745Et c'est là que se trouve le problème : si votre application est liée à la
1746bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
1747greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
1748glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
1749échoue de manière inattendue.
1750
1751Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
1752problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
1753chargés par le processus @command{nscd}, pas par l'application elle-même.
1754
1755@subsection Polices X11
1756
1757@cindex polices
1758La majorité des applications graphiques utilisent fontconfig pour trouver et
1759charger les police et effectuer le rendu côté client X11. Le paquet
1760@code{fontconfig} dans Guix cherche les polices dans
1761@file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
1762applications graphiques installées avec Guix d'afficher des polices, vous
1763devez aussi installer des polices avec Guix. Les paquets de polices
1764essentiels sont @code{gs-fonts}, @code{font-dejavu} et
1765@code{font-gnu-freefont-ttf}.
1766
1767Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
1768les applications graphiques, installez @code{font-adobe-source-han-sans} ou
1769@code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
1770langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
1771suivante installe les polices pour le chinois :
bf5c74e7
JL
1772
1773@example
1774guix package -i font-adobe-source-han-sans:cn
1775@end example
1776
1777@cindex @code{xterm}
3cacfa9e
LC
1778Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
1779s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
15f1bff4 1780spécifier le nom complet de la police en utilisant XLFD (X Logical Font
3cacfa9e 1781Description), comme ceci :
bf5c74e7
JL
1782
1783@example
1784-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1785@end example
1786
3cacfa9e
LC
1787Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
1788dans votre profil Guix, vous devez étendre le chemin des polices du serveur
1789X :
bf5c74e7
JL
1790
1791@c Note: 'xset' does not accept symlinks so the trick below arranges to
1792@c get at the real directory. See <https://bugs.gnu.org/30655>.
1793@example
1794xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1795@end example
1796
1797@cindex @code{xlsfonts}
3cacfa9e
LC
1798Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
1799vous assurer que vos polices TrueType y sont listées.
bf5c74e7
JL
1800
1801@cindex @code{fc-cache}
3cacfa9e
LC
1802@cindex cache de polices
1803Après l'installation des polices vous devrez peut-être rafraîchir le cache
1804des polices pour pouvoir les utiliser dans les applications. Ça s'applique
1805aussi lorsque les applications installées avec Guix n'ont pas l'air de
1806trouver les polices. Pour forcer la reconstruction du cache de polices
1807lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
1808paquet @code{fontconfig}.
bf5c74e7
JL
1809
1810@subsection Certificats X.509
1811
1812@cindex @code{nss-certs}
3cacfa9e
LC
1813Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
1814programmes d'authentifier les serveurs web par HTTPS@.
bf5c74e7 1815
3cacfa9e
LC
1816Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
1817installer ce paquet et définir les variables d'environnement adéquates pour
1818que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
bf5c74e7 1819
3cacfa9e 1820@subsection Paquets emacs
bf5c74e7
JL
1821
1822@cindex @code{emacs}
3cacfa9e
LC
1823Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
1824peuvent être placés soit dans
1825@file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
1826sous-répertoires de
1827@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
1828car il existe potentiellement des milliers de paquets Emacs et stocker leurs
1829fichiers dans un seul répertoire peut ne pas être fiable (à cause de
1830conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
1831bonne idée. C'est très similaire à la manière dont le système de paquet
1832d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
1833The GNU Emacs Manual}).
1834
1835Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
1836donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
1837ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
15f1bff4 1838installés avec Guix, vous pouvez le faire en lançant Emacs avec l'option
3cacfa9e
LC
1839@code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1840
1841@subsection La chaîne d'outils GCC
bf5c74e7
JL
1842
1843@cindex GCC
1844@cindex ld-wrapper
1845
3cacfa9e
LC
1846Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
1847vous avez besoin d'une chaîne de compilation complète pour compiler et lier
1848du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
1849paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
1850lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
1851symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
1852pour l'éditeur de liens.
1853
15f1bff4
JL
1854The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1855passed to the linker, add corresponding @code{-rpath} arguments, and invoke
1856the actual linker with this new set of arguments. You can instruct the
1857wrapper to refuse to link against libraries not in the store by setting the
1858@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}.
bf5c74e7
JL
1859
1860@c TODO What else?
1861
1862@c *********************************************************************
15f1bff4
JL
1863@node Installation du système
1864@chapter Installation du système
bf5c74e7 1865
15f1bff4
JL
1866@cindex installing Guix System
1867@cindex Guix System, installation
1868This section explains how to install Guix System on a machine. Guix, as a
1869package manager, can also be installed on top of a running GNU/Linux system,
1870@pxref{Installation}.
bf5c74e7 1871
15f1bff4
JL
1872@ifinfo
1873@quotation Remarque
1874@c This paragraph is for people reading this from tty2 of the
1875@c installation image.
1876Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
1877son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
1878ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
1879Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
bf5c74e7 1880
15f1bff4
JL
1881Autrement, lancez @command{info info} dans un autre tty pour garder ce
1882manuel ouvert.
1883@end quotation
1884@end ifinfo
bf5c74e7
JL
1885
1886@menu
15f1bff4
JL
1887* Limitations:: Ce à quoi vous attendre.
1888* Considérations matérielles:: Matériel supporté.
1889* Installation depuis une clef USB ou un DVD:: Préparer le média
1890 d'installation.
1891* Préparer l'installation:: Réseau, partitionnement, etc.
1892* Effectuer l'installation:: Pour de vrai.
1893* Installing Guix in a VM:: Guix System playground.
1894* Construire l'image d'installation:: D'où vient tout cela.
bf5c74e7
JL
1895@end menu
1896
15f1bff4
JL
1897@node Limitations
1898@section Limitations
1899
1900As of version @value{VERSION}, Guix System is not production-ready. It may
1901contain bugs and lack important features. Thus, if you are looking for a
1902stable production system that respects your freedom as a computer user, a
1903good solution at this point is to consider
1904@url{http://www.gnu.org/distros/free-distros.html, one of the more
1905established GNU/Linux distributions}. We hope you can soon switch to the
1906Guix System without fear, of course. In the meantime, you can also keep
1907using your distribution and try out the package manager on top of it
1908(@pxref{Installation}).
bf5c74e7 1909
15f1bff4
JL
1910Avant de procéder à l'installation, soyez conscient de ces limitations les
1911plus importantes qui s'appliquent à la version @value{VERSION} :
bf5c74e7 1912
15f1bff4
JL
1913@itemize
1914@item
1915Le procédé d'installation n'a pas d'interface utilisateur graphique et
1916requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
1917suivantes pour avoir un aperçu de ce que cela signifie).
bf5c74e7 1918
15f1bff4
JL
1919@item
1920LVM (gestionnaire de volumes logiques) n'est pas supporté.
bf5c74e7 1921
15f1bff4
JL
1922@item
1923De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
1924certains manquent toujours cruellement.
bf5c74e7 1925
15f1bff4
JL
1926@item
1927More than 8,500 packages are available, but you might occasionally find that
1928a useful package is missing.
3cacfa9e 1929
15f1bff4
JL
1930@item
1931GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
1932cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
1933@end itemize
bf5c74e7 1934
15f1bff4
JL
1935Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
1936rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
1937la distribution. @xref{Contribuer}, pour plus d'info.
3cacfa9e 1938
3cacfa9e 1939
15f1bff4
JL
1940@node Considérations matérielles
1941@section Considérations matérielles
3cacfa9e 1942
15f1bff4
JL
1943@cindex hardware support on Guix System
1944GNU@tie{}Guix focuses on respecting the user's computing freedom. It builds
1945around the kernel Linux-libre, which means that only hardware for which free
1946software drivers and firmware exist is supported. Nowadays, a wide range of
1947off-the-shelf hardware is supported on GNU/Linux-libre---from keyboards to
1948graphics cards to scanners and Ethernet controllers. Unfortunately, there
1949are still areas where hardware vendors deny users control over their own
1950computing, and such hardware is not supported on Guix System.
bf5c74e7 1951
15f1bff4
JL
1952@cindex WiFi, support matériel
1953One of the main areas where free drivers or firmware are lacking is WiFi
1954devices. WiFi devices known to work include those using Atheros chips
1955(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
1956driver, and those using Broadcom/AirForce chips (BCM43xx with Wireless-Core
1957Revision 5), which corresponds to the @code{b43-open} Linux-libre driver.
1958Free firmware exists for both and is available out-of-the-box on Guix
1959System, as part of @var{%base-firmware} (@pxref{Référence de système d'exploitation,
1960@code{firmware}}).
adfb167f 1961
15f1bff4
JL
1962@cindex RYF, Respects Your Freedom
1963La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
1964certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
1965Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
1966votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
1967Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
bf5c74e7 1968
15f1bff4
JL
1969Une autre ressource utile est le site web @uref{https://www.h-node.org/,
1970H-Node}. Il contient un catalogue d'appareils avec des informations sur
1971leur support dans GNU/Linux.
bf5c74e7 1972
bf5c74e7 1973
15f1bff4
JL
1974@node Installation depuis une clef USB ou un DVD
1975@section Installation depuis une clef USB ou un DVD
1976
1977Une image d'installation ISO-9660 téléchargeable depuis
1978@indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{système}.iso.xz}
1979peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
1980l'une de ces valeurs :
1981
1982@table @code
1983@item x86_64-linux
1984pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
1985
1986@item i686-linux
1987pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
1988@end table
1989
1990@c start duplication of authentication part from ``Binary Installation''
1991Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
1992l'authenticité de l'image avec, de cette manière :
bf5c74e7
JL
1993
1994@example
15f1bff4
JL
1995$ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
1996$ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
bf5c74e7
JL
1997@end example
1998
15f1bff4
JL
1999Si cette commande échoue parce que vous n'avez pas la clef publique requise,
2000lancez cette commande pour l'importer :
bf5c74e7
JL
2001
2002@example
15f1bff4
JL
2003$ gpg --keyserver @value{KEY-SERVER} \
2004 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
bf5c74e7
JL
2005@end example
2006
15f1bff4
JL
2007@noindent
2008@c end duplication
2009et relancez la commande @code{gpg --verify}.
bf5c74e7 2010
15f1bff4
JL
2011Cette image contient les outils nécessaires à l'installation. Elle est
2012faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
2013un DVD.
bf5c74e7 2014
15f1bff4 2015@unnumberedsubsec Copie sur une clef USB
bf5c74e7 2016
15f1bff4 2017Pour copier l'image sur une clef USB, suivez ces étapes :
3cacfa9e 2018
15f1bff4
JL
2019@enumerate
2020@item
2021Décompressez l'image avec la commande @command{xz} :
3cacfa9e 2022
15f1bff4
JL
2023@example
2024xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
2025@end example
3cacfa9e 2026
15f1bff4
JL
2027@item
2028Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
2029son nom d'appareil. En supposant que la clef usb est connue sous le nom de
2030@file{/dev/sdX}, copiez l'image avec :
bf5c74e7 2031
15f1bff4
JL
2032@example
2033dd if=guixsd-install-@value{VERSION}.@var{system}.iso of=/dev/sdX
2034sync
2035@end example
3cacfa9e 2036
15f1bff4
JL
2037Accéder à @file{/dev/sdX} requiert généralement les privilèges
2038super-utilisateur.
2039@end enumerate
bf5c74e7 2040
15f1bff4 2041@unnumberedsubsec Graver sur un DVD
bf5c74e7 2042
15f1bff4 2043Pour copier l'image sur un DVD, suivez ces étapes :
bf5c74e7 2044
15f1bff4
JL
2045@enumerate
2046@item
2047Décompressez l'image avec la commande @command{xz} :
bf5c74e7 2048
15f1bff4
JL
2049@example
2050xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
2051@end example
bf5c74e7 2052
15f1bff4
JL
2053@item
2054Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
2055En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
2056l'image avec :
bf5c74e7
JL
2057
2058@example
15f1bff4 2059growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.@var{system}.iso
bf5c74e7
JL
2060@end example
2061
15f1bff4
JL
2062Accéder à @file{/dev/srX} requiert généralement les privilèges
2063super-utilisateur.
2064@end enumerate
bf5c74e7 2065
15f1bff4 2066@unnumberedsubsec Démarrage
bf5c74e7 2067
15f1bff4
JL
2068Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
2069démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
2070entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
2071démarrer sur la clef USB.
bf5c74e7 2072
15f1bff4
JL
2073@xref{Installing Guix in a VM}, if, instead, you would like to install Guix
2074System in a virtual machine (VM).
3cacfa9e 2075
bf5c74e7 2076
15f1bff4
JL
2077@node Préparer l'installation
2078@section Préparer l'installation
2079
2080Once you have successfully booted your computer using the installation
2081medium, you should end up with the welcome page of the graphical installer.
2082The graphical installer is a text-based user interface built upon the newt
2083library. It shall guide you through all the different steps needed to
2084install GNU@tie{}Guix System. However, as the graphical installer is still
2085under heavy development, you might want to fallback to the original, shell
2086based install process, by switching to TTYs 3 to 6 with the shortcuts
2087CTRL-ALT-F[3-6]. The following sections describe the installation procedure
2088assuming you're using one of those TTYs. They are configured and can be used
2089to run commands as root.
2090
2091TTY2 shows this documentation, browsable using the Info reader commands
2092(@pxref{Top,,, info-stnd, Stand-alone GNU Info}). The installation system
2093runs the GPM mouse daemon, which allows you to select text with the left
2094mouse button and to paste it with the middle button.
bf5c74e7 2095
15f1bff4
JL
2096@quotation Remarque
2097L'installation nécessite un accès au réseau pour que les dépendances
2098manquantes de votre configuration système puissent être téléchargées. Voyez
2099la section « réseau » plus bas.
2100@end quotation
bf5c74e7 2101
15f1bff4
JL
2102The installation system includes many common tools needed for this task.
2103But it is also a full-blown Guix System, which means that you can install
2104additional packages, should you need it, using @command{guix package}
2105(@pxref{Invoquer guix package}).
bf5c74e7 2106
15f1bff4 2107@subsection Disposition du clavier
bf5c74e7 2108
15f1bff4
JL
2109@cindex disposition du clavier
2110L'image d'installation utilise la disposition clavier qwerty (US). Si vous
2111voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
2112exemple, la commande suivante sélectionne la disposition Dvorak :
bf5c74e7 2113
bf5c74e7 2114@example
15f1bff4 2115loadkeys dvorak
bf5c74e7
JL
2116@end example
2117
15f1bff4
JL
2118Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
2119pour trouver une liste des dispositions disponibles. Lancez @command{man
2120loadkey} pour plus d'informations.
2121
2122@subsection Réseau
2123
2124Lancez la commande suivante pour voir comment vos interfaces réseau sont
2125appelées :
bf5c74e7
JL
2126
2127@example
15f1bff4 2128ifconfig -a
bf5c74e7
JL
2129@end example
2130
15f1bff4
JL
2131@noindent
2132@dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
3cacfa9e 2133
15f1bff4
JL
2134@example
2135ip a
2136@end example
3cacfa9e 2137
15f1bff4
JL
2138@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2139Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
2140l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
2141est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
2142@samp{w}, comme @samp{w1p2s0}.
3cacfa9e 2143
15f1bff4
JL
2144@table @asis
2145@item Connexion filaire
2146Pour configure une connexion filaire, lancez la commande suivante, en
2147remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
2148utiliser.
3cacfa9e 2149
15f1bff4
JL
2150@example
2151ifconfig @var{interface} up
2152@end example
3cacfa9e 2153
15f1bff4
JL
2154@item Connexion sans-fil
2155@cindex sans-fil
2156@cindex WiFi
2157Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
2158configuration pour l'outil de configuration @command{wpa_supplicant} (son
2159emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
2160@command{nano} :
3cacfa9e 2161
15f1bff4
JL
2162@example
2163nano wpa_supplicant.conf
2164@end example
3cacfa9e 2165
15f1bff4
JL
2166Par exemple, la déclaration qui suit peut aller dans ce fichier et
2167fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
2168la phrase de passe pour le réseau auquel vous vous connectez :
3cacfa9e 2169
15f1bff4
JL
2170@example
2171network=@{
2172 ssid="@var{mon-ssid}"
2173 key_mgmt=WPA-PSK
2174 psk="la phrase de passe secrète du réseau"
2175@}
2176@end example
3cacfa9e 2177
15f1bff4
JL
2178Démarrez le service sans-fil et lancez-le en tache de fond avec la commande
2179suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
2180vous voulez utiliser) :
bf5c74e7
JL
2181
2182@example
15f1bff4 2183wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
bf5c74e7
JL
2184@end example
2185
15f1bff4
JL
2186Lancez @command{man wpa_supplicant} pour plus d'informations.
2187@end table
bf5c74e7 2188
15f1bff4
JL
2189@cindex DHCP
2190À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
2191où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
bf5c74e7
JL
2192
2193@example
15f1bff4 2194dhclient -v @var{interface}
bf5c74e7
JL
2195@end example
2196
15f1bff4 2197Essayez de pinger un serveur pour voir si le réseau fonctionne :
bf5c74e7 2198
15f1bff4
JL
2199@example
2200ping -c 3 gnu.org
2201@end example
bf5c74e7 2202
15f1bff4
JL
2203Mettre en place un accès réseau est presque toujours une nécessité parce que
2204l'image ne contient pas tous les logiciels et les outils dont vous pourriez
2205avoir besoin.
bf5c74e7 2206
15f1bff4
JL
2207@cindex installer par SSH
2208Si vous le souhaitez, vous pouvez continuer l'installation à distance en
2209démarrant un serveur SSH :
bf5c74e7 2210
15f1bff4
JL
2211@example
2212herd start ssh-daemon
2213@end example
bf5c74e7 2214
15f1bff4
JL
2215Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
2216configurer l'authentification par clef OpenSSH avant de vous connecter.
bf5c74e7 2217
15f1bff4 2218@subsection Partitionnement
bf5c74e7 2219
15f1bff4
JL
2220À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
2221partitionner le disque puis à formater les partitions cibles.
bf5c74e7 2222
15f1bff4
JL
2223L'image d'installation inclus plusieurs outils de partitionnement, dont
2224Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2225@command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
2226disque avec le partitionnement qui vous convient :
bf5c74e7 2227
15f1bff4
JL
2228@example
2229cfdisk
2230@end example
bf5c74e7 2231
15f1bff4
JL
2232Si votre disque utilise le format des tables de partitions GUID (GPT) et que
2233vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
2234défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
2235disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
bf5c74e7 2236
15f1bff4
JL
2237@cindex EFI, installation
2238@cindex UEFI, installation
2239@cindex ESP, partition système EFI
2240If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System
2241Partition} (ESP) is required. This partition can be mounted at
2242@file{/boot/efi} for instance and must have the @code{esp} flag set. E.g.,
2243for @command{parted}:
bf5c74e7
JL
2244
2245@example
15f1bff4 2246parted /dev/sda set 1 esp on
bf5c74e7
JL
2247@end example
2248
15f1bff4
JL
2249@quotation Remarque
2250@vindex grub-bootloader
2251@vindex grub-efi-bootloader
2252Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
2253Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
2254vous devriez probablement effectuer une installation EFI, avec
2255@code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
2256@code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
2257d'information sur le chargeur d'amorçage.
2258@end quotation
bf5c74e7 2259
15f1bff4
JL
2260Once you are done partitioning the target hard disk drive, you have to
2261create a file system on the relevant partition(s)@footnote{Currently Guix
2262System only supports ext4 and btrfs file systems. In particular, code that
2263reads file system UUIDs and labels only works for these file system
2264types.}. For the ESP, if you have one and assuming it is @file{/dev/sda1},
2265run:
bf5c74e7 2266
15f1bff4
JL
2267@example
2268mkfs.fat -F32 /dev/sda1
bf5c74e7
JL
2269@end example
2270
15f1bff4
JL
2271Préférez assigner une étiquette au système de fichier pour que vous puissiez
2272vous y référer de manière fiable dans la déclaration @code{file-system}
2273(@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
2274de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
2275partition racine soit sur @file{/dev/sda2}, on peut créer un système de
2276fichier avec pour étiquette @code{my-root} avec :
bf5c74e7
JL
2277
2278@example
15f1bff4 2279mkfs.ext4 -L my-root /dev/sda2
bf5c74e7
JL
2280@end example
2281
15f1bff4
JL
2282@cindex chiffrement du disque
2283Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
2284utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
2285@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2286@code{man cryptsetup}} pour plus d'informations). En supposant que vous
2287voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
2288commandes suivante vous mènerait à ce résultat :
bf5c74e7
JL
2289
2290@example
15f1bff4
JL
2291cryptsetup luksFormat /dev/sda2
2292cryptsetup open --type luks /dev/sda2 my-partition
2293mkfs.ext4 -L my-root /dev/mapper/my-partition
bf5c74e7
JL
2294@end example
2295
15f1bff4
JL
2296Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
2297avec une commande comme (de nouveau, en supposant que @code{my-root} est
2298l'étiquette du système de fichiers racine) :
bf5c74e7
JL
2299
2300@example
15f1bff4 2301mount LABEL=my-root /mnt
bf5c74e7
JL
2302@end example
2303
15f1bff4
JL
2304Also mount any other file systems you would like to use on the target system
2305relative to this path. If you have opted for @file{/boot/efi} as an EFI
2306mount point for example, mount it at @file{/mnt/boot/efi} now so it is found
2307by @code{guix system init} afterwards.
2308
2309Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
2310(@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
2311Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
2312supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
2313pouvez lancer :
2314
bf5c74e7 2315@example
15f1bff4
JL
2316mkswap /dev/sda3
2317swapon /dev/sda3
bf5c74e7
JL
2318@end example
2319
15f1bff4
JL
2320Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
2321supposant que dans le nouveau système vous voulez utiliser le fichier
2322@file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
2323fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
2324Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
2325(COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
2326détails, regardez les pages de manuel de @command{mkswap} et
2327@command{swapon}.} :
bf5c74e7 2328
15f1bff4
JL
2329@example
2330# Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
2331dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2332# Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
2333chmod 600 /mnt/swapfile
2334mkswap /mnt/swapfile
2335swapon /mnt/swapfile
2336@end example
bf5c74e7 2337
15f1bff4
JL
2338Remarquez que si vous avez chiffré la partition racine et créé un fichier
2339d'échange dans son système de fichier comme décrit ci-dessus, alors le
2340chiffrement protégera aussi le fichier d'échange, comme n'importe quel
2341fichier de ce système de fichiers.
bf5c74e7 2342
15f1bff4
JL
2343@node Effectuer l'installation
2344@section Effectuer l'installation
bf5c74e7 2345
15f1bff4
JL
2346Lorsque la partition cible est prête et que les autres partitions sont
2347montées, on est prêt à commencer l'installation. Commencez par :
bf5c74e7 2348
15f1bff4
JL
2349@example
2350herd start cow-store /mnt
2351@end example
bf5c74e7 2352
15f1bff4
JL
2353Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
2354sorte que les paquets ajoutés pendant l'installation sont écrits sur le
2355disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
2356nécessaire parce que la première phase de la commande @command{guix system
2357init} (voir plus bas) implique de télécharger ou de construire des éléments
2358de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
bf5c74e7 2359
15f1bff4
JL
2360Ensuite, vous devrez modifier un fichier et fournir la déclaration du
2361système à installer. Pour cela, le système d'installation propose trois
2362éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
2363Manual}), qui supporte la coloration syntaxique la correspondance de
2364parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
2365(un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
2366vivement de stocker ce fichier sur le système de fichier racine cible,
2367disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
2368fichier de configuration une fois que vous aurez redémarré sur votre nouveau
2369système.
bf5c74e7 2370
15f1bff4
JL
2371@xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
2372fichier de configuration. Les exemples de configuration dont on parle dans
2373cette section sont disponibles dans @file{/etc/configuration} sur l'image
2374d'installation. Ainsi, pour commencer avec une configuration du système qui
2375fournit un serveur d'affichage graphique (un système de « bureau »), vous
2376pouvez lancer ce qui suit :
bf5c74e7 2377
15f1bff4
JL
2378@example
2379# mkdir /mnt/etc
2380# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2381# nano /mnt/etc/config.scm
2382@end example
bf5c74e7 2383
15f1bff4
JL
2384Vous devriez faire attention à ce que contient votre fichier de
2385configuration, en particulier :
bf5c74e7 2386
15f1bff4
JL
2387@itemize
2388@item
2389Make sure the @code{bootloader-configuration} form refers to the target you
2390want to install GRUB on. It should mention @code{grub-bootloader} if you
2391are installing GRUB in the legacy way, or @code{grub-efi-bootloader} for
2392newer UEFI systems. For legacy systems, the @code{target} field names a
2393device, like @code{/dev/sda}; for UEFI systems it names a path to a mounted
2394EFI partition, like @code{/boot/efi}; do make sure the path is currently
2395mounted and a @code{file-sytem} entry is specified in your configuration.
bf5c74e7 2396
15f1bff4
JL
2397@item
2398Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
2399aux valeurs de leur champs @code{device} dans votre configuration
2400@code{file-system}, en supposant que la configuration @code{file-system}
2401utilise la procédure @code{file-system-label} dans son champ @code{device}.
bf5c74e7 2402
15f1bff4
JL
2403@item
2404Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
2405champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
bf5c74e7
JL
2406@end itemize
2407
15f1bff4
JL
2408Une fois que vous avez fini les préparatifs sur le fichier de configuration,
2409le nouveau système peut être initialisé (rappelez-vous que le système de
2410fichiers racine cible est dans @file{/mnt}) :
bf5c74e7 2411
15f1bff4
JL
2412@example
2413guix system init /mnt/etc/config.scm /mnt
2414@end example
bf5c74e7 2415
15f1bff4
JL
2416@noindent
2417Cela copie tous les fichiers nécessaires et installe GRUB sur
2418@file{/dev/sdX} à moins que vous ne passiez l'option
2419@option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
2420constructions pour les paquets manquants, ce qui peut prendre du temps.
bf5c74e7 2421
15f1bff4
JL
2422Une fois que cette commande a terminée — et on l'espère réussi ! — vous
2423pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
2424mot de passe @code{root} est d'abord vide ; les mots de passe des autres
2425utilisateurs doivent être initialisés avec la commande @command{passwd} en
2426tant que @code{root}, à mois que votre configuration ne spécifie autre chose
2427(@pxref{user-account-password, mot de passe des comptes utilisateurs}).
bf5c74e7 2428
15f1bff4
JL
2429@cindex upgrading Guix System
2430From then on, you can update the system whenever you want by running, say:
bf5c74e7 2431
15f1bff4
JL
2432@example
2433guix pull
2434sudo guix system reconfigure /etc/config.scm
2435@end example
bf5c74e7 2436
15f1bff4
JL
2437@noindent
2438This builds a new system generation with the latest packages and services
2439(@pxref{Invoquer guix system}). We recommend doing that regularly so that
2440your system includes the latest security updates (@pxref{Mises à jour de sécurité}).
bf5c74e7 2441
15f1bff4
JL
2442@c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2443@quotation Remarque
2444@cindex sudo vs. @command{guix pull}
2445Note that @command{sudo guix} runs your user's @command{guix} command and
2446@emph{not} root's, because @command{sudo} leaves @code{PATH} unchanged. To
2447explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}.
2448@end quotation
3cacfa9e 2449
15f1bff4
JL
2450Join us on @code{#guix} on the Freenode IRC network or on
2451@email{guix-devel@@gnu.org} to share your experience---good or not so good.
bf5c74e7 2452
15f1bff4
JL
2453@node Installing Guix in a VM
2454@section Installing Guix in a Virtual Machine
bf5c74e7 2455
15f1bff4
JL
2456@cindex virtual machine, Guix System installation
2457@cindex serveur privé virtuel (VPS)
2458@cindex VPS (serveur privé virtuel)
2459If you'd like to install Guix System in a virtual machine (VM) or on a
2460virtual private server (VPS) rather than on your beloved machine, this
2461section is for you.
bf5c74e7 2462
15f1bff4
JL
2463To boot a @uref{http://qemu.org/,QEMU} VM for installing Guix System in a
2464disk image, follow these steps:
3cacfa9e 2465
15f1bff4
JL
2466@enumerate
2467@item
2468First, retrieve and decompress the Guix system installation image as
2469described previously (@pxref{Installation depuis une clef USB ou un DVD}).
3cacfa9e 2470
15f1bff4
JL
2471@item
2472Créez une image disque qui contiendra le système installé. Pour créer une
2473image qcow2, utilise la commande @command{qemu-img} :
bf5c74e7 2474
15f1bff4
JL
2475@example
2476qemu-img create -f qcow2 guixsd.img 50G
2477@end example
bf5c74e7 2478
15f1bff4
JL
2479Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
2480moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
2481grossira.
bf5c74e7 2482
15f1bff4
JL
2483@item
2484Démarrez l'image d'installation USB dans une VM :
bf5c74e7
JL
2485
2486@example
15f1bff4
JL
2487qemu-system-x86_64 -m 1024 -smp 1 \
2488 -net user -net nic,model=virtio -boot menu=on \
2489 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
2490 -drive file=guixsd.img
bf5c74e7
JL
2491@end example
2492
15f1bff4 2493L'ordre des périphérique est important
bf5c74e7 2494
15f1bff4
JL
2495Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
2496le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
2497pour valider votre choix.
bf5c74e7 2498
15f1bff4
JL
2499@item
2500Vous êtes maintenant root dans la VM, continuez en suivant la procédure
2501d'installation. @xref{Préparer l'installation}, et suivez les
2502instructions.
2503@end enumerate
bf5c74e7 2504
15f1bff4
JL
2505Once installation is complete, you can boot the system that's on your
2506@file{guixsd.img} image. @xref{Running Guix in a VM}, for how to do that.
2507
2508@node Construire l'image d'installation
2509@section Construire l'image d'installation
2510
2511@cindex image d'installation
2512L'image d'installation décrite plus haut a été construite avec la commande
2513@command{guix system}, plus précisément :
bf5c74e7
JL
2514
2515@example
15f1bff4
JL
2516guix system disk-image --file-system-type=iso9660 \
2517 gnu/system/install.scm
bf5c74e7
JL
2518@end example
2519
15f1bff4
JL
2520Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
2521sources et regardez aussi @ref{Invoquer guix system} pour plus
2522d'informations sur l'image d'installation.
bf5c74e7 2523
15f1bff4 2524@section Construire l'image d'installation pour les cartes ARM
bf5c74e7 2525
15f1bff4
JL
2526De nombreuses cartes ARM requièrent une variante spécifique du chargeur
2527d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
bf5c74e7 2528
15f1bff4
JL
2529Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
2530disponible autrement (sur un autre périphérique d'amorçage etc), il est
2531recommandé de construire une image qui inclus le chargeur d'amorçage, plus
2532précisément :
bf5c74e7
JL
2533
2534@example
15f1bff4 2535guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
bf5c74e7
JL
2536@end example
2537
15f1bff4
JL
2538@code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
2539carte invalide, une liste de cartes possibles sera affichée.
bf5c74e7 2540
15f1bff4
JL
2541@c *********************************************************************
2542@node Gestion de paquets
2543@chapter Gestion de paquets
bf5c74e7 2544
15f1bff4
JL
2545@cindex paquets
2546Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
2547jour et supprimer facilement des paquets logiciels sans devoir connaître
2548leur procédure de construction ou leurs dépendances. Guix va aussi plus
2549loin que ces fonctionnalités évidentes.
bf5c74e7 2550
15f1bff4
JL
2551Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
2552outils de gestion des paquets qu'il fournit. En plus de l'interface en
2553ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
2554@code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
2555(@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
2556avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
2557guix-help} pour le démarrer) :
3cacfa9e 2558
15f1bff4
JL
2559@example
2560guix package -i emacs-guix
2561@end example
3cacfa9e 2562
15f1bff4
JL
2563@menu
2564* Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
2565* Invoquer guix package:: Installation, suppression, etc.@: de paquets.
2566* Substituts:: Télécharger des binaire déjà construits.
2567* Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
2568 résultats.
2569* Invoquer guix gc:: Lancer le ramasse-miettes.
2570* Invoquer guix pull:: Récupérer la dernière version de Guix et de
2571 la distribution.
2572* Canaux:: Personnaliser la collection des paquets.
2573* Inférieurs:: Interagir avec une autre révision de Guix.
2574* Invoquer guix describe:: Affiche des informations sur la révision Guix
2575 actuelle.
2576* Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
2577@end menu
bf5c74e7 2578
15f1bff4
JL
2579@node Fonctionnalités
2580@section Fonctionnalités
bf5c74e7 2581
15f1bff4
JL
2582Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
2583paquets}, dans son propre répertoire — quelque chose comme
2584@file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
3cacfa9e 2585
15f1bff4
JL
2586Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
2587propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
2588utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
2589utilisateur dans @code{$HOME/.guix-profile}.
3cacfa9e 2590
15f1bff4
JL
2591Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
2592@file{/home/alice/.guix-profile/bin/gcc} pointe vers
2593@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
2594machine, @code{bob} a déjà installé GCC 4.8.0. Le profil de @code{bob}
2595continue simplement de pointer vers
2596@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
2597GCC coexistent surs le même système sans aucune interférence.
bf5c74e7 2598
15f1bff4
JL
2599La commande @command{guix package} est l'outil central pour gérer les
2600paquets (@pxref{Invoquer guix package}). Il opère sur les profils
2601utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
2602normaux}.
bf5c74e7 2603
15f1bff4
JL
2604@cindex transactions
2605La commande fournit les opérations évidentes d'installation, de suppression
2606et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
2607soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
2608processus @command{guix package} est terminé pendant la transaction ou si
2609une panne de courant arrive pendant la transaction, le profil de
2610l'utilisateur reste dans son état précédent et reste utilisable.
3cacfa9e 2611
15f1bff4
JL
2612In addition, any package transaction may be @emph{rolled back}. So, if, for
2613example, an upgrade installs a new version of a package that turns out to
2614have a serious bug, users may roll back to the previous instance of their
2615profile, which was known to work well. Similarly, the global system
2616configuration on Guix is subject to transactional upgrades and roll-back
2617(@pxref{Utiliser le système de configuration}).
3cacfa9e 2618
15f1bff4
JL
2619Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
2620déterminer quels paquets sont toujours référencés par les profils des
2621utilisateurs et supprimer ceux qui ne sont plus référencés de manière
2622prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
2623explicitement supprimer les anciennes générations de leur profil pour que
2624les paquets auxquels elles faisaient référence puissent être glanés.
bf5c74e7 2625
15f1bff4
JL
2626@cindex reproductibilité
2627@cindex constructions reproductibles
2628Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
2629paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
2630Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
2631de toutes les entrées qui ont été utilisées pendant la construction de ce
2632paquet — le compilateur, les bibliothèques, les scripts de construction,
2633etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
2634l'installation d'un paquet donné correspond à l'état actuel de leur
2635distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
2636aux environnements de construction utilisés, une construction donnée à de
2637forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
2638effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
2639container}).
bf5c74e7 2640
15f1bff4
JL
2641@cindex substituts
2642Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
2643binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
2644@file{/gnu/store} est disponible depuis une source externe (un
2645@dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
2646il construit le paquet depuis les sources localement (@pxref{Substituts}).
2647Comme les résultats des constructions sont généralement reproductibles au
2648bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
2649fournissent les substituts : vous pouvez forcer une construction locale et
2650@emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
bf5c74e7 2651
15f1bff4
JL
2652Le contrôle de l'environnement de construction est aussi une fonctionnalité
2653utile pour les développeurs. La commande @command{guix environment} permet
2654aux développeurs d'un paquet de mettre en place rapidement le bon
2655environnement de développement pour leur paquet, sans avoir à installer
2656manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
bf5c74e7 2657
15f1bff4
JL
2658@cindex réplication, des environnements logiciels
2659@cindex suivi de la provenance, des artefacts logiciels
2660La totalité de Guix et des définitions de paquets sont placés sous contrôle
2661de version, et @command{guix pull} vous permet de « voyager dans le temps »
2662de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
2663rend possible la réplication d'une instance Guix sur une machine différente
2664ou plus tard, ce qui vous permet de @emph{répliquer des environnements
2665logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
2666précis des logiciels.
3cacfa9e 2667
15f1bff4
JL
2668@node Invoquer guix package
2669@section Invoquer @command{guix package}
bf5c74e7 2670
15f1bff4
JL
2671@cindex installer des paquets
2672@cindex supprimer des paquets
2673@cindex installation de paquets
2674@cindex suppression de paquets
2675La commande @command{guix package} est l'outil qui permet d'installer,
2676mettre à jour et supprimer les paquets ainsi que de revenir à une
2677configuration précédente. Elle n'opère que dans le profil de l'utilisateur
2678et fonctionne avec les privilèges utilisateurs normaux
2679(@pxref{Fonctionnalités}). Sa syntaxe est :
bf5c74e7 2680
15f1bff4
JL
2681@example
2682guix package @var{options}
2683@end example
2684@cindex transactions
2685@var{options} spécifie d'abord les opérations à effectuer pendant la
2686transaction. À la fin, une nouvelle génération du profil est créée mais les
2687@dfn{générations} précédentes du profil restent disponibles si l'utilisateur
2688souhaite y revenir.
3cacfa9e 2689
15f1bff4
JL
2690Par exemple, pour supprimer @code{lua} et installer @code{guile} et
2691@code{guile-cairo} en une seule transaction :
3cacfa9e 2692
15f1bff4
JL
2693@example
2694guix package -r lua -i guile guile-cairo
2695@end example
3cacfa9e 2696
15f1bff4
JL
2697@command{guix package} supporte aussi une @dfn{approche déclarative} où
2698l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
2699disponibles le passe @i{via} l'option @option{--manifest}
2700(@pxref{profile-manifest, @option{--manifest}}).
3cacfa9e 2701
15f1bff4
JL
2702@cindex profil
2703Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
2704utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
2705lien symbolique pointe toujours vers la génération actuelle du profil par
2706défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
2707@file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
2708etc.
2709@cindex chemins de recherche
2710Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
2711les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
2712Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
2713ensuite aient les bonnes définitions des variables d'environnement :
bf5c74e7
JL
2714
2715@example
15f1bff4
JL
2716GUIX_PROFILE="$HOME/.guix-profile" ; \
2717source "$HOME/.guix-profile/etc/profile"
bf5c74e7
JL
2718@end example
2719
15f1bff4
JL
2720Dans un environnement multi-utilisateur, les profils utilisateurs sont
2721stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
2722@file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
2723normalement
2724@code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
2725@var{localstatedir} est la valeur passée à @code{configure} avec
2726@code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
2727répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
2728démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
2729package}.
bf5c74e7 2730
15f1bff4 2731Les @var{options} peuvent être les suivante :
bf5c74e7
JL
2732
2733@table @code
bf5c74e7 2734
15f1bff4
JL
2735@item --install=@var{paquet} @dots{}
2736@itemx -i @var{paquet} @dots{}
2737Installer les @var{paquet}s spécifiés.
bf5c74e7 2738
15f1bff4
JL
2739Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
2740@code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
2741version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
2742dernier cas, la version la plus récente commençant par @code{1.8} est
2743utilisée).
bf5c74e7 2744
15f1bff4
JL
2745Si aucun numéro de version n'est spécifié, la version la plus récente
2746disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
2747suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
2748@code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
2749paquets avec un nom correspondant et (éventuellement une version) sont
2750recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
bf5c74e7 2751
15f1bff4
JL
2752@cindex entrées propagées
2753Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
2754dépendances qui sont installées automatiquement avec le paquet demandé
2755(@pxref{package-propagated-inputs, @code{propagated-inputs} in
2756@code{package} objects} pour plus d'informations sur les entrées propagées
2757dans les définitions des paquets).
bf5c74e7 2758
15f1bff4
JL
2759@anchor{package-cmd-propagated-inputs}
2760Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
2761réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
2762ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
2763bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
2764MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
2765installés explicitement par l'utilisateur.
bf5c74e7 2766
15f1bff4
JL
2767D'autre part, les paquets dépendent parfois de la définition de variables
2768d'environnement pour leur chemin de recherche (voir les explications sur
2769@code{--search-paths} plus bas). Toute définition de variable
2770d'environnement manquante ou possiblement incorrecte est rapportée ici.
bf5c74e7 2771
15f1bff4
JL
2772@item --install-from-expression=@var{exp}
2773@itemx -e @var{exp}
2774Installer le paquet évalué par @var{exp}
bf5c74e7 2775
15f1bff4
JL
2776@var{exp} doit être une expression Scheme qui s'évalue en un objet
2777@code{<package>}. Cette option est notamment utile pour distinguer les
2778variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
2779(gnu packages base) guile-final)}.
bf5c74e7 2780
15f1bff4
JL
2781Remarquez que cette option installe la première sortie du paquet, ce qui
2782peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
2783paquet à plusieurs sorties.
bf5c74e7 2784
15f1bff4
JL
2785@item --install-from-file=@var{fichier}
2786@itemx -f @var{fichier}
2787Installer le paquet évalué par le code dans le @var{fichier}.
bf5c74e7 2788
15f1bff4
JL
2789Par exemple, @var{fichier} peut contenir une définition comme celle-ci
2790(@pxref{Définition des paquets}) :
bf5c74e7 2791
15f1bff4
JL
2792@example
2793@verbatiminclude package-hello.scm
2794@end example
bf5c74e7 2795
15f1bff4
JL
2796Les développeurs peuvent trouver utile d'inclure un tel fichier
2797@file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
2798pourrait être utilisé pour tester des versions de développement et créer des
2799environnements de développement reproductibles (@pxref{Invoquer guix environment}).
bf5c74e7 2800
15f1bff4
JL
2801@item --remove=@var{paquet} @dots{}
2802@itemx -r @var{paquet} @dots{}
2803Supprimer les @var{paquet}s spécifiés.
bf5c74e7 2804
15f1bff4
JL
2805Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
2806version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
2807glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
bf5c74e7 2808
15f1bff4
JL
2809@item --upgrade[=@var{regexp} @dots{}]
2810@itemx -u [@var{regexp} @dots{}]
2811@cindex mettre à jour des paquets
2812Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
2813spécifiée, la mise à jour n'installera que les paquets dont le nom
2814correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
2815dessous.
bf5c74e7 2816
15f1bff4
JL
2817Remarquez que cela met à jour vers la dernière version des paquets trouvée
2818dans la distribution actuellement installée. Pour mettre à jour votre
2819distribution, vous devriez lancer régulièrement @command{guix pull}
2820(@pxref{Invoquer guix pull}).
bf5c74e7 2821
15f1bff4
JL
2822@item --do-not-upgrade[=@var{regexp} @dots{}]
2823Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
2824mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
2825exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
2826de ceux qui contiennent la chaîne « emacs » :
bf5c74e7
JL
2827
2828@example
15f1bff4 2829$ guix package --upgrade . --do-not-upgrade emacs
bf5c74e7
JL
2830@end example
2831
15f1bff4
JL
2832@item @anchor{profile-manifest}--manifest=@var{fichier}
2833@itemx -m @var{fichier}
2834@cindex déclaration de profil
2835@cindex manifest de profil
2836Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
2837le code Scheme dans @var{fichier}.
bf5c74e7 2838
15f1bff4
JL
2839Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
2840construire avec une série de @code{--install} et de commandes similaires.
2841L'avantage étant que le @var{fichier} peut être placé sous contrôle de
2842version, copié vers d'autres machines pour reproduire le même profil, etc.
bf5c74e7 2843
15f1bff4
JL
2844@c FIXME: Add reference to (guix profile) documentation when available.
2845@var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
2846liste de paquets :
bf5c74e7 2847
15f1bff4
JL
2848@findex packages->manifest
2849@example
2850(use-package-modules guile emacs)
bf5c74e7 2851
15f1bff4
JL
2852(packages->manifest
2853 (list emacs
2854 guile-2.0
2855 ;; Utiliser une sortie spécifique d'un paquet.
2856 (list guile-2.0 "debug")))
2857@end example
bf5c74e7 2858
15f1bff4
JL
2859@findex specifications->manifest
2860Dans cet exemple on doit savoir quels modules définissent les variables
2861@code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
2862@code{use-package-modules} ce qui peut être embêtant. On peut à la place
2863fournir des spécifications de paquets normales et laisser
2864@code{specifications->manifest} rechercher les objets de paquets
2865correspondants, comme ceci :
bf5c74e7 2866
15f1bff4
JL
2867@example
2868(specifications->manifest
2869 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2870@end example
bf5c74e7 2871
15f1bff4
JL
2872@item --roll-back
2873@cindex revenir en arrière
2874@cindex défaire des transactions
2875@cindex transactions, défaire
2876Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
2877dernière transaction.
bf5c74e7 2878
15f1bff4
JL
2879Lorsqu'elle est combinée avec des options comme @code{--install}, cette
2880option revient en arrière avant toute autre action.
bf5c74e7 2881
15f1bff4
JL
2882Lorsque vous revenez de la première génération qui contient des fichiers, le
2883profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
2884fichier en dehors de ses propres métadonnées.
bf5c74e7 2885
15f1bff4
JL
2886Après être revenu en arrière, l'installation, la suppression et la mise à
2887jour de paquets réécrit les futures générations précédentes. Ainsi,
2888l'historique des générations dans un profil est toujours linéaire.
bf5c74e7 2889
15f1bff4
JL
2890@item --switch-generation=@var{motif}
2891@itemx -S @var{motif}
2892@cindex générations
2893Basculer vers une génération particulière définie par le @var{motif}.
3cacfa9e 2894
15f1bff4
JL
2895Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
2896de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
2897d'un nombre donné de générations. Par exemple, si vous voulez retourner à
2898la dernière génération après @code{--roll-back}, utilisez
2899@code{--switch-generation=+1}.
3cacfa9e 2900
15f1bff4
JL
2901La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
2902que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
2903donc si la génération demandée n'existe pas la génération actuelle ne
2904changera pas.
2cf2c778 2905
15f1bff4
JL
2906@item --search-paths[=@var{genre}]
2907@cindex chemins de recherche
2908Rapporter les définitions des variables d'environnement dans la syntaxe Bash
2909qui peuvent être requises pour utiliser l'ensemble des paquets installés.
2910Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
2911de recherche} de fichiers utilisés par les paquets installés.
2cf2c778 2912
15f1bff4
JL
2913Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
2914@code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
2915profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
2916Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
2917installés dans le profil, alors @code{--search-paths} suggérera
2918d'initialiser ces variables à @code{@var{profil}/include} et
2919@code{@var{profil}/lib}, respectivement.
2cf2c778 2920
15f1bff4
JL
2921Le cas d'utilisation typique est de définir ces variables d'environnement
2922dans le shell :
2cf2c778
JL
2923
2924@example
15f1bff4 2925$ eval `guix package --search-paths`
2cf2c778
JL
2926@end example
2927
15f1bff4
JL
2928@var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
2929@code{suffix}, ce qui signifie que les définitions des variables
2930d'environnement retournées seront soit les paramètres exactes, ou placés
2931avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
2932@var{genre} a pour valeur par défaut @code{exact}.
adfb167f 2933
15f1bff4
JL
2934Cette option peut aussi être utilisé pour calculer les chemins de recherche
2935@emph{combinés} de plusieurs profils. Regardez cet exemple :
2cf2c778
JL
2936
2937@example
15f1bff4
JL
2938$ guix package -p foo -i guile
2939$ guix package -p bar -i guile-json
2940$ guix package -p foo -p bar --search-paths
2cf2c778 2941@end example
3cacfa9e 2942
15f1bff4
JL
2943La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
2944bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
2945donné cette recommandation.
2cf2c778 2946
adfb167f
JL
2947
2948@item --profile=@var{profil}
2949@itemx -p @var{profil}
15f1bff4 2950Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
adfb167f 2951
15f1bff4
JL
2952@cindex collisions, dans un profil
2953@cindex faire des collisions de paquets dans des profils
2954@cindex profil, collisions
2955@item --allow-collisions
2956Permettre des collisions de paquets dans le nouveau profil. À utiliser à
2957vos risques et périls !
adfb167f 2958
15f1bff4
JL
2959Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
2960profil comme des erreurs. Les collisions ont lieu quand deux version ou
2961variantes d'un paquet donné se retrouvent dans le profil.
adfb167f 2962
bf5c74e7 2963@item --bootstrap
15f1bff4
JL
2964Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
2965option n'est utile que pour les développeurs de la distribution.
bf5c74e7 2966
15f1bff4 2967@end table
adfb167f 2968
15f1bff4
JL
2969En plus de ces actions, @command{guix package} supporte les options
2970suivantes pour demander l'état actuel d'un profil ou la disponibilité des
2971paquets :
adfb167f 2972
15f1bff4 2973@table @option
adfb167f 2974
15f1bff4
JL
2975@item --search=@var{regexp}
2976@itemx -s @var{regexp}
2977@cindex chercher des paquets
2978List the available packages whose name, synopsis, or description matches
2979@var{regexp} (in a case-insensitive fashion), sorted by relevance. Print
2980all the metadata of matching packages in @code{recutils} format (@pxref{Top,
2981GNU recutils databases,, recutils, GNU recutils manual}).
adfb167f 2982
15f1bff4
JL
2983Cela permet à des champs spécifiques d'être extraits avec la commande
2984@command{recsel}, par exemple :
adfb167f 2985
15f1bff4
JL
2986@example
2987$ guix package -s malloc | recsel -p name,version,relevance
2988name: jemalloc
2989version: 4.5.0
2990relevance: 6
adfb167f 2991
15f1bff4
JL
2992name: glibc
2993version: 2.25
2994relevance: 1
adfb167f 2995
15f1bff4
JL
2996name: libgc
2997version: 7.6.0
2998relevance: 1
2999@end example
adfb167f 3000
15f1bff4
JL
3001De manière similaire, pour montrer le nom de tous les paquets disponibles
3002sous license GNU@tie{}LGPL version 3 :
adfb167f 3003
15f1bff4
JL
3004@example
3005$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3006name: elfutils
adfb167f 3007
15f1bff4
JL
3008name: gmp
3009@dots{}
3010@end example
adfb167f 3011
15f1bff4
JL
3012Il est aussi possible de raffiner les résultats de la recherche avec
3013plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
3014liste des jeux de plateau :
adfb167f 3015
15f1bff4
JL
3016@example
3017$ guix package -s '\<board\>' -s game | recsel -p name
3018name: gnubg
3019@dots{}
3020@end example
adfb167f 3021
15f1bff4
JL
3022Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
3023qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
3024les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
3025parlent de clavier (en anglais : key@emph{board}).
adfb167f 3026
15f1bff4
JL
3027Et maintenant un exemple plus élaboré. La commande suivante recherche les
3028bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
3029Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
adfb167f
JL
3030
3031@example
15f1bff4
JL
3032$ guix package -s crypto -s library | \
3033 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
adfb167f
JL
3034@end example
3035
3036@noindent
15f1bff4
JL
3037@xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
3038d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
adfb167f 3039
15f1bff4
JL
3040@item --show=@var{paquet}
3041Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
3042au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
3043GNU recutils manual}).
adfb167f 3044
15f1bff4
JL
3045@example
3046$ guix package --show=python | recsel -p name,version
3047name: python
3048version: 2.7.6
adfb167f 3049
15f1bff4
JL
3050name: python
3051version: 3.3.5
3052@end example
adfb167f 3053
15f1bff4
JL
3054Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
3055détails concernant une version spécifique :
3056@example
3057$ guix package --show=python@@3.4 | recsel -p name,version
3058name: python
3059version: 3.4.3
3060@end example
adfb167f 3061
adfb167f 3062
adfb167f 3063
15f1bff4
JL
3064@item --list-installed[=@var{regexp}]
3065@itemx -I [@var{regexp}]
3066Liste les paquets actuellement installés dans le profil spécifié, avec les
3067paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
3068spécifié, liste uniquement les paquets installés dont le nom correspond à
3069@var{regexp}.
adfb167f 3070
15f1bff4
JL
3071Pour chaque paquet installé, affiche les éléments suivants, séparés par des
3072tabulations : le nom du paquet, sa version, la partie du paquet qui est
3073installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
3074pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
adfb167f 3075
15f1bff4
JL
3076@item --list-available[=@var{regexp}]
3077@itemx -A [@var{regexp}]
3078Lister les paquets actuellement disponibles dans la distribution pour ce
3079système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
3080liste uniquement les paquets dont le nom correspond à @var{regexp}.
adfb167f 3081
15f1bff4
JL
3082Pour chaque paquet, affiche les éléments suivants séparés par des
3083tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
adfb167f 3084
15f1bff4
JL
3085@item --list-generations[=@var{motif}]
3086@itemx -l [@var{motif}]
3087@cindex générations
3088Renvoyer la liste des générations avec leur date de création ; pour chaque
3089génération, montre les paquets installés avec les paquets installés les plus
3090récemment en dernier. Remarquez que la zéroième génération n'est jamais
3091montrée.
adfb167f 3092
15f1bff4
JL
3093Pour chaque paquet installé, afficher les éléments suivants, séparés par des
3094tabulations : le nom du paquet, sa version, la partie du paquet qui a été
3095installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
3096paquet dans le dépôt.
adfb167f 3097
15f1bff4
JL
3098Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
3099correspondantes. Les motifs valides sont :
adfb167f 3100
15f1bff4
JL
3101@itemize
3102@item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
3103à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
3104la première.
adfb167f 3105
15f1bff4
JL
3106Et @code{--list-generations=1,8,2} renvoie les trois générations dans
3107l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
adfb167f 3108
15f1bff4
JL
3109@item @emph{Des intervalles}. @code{--list-generations=2..9} affiche les
3110générations demandées et tout ce qui se trouvent entre elles. Remarquez que
3111le début d'un intervalle doit être plus petit que sa fin.
adfb167f 3112
15f1bff4
JL
3113Il est aussi possible d'omettre le numéro final. Par exemple,
3114@code{--list-generations=2..} renvoie toutes les générations à partir de la
3115deuxième.
adfb167f 3116
15f1bff4
JL
3117@item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
3118ou moins en passant un entier avec la première lettre de la durée (en
3119anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
3120générations qui sont âgées d'au plus 20 jours.
3121@end itemize
adfb167f 3122
15f1bff4
JL
3123@item --delete-generations[=@var{motif}]
3124@itemx -d [@var{motif}]
3125Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
3126l'actuelle.
adfb167f 3127
15f1bff4
JL
3128Cette commande accepte les même motifs que @option{--list-generations}.
3129Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
3130Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
3131que la durée spécifiée correspondent. Par exemple
3132@code{--delete-generations=1m} supprime les générations vieilles de plus
3133d'un mois.
adfb167f 3134
15f1bff4
JL
3135Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
3136zéroième génération n'est elle non plus jamais supprimée.
adfb167f 3137
15f1bff4
JL
3138Remarquez que supprimer des générations empêche de revenir en arrière vers
3139elles. Ainsi, cette commande doit être utilisée avec précaution.
adfb167f 3140
15f1bff4 3141@end table
adfb167f 3142
15f1bff4
JL
3143Enfin, comme @command{guix package} peut démarrer des processus de
3144construction, elle supporte les options de construction communes
3145(@pxref{Options de construction communes}). Elle supporte aussi les options de
3146transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
3147paquets sont perdues à la mise à jour ; pour les préserver à travers les
3148mises à jours, vous devriez définir vos propres variantes des paquets dans
3149une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
adfb167f 3150
15f1bff4
JL
3151@node Substituts
3152@section Substituts
adfb167f 3153
15f1bff4
JL
3154@cindex substituts
3155@cindex binaires pré-construits
3156Guix gère le déploiement depuis des binaires ou des sources de manière
3157transparente ce qui signifie qu'il peut aussi bien construire localement que
3158télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
3159appelons ces éléments pré-construits des @dfn{substituts} — ils se
3160substituent aux résultats des constructions locales. Dans la plupart des
3161cas, télécharger un substitut est bien plus rapide que de construire les
3162choses localement.
adfb167f 3163
15f1bff4
JL
3164Les substituts peuvent être tout ce qui résulte d'une construction de
3165dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
3166de paquets binaires pré-construits, mais les archives des sources par
3167exemple résultent aussi de la construction d'une dérivation qui peut aussi
3168être disponible en tant que substitut.
adfb167f 3169
15f1bff4
JL
3170@menu
3171* Serveur de substituts officiel:: Une source particulière de substituts.
3172* Autoriser un serveur de substituts:: Comment activer ou désactiver les
3173 substituts.
3174* Authentification des substituts:: Comment Guix vérifie les substituts.
3175* Paramètres de serveur mandataire:: Comment récupérer des substituts à
3176 travers un serveur mandataire.
3177* Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
3178* De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
3179 un paquet binaire ?
3180@end menu
adfb167f 3181
15f1bff4
JL
3182@node Serveur de substituts officiel
3183@subsection Serveur de substituts officiel
3184
3185@cindex hydra
3186@cindex ferme de construction
3187The @code{@value{SUBSTITUTE-SERVER}} server is a front-end to an official
3188build farm that builds packages from Guix continuously for some
3189architectures, and makes them available as substitutes. This is the default
3190source of substitutes; it can be overridden by passing the
3191@option{--substitute-urls} option either to @command{guix-daemon}
3192(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}}) or
3193to client tools such as @command{guix package}
3194(@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
3195
3196Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
3197est recommandé parce que les communications sont chiffrées ; à l'inverse
3198HTTP rend les communications visibles pour un espion qui peut utiliser les
3199informations accumulées sur vous pour déterminer par exemple si votre
3200système a des vulnérabilités de sécurités non corrigées.
3201
3202Les substituts de la ferme de construction officielle sont activés par
3203défaut dans la distribution système Guix (@pxref{Distribution GNU}).
3204Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
3205distribution externe, à moins que vous ne les ayez explicitement activés via
3206l'une des étapes d'installation recommandées (@pxref{Installation}). Les
3207paragraphes suivants décrivent comment activer ou désactiver les substituts
3208de la ferme de construction ; la même procédure peut être utilisée pour
3209activer les substituts de n'importe quel autre serveur de substituts.
3210
3211@node Autoriser un serveur de substituts
3212@subsection Autoriser un serveur de substituts
3213
3214@cindex sécurité
3215@cindex substituts, autorisations
3216@cindex liste de contrôle d'accès (ACL), pour les substituts
3217@cindex ACL (liste de contrôle d'accès), pour les substituts
3218To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER}}
3219or a mirror thereof, you must add its public key to the access control list
3220(ACL) of archive imports, using the @command{guix archive} command
3221(@pxref{Invoquer guix archive}). Doing so implies that you trust
3222@code{@value{SUBSTITUTE-SERVER}} to not be compromised and to serve genuine
3223substitutes.
3224
3225The public key for @code{@value{SUBSTITUTE-SERVER}} is installed along with
3226Guix, in @code{@var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, where
3227@var{prefix} is the installation prefix of Guix. If you installed Guix from
3228source, make sure you checked the GPG signature of
3229@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
3230Then, you can run something like this:
adfb167f
JL
3231
3232@example
15f1bff4 3233# guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
adfb167f
JL
3234@end example
3235
15f1bff4
JL
3236@quotation Remarque
3237Similarly, the @file{hydra.gnu.org.pub} file contains the public key of an
3238independent build farm also run by the project, reachable at
3239@indicateurl{https://mirror.hydra.gnu.org}.
3240@end quotation
adfb167f 3241
15f1bff4
JL
3242Une fois que cela est en place, la sortie d'une commande comme @code{guix
3243build} devrait changer de quelque chose comme :
adfb167f
JL
3244
3245@example
15f1bff4
JL
3246$ guix build emacs --dry-run
3247Les dérivations suivantes seraient construites :
3248 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3249 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3250 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3251 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3252@dots{}
adfb167f
JL
3253@end example
3254
3255@noindent
15f1bff4 3256à quelque chose comme :
bf5c74e7
JL
3257
3258@example
15f1bff4
JL
3259$ guix build emacs --dry-run
3260112.3 Mo seraient téléchargés :
3261 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3262 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3263 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3264 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
bf5c74e7 3265@dots{}
bf5c74e7
JL
3266@end example
3267
15f1bff4
JL
3268@noindent
3269This indicates that substitutes from @code{@value{SUBSTITUTE-SERVER}} are
3270usable and will be downloaded, when possible, for future builds.
bf5c74e7 3271
15f1bff4
JL
3272@cindex substituts, comment les désactiver
3273Le mécanisme de substitution peut être désactivé globalement en lançant
3274@code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
3275l'option @code{--no-substitutes} à @command{guix package}, @command{guix
3276build} et aux autres outils en ligne de commande.
3277
3278@node Authentification des substituts
3279@subsection Authentification des substituts
3280
3281@cindex signatures numériques
3282Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
3283qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
3284ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
3285
3286Il y a une exception cependant : si un serveur non autorisé fournit des
3287substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
3288serveur autorisé, alors le serveur non autorisé devient disponible pour les
3289téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
3290substituts avec cette option :
bf5c74e7
JL
3291
3292@example
15f1bff4 3293--substitute-urls="https://a.example.org https://b.example.org"
bf5c74e7
JL
3294@end example
3295
3296@noindent
15f1bff4
JL
3297@cindex constructions reproductibles
3298Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
3299@code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
3300téléchargera les substituts de @code{a.example.org} parce qu'il vient en
3301premier dans la liste et peut être considéré comme un miroir de
3302@code{b.example.org}. En pratique, des machines de constructions produisent
3303souvent les mêmes binaires grâce à des construction reproductibles au bit
3304près (voir plus bas).
bf5c74e7 3305
15f1bff4
JL
3306Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
3307validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
3308à ce que des clients HTTPS comme des navigateurs web font habituellement.
3309Cela est dû au fait que Guix authentifie les informations sur les substituts
3310eux-mêmes, comme expliqué plus haut, ce dont on se soucie réellement (alors
3311que les certificats X.509 authentifie la relation entre nom de domaine et
3312clef publique).
2cf2c778 3313
15f1bff4
JL
3314@node Paramètres de serveur mandataire
3315@subsection Paramètres de serveur mandataire
bf5c74e7 3316
15f1bff4
JL
3317@vindex http_proxy
3318Les substituts sont téléchargés par HTTP ou HTTPS. La variable
3319d'environnement @code{http_proxy} peut être initialisée dans l'environnement
3320de @command{guix-daemon} et est respectée pour le téléchargement des
3321substituts. Remarquez que la valeur de @code{http_proxy} dans
3322l'environnement où tournent @command{guix build}, @command{guix package} et
3323les autres clients n'a @emph{absolument aucun effet}.
bf5c74e7 3324
15f1bff4
JL
3325@node Échec de substitution
3326@subsection Échec de substitution
3cacfa9e 3327
15f1bff4
JL
3328Même lorsqu'un substitut pour une dérivation est disponible, la substitution
3329échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
3330substitut peut être hors ligne, le substitut a récemment été supprimé du
3331serveur, la connexion peut avoir été interrompue, etc.
3cacfa9e 3332
15f1bff4
JL
3333Lorsque les substituts sont activés et qu'un substitut pour une dérivation
3334est disponible, mais que la tentative de substitution échoue, Guix essaiera
3335de construire la dérivation localement si @code{--fallback} a été passé en
3336argument (@pxref{option de repli,, common build option @code{--fallback}}).
3337Plus spécifiquement, si cet option n'a pas été passée en argument, alors
3338aucune construction locale n'est effectuée et la dérivation est considérée
3339comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
3340alors Guix essaiera de construire la dérivation localement et l'échec ou le
3341succès de la dérivation dépend de l'échec ou du succès de la construction
3342locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
3343substitut n'est disponible pour la dérivation en question, une construction
3344locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
3345@code{--fallback} ait été ou non passé.
3cacfa9e 3346
15f1bff4
JL
3347Pour se donner une idée du nombre de substituts disponibles maintenant, vous
3348pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
3349fournis par un serveur.
bf5c74e7 3350
15f1bff4
JL
3351@node De la confiance en des binaires
3352@subsection De la confiance en des binaires
bf5c74e7 3353
15f1bff4
JL
3354@cindex confiance, en des binaires pré-construits
3355Today, each individual's control over their own computing is at the mercy of
3356institutions, corporations, and groups with enough power and determination
3357to subvert the computing infrastructure and exploit its weaknesses. While
3358using @code{@value{SUBSTITUTE-SERVER}} substitutes can be convenient, we
3359encourage users to also build on their own, or even run their own build
3360farm, such that @code{@value{SUBSTITUTE-SERVER}} is less of an interesting
3361target. One way to help is by publishing the software you build using
3362@command{guix publish} so that others have one more choice of server to
3363download substitutes from (@pxref{Invoquer guix publish}).
bf5c74e7 3364
15f1bff4
JL
3365Guix possède les fondations pour maximiser la reproductibilité logicielle
3366(@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
3367indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
3368résultats identiques au bit près. Ainsi, à travers un ensemble de
3369constructions de paquets indépendantes il est possible de renforcer
3370l'intégrité du système. La commande @command{guix challenge} a pour but
3371d'aider les utilisateurs à tester les serveurs de substituts et à aider les
3372développeurs à trouver les constructions de paquets non-déterministes
3373(@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
3374@command{guix build} permet aux utilisateurs de vérifier si les substituts
3375précédemment installés sont authentiques en les reconstruisant localement
3376(@pxref{vérification de la construction, @command{guix build --check}}).
bf5c74e7 3377
15f1bff4
JL
3378Dans le futur, nous aimerions que Guix puisse publier et recevoir des
3379binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
3380discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
bf5c74e7 3381
15f1bff4
JL
3382@node Des paquets avec plusieurs résultats
3383@section Des paquets avec plusieurs résultats
3cacfa9e 3384
15f1bff4
JL
3385@cindex paquets avec plusieurs résultats
3386@cindex sorties de paquets
3387@cindex sorties
bf5c74e7 3388
15f1bff4
JL
3389Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
3390c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
3391dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
3392la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
3393@code{out} mais son nom peut être omis comme le montre cette commande. Dans
3394ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
3395fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
3396statiques, la documentation Info et les autres fichiers de support.
3397
3398Parfois il est plus approprié de séparer les divers types de fichiers
3399produits par un même paquet source en plusieurs sorties. Par exemple, la
3400bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
3401plus de 20 Mo de documentation de référence dans des pages HTML. Pour
3402préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
3403documentation va dans une sortie séparée nommée @code{doc}. Pour installer
3404la sortie principale de GLib, qui contient tout sauf la documentation, on
3405devrait lancer :
3cacfa9e
LC
3406
3407@example
15f1bff4 3408guix package -i glib
3cacfa9e
LC
3409@end example
3410
15f1bff4
JL
3411@cindex documentation
3412La commande pour installer la documentation est :
3cacfa9e
LC
3413
3414@example
15f1bff4 3415guix package -i glib:doc
3cacfa9e
LC
3416@end example
3417
15f1bff4
JL
3418Certains paquets installent des programmes avec des « empreintes dépendances
3419» différentes. Par exemple le paquet WordNet installe à la fois les outils
3420en ligne de commande et les interfaces graphiques (GUI). La première ne
3421dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
3422et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
3423en ligne de commande dans la sortie par défaut et l'interface graphique dans
3424une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
3425d'interface graphique de gagner de la place. La commande @command{guix
3426size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
2cf2c778 3427
15f1bff4
JL
3428Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
3429D'autres noms de sorties conventionnels sont @code{lib} pour les
3430bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
3431programmes indépendants et @code{debug} pour les informations de débogage
3432(@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
3433dans la troisième colonne de la sortie de @command{guix package
3434--list-available} (@pxref{Invoquer guix package}).
3cacfa9e 3435
bf5c74e7 3436
15f1bff4
JL
3437@node Invoquer guix gc
3438@section Invoquer @command{guix gc}
bf5c74e7 3439
15f1bff4
JL
3440@cindex ramasse-miettes
3441@cindex espace disque
3442Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
3443La commande @command{guix gc} permet aux utilisateurs de lancer
3444explicitement le ramasse-miettes pour récupérer de l'espace dans le
3445répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
3446des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
3447répertoires à la main peut le casser de manière impossible à réparer !
bf5c74e7 3448
15f1bff4
JL
3449@cindex racines du GC
3450@cindex racines du ramasse-miettes
3451Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
3452dans @file{/gnu/store} atteignable depuis une racine est considéré comme
3453@dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
3454considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
3455racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
3456les profils par défaut des utilisateurs ; par défaut les liens symboliques
3457sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
3458racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
3459exemple (@pxref{Invoquer guix build}).
bf5c74e7 3460
15f1bff4
JL
3461Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
3462c'est souvent utile de supprimer les anciennes génération des profils
3463utilisateurs ; de cette façon les anciennes constructions de paquets
3464référencées par ces générations peuvent être glanées. Cela se fait en
3465lançant @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
bf5c74e7 3466
15f1bff4
JL
3467Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
3468avez besoin d'espace disque. Par exemple pour garantir qu'au moins
34695@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
bf5c74e7 3470
15f1bff4
JL
3471@example
3472guix gc -F 5G
3473@end example
bf5c74e7 3474
15f1bff4
JL
3475It is perfectly safe to run as a non-interactive periodic job
3476(@pxref{Exécution de tâches planifiées}, for how to set up such a job). Running
3477@command{guix gc} with no arguments will collect as much garbage as it can,
3478but that is often inconvenient: you may find yourself having to rebuild or
3479re-download software that is ``dead'' from the GC viewpoint but that is
3480necessary to build other pieces of software---e.g., the compiler tool chain.
bf5c74e7 3481
15f1bff4
JL
3482La command @command{guix gc} a trois modes d'opération : il peut être
3483utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
3484fichiers spécifiques (l'option @code{--delete}), pour afficher des
3485informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
3486options du ramasse-miettes sont :
bf5c74e7 3487
15f1bff4
JL
3488@table @code
3489@item --collect-garbage[=@var{min}]
3490@itemx -C [@var{min}]
3491Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
3492@file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
3493lorsqu'aucune option n'est spécifiée.
bf5c74e7 3494
15f1bff4
JL
3495Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
3496collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
3497d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
3498(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
bf5c74e7 3499
15f1bff4 3500Lorsque @var{min} est omis, tout glaner.
bf5c74e7 3501
15f1bff4
JL
3502@item --free-space=@var{libre}
3503@itemx -F @var{libre}
3504Glaner jusqu'à ce que @var{libre} espace soit disponible dans
3505@file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
3506comme @code{500MiB} comme décrit ci-dessus.
bf5c74e7 3507
15f1bff4
JL
3508Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
3509faire et s'arrêter immédiatement.
bf5c74e7 3510
15f1bff4
JL
3511@item --delete
3512@itemx -d
3513Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
3514en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
3515ou s'ils sont toujours utilisés.
bf5c74e7 3516
15f1bff4
JL
3517@item --list-failures
3518Lister les éléments du dépôt qui correspondent à des échecs de construction
bf5c74e7 3519
15f1bff4
JL
3520Cela n'affiche rien à moins que le démon n'ait été démarré avec
3521@option{--cache-failures} (@pxref{Invoquer guix-daemon,
3522@option{--cache-failures}}).
bf5c74e7 3523
15f1bff4
JL
3524@item --clear-failures
3525Supprimer les éléments du dépôt spécifiés du cache des constructions
3526échouées.
3cacfa9e 3527
15f1bff4
JL
3528De nouveau, cette option ne fait de sens que lorsque le démon est démarré
3529avec @option{--cache-failures}. Autrement elle ne fait rien.
bf5c74e7 3530
15f1bff4
JL
3531@item --list-dead
3532Montrer la liste des fichiers et des répertoires inutilisés encore présents
3533dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
3534atteignables par aucune racine.
bf5c74e7 3535
15f1bff4
JL
3536@item --list-live
3537Montrer la liste des fichiers et des répertoires du dépôt utilisés.
bf5c74e7 3538
15f1bff4 3539@end table
bf5c74e7 3540
15f1bff4
JL
3541En plus, les références entre les fichiers existants du dépôt peuvent être
3542demandés :
bf5c74e7 3543
15f1bff4 3544@table @code
bf5c74e7 3545
15f1bff4
JL
3546@item --references
3547@itemx --referrers
3548@cindex dépendances des paquets
3549Lister les références (respectivement les référents) des fichiers du dépôt
3550en argument.
bf5c74e7 3551
15f1bff4
JL
3552@item --requisites
3553@itemx -R
3554@cindex closure
3555Lister les prérequis des fichiers du dépôt passés en argument. Les
3556prérequis sont le fichier du dépôt lui-même, leur références et les
3557références de ces références, récursivement. En d'autre termes, la liste
3558retournée est la @dfn{closure transitive} des fichiers du dépôt.
bf5c74e7 3559
15f1bff4
JL
3560@xref{Invoquer guix size} pour un outil pour surveiller la taille de la
3561closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
3562visualiser le graphe des références.
3563
3564@item --derivers
3565@cindex dérivation
3566Renvoie les dérivations menant aux éléments du dépôt donnés
3567(@pxref{Dérivations}).
3568
3569Par exemple cette commande :
bf5c74e7
JL
3570
3571@example
15f1bff4 3572guix gc --derivers `guix package -I ^emacs$ | cut -f4`
bf5c74e7
JL
3573@end example
3574
3575@noindent
15f1bff4
JL
3576renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
3577votre profil.
3cacfa9e 3578
15f1bff4
JL
3579Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
3580ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
3581@file{.drv} correspondant à cause de dérivations à sortie fixées.
3582@end table
bf5c74e7 3583
15f1bff4
JL
3584Enfin, les options suivantes vous permettent de vérifier l'intégrité du
3585dépôt et de contrôler l'utilisation du disque.
bf5c74e7 3586
15f1bff4 3587@table @option
bf5c74e7 3588
15f1bff4
JL
3589@item --verify[=@var{options}]
3590@cindex intégrité, du dépôt
3591@cindex vérification d'intégrité
3592Vérifier l'intégrité du dépôt.
bf5c74e7 3593
15f1bff4
JL
3594Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
3595dans la base de données du démon existent bien dans @file{/gnu/store}.
bf5c74e7 3596
15f1bff4
JL
3597Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
3598virgule de l'un ou plus parmi @code{contents} et @code{repair}.
bf5c74e7 3599
15f1bff4
JL
3600Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
3601contenu de chaque élément du dépôt et le compare au hash de sa base de
3602données. Les différences de hash sont rapportées comme des corruptions de
3603données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
3604commande peut prendre très longtemps pour terminer, surtout sur un système
3605avec un disque lent.
bf5c74e7 3606
15f1bff4
JL
3607@cindex réparer le dépôt
3608@cindex corruption, récupérer de
3609Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
3610que le démon essaie de réparer les objets du dépôt corrompus en récupérant
3611leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
3612atomique et donc potentiellement dangereuse, elle n'est disponible que pour
3613l'administrateur système. Une alternative plus légère lorsque vous
3614connaissez exactement quelle entrée est corrompue consiste à lancer
3615@command{guix build --repair} (@pxref{Invoquer guix build}).
3cacfa9e 3616
15f1bff4
JL
3617@item --optimize
3618@cindex déduplication
3619Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
3620@dfn{déduplication}.
3cacfa9e 3621
15f1bff4
JL
3622Le démon effectue une déduplication à chaque construction réussie ou import
3623d'archive à moins qu'il n'ait été démarré avec
3624@code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
3625@code{--disable-deduplication}}). Ainsi, cette option est surtout utile
3626lorsque le démon tourne avec @code{--disable-deduplication}.
bf5c74e7 3627
15f1bff4 3628@end table
3cacfa9e 3629
15f1bff4
JL
3630@node Invoquer guix pull
3631@section Invoquer @command{guix pull}
3cacfa9e 3632
15f1bff4
JL
3633@cindex mettre à niveau Guix
3634@cindex mettre à jour Guix
3635@cindex @command{guix pull}
3636@cindex pull
3637Les paquets sont installés ou mis à jour vers la dernière version disponible
3638dans la distribution actuellement disponible sur votre machine locale. Pour
3639mettre à jour cette distribution, en même temps que les outils Guix, vous
3640devez lancer @command{guix pull} ; la commande télécharge le dernier code
3641source de Guix et des descriptions de paquets et le déploie. Le code source
3642est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
3643le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
3644
3645À la fin, @command{guix package} utilisera les paquets et les versions des
3646paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
3647toutes les commandes Guix et les modules Scheme seront aussi récupérés
3648depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
3649ajoutés par la mise à jour sont aussi maintenant disponibles.
bf5c74e7 3650
15f1bff4
JL
3651Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
3652pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
3653pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
3654pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
3655vice-versa
3656
3657Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
3658disponible sous @file{~/.config/guix/current} contenant la dernière version
3659de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
3660recherche pour que vous utilisiez la dernière version. Le même conseil
3661s'applique au manuel Info (@pxref{Documentation}) :
bf5c74e7
JL
3662
3663@example
15f1bff4
JL
3664export PATH="$HOME/.config/guix/current/bin:$PATH"
3665export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
bf5c74e7
JL
3666@end example
3667
15f1bff4
JL
3668L'option @code{--list-generations} ou @code{-l} liste les anciennes
3669générations produites par @command{guix pull}, avec des détails sur leur
3670origine :
bf5c74e7 3671
15f1bff4
JL
3672@example
3673$ guix pull -l
3674Génération 1 10 juin 2018 00:18:18
3675 guix 65956ad
3676 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3677 branche : origin/master
3678 commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
bf5c74e7 3679
15f1bff4
JL
3680Génération 2 11 juin 2018 11:02:49
3681 guix e0cc7f6
3682 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3683 branche : origin/master
3684 commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
3685 2 nouveaux paquets : keepalived, libnfnetlink
3686 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
3687 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
3688 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
bf5c74e7 3689
15f1bff4
JL
3690Génération 3 13 juin 2018 23:31:07 (actuelle)
3691 guix 844cc1c
3692 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3693 branche : origin/master
3694 commit : 844cc1c8f394f03b404c5bb3aee086922373490c
3695 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
3696 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
3697@end example
bf5c74e7 3698
15f1bff4
JL
3699@ref{Invoquer guix describe, @command{guix describe}} pour d'autres manières
3700de décrire le statut actuel de Guix.
3cacfa9e 3701
15f1bff4
JL
3702Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
3703créés par @command{guix package} (@pxref{Invoquer guix package}).
3704C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
3705une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
3cacfa9e 3706
15f1bff4
JL
3707@example
3708$ guix package -p ~/.config/guix/current --roll-back
3709passé de la génération 3 à 2
3710$ guix package -p ~/.config/guix/current --delete-generations=1
3711suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
3712@end example
3cacfa9e 3713
15f1bff4
JL
3714La commande @command{guix pull} est typiquement invoquée sans arguments mais
3715il supporte les options suivantes :
bf5c74e7 3716
15f1bff4
JL
3717@table @code
3718@item --url=@var{url}
3719@itemx --commit=@var{commit}
3720@itemx --branch=@var{branche}
3721Télécharger le code depuis l'@var{url} spécifié, au @var{commit} donné (un
3722commit Git valide représenté par une chaîne hexadécimale) ou à la branche
3723@var{branch}.
bf5c74e7 3724
15f1bff4
JL
3725@cindex @file{channels.scm}, fichier de configuration
3726@cindex fichier de configuration pour les canaux
3727Ces options sont fournies pour votre confort, mais vous pouvez aussi
3728spécifier votre configuration dans le fichier
3729@file{~/.config/guix/channels.scm} ou en utilisant l'option
3730@option{--channels} (voir plus bas).
bf5c74e7 3731
15f1bff4
JL
3732@item --channels=@var{file}
3733@itemx -C @var{file}
3734Lit la liste des canaux dans @var{file} plutôt que dans
3735@file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
3736qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
3737d'informations.
bf5c74e7 3738
15f1bff4
JL
3739@item --list-generations[=@var{motif}]
3740@itemx -l [@var{motif}]
3741Liste toutes les générations de @file{~/.config/guix/current} ou, si
3742@var{motif} est fournit, le sous-ensemble des générations qui correspondent
3743à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
3744package --list-generations} (@pxref{Invoquer guix package}).
bf5c74e7 3745
15f1bff4
JL
3746@ref{Invoquer guix describe}, pour une manière d'afficher des informations
3747sur la génération actuelle uniquement.
bf5c74e7 3748
15f1bff4
JL
3749@item --profile=@var{profil}
3750@itemx -p @var{profil}
3751Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
3cacfa9e 3752
15f1bff4
JL
3753@item --dry-run
3754@itemx -n
3755Montrer quels commits des canaux seraient utilisés et ce qui serait
3756construit ou substitué mais ne pas le faire vraiment.
3cacfa9e 3757
15f1bff4
JL
3758@item --system=@var{système}
3759@itemx -s @var{système}
3760Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
3761plutôt que pour le type de système de l'hôte de construction.
3cacfa9e 3762
15f1bff4
JL
3763@item --verbose
3764Produire une sortie verbeuse, en écrivant les journaux de construction sur
3765la sortie d'erreur standard.
bf5c74e7 3766
15f1bff4
JL
3767@item --bootstrap
3768Utiliser le programme d'amorçage Guile pour construire la dernière version
3769de Guix. Cette option n'est utile que pour les développeurs de Guix.
3770@end table
bf5c74e7 3771
15f1bff4
JL
3772Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
3773répertoires et branches récupérer, ainsi que les dépôts
3774@emph{supplémentaires} contenant des modules de paquets qui devraient être
3775déployés. @xref{Canaux} pour plus d'information.
bf5c74e7 3776
15f1bff4
JL
3777En plus, @command{guix pull} supporte toutes les options de construction
3778communes (@pxref{Options de construction communes}).
bf5c74e7 3779
15f1bff4
JL
3780@node Canaux
3781@section Canaux
bf5c74e7 3782
15f1bff4
JL
3783@cindex canaux
3784@cindex @file{channels.scm}, fichier de configuration
3785@cindex fichier de configuration pour les canaux
3786@cindex @command{guix pull}, fichier de configuration
3787@cindex configuration de @command{guix pull}
3788Guix et sa collection de paquets sont mis à jour en lançant @command{guix
3789pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
3790télécharge et déploie Guix lui-même depuis le dépôt officiel de
3791GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
3792dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
3793et la branche d'un répertoire Git à déployer et on peut demander à
3794@command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
3795termes, les canaux peuvent être utilisés pour personnaliser et pour
3796@emph{étendre} Guix, comme on le verra plus bas.
bf5c74e7 3797
15f1bff4 3798@subsection Utiliser un canal Guix personnalisé
bf5c74e7 3799
15f1bff4
JL
3800Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
3801de commande ainsi que sa collection de paquets — sera téléchargé. Par
3802exemple, supposons que vous voulez effectuer les mises à jour depuis votre
3803propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
3804depuis la branche @code{super-hacks}. Vous pouvez écrire cette
3805spécification dans @code{~/.config/guix/channels.scm} :
3cacfa9e 3806
15f1bff4
JL
3807@lisp
3808;; Dit à « guix pull » d'utiliser mon propre dépôt.
3809(list (channel
3810 (name 'guix)
3811 (url "https://example.org/my-guix.git")
3812 (branch "super-hacks")))
3813@end lisp
bf5c74e7 3814
15f1bff4
JL
3815@noindent
3816Maintenant, @command{guix pull} récupérera le code depuis la branche
3817@code{super-hacks} du dépôt sur @code{example.org}.
bf5c74e7 3818
15f1bff4 3819@subsection Spécifier des canaux supplémentaires
3cacfa9e 3820
15f1bff4
JL
3821@cindex étendre la collection de paquets (canaux)
3822@cindex paquets personnels (canaux)
3823@cindex canaux, pour des paquets personnels
3824Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
3825Disons que vous avez un ensemble de paquets personnels ou de variantes
3826personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
3827mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
3828de commande. Vous écririez d'abord des modules contenant ces définitions de
3829paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
3830vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
3831supplémentaire où trouver ces paquets. Sympa, non ?
3cacfa9e 3832
15f1bff4
JL
3833@c What follows stems from discussions at
3834@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3835@c earlier discussions on guix-devel@gnu.org.
3836@quotation Attention
3837Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
3838@emph{super génial} ! » et que vous ne publiez vos canaux personnels
3839publiquement, nous voudrions vous donner quelques avertissements :
bf5c74e7 3840
15f1bff4
JL
3841@itemize
3842@item
3843Avant de publier un canal, envisagez de contribuer vos définitions de
3844paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
3845ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
3846Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
3847des processus d'assurance qualité du projet.
3cacfa9e 3848
15f1bff4
JL
3849@item
3850Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
3851les développeurs de Guix, considérons que @emph{la charge de la
3852compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
3853les définitions de paquets ne sont que du code Scheme qui utilise diverses
3854interfaces de programmation (API). Nous souhaitons rester libres de changer
3855ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
3856casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
3857ne nous engageons @emph{pas} à geler les API non plus.
3cacfa9e 3858
15f1bff4
JL
3859@item
3860Corollaire : si vous utilisez un canal externe et que le canal est cassé,
3861merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
3862Guix.
3863@end itemize
3cacfa9e 3864
15f1bff4
JL
3865Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
3866sont une manière pratique d'exercer votre liberté pour augmenter la
3867collection de paquets de Guix et de partager vos améliorations, qui sont les
3868principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
3869logiciel libre}. Contactez-nous par courriel sur
3870@email{guix-devel@@gnu.org} si vous souhaitez discuter à ce propos.
3871@end quotation
3cacfa9e 3872
15f1bff4
JL
3873To use a channel, write @code{~/.config/guix/channels.scm} to instruct
3874@command{guix pull} to pull from it @emph{in addition} to the default Guix
3875channel(s):
bf5c74e7 3876
15f1bff4
JL
3877@vindex %default-channels
3878@lisp
3879;; Ajouter mes paquets personnels à ceux fournis par Guix.
3880(cons (channel
3881 (name 'my-personal-packages)
3882 (url "https://example.org/personal-packages.git"))
3883 %default-channels)
3884@end lisp
bf5c74e7
JL
3885
3886@noindent
15f1bff4
JL
3887Note that the snippet above is (as always!)@: Scheme code; we use
3888@code{cons} to add a channel the list of channels that the variable
3889@code{%default-channels} is bound to (@pxref{Pairs, @code{cons} and lists,,
3890guile, GNU Guile Reference Manual}). With this file in place, @command{guix
3891pull} builds not only Guix but also the package modules from your own
3892repository. The result in @file{~/.config/guix/current} is the union of
3893Guix with your own package modules:
3cacfa9e 3894
15f1bff4
JL
3895@example
3896$ guix pull --list-generations
3897@dots{}
3898Génération 19 Aug 27 2018 16:20:48
3899 guix d894ab8
3900 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
3901 branche : master
3902 commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
3903 my-personal-packages dd3df5e
3904 URL du dépôt : https://example.org/personal-packages.git
3905 branche : master
3906 commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
3907 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
3908 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
3909@end example
bf5c74e7
JL
3910
3911@noindent
15f1bff4
JL
3912La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
3913contient aussi bien Guix que les paquets du canal
3914@code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
3915à jour qui sont listés, certains comme @code{my-gimp} et
3916@code{my-emacs-with-cool-features} peuvent provenir de
3917@code{my-personal-packages}, tandis que d'autres viennent du canal par
3918défaut de Guix.
bf5c74e7 3919
15f1bff4
JL
3920To create a channel, create a Git repository containing your own package
3921modules and make it available. The repository can contain anything, but a
3922useful channel will contain Guile modules that export packages. Once you
3923start using a channel, Guix will behave as if the root directory of that
3924channel's Git repository has been added to the Guile load path (@pxref{Load
3925Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel
3926contains a file at @file{my-packages/my-tools.scm} that defines a Guile
3927module, then the module will be available under the name @code{(my-packages
3928my-tools)}, and you will be able to use it like any other module
3929(@pxref{Modules,,, guile, GNU Guile Reference Manual}).
bf5c74e7 3930
15f1bff4
JL
3931@cindex dependencies, channels
3932@cindex meta-data, channels
3933@subsection Declaring Channel Dependencies
bf5c74e7 3934
15f1bff4
JL
3935Channel authors may decide to augment a package collection provided by other
3936channels. They can declare their channel to be dependent on other channels
3937in a meta-data file @file{.guix-channel}, which is to be placed in the root
3938of the channel repository.
3cacfa9e 3939
15f1bff4 3940The meta-data file should contain a simple S-expression like this:
3cacfa9e 3941
15f1bff4
JL
3942@lisp
3943(channel
3944 (version 0)
3945 (dependencies
3946 (channel
3947 (name some-collection)
3948 (url "https://example.org/first-collection.git"))
3949 (channel
3950 (name some-other-collection)
3951 (url "https://example.org/second-collection.git")
3952 (branch "testing"))))
3953@end lisp
bf5c74e7 3954
15f1bff4
JL
3955In the above example this channel is declared to depend on two other
3956channels, which will both be fetched automatically. The modules provided by
3957the channel will be compiled in an environment where the modules of all
3958these declared channels are available.
bf5c74e7 3959
15f1bff4
JL
3960For the sake of reliability and maintainability, you should avoid
3961dependencies on channels that you don't control, and you should aim to keep
3962the number of dependencies to a minimum.
bf5c74e7 3963
15f1bff4 3964@subsection Répliquer Guix
bf5c74e7 3965
15f1bff4
JL
3966@cindex épinglage, canaux
3967@cindex répliquer Guix
3968@cindex reproductibilité, de Guix
3969La sortie de @command{guix pull --list-generations} ci-dessus montre
3970précisément quels commits ont été utilisés pour construire cette instance de
3971Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
3972fournissant une spécification de canal dans
3973@file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
bf5c74e7 3974
15f1bff4
JL
3975@lisp
3976;; Déployer des commits précis de mes canaux préférés.
3977(list (channel
3978 (name 'guix)
3979 (url "https://git.savannah.gnu.org/git/guix.git")
3980 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
3981 (channel
3982 (name 'my-personal-packages)
3983 (url "https://example.org/personal-packages.git")
3984 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
3985@end lisp
bf5c74e7 3986
15f1bff4
JL
3987La commande @command{guix describe --format=channels} peut même générer
3988cette liste de canaux directement (@pxref{Invoquer guix describe}).
bf5c74e7 3989
15f1bff4
JL
3990À ce moment les deux machines font tourner @emph{exactement le même Guix},
3991avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
3992build gimp} sur une machine sera exactement la même, au bit près, que la
3993sortie de la même commande sur l'autre machine. Cela signifie aussi que les
3994deux machines ont accès à tous les codes sources de Guix, et transitivement,
3995à tous les codes sources de tous les paquets qu'il définit.
bf5c74e7 3996
15f1bff4
JL
3997Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
3998provenance des artefacts binaires avec un grain très fin et de reproduire
3999les environnements logiciels à volonté — une sorte de capacité de «
4000méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
4001manière d'utiliser ces super-pouvoirs.
bf5c74e7 4002
15f1bff4
JL
4003@node Inférieurs
4004@section Inférieurs
4005
4006@c TODO: Remove this once we're more confident about API stability.
4007@quotation Remarque
4008La fonctionnalité décrite ici est un « démonstrateur technique » à la
4009version @value{VERSION}. Ainsi, l'interface est sujette à changements.
4010@end quotation
3cacfa9e 4011
15f1bff4
JL
4012@cindex inférieurs
4013@cindex composition de révisions de Guix
4014Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
4015avec des paquets disponibles dans une révision différente de Guix. Les
4016@dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
4017composant différentes versions de Guix de manière arbitraire.
3cacfa9e 4018
15f1bff4
JL
4019@cindex paquets inférieurs
4020Techniquement, un « inférieur » est surtout un processus Guix séparé
4021connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
4022inférieurs et de communiquer avec eux. Il fournit aussi une interface de
4023haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
4024inférieurs} — et les manipuler.
bf5c74e7 4025
15f1bff4
JL
4026Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
4027fournissent une manière simple d'interagir avec un révision de Guix
4028séparée. Par exemple, disons que vous souhaitiez installer dans votre
4029profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
4030révision de Guix — peut-être parce que la nouvelle version de
4031@code{guile-json} a une API incompatible et que vous voulez lancer du code
4032avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
4033utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
4034; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
4035Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
4036l'inférieur :
bf5c74e7 4037
15f1bff4
JL
4038@lisp
4039(use-modules (guix inferior) (guix channels)
4040 (srfi srfi-1)) ;pour « first »
bf5c74e7 4041
15f1bff4
JL
4042(define channels
4043 ;; L'ancienne révision depuis laquelle on veut
4044 ;; extraire guile-json.
4045 (list (channel
4046 (name 'guix)
4047 (url "https://git.savannah.gnu.org/git/guix.git")
4048 (commit
4049 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
bf5c74e7 4050
15f1bff4
JL
4051(define inferior
4052 ;; Un inférieur représentant la révision ci-dessus.
4053 (inferior-for-channels channels))
3cacfa9e 4054
15f1bff4
JL
4055;; Maintenant on crée un manifeste avec le paquet « guile » actuel
4056;; et l'ancien paquet « guile-json ».
4057(packages->manifest
4058 (list (first (lookup-inferior-packages inferior "guile-json"))
4059 (specification->package "guile")))
4060@end lisp
3cacfa9e 4061
15f1bff4
JL
4062Durant la première exécution, @command{guix package --manifest} pourrait
4063avoir besoin de construire le canal que vous avez spécifié avant de créer
4064l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
4065révision de Guix sera déjà en cache.
3cacfa9e 4066
15f1bff4
JL
4067Le module @code{(guix inferior)} fournit les procédures suivantes pour
4068ouvrir un inférieur :
3cacfa9e 4069
15f1bff4
JL
4070@deffn {Procédure Scheme} inferior-for-channels @var{channels} @
4071 [#:cache-directory] [#:ttl]
4072Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
4073le cache dans @var{cache-directory}, où les entrées peuvent être glanées
4074après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
4075démon de construction.
3cacfa9e 4076
15f1bff4
JL
4077Elle a pour effet de bord de construire ou de substituer des binaires pour
4078@var{channels}, ce qui peut prendre du temps.
4079@end deffn
3cacfa9e 4080
15f1bff4
JL
4081@deffn {Procédure Scheme} open-inferior @var{directory} @
4082 [#:command "bin/guix"]
4083Ouvre le Guix inférieur dans @var{directory} et lance
4084@code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
4085si l'inférieur n'a pas pu être lancé.
4086@end deffn
bf5c74e7 4087
15f1bff4
JL
4088@cindex paquets inférieurs
4089Les procédures listées plus bas vous permettent d'obtenir et de manipuler
4090des paquets inférieurs.
bf5c74e7 4091
15f1bff4
JL
4092@deffn {Procédure Scheme} inferior-packages @var{inferior}
4093Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
4094@end deffn
bf5c74e7 4095
15f1bff4
JL
4096@deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
4097 [@var{version}]
4098Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
4099dans @var{inferior}, avec le plus haut numéro de version en premier. Si
4100@var{version} est vrai, renvoie seulement les paquets avec un numéro de
4101version préfixé par @var{version}.
4102@end deffn
bf5c74e7 4103
15f1bff4
JL
4104@deffn {Procédure Scheme} inferior-package? @var{obj}
4105Renvoie vrai si @var{obj} est un paquet inférieur.
4106@end deffn
bf5c74e7 4107
15f1bff4
JL
4108@deffn {Procédure Scheme} inferior-package-name @var{package}
4109@deffnx {Procédure Scheme} inferior-package-version @var{package}
4110@deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
4111@deffnx {Procédure Scheme} inferior-package-description @var{package}
4112@deffnx {Procédure Scheme} inferior-package-home-page @var{package}
4113@deffnx {Procédure Scheme} inferior-package-location @var{package}
4114@deffnx {Procédure Scheme} inferior-package-inputs @var{package}
4115@deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
4116@deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
4117@deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
4118@deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
4119@deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
4120@deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
4121Ces procédures sont la contrepartie des accesseurs des enregistrements de
4122paquets (@pxref{Référence de paquet}). La plupart fonctionne en effectuant
4123des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
4124doit toujours être disponible lorsque vous appelez ces procédures.
4125@end deffn
bf5c74e7 4126
15f1bff4
JL
4127Les paquets inférieurs peuvent être utilisés de manière transparente comme
4128tout autre paquet ou objet simili-fichier dans des G-expressions
4129(@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
4130la procédure @code{packages->manifest}, qui est typiquement utilisée dans
4131des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
4132de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
4133à peu près n'importe où vous utiliseriez un paquet normal : dans des
4134manifestes, dans le champ @code{packages} de votre déclaration
4135@code{operating-system}, etc.
bf5c74e7 4136
15f1bff4
JL
4137@node Invoquer guix describe
4138@section Invoquer @command{guix describe}
4139
4140@cindex reproductibilité
4141@cindex répliquer Guix
4142Souvent vous voudrez répondre à des questions comme « quelle révision de
4143Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
4144information utile dans de nombreuses situations : si vous voulez
4145@emph{répliquer} un environnement sur une machine différente ou un compte
4146utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
4147changement dans les canaux que vous utilisez l'a causé ou si vous voulez
4148enregistrer l'état de votre système pour le reproduire. La commande
4149@command{guix describe} répond à ces questions.
bf5c74e7 4150
15f1bff4
JL
4151Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
4152@command{guix pull}, @command{guix describe} affiche les canaux qui ont été
4153construits, avec l'URL de leur dépôt et l'ID de leur commit
4154(@pxref{Canaux}) :
bf5c74e7 4155
15f1bff4
JL
4156@example
4157$ guix describe
4158Generation 10 03 sep. 2018 17:32:44 (actuelle)
4159 guix e0fa68c
4160 URL du dépôt : https://git.savannah.gnu.org/git/guix.git
4161 branche : master
4162 commit : e0fa68c7718fffd33d81af415279d6ddb518f727
4163@end example
bf5c74e7 4164
15f1bff4
JL
4165Si vous connaissez bien le système de contrôle de version Git, cela
4166ressemble en essence à @command{git describe} ; la sortie est aussi
4167similaire à celle de @command{guix pull --list-generations}, mais limitée à
4168la génération actuelle (@pxref{Invoquer guix pull, l'option
4169@option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
4170réfère sans aucune ambiguïté à un instantané de Guix, cette information est
4171tout ce dont vous avez besoin pour décrire la révision de Guix que vous
4172utilisez et pour la répliquer.
bf5c74e7 4173
15f1bff4
JL
4174Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
4175aussi renvoyer une liste de canaux plutôt que la description lisible par un
4176humain au-dessus :
bf5c74e7 4177
15f1bff4
JL
4178@example
4179$ guix describe -f channels
4180(list (channel
4181 (name 'guix)
4182 (url "https://git.savannah.gnu.org/git/guix.git")
4183 (commit
4184 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
4185@end example
bf5c74e7 4186
15f1bff4
JL
4187@noindent
4188Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
4189pull -C} sur une autre machine ou plus tard, ce qui instantiera
4190@emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
4191l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
4192révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
4193logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
4194espérons que vous aimerez ça aussi !
bf5c74e7 4195
15f1bff4 4196Voici les détails des options supportées par @command{guix describe} :
bf5c74e7 4197
15f1bff4
JL
4198@table @code
4199@item --format=@var{format}
4200@itemx -f @var{format}
4201Produire la sortie dans le @var{format} donné, parmi :
bf5c74e7 4202
15f1bff4
JL
4203@table @code
4204@item human
4205produire une sortie lisible par un humain,
4206@item canaux
4207produire une liste de spécifications de canaux qui peut être passée à
4208@command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
4209(@pxref{Invoquer guix pull}),
4210@item json
4211@cindex JSON
4212produire une liste de spécifications de canaux dans le format JSON,
4213@item recutils
4214produire une liste de spécifications de canaux dans le format Recutils.
4215@end table
bf5c74e7 4216
15f1bff4
JL
4217@item --profile=@var{profil}
4218@itemx -p @var{profil}
4219Afficher les informations sur le @var{profil}.
bf5c74e7
JL
4220@end table
4221
15f1bff4
JL
4222@node Invoquer guix archive
4223@section Invoquer @command{guix archive}
3cacfa9e 4224
15f1bff4
JL
4225@cindex @command{guix archive}
4226@cindex archive
4227La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
4228des fichiers du dépôt dans une simple archive puis ensuite de les
4229@dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
4230permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
4231autre machine.
3cacfa9e 4232
15f1bff4
JL
4233@quotation Remarque
4234Si vous chercher une manière de produire des archives dans un format adapté
4235pour des outils autres que Guix, @pxref{Invoquer guix pack}.
4236@end quotation
3cacfa9e 4237
15f1bff4
JL
4238@cindex exporter des éléments du dépôt
4239Pour exporter des fichiers du dépôt comme une archive sur la sortie
4240standard, lancez :
3cacfa9e 4241
15f1bff4
JL
4242@example
4243guix archive --export @var{options} @var{spécifications}...
4244@end example
3cacfa9e 4245
15f1bff4
JL
4246@var{spécifications} peut être soit des noms de fichiers soit des
4247spécifications de paquets, comme pour @command{guix package}
4248(@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
4249archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
4250principale de @code{emacs} :
3cacfa9e 4251
15f1bff4
JL
4252@example
4253guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4254@end example
3cacfa9e 4255
15f1bff4
JL
4256Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
4257les construit automatiquement. Le processus de construction peut être
4258contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
3cacfa9e 4259
15f1bff4
JL
4260Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
4261pourrait lancer :
3cacfa9e 4262
15f1bff4
JL
4263@example
4264guix archive --export -r emacs | ssh la-machine guix archive --import
4265@end example
bf5c74e7 4266
15f1bff4
JL
4267@noindent
4268De même, on peut transférer un profil utilisateur complet d'une machine à
4269une autre comme cela :
bf5c74e7 4270
15f1bff4
JL
4271@example
4272guix archive --export -r $(readlink -f ~/.guix-profile) | \
4273 ssh la-machine guix-archive --import
4274@end example
bf5c74e7 4275
15f1bff4
JL
4276@noindent
4277Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
4278profil ainsi que toutes leurs dépendances sont transférées (à cause de
4279@code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
4280de la machine cible. L'option @code{--missing} peut vous aider à comprendre
4281les éléments qui manquent dans le dépôt de la machine cible. La commande
4282@command{guix copy} simplifie et optimise ce processus, c'est donc ce que
4283vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
2cf2c778 4284
15f1bff4
JL
4285@cindex nar, format d'archive
4286@cindex archive normalisée (nar)
4287Les archives sont stockées au format « archive normalisé » ou « nar », qui
4288est comparable dans l'esprit à « tar » mais avec des différences qui le
4289rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
4290stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
4291mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
4292les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
4293Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
4294toujours l'ordre des noms de fichier dans l'environnement linguistique C.
4295Cela rend la production des archives entièrement déterministe.
2cf2c778 4296
15f1bff4
JL
4297@c FIXME: Add xref to daemon doc about signatures.
4298Lors de l'export, le démon signe numériquement le contenu de l'archive et
4299cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
4300vérifie la signature et rejette l'import en cas de signature invalide ou si
4301la clef de signature n'est pas autorisée.
bf5c74e7 4302
15f1bff4 4303Les principales options sont :
2cf2c778 4304
15f1bff4
JL
4305@table @code
4306@item --export
4307Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
4308l'archive résultante sur la sortie standard.
2cf2c778 4309
15f1bff4
JL
4310Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
4311@code{--recursive} ne soit passé.
2cf2c778 4312
15f1bff4
JL
4313@item -r
4314@itemx --recursive
4315En combinaison avec @code{--export}, cette option demande à @command{guix
4316archive} d'inclure les dépendances des éléments donnés dans l'archive.
4317Ainsi, l'archive résultante est autonome : elle contient la closure des
4318éléments du dépôt exportés.
bf5c74e7 4319
15f1bff4
JL
4320@item --import
4321Lire une archive depuis l'entrée standard et importer les fichiers inclus
4322dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
4323signée par une clef publique qui ne se trouve pas dans le clefs autorisées
4324(voir @code{--authorize} plus bas.)
bf5c74e7 4325
15f1bff4
JL
4326@item --missing
4327Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
4328ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
4329manquent dans le dépôt.
bf5c74e7 4330
15f1bff4
JL
4331@item --generate-key[=@var{paramètres}]
4332@cindex signature, archives
4333Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
4334avant que les archives ne puissent être exportées avec @code{--export}.
4335Remarquez que cette opération prend généralement du temps parce qu'elle doit
4336récupère suffisamment d'entropie pour générer la paire de clefs.
bf5c74e7 4337
15f1bff4
JL
4338La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
4339dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
4340privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
4341clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
4342libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
4343@var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
4344libgcrypt (@pxref{General public-key related Functions,
4345@code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
bf5c74e7 4346
15f1bff4
JL
4347@item --authorize
4348@cindex autorisation, archives
4349Autoriser les imports signés par la clef publique passée sur l'entrée
4350standard. La clef publique doit être au « format avancé s-expression » —
4351c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
4352
4353La liste des clefs autorisées est gardée dans un fichier modifiable par des
4354humains dans @file{/etc/guix/acl}. Le fichier contient des
4355@url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
4356avancé »} et est structuré comme une liste de contrôle d'accès dans
4357l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
4358simple (SPKI)}.
4359
4360@item --extract=@var{répertoire}
4361@itemx -x @var{répertoire}
4362Lit une archive à un seul élément telle que servie par un serveur de
4363substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
4364une opération de bas niveau requise seulement dans de rares cas d'usage ;
4365voir plus loin.
bf5c74e7 4366
15f1bff4
JL
4367For example, the following command extracts the substitute for Emacs served
4368by @code{@value{SUBSTITUTE-SERVER}} to @file{/tmp/emacs}:
bf5c74e7 4369
15f1bff4
JL
4370@example
4371$ wget -O - \
4372 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
4373 | bunzip2 | guix archive -x /tmp/emacs
4374@end example
bf5c74e7 4375
15f1bff4
JL
4376Les archives à un seul élément sont différentes des archives à plusieurs
4377éléments produites par @command{guix archive --export} ; elles contiennent
4378un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
4379Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
4380devrait être considérée comme non sûre.
bf5c74e7 4381
15f1bff4
JL
4382Le but principal de cette opération est de faciliter l'inspection du contenu
4383des archives venant de serveurs auxquels on ne fait potentiellement pas
4384confiance.
bf5c74e7 4385
15f1bff4 4386@end table
bf5c74e7 4387
bf5c74e7 4388
15f1bff4
JL
4389@c *********************************************************************
4390@node Development
4391@chapter Development
bf5c74e7 4392
15f1bff4
JL
4393@cindex software development
4394If you are a software developer, Guix provides tools that you should find
4395helpful---independently of the language you're developing in. This is what
4396this chapter is about.
bf5c74e7 4397
15f1bff4
JL
4398The @command{guix environment} command provides a convenient way to set up
4399@dfn{development environments} containing all the dependencies and tools
4400necessary to work on the software package of your choice. The @command{guix
4401pack} command allows you to create @dfn{application bundles} that can be
4402easily distributed to users who do not run Guix.
2cf2c778 4403
15f1bff4
JL
4404@menu
4405* Invoquer guix environment:: Mettre en place des environnements de
4406 développement.
4407* Invoquer guix pack:: Créer des lots de logiciels.
4408@end menu
2cf2c778 4409
15f1bff4
JL
4410@node Invoquer guix environment
4411@section Invoquer @command{guix environment}
2cf2c778 4412
15f1bff4
JL
4413@cindex environnements de construction reproductibles
4414@cindex environnement de développement
4415@cindex @command{guix environment}
4416@cindex environnement de construction de paquets
4417Le but de @command{guix environment} est d'assister les hackers dans la
4418création d'environnements de développement reproductibles sans polluer leur
4419profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
4420paquets, construit leurs entrées et crée un environnement shell pour pouvoir
4421les utiliser.
2cf2c778 4422
15f1bff4 4423La syntaxe générale est :
2cf2c778 4424
15f1bff4
JL
4425@example
4426guix environment @var{options} @var{paquet}@dots{}
4427@end example
bf5c74e7 4428
15f1bff4
JL
4429L'exemple suivant crée un nouveau shell préparé pour le développement de
4430GNU@tie{}Guile :
bf5c74e7 4431
15f1bff4
JL
4432@example
4433guix environment guile
4434@end example
3cacfa9e 4435
15f1bff4
JL
4436Si les dépendances requises ne sont pas déjà construites, @command{guix
4437environment} les construit automatiquement. L'environnement du nouveau
4438shell est une version améliorée de l'environnement dans lequel @command{guix
4439environment} a été lancé. Il contient les chemins de recherche nécessaires
4440à la construction du paquet donné en plus des variables d'environnement
4441existantes. Pour créer un environnement « pur », dans lequel les variables
4442d'environnement de départ ont été nettoyées, utilisez l'option
4443@code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
4444supplémentaires dans les variables comme @code{PATH} dans leur
4445@file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
4446Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
4447variables d'environnement. C'est une erreur de définir ces variables
4448d'environnement dans @file{.bashrc} ; à la place, elles devraient être
4449définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
4450de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
4451Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
3cacfa9e 4452
15f1bff4
JL
4453@vindex GUIX_ENVIRONMENT
4454@command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
4455le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
4456environnement. Cela permet aux utilisateur, disons, de définir un prompt
4457spécifique pour les environnement de développement dans leur @file{.bashrc}
4458(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
3cacfa9e 4459
15f1bff4
JL
4460@example
4461if [ -n "$GUIX_ENVIRONMENT" ]
4462then
4463 export PS1="\u@@\h \w [dev]\$ "
4464fi
4465@end example
3cacfa9e 4466
15f1bff4
JL
4467@noindent
4468...@: or to browse the profile:
3cacfa9e 4469
15f1bff4
JL
4470@example
4471$ ls "$GUIX_ENVIRONMENT/bin"
4472@end example
2cf2c778 4473
15f1bff4
JL
4474En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
4475des paquets données est utilisée. Par exemple, la commande ci-dessous crée
4476un shell où toutes les dépendances de Guile et Emacs sont disponibles :
2cf2c778 4477
15f1bff4
JL
4478@example
4479guix environment guile emacs
4480@end example
2cf2c778 4481
15f1bff4
JL
4482Parfois, une session shell interactive est inutile. On peut invoquer une
4483commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
4484du reste des arguments :
2cf2c778 4485
15f1bff4
JL
4486@example
4487guix environment guile -- make -j4
4488@end example
2cf2c778 4489
15f1bff4
JL
4490Dans d'autres situations, il est plus pratique de spécifier la liste des
4491paquets requis dans l'environnement. Par exemple, la commande suivante
4492lance @command{python} dans un environnement contenant Python@tie{}2.7 et
4493NumPy :
2cf2c778 4494
15f1bff4
JL
4495@example
4496guix environment --ad-hoc python2-numpy python-2.7 -- python
4497@end example
2cf2c778 4498
15f1bff4
JL
4499En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
4500supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
4501construction, mais qui sont utiles au développement tout de même. À cause
4502de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
4503apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
4504les dépendances seront ajoutées à l'environnement. Les paquets qui
4505apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
4506ajouter à l'environnement directement. Par exemple, la commande suivante
4507crée un environnement de développement pour Guix avec les paquets Git et
4508strace en plus :
2cf2c778 4509
15f1bff4
JL
4510@example
4511guix environment guix --ad-hoc git strace
4512@end example
bf5c74e7 4513
15f1bff4
JL
4514Sometimes it is desirable to isolate the environment as much as possible,
4515for maximal purity and reproducibility. In particular, when using Guix on a
4516host distro that is not Guix System, it is desirable to prevent access to
4517@file{/usr/bin} and other system-wide resources from the development
4518environment. For example, the following command spawns a Guile REPL in a
4519``container'' where only the store and the current working directory are
4520mounted:
bf5c74e7 4521
15f1bff4
JL
4522@example
4523guix environment --ad-hoc --container guile -- guile
4524@end example
2cf2c778 4525
15f1bff4
JL
4526@quotation Remarque
4527L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
4528@end quotation
bf5c74e7 4529
15f1bff4
JL
4530Les options disponibles sont résumées ci-dessous.
4531
4532@table @code
4533@item --root=@var{fichier}
4534@itemx -r @var{fichier}
4535@cindex environnement persistent
4536@cindex racine du ramasse-miettes, pour les environnements
4537Fait de @var{fichier} un lien symbolique vers le profil de cet
4538environnement, et l'enregistre comme une racine du ramasse-miettes.
adfb167f 4539
15f1bff4
JL
4540C'est utile si vous souhaitez protéger votre environnement du
4541ramasse-miettes, pour le rendre « persistent ».
adfb167f 4542
15f1bff4
JL
4543Lorsque cette option est omise, l'environnement n'est protégé du
4544ramasse-miettes que le temps de la session @command{guix environment}. Cela
4545signifie que la prochaine fois que vous créerez le même environnement, vous
4546pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
adfb167f 4547
15f1bff4
JL
4548@item --expression=@var{expr}
4549@itemx -e @var{expr}
4550Crée un environnement pour le paquet ou la liste de paquets en lesquels
4551s'évalue @var{expr}.
adfb167f 4552
15f1bff4 4553Par exemple, lancer :
adfb167f 4554
15f1bff4
JL
4555@example
4556guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4557@end example
adfb167f 4558
15f1bff4
JL
4559démarre un shell avec l'environnement pour cette variante spécifique du
4560paquet PETSc.
adfb167f 4561
15f1bff4 4562Lancer :
adfb167f 4563
15f1bff4
JL
4564@example
4565guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
4566@end example
adfb167f 4567
15f1bff4 4568starts a shell with all the base system packages available.
adfb167f 4569
15f1bff4
JL
4570Les commande au-dessus n'utilisent que les sorties par défaut des paquets
4571donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
adfb167f 4572
15f1bff4
JL
4573@example
4574guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
4575@end example
2cf2c778 4576
15f1bff4
JL
4577@item --load=@var{fichier}
4578@itemx -l @var{fichier}
4579Crée un environnement pour le paquet ou la liste de paquets en lesquels
4580@var{fichier} s'évalue.
2cf2c778 4581
15f1bff4
JL
4582Par exemple, @var{fichier} peut contenir une définition comme celle-ci
4583(@pxref{Définition des paquets}) :
bf5c74e7 4584
15f1bff4
JL
4585@example
4586@verbatiminclude environment-gdb.scm
4587@end example
2cf2c778 4588
15f1bff4
JL
4589@item --manifest=@var{fichier}
4590@itemx -m @var{fichier}
4591Crée un environnement pour les paquets contenus dans l'objet manifeste
4592renvoyé par le code Scheme dans @var{fichier}.
2cf2c778 4593
15f1bff4
JL
4594C'est similaire à l'option de même nom de @command{guix package}
4595(@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
4596manifestes.
bf5c74e7 4597
15f1bff4
JL
4598@item --ad-hoc
4599Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
4600si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
4601Cette option est utile pour créer un environnement rapidement sans avoir à
4602écrire une expression de paquet contenant les entrées désirées.
bf5c74e7 4603
15f1bff4 4604Par exemple la commande :
bf5c74e7 4605
15f1bff4
JL
4606@example
4607guix environment --ad-hoc guile guile-sdl -- guile
4608@end example
2cf2c778 4609
15f1bff4
JL
4610lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
4611disponibles.
bf5c74e7 4612
15f1bff4
JL
4613Remarquez que cet exemple demande implicitement la sortie par défaut de
4614@code{guile} et @code{guile-sdl}, mais il est possible de demander une
4615sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
4616de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
bf5c74e7 4617
15f1bff4
JL
4618Cette option peut être composée avec le comportement par défaut de
4619@command{guix environment}. Les paquets qui apparaissent avant
4620@code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
4621seront ajoutées à l'environnement, le comportement par défaut. Les paquets
4622qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
4623ajouter à l'environnement directement.
bf5c74e7 4624
15f1bff4
JL
4625@item --pure
4626Unset existing environment variables when building the new environment,
4627except those specified with @option{--inherit} (see below.) This has the
4628effect of creating an environment in which search paths only contain package
4629inputs.
524756d1 4630
15f1bff4
JL
4631@item --inherit=@var{regexp}
4632When used alongside @option{--pure}, inherit all the environment variables
4633matching @var{regexp}---in other words, put them on a ``white list'' of
4634environment variables that must be preserved. This option can be repeated
4635several times.
524756d1 4636
15f1bff4
JL
4637@example
4638guix environment --pure --inherit=^SLURM --ad-hoc openmpi @dots{} \
4639 -- mpirun @dots{}
4640@end example
524756d1 4641
15f1bff4
JL
4642This example runs @command{mpirun} in a context where the only environment
4643variables defined are @code{PATH}, environment variables whose name starts
4644with @code{SLURM}, as well as the usual ``precious'' variables (@code{HOME},
4645@code{USER}, etc.)
bf5c74e7 4646
15f1bff4
JL
4647@item --search-paths
4648Affiche les définitions des variables d'environnement qui composent
4649l'environnement.
bf5c74e7 4650
15f1bff4
JL
4651@item --system=@var{système}
4652@itemx -s @var{système}
4653Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
bf5c74e7 4654
15f1bff4
JL
4655@item --container
4656@itemx -C
4657@cindex conteneur
4658Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
4659actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
4660de le changer avec @code{--user}, un répertoire personnel fictif est créé
4661pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwd} est
4662configuré en conséquence. Le processus est lancé en tant que l'utilisateur
4663actuel en dehors du conteneur, mais a les privilèges root dans le contexte
4664du conteneur.
2cf2c778 4665
15f1bff4
JL
4666@item --network
4667@itemx -N
4668Pour les conteneurs, partage l'espace de nom du réseau avec le système
4669hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
4670de boucle locale.
2cf2c778 4671
15f1bff4
JL
4672@item --link-profile
4673@itemx -P
4674Pour les conteneurs, lie le profil de l'environnement à
4675@file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
4676commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
4677conteneur. La liaison échouera et annulera l'environnement si le répertoire
4678existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
4679invoqué dans le répertoire personnel de l'utilisateur.
2cf2c778 4680
15f1bff4
JL
4681Certains paquets sont configurés pour chercher des fichiers de configuration
4682et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
4683@code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
4684des polices supplémentaires.} ; @code{--link-profile} permet à ces
4685programmes de se comporter comme attendu dans l'environnement.
2cf2c778 4686
15f1bff4
JL
4687@item --user=@var{utilisateur}
4688@itemx -u @var{utilisateur}
4689Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
4690place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwd}
4691dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
4692personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
4693copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
2cf2c778 4694
15f1bff4
JL
4695En plus, tous les chemins partagés ou exposés (voir @code{--share} et
4696@code{--expose} respectivement) dont la cible est dans le répertoire
4697personnel de l'utilisateur seront remontés relativement à
4698@file{/home/UTILISATEUR} ; cela comprend le montage automatique du
4699répertoire de travail actuel.
bf5c74e7 4700
15f1bff4
JL
4701@example
4702# exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
4703cd $HOME/wd
4704guix environment --container --user=foo \
4705 --expose=$HOME/test \
4706 --expose=/tmp/target=$HOME/target
4707@end example
2cf2c778 4708
15f1bff4
JL
4709Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
4710chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
4711qu'un composant utile pour une solution d'anonymisation ou de préservation
4712de la vie privée — pas une solution en elle-même.
2cf2c778 4713
15f1bff4
JL
4714@item --expose=@var{source}[=@var{cible}]
4715Pour les conteneurs, expose le système de fichiers @var{source} du système
4716hôte comme un système de fichiers en lecture seule @var{cible} dans le
4717conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
4718comme point de montage dans le conteneur.
2cf2c778 4719
15f1bff4
JL
4720L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
4721répertoire personnel de l'utilisateur est accessible en lecture-seule via le
4722répertoire @file{/exchange} :
bf5c74e7 4723
15f1bff4
JL
4724@example
4725guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
4726@end example
2cf2c778 4727
15f1bff4
JL
4728@item --share=@var{source}[=@var{cible}]
4729Pour les conteneurs, partage le système de fichiers @var{source} du système
4730hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
4731conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
4732comme point de montage dans le conteneur.
2cf2c778 4733
15f1bff4
JL
4734L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
4735répertoire personnel de l'utilisateur est accessible en lecture-écriture via
4736le répertoire @file{/exchange} :
bf5c74e7 4737
15f1bff4
JL
4738@example
4739guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
4740@end example
4741@end table
bf5c74e7 4742
15f1bff4
JL
4743@command{guix environment} also supports all of the common build options
4744that @command{guix build} supports (@pxref{Options de construction communes}) as well as
4745package transformation options (@pxref{Options de transformation de paquets}).
2cf2c778 4746
15f1bff4
JL
4747@node Invoquer guix pack
4748@section Invoquer @command{guix pack}
2cf2c778 4749
15f1bff4
JL
4750Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
4751la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
4752package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
4753C'est là que @command{guix pack} entre en jeu.
bf5c74e7 4754
15f1bff4
JL
4755@quotation Remarque
4756Si vous cherchez comment échanger des binaires entre des machines où Guix
4757est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
4758et @ref{Invoquer guix archive}.
4759@end quotation
2cf2c778 4760
15f1bff4
JL
4761@cindex pack
4762@cindex lot
4763@cindex lot d'applications
4764@cindex lot de logiciels
4765La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
4766: elle crée une archive tar ou un autre type d'archive contenant les
4767binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
4768L'archive qui en résulte peut être utilisée sur toutes les machines qui
4769n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
4770ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
4771reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
4772contient bien les résultats que vous prétendez proposer.
2cf2c778 4773
15f1bff4
JL
4774Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
4775leurs dépendances, vous pouvez lancer :
bf5c74e7 4776
15f1bff4
JL
4777@example
4778$ guix pack guile emacs geiser
4779@dots{}
4780/gnu/store/@dots{}-pack.tar.gz
4781@end example
bf5c74e7 4782
15f1bff4
JL
4783Le résultat ici est une archive tar contenant un répertoire
4784@file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
4785résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
4786; le profil est le même qui celui qui aurait été créé avec @command{guix
4787package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
4788binaires indépendantes de Guix (@pxref{Installation binaire}).
bf5c74e7 4789
15f1bff4
JL
4790Les utilisateurs de ce pack devraient lancer
4791@file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
4792pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
4793symbolique @file{/opt/gnu/bin} vers le profil :
2cf2c778 4794
15f1bff4
JL
4795@example
4796guix pack -S /opt/gnu/bin=bin guile emacs geiser
4797@end example
bf5c74e7 4798
15f1bff4
JL
4799@noindent
4800De cette façon, les utilisateurs peuvent joyeusement taper
4801@file{/opt/gnu/bin/guile} et profiter.
2cf2c778 4802
15f1bff4
JL
4803@cindex binaires repositionnables, avec @command{guix pack}
4804Et si le destinataire de votre pack n'a pas les privilèges root sur sa
4805machine, et ne peut donc pas le décompresser dans le système de fichiers
4806racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
4807(voir plus bas). Cette option produite des @dfn{binaire repositionnables},
4808ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
4809du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
4810décompresser votre archive dans leur répertoire personnel et lancer
4811directement @file{./opt/gnu/bin/guile}.
bf5c74e7 4812
15f1bff4
JL
4813@cindex Docker, construire une image avec guix pack
4814Autrement, vous pouvez produire un pack au format d'image Docker avec la
4815commande suivante :
bf5c74e7 4816
15f1bff4
JL
4817@example
4818guix pack -f docker guile emacs geiser
4819@end example
4820
4821@noindent
4822Le résultat est une archive tar qui peut être passée à la commande
4823@command{docker load}. Voir la
4824@uref{https://docs.docker.com/engine/reference/commandline/load/,
4825documentation de Docker} pour plus d'informations.
bf5c74e7 4826
15f1bff4
JL
4827@cindex Singularity, construire une image avec guix pack
4828@cindex SquashFS, construire une image avec guix pack
4829Autrement, vous pouvez produire une image SquashFS avec la commande suivante
4830:
2cf2c778 4831
15f1bff4
JL
4832@example
4833guix pack -f squashfs guile emacs geiser
4834@end example
bf5c74e7 4835
15f1bff4
JL
4836@noindent
4837Le résultat est une image de système de fichiers SquashFS qui peut soit être
4838montée directement soit être utilisée comme image de conteneur de système de
4839fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
4840conteneurisé Singularity}, avec des commandes comme @command{singularity
4841shell} ou @command{singularity exec}.
bf5c74e7 4842
15f1bff4
JL
4843Diverses options en ligne de commande vous permettent de personnaliser votre
4844pack :
bf5c74e7 4845
15f1bff4
JL
4846@table @code
4847@item --format=@var{format}
4848@itemx -f @var{format}
4849Produire un pack dans le @var{format} donné.
bf5c74e7 4850
15f1bff4 4851Les formats disponibles sont :
bf5c74e7
JL
4852
4853@table @code
15f1bff4
JL
4854@item tarball
4855C'est le format par défaut. Il produit une archive tar contenant tous les
4856binaires et les liens symboliques spécifiés.
bf5c74e7 4857
15f1bff4
JL
4858@item docker
4859Cela produit une archive tar qui suit la
4860@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
4861spécification des images Docker}.
bf5c74e7 4862
15f1bff4
JL
4863@item squashfs
4864Cela produit une image SquashFS contenant tous les binaires et liens
4865symboliques spécifiés, ainsi que des points de montages vides pour les
4866systèmes de fichiers virtuels comme procfs.
4867@end table
bf5c74e7 4868
15f1bff4
JL
4869@item --relocatable
4870@itemx -R
4871Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
4872vous pouvez placer n'importe où dans l'arborescence du système de fichiers
4873et les lancer à partir de là. Par exemple, si vous créez un pack contenant
4874Bash avec :
bf5c74e7 4875
15f1bff4
JL
4876@example
4877guix pack -R -S /mybin=bin bash
4878@end example
bf5c74e7 4879
15f1bff4
JL
4880@noindent
4881...@: you can copy that pack to a machine that lacks Guix, and from your
4882home directory as a normal user, run:
bf5c74e7 4883
15f1bff4
JL
4884@example
4885tar xf pack.tar.gz
4886./mybin/sh
4887@end example
bf5c74e7 4888
15f1bff4
JL
4889@noindent
4890Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
4891@file{/gnu/store} apparaît et contient toutes les dépendances de
4892@code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
4893C'est sans doute la manière la plus simple de déployer du logiciel construit
4894avec Guix sur une machine sans Guix.
bf5c74e7 4895
15f1bff4
JL
4896Il y a un inconvénient cependant : cette technique repose sur les
4897@dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
4898non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
4899Les anciennes versions de Linux ne le supportaient pas et certaines
4900distributions GNU/Linux les désactivent ; sur ces système, les programme du
4901pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
4902racine du système de fichiers.
bf5c74e7 4903
15f1bff4
JL
4904@item --expression=@var{expr}
4905@itemx -e @var{expr}
4906Considérer le paquet évalué par @var{expr}.
bf5c74e7 4907
15f1bff4
JL
4908Cela a le même but que l'option de même nom de @command{guix build}
4909(@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
4910build}}).
bf5c74e7 4911
15f1bff4
JL
4912@item --manifest=@var{fichier}
4913@itemx -m @var{fichier}
4914Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
4915Scheme dans @var{fichier}
bf5c74e7 4916
15f1bff4
JL
4917Elle a un but similaire à l'option de même nom dans @command{guix package}
4918(@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
4919fichiers manifeste. Ils vous permettent de définir une collection de
4920paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
4921créer des archives pour des machines qui n'ont pas Guix d'installé.
4922Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
4923@emph{soit} une liste de paquet, mais pas les deux.
bf5c74e7 4924
15f1bff4
JL
4925@item --system=@var{système}
4926@itemx -s @var{système}
4927Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
4928plutôt que pour le type de système de l'hôte de construction.
bf5c74e7 4929
15f1bff4
JL
4930@item --target=@var{triplet}
4931@cindex compilation croisée
4932Effectuer une compilation croisée pour @var{triplet} qui doit être un
4933triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
4934target triplets, GNU configuration triplets,, autoconf, Autoconf}).
2cf2c778 4935
15f1bff4
JL
4936@item --compression=@var{outil}
4937@itemx -C @var{outil}
4938Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
4939@code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
2cf2c778 4940
15f1bff4
JL
4941@item --symlink=@var{spec}
4942@itemx -S @var{spec}
4943Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
4944option peut apparaître plusieurs fois.
bf5c74e7 4945
15f1bff4
JL
4946@var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
4947le lien symbolique qui sera créé et @var{cible} est la cible du lien.
2cf2c778 4948
15f1bff4
JL
4949Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
4950@file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
bf5c74e7 4951
15f1bff4
JL
4952@item --localstatedir
4953@itemx --profile-name=@var{nom}
4954Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
4955résulte, et notamment le profil
4956@file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
4957@code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
bf5c74e7 4958
15f1bff4
JL
4959@file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
4960ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
4961fournir dans le pack signifie que le dépôt et « complet » et gérable par
4962Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
4963aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
bf5c74e7 4964
15f1bff4
JL
4965Un cas d'utilisation est l'archive binaire indépendante de Guix
4966(@pxref{Installation binaire}).
bf5c74e7 4967
15f1bff4
JL
4968@item --bootstrap
4969Utiliser les programmes d'amorçage pour construire le pack. Cette option
4970n'est utile que pour les développeurs de Guix.
4971@end table
bf5c74e7 4972
15f1bff4
JL
4973En plus, @command{guix pack} supporte toutes les options de construction
4974communes (@pxref{Options de construction communes}) et toutes les options de
4975transformation de paquets (@pxref{Options de transformation de paquets}).
4976
4977
4978@c *********************************************************************
4979@node Interface de programmation
4980@chapter Interface de programmation
4981
4982GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
4983définir, construire et faire des requêtes sur des paquets. La première
4984interface permet aux utilisateurs d'écrire des définitions de paquets de
4985haut-niveau. Ces définitions se réfèrent à des concepts de création de
4986paquets familiers, comme le nom et la version du paquet, son système de
4987construction et ses dépendances. Ces définitions peuvent ensuite être
4988transformées en actions concrètes lors de la construction.
bf5c74e7 4989
15f1bff4
JL
4990Les actions de construction sont effectuées par le démon Guix, pour le
4991compte des utilisateurs. Dans un environnement standard, le démon possède
4992les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
4993pas les utilisateurs. La configuration recommandée permet aussi au démon
4994d'effectuer la construction dans des chroots, avec un utilisateur de
4995construction spécifique pour minimiser les interférences avec le reste du
4996système.
bf5c74e7 4997
15f1bff4
JL
4998@cindex dérivation
4999Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
5000Pour demander au démon d'effectuer une action de construction, les
5001utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
5002une représentation à bas-niveau des actions de construction à entreprendre
5003et l'environnement dans lequel elles devraient avoir lieu — les dérivations
5004sont aux définitions de paquets ce que l'assembleur est aux programmes C.
5005Le terme de « dérivation » vient du fait que les résultats de la
5006construction en @emph{dérivent}.
bf5c74e7 5007
15f1bff4
JL
5008Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
5009paquets à haut-niveau.
bf5c74e7 5010
15f1bff4
JL
5011@menu
5012* Modules de paquets:: Les paquets du point de vu du programmeur.
5013* Définition des paquets:: Définir de nouveaux paquets.
5014* Systèmes de construction:: Spécifier comment construire les paquets.
5015* Le dépôt:: Manipuler le dépôt de paquets.
5016* Dérivations:: Interface de bas-niveau avec les dérivations
5017 de paquets.
5018* La monade du dépôt:: Interface purement fonctionnelle avec le
5019 dépôt.
5020* G-Expressions:: Manipuler les expressions de construction.
5021* Invoquer guix repl:: S'amuser avec Guix de manière interactive.
5022@end menu
bf5c74e7 5023
15f1bff4
JL
5024@node Modules de paquets
5025@section Modules de paquets
bf5c74e7 5026
15f1bff4
JL
5027D'un point de vue programmatique, les définitions de paquets de la
5028distribution GNU sont fournies par des modules Guile dans l'espace de noms
5029@code{(gnu packages @dots{})}@footnote{Remarquez que les paquets sous
5030l'espace de nom @code{(gnu packages @dots{})} ne sont pas nécessairement des
5031« paquets GNU ». Le nom de ce module suit la convention de nommage usuelle
5032de Guile : @code{gnu} signifie que ces modules sont distribués dans le
5033système GNU, et @code{packages} identifie les modules qui définissent les
5034paquets.} (@pxref{Modules, Guile modules,, guile, GNU Guile Reference
5035Manual}). Par exemple, le module @code{(gnu packages emacs)} exporte une
5036variable nommée @code{emacs}, qui est liée à un objet @code{<package>}
5037(@pxref{Définition des paquets}).
5038
5039L'espace de nom @code{(gnu packages @dots{})} est automatiquement scanné par
5040les outils en ligne de commande. Par exemple, lorsque vous lancez
5041@code{guix package -i emacs}, tous les modules @code{(gnu packages @dots{})}
5042sont scannés jusqu'à en trouver un qui exporte un objet de paquet dont le
5043nom est @code{emacs}. Cette capacité à chercher des paquets est implémentée
5044dans le module @code{(gnu packages)}.
bf5c74e7 5045
15f1bff4
JL
5046@cindex personnalisation, des paquets
5047@cindex chemin de recherche des modules de paquets
5048Les utilisateurs peuvent stocker des définitions dans des modules avec des
5049noms différents — p.@: ex.@: @code{(my-packages emacs)}@footnote{Remarquez
5050que le nom de fichier et de module doivent être identiques. Par exemple, le
5051module @code{(my-packages emacs)} doit être stocké dans un fichier
5052@file{my-packages/emacs.scm} relativement au chemin de chargement spécifié
5053avec @option{--load-path} ou @code{GUIX_PACKAGE_PATH}. @xref{Modules and
5054the File System,,, guile, GNU Guile Reference Manual} pour plus de
5055détails}. Il y a deux manières de rendre ces définitions visibles aux
5056interfaces utilisateurs :
bf5c74e7 5057
15f1bff4
JL
5058@enumerate
5059@item
5060En ajoutant le répertoire contenant vos modules de paquets au chemin de
5061recherche avec le drapeau @code{-L} de @command{guix package} et des autres
5062commandes (@pxref{Options de construction communes}) ou en indiquant la variable
5063d'environnement @code{GUIX_PACKAGE_PATH} décrite plus bas.
bf5c74e7 5064
15f1bff4
JL
5065@item
5066En définissant un @dfn{canal} et en configurant @command{guix pull} pour
5067qu'il l'utilise. Un canal est essentiellement un dépôt Git contenant des
5068modules de paquets. @xref{Canaux}, pour plus d'informations sur comment
5069définir et utiliser des canaux.
5070@end enumerate
bf5c74e7 5071
15f1bff4
JL
5072@code{GUIX_PACKAGE_PATH} fonctionne comme les autres variables de chemins de
5073recherche :
bf5c74e7 5074
15f1bff4
JL
5075@defvr {Variable d'environnement} GUIX_PACKAGE_PATH
5076C'est une liste séparée par des deux-points de répertoires dans lesquels
5077trouver des modules de paquets supplémentaires. Les répertoires listés dans
5078cette variable sont prioritaires par rapport aux paquets de la distribution.
bf5c74e7
JL
5079@end defvr
5080
15f1bff4
JL
5081La distribution est entièrement @dfn{bootstrappée} et @dfn{auto-contenue} :
5082chaque paquet est construit uniquement à partir d'autres paquets de la
5083distribution. La racine de ce graphe de dépendance est un petit ensemble de
5084@dfn{binaires de bootstrap} fournis par le module @code{(gnu packages
5085bootstrap)}. Pour plus d'informations sur le bootstrap,
5086@pxref{Bootstrapping}.
bf5c74e7 5087
15f1bff4
JL
5088@node Définition des paquets
5089@section Définition des paquets
2cf2c778 5090
15f1bff4
JL
5091L'interface de haut-niveau pour les définitions de paquets est implémentée
5092dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
5093exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
5094ressemble à cela :
bf5c74e7 5095
15f1bff4
JL
5096@example
5097(define-module (gnu packages hello)
5098 #:use-module (guix packages)
5099 #:use-module (guix download)
5100 #:use-module (guix build-system gnu)
5101 #:use-module (guix licenses)
5102 #:use-module (gnu packages gawk))
bf5c74e7 5103
15f1bff4
JL
5104(define-public hello
5105 (package
5106 (name "hello")
5107 (version "2.10")
5108 (source (origin
5109 (method url-fetch)
5110 (uri (string-append "mirror://gnu/hello/hello-" version
5111 ".tar.gz"))
5112 (sha256
5113 (base32
5114 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
5115 (build-system gnu-build-system)
5116 (arguments '(#:configure-flags '("--enable-silent-rules")))
5117 (inputs `(("gawk" ,gawk)))
5118 (synopsis "Hello, GNU world: An example GNU package")
5119 (description "Guess what GNU Hello prints!")
5120 (home-page "http://www.gnu.org/software/hello/")
5121 (license gpl3+)))
5122@end example
bf5c74e7 5123
15f1bff4
JL
5124@noindent
5125Sans être un expert Scheme, le lecteur peut comprendre la signification des
5126différents champs présents. Cette expression lie la variable @code{hello} à
5127un objet @code{<package>}, qui est essentiellement un enregistrement
5128(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
5129peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
5130le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
5131renvoie — oh surprise ! — @code{"hello"}.
bf5c74e7 5132
15f1bff4
JL
5133Avec un peu de chance, vous pourrez importer tout ou partie de la définition
5134du paquet qui vous intéresse depuis un autre répertoire avec la commande
5135@code{guix import} (@pxref{Invoquer guix import}).
bf5c74e7 5136
15f1bff4
JL
5137Dans l'exemple précédent, @var{hello} est défini dans un module à part,
5138@code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
5139nécessaire, mais c'est pratique : tous les paquets définis dans des modules
5140sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
5141ligne de commande (@pxref{Modules de paquets}).
bf5c74e7 5142
15f1bff4 5143Il y a quelques points à remarquer dans la définition de paquet précédente :
bf5c74e7
JL
5144
5145@itemize
5146@item
15f1bff4
JL
5147Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence d'origine}, pour la référence complète). Ici, on utilise la méthode
5148@code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
5149est un fichier à télécharger par FTP ou HTTP.
bf5c74e7 5150
15f1bff4
JL
5151Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
5152des miroirs GNU définis dans @code{(guix download)}.
bf5c74e7 5153
15f1bff4
JL
5154Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
5155téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
5156fichier. La forme @code{(base32 @dots{})} introduit a représentation en
5157base32 du hash. Vous pouvez obtenir cette information avec @code{guix
5158download} (@pxref{Invoquer guix download}) et @code{guix hash}
5159(@pxref{Invoquer guix hash}).
bf5c74e7 5160
15f1bff4
JL
5161@cindex correctifs
5162Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
5163@code{patches} qui liste les correctifs à appliquer et un champ
5164@code{snippet} qui donne une expression Scheme pour modifier le code source.
bf5c74e7
JL
5165
5166@item
15f1bff4
JL
5167@cindex Système de construction GNU
5168Le champ @code{build-system} spécifie la procédure pour construire le paquet
5169(@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
5170de construction GNU familier, où les paquets peuvent être configurés,
5171construits et installés avec la séquence @code{./configure && make && make
5172check && make install} habituelle.
bf5c74e7 5173
15f1bff4
JL
5174@item
5175Le champ @code{arguments} spécifie des options pour le système de
5176construction (@pxref{Systèmes de construction}). Ici il est interprété par
5177@var{gnu-build-system} comme une demande de lancer @file{configure} avec le
5178drapeau @code{--enable-silent-rules}.
bf5c74e7 5179
15f1bff4
JL
5180@cindex quote
5181@cindex quoting
5182@findex '
5183@findex quote
5184Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
5185introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
5186@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
5187des détails. Ice la valeur du champ @code{arguments} est une liste
5188d'arguments passés au système de construction plus tard, comme avec
5189@code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
5190Reference Manual}).
2cf2c778 5191
15f1bff4
JL
5192La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
5193(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
5194@code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
5195système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
5196Reference Manual}).
2cf2c778 5197
15f1bff4
JL
5198@item
5199Le champ @code{inputs} spécifie les entrées du processus de construction —
5200c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
5201on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
5202@var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
2cf2c778 5203
15f1bff4
JL
5204@cindex accent grave (quasiquote)
5205@findex `
5206@findex quasiquote
5207@cindex virgule (unquote)
5208@findex ,
5209@findex unquote
5210@findex ,@@
5211@findex unquote-splicing
5212De nouveau, @code{`} (un accent grave, synonyme de la fonction
5213@code{quasiquote}) nous permet d'introduire une liste littérale dans le
5214champ @code{inputs}, tandis que @code{,} (une virgule, synonyme de la
5215fonction @code{unquote}) nous permet d'insérer une valeur dans cette liste
5216(@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
2cf2c778 5217
15f1bff4
JL
5218Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
5219besoin d'être spécifiés en tant qu'entrées ici. À la place, le
5220@var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
5221(@pxref{Systèmes de construction}).
2cf2c778 5222
15f1bff4
JL
5223Cependant, toutes les autres dépendances doivent être spécifiées dans le
5224champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
5225simplement indisponible pour le processus de construction, ce qui peut mener
5226à un échec de la construction.
5227@end itemize
2cf2c778 5228
15f1bff4
JL
5229@xref{Référence de paquet}, pour une description complète des champs
5230possibles.
2cf2c778 5231
15f1bff4
JL
5232Lorsqu'une définition de paquet est en place, le paquet peut enfin être
5233construit avec l'outil en ligne de commande @code{guix build}
5234(@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
5235vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
5236aisément revenir à la définition du paquet avec la commande @command{guix
5237edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
5238d'informations sur la manière de tester des définitions de paquets et
5239@ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
5240que la définition respecte les conventions de style.
5241@vindex GUIX_PACKAGE_PATH
5242Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
5243distribution en ajoutant vos propres définitions de paquets dans un « canal
5244».
2cf2c778 5245
15f1bff4
JL
5246Finalement, la mise à jour de la définition du paquet à une nouvelle version
5247amont peut en partie s'automatiser avec la commande @command{guix refresh}
5248(@pxref{Invoquer guix refresh}).
bf5c74e7 5249
15f1bff4
JL
5250Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
5251d'abord calculé par la procédure @code{package-derivation}. Cette
5252dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
5253Les actions de construction qu'il prescrit peuvent ensuite être réalisées
5254par la procédure @code{build-derivation} (@pxref{Le dépôt}).
adfb167f 5255
15f1bff4
JL
5256@deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
5257Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
5258(@pxref{Dérivations}).
5259
5260@var{paquet} doit être un objet @code{<package>} valide et @var{système} une
5261chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
5262pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
5263connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
bf5c74e7
JL
5264@end deffn
5265
5266@noindent
15f1bff4
JL
5267@cindex compilation croisée
5268De manière identique, il est possible de calculer une dérivation qui
5269effectue une compilation croisée d'un paquet pour un autre système :
bf5c74e7 5270
15f1bff4
JL
5271@deffn {Procédure Scheme} package-cross-derivation @var{store} @
5272 @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
5273du @var{paquet} construit depuis @var{système} pour @var{cible}.
bf5c74e7 5274
15f1bff4
JL
5275@var{cible} doit être un triplet GNU valide indiquant le matériel cible et
5276le système d'exploitation, comme @code{"mips64el-linux-gnu"}
5277(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
5278Configure and Build System}).
5279@end deffn
bf5c74e7 5280
15f1bff4
JL
5281@cindex transformations de paquets
5282@cindex réécriture d'entrées
5283@cindex réécriture de l'arbre des dépendances
5284On peut manipuler les paquets de manière arbitraire. Une transformation
5285utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
5286dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
5287d'autres :
bf5c74e7 5288
15f1bff4
JL
5289@deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
5290 [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
5291paquet, remplace des dépendances directes et indirectes (mais pas ses
5292entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
5293est une liste de paires de paquets ; le premier élément de chaque pair est
5294le paquet à remplacer, le second son remplaçant.
524756d1 5295
15f1bff4
JL
5296De manière facultative, @var{nom-réécrit} est une procédure à un argument
5297qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
5298réécrit.
5299@end deffn
524756d1 5300
15f1bff4
JL
5301@noindent
5302Regardez cet exemple :
524756d1 5303
15f1bff4
JL
5304@example
5305(define libressl-instead-of-openssl
5306 ;; Cette procédure remplace OPENSSL par LIBRESSL,
5307 ;; récursivement.
5308 (package-input-rewriting `((,openssl . ,libressl))))
524756d1 5309
15f1bff4
JL
5310(define git-with-libressl
5311 (libressl-instead-of-openssl git))
5312@end example
bf5c74e7
JL
5313
5314@noindent
15f1bff4
JL
5315Ici nous définissons d'abord une procédure de réécriture qui remplace
5316@var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
5317@dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
5318@var{openssl}. cela est exactement ce que l'option en ligne de commande
5319@option{--with-input} fait (@pxref{Options de transformation de paquets,
5320@option{--with-input}}).
bf5c74e7 5321
15f1bff4
JL
5322Une procédure plus générique pour réécrire un graphe de dépendance d'un
5323paquet est @code{package-mapping} : elle supporte n'importe quel changement
5324dans les nœuds du graphe.
bf5c74e7 5325
15f1bff4
JL
5326@deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
5327Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
5328paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
5329arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
5330@end deffn
bf5c74e7 5331
15f1bff4
JL
5332@menu
5333* Référence de paquet:: Le type de donnée des paquets.
5334* Référence d'origine:: Le type de données d'origine.
5335@end menu
bf5c74e7 5336
bf5c74e7 5337
15f1bff4
JL
5338@node Référence de paquet
5339@subsection Référence de @code{package}
bf5c74e7 5340
15f1bff4
JL
5341Cette section résume toutes les options disponibles dans les déclarations
5342@code{package} (@pxref{Définition des paquets}).
524756d1 5343
15f1bff4
JL
5344@deftp {Type de données} package
5345C'est le type de donnée représentant une recette de paquets
524756d1 5346
15f1bff4
JL
5347@table @asis
5348@item @code{name}
5349Le nom du paquet, comme une chaîne de caractères.
524756d1 5350
15f1bff4
JL
5351@item @code{version}
5352La version du paquet, comme une chaîne de caractères.
bf5c74e7 5353
15f1bff4
JL
5354@item @code{source}
5355Un objet qui indique comment le code source du paquet devrait être
5356récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
5357fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
5358s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
5359indique un fichier du système de fichier local (@pxref{G-Expressions,
5360@code{local-file}}).
bf5c74e7 5361
15f1bff4
JL
5362@item @code{build-system}
5363Le système de construction qui devrait être utilisé pour construire le
5364paquet (@pxref{Systèmes de construction}).
5365
5366@item @code{arguments} (par défaut : @code{'()})
5367Les arguments à passer au système de construction. C'est une liste qui
5368contient typiquement une séquence de paires de clefs-valeurs.
5369
5370@item @code{inputs} (par défaut : @code{'()})
5371@itemx @code{native-inputs} (par défaut : @code{'()})
5372@itemx @code{propagated-inputs} (par défaut : @code{'()})
5373@cindex entrées, des paquets
5374Ces champs listent les dépendances du paquet. Chacune est une liste de
5375tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
5376caractères) comme premier élément, un paquet, une origine ou une dérivation
5377comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
5378est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
5379plus d'informations sur les sorties des paquets). Par exemple, la liste
5380suivante spécifie trois entrées :
bf5c74e7
JL
5381
5382@example
15f1bff4
JL
5383`(("libffi" ,libffi)
5384 ("libunistring" ,libunistring)
5385 ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
bf5c74e7
JL
5386@end example
5387
15f1bff4
JL
5388@cindex compilation croisée, dépendances des paquets
5389La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
5390lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
5391les dépendances listées dans @code{inputs} sont construites pour
5392l'architecture @emph{cible} ; inversement, les dépendances listées dans
5393@code{native-inputs} sont construites pour l'architecture de la machine de
5394@emph{construction}.
bf5c74e7 5395
15f1bff4
JL
5396@code{native-inputs} est typiquement utilisé pour lister les outils requis à
5397la construction mais pas à l'exécution, comme Autoconf, Automake,
5398pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
5399erreurs de ce type (@pxref{Invoquer guix lint}).
bf5c74e7 5400
15f1bff4
JL
5401@anchor{package-propagated-inputs}
5402Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
5403paquets spécifiés seront automatiquement installés avec le paquet auquel ils
5404appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
5405package}}, pour des informations sur la manière dont @command{guix package}
5406traite les entrées propagées).
bf5c74e7 5407
15f1bff4
JL
5408Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
5409d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
5410pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
bf5c74e7 5411
15f1bff4
JL
5412Un autre exemple où @code{propagated-inputs} est utile est pour les langages
5413auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
5414cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
5415et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
5416peuvent trouver le code des bibliothèques dont elles dépendent à
5417l'exécution, les dépendances à l'exécution doivent être listées dans
5418@code{propagated-inputs} plutôt que @code{inputs}.
bf5c74e7 5419
15f1bff4
JL
5420@item @code{self-native-input?} (par défaut : @code{#f})
5421C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
5422comme entrée native lors de la compilation croisée.
bf5c74e7 5423
15f1bff4
JL
5424@item @code{outputs} (par défaut : @code{'("out")})
5425La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
5426supplémentaires.
bf5c74e7 5427
15f1bff4
JL
5428@item @code{native-search-paths} (par défaut : @code{'()})
5429@itemx @code{search-paths} (par défaut : @code{'()})
5430Une liste d'objets @code{search-path-specification} décrivant les variables
5431d'environnement de recherche de chemins que ce paquet utilise.
bf5c74e7 5432
15f1bff4
JL
5433@item @code{replacement} (par défaut : @code{#f})
5434Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
5435comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
5436plus de détails.
bf5c74e7 5437
15f1bff4
JL
5438@item @code{synopsis}
5439Une description sur une ligne du paquet.
bf5c74e7 5440
15f1bff4
JL
5441@item @code{description}
5442Une description plus détaillée du paquet.
bf5c74e7 5443
15f1bff4
JL
5444@item @code{license}
5445@cindex licence, des paquets
5446La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
5447liste de ces valeurs.
bf5c74e7 5448
15f1bff4
JL
5449@item @code{home-page}
5450L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
bf5c74e7 5451
15f1bff4
JL
5452@item @code{supported-systems} (par défaut : @var{%supported-systems})
5453La liste des systèmes supportés par le paquet, comme des chaînes de
5454caractères de la forme @code{architecture-noyau}, par exemple
5455@code{"x86_64-linux"}.
bf5c74e7 5456
15f1bff4
JL
5457@item @code{maintainers} (par défaut : @code{'()})
5458La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
bf5c74e7 5459
15f1bff4
JL
5460@item @code{location} (par défaut : emplacement de la source de la forme @code{package})
5461L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
5462hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
5463corrigé.
5464@end table
5465@end deftp
bf5c74e7 5466
524756d1 5467
15f1bff4
JL
5468@node Référence d'origine
5469@subsection Référence de @code{origin}
bf5c74e7 5470
15f1bff4
JL
5471Cette section résume toutes les options disponibles dans le déclarations
5472@code{origin} (@pxref{Définition des paquets}).
bf5c74e7 5473
15f1bff4
JL
5474@deftp {Type de données} origin
5475C'est le type de donnée qui représente l'origine d'un code source.
bf5c74e7 5476
15f1bff4
JL
5477@table @asis
5478@item @code{uri}
5479Un objet contenant l'URI de la source. Le type d'objet dépend de la
5480@code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
5481de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
5482représentée par une chaîne de caractères, ou une liste de chaînes de
5483caractères.
bf5c74e7 5484
15f1bff4
JL
5485@item @code{method}
5486Un procédure qui gère l'URI.
bf5c74e7 5487
15f1bff4 5488Quelques exemples :
bf5c74e7 5489
15f1bff4
JL
5490@table @asis
5491@item @var{url-fetch} de @code{(guix download)}
5492télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
5493champ @code{uri} ;
bf5c74e7 5494
15f1bff4
JL
5495@vindex git-fetch
5496@item @var{git-fetch} de @code{(guix git-download)}
5497clone le dépôt sous contrôle de version Git et récupère la révision
5498spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
5499un objet @code{git-reference} ressemble à cela :
bf5c74e7
JL
5500
5501@example
15f1bff4
JL
5502(git-reference
5503 (url "git://git.debian.org/git/pkg-shadow/shadow")
5504 (commit "v4.1.5.1"))
bf5c74e7 5505@end example
15f1bff4 5506@end table
bf5c74e7 5507
15f1bff4
JL
5508@item @code{sha256}
5509Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
5510@code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
5511de caractères en base-32.
5512
5513Vous pouvez obtenir cette information avec @code{guix download}
5514(@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
5515
5516@item @code{file-name} (par défaut : @code{#f})
5517Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
5518@code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
5519des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
5520fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
5521contrôle de version, il est recommandé de fournir un nom de fichier
5522explicitement parce que le nom par défaut n'est pas très descriptif.
5523
5524@item @code{patches} (par défaut : @code{'()})
5525Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
5526(@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
5527à appliquer sur la source.
5528
5529Cette liste de correctifs doit être inconditionnelle. En particulier, elle
5530ne peut pas dépendre des valeurs de @code{%current-system} ou
5531@code{%current-target-system}.
bf5c74e7 5532
15f1bff4
JL
5533@item @code{snippet} (par défaut : @code{#f})
5534Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
5535dans le répertoire des sources. C'est une manière pratique de modifier la
5536source, parfois plus qu'un correctif.
bf5c74e7 5537
15f1bff4
JL
5538@item @code{patch-flags} (par défaut : @code{'("-p1")})
5539Une liste de drapeaux à passer à la commande @code{patch}.
bf5c74e7 5540
15f1bff4
JL
5541@item @code{patch-inputs} (par défaut : @code{#f})
5542Paquets d'entrées ou dérivations pour le processus de correction.
5543Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
5544pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
bf5c74e7 5545
15f1bff4
JL
5546@item @code{modules} (par défaut : @code{'()})
5547Une liste de modules Guile qui devraient être chargés pendant le processus
5548de correction et pendant que le lancement du code du champ @code{snippet}.
bf5c74e7 5549
15f1bff4
JL
5550@item @code{patch-guile} (par défaut : @code{#f})
5551Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
5552à @code{#f}, une valeur par défaut raisonnable est utilisée.
5553@end table
5554@end deftp
bf5c74e7 5555
bf5c74e7 5556
15f1bff4
JL
5557@node Systèmes de construction
5558@section Systèmes de construction
bf5c74e7 5559
15f1bff4
JL
5560@cindex système de construction
5561Chaque définition de paquet définie un @dfn{système de construction} et des
5562arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
5563champ @code{build-system} représente la procédure de construction du paquet,
5564ainsi que des dépendances implicites pour cette procédure de construction.
bf5c74e7 5565
15f1bff4
JL
5566Les systèmes de construction sont des objets
5567@code{<build-system>}. L'interface pour les créer et les manipuler est
5568fournie par le module @code{(guix build-system)} et les systèmes de
5569construction eux-mêmes sont exportés par des modules spécifiques.
bf5c74e7 5570
15f1bff4
JL
5571@cindex sac (représentation à bas-niveau des paquets)
5572Sous le capot, les systèmes de construction compilent d'abord des objets
5573paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
5574décoration — en d'autres mots, un sac est une représentation à bas-niveau
5575d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
5576été implicitement ajoutées par le système de construction. Cette
5577représentation intermédiaire est ensuite compilée en une dérivation
5578(@pxref{Dérivations}).
524756d1 5579
15f1bff4
JL
5580Les systèmes de construction acceptent une liste d'@dfn{arguments}
5581facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
5582champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
5583arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
5584Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
5585habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
5586un processus Guile lancé par le démon (@pxref{Dérivations}).
bf5c74e7 5587
15f1bff4
JL
5588Le système de construction principal est le @var{gnu-build-system} qui
5589implémente les procédures de construction standard pour les paquets GNU et
5590de nombreux autres. Il est fournit par le module @code{(guix build-system
5591gnu)}.
bf5c74e7 5592
15f1bff4
JL
5593@defvr {Variable Scheme} gnu-build-system
5594@var{gnu-build-system} représente le système de construction GNU et ses
5595variantes (@pxref{Configuration, configuration and makefile conventions,,
5596standards, GNU Coding Standards}).
bf5c74e7 5597
15f1bff4
JL
5598@cindex phases de construction
5599En résumé, les paquets qui l'utilisent sont configurés, construits et
5600installés avec la séquence @code{./configure && make && make check && make
5601install} habituelle. En pratique, des étapes supplémentaires sont souvent
5602requises. Toutes ces étapes sont séparées dans des @dfn{phases}
5603différentes, notamment@footnote{Regardez les modules @code{(guix build
5604gnu-build-system)} pour plus de détails sur les phases de construction.}:
bf5c74e7 5605
15f1bff4
JL
5606@table @code
5607@item unpack
5608Décompresse l'archive des sources et se déplace dans l'arborescence des
5609sources fraîchement extraites. Si la source est en fait un répertoire, le
5610copie dans l'arborescence de construction et entre dans ce répertoire.
bf5c74e7 5611
15f1bff4
JL
5612@item patch-source-shebangs
5613Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
5614réfèrent aux bons noms de fichiers. Par exemple, elle change
5615@code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
bf5c74e7 5616
15f1bff4
JL
5617@item configure
5618Lance le script @code{configure} avec un certain nombre d'options par
5619défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
5620spécifiées par l'argument @code{#:configure-flags}.
bf5c74e7 5621
15f1bff4
JL
5622@item build
5623Lance @code{make} avec la liste des drapeaux spécifiés avec
5624@code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
5625défaut), construit avec @code{make -j}.
bf5c74e7 5626
15f1bff4
JL
5627@item check
5628Lance @code{make check}, ou une autre cible spécifiée par
5629@code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
5630l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
5631check -j}.
524756d1 5632
15f1bff4
JL
5633@item install
5634Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
bf5c74e7 5635
15f1bff4
JL
5636@item patch-shebangs
5637Corrige les shebangs des fichiers exécutables installés.
bf5c74e7 5638
15f1bff4
JL
5639@item strip
5640Nettoie les symboles de débogage dans les fichiers ELF (à moins que
5641@code{#:strip-binaries?} ne soit faux), les copie dans la sortie
5642@code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
5643@end table
bf5c74e7 5644
15f1bff4
JL
5645@vindex %standard-phases
5646Le module du côté du constructeur @code{(guix build gnu-build-system)}
5647définie @var{%standard-phases} comme la liste par défaut des phases de
5648construction. @var{%standard-phases} est une liste de paires de symboles
5649et de procédures, où la procédure implémente la phase en question.
bf5c74e7 5650
15f1bff4
JL
5651La liste des phases utilisées par un paquet particulier peut être modifiée
5652avec le paramètre @code{#:phases}. Par exemple, en passant :
524756d1 5653
15f1bff4
JL
5654@example
5655#:phases (modify-phases %standard-phases (delete 'configure))
5656@end example
524756d1 5657
15f1bff4
JL
5658signifie que toutes les procédures décrites plus haut seront utilisées, sauf
5659la phase @code{configure}.
524756d1 5660
15f1bff4
JL
5661En plus, ce système de construction s'assure que l'environnement « standard
5662» pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
5663libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
5664@code{(guix build-system gnu)} pour une liste complète). Nous les appelons
5665les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
5666ne les mentionne pas.
5667@end defvr
bf5c74e7 5668
15f1bff4
JL
5669D'autres objets @code{<build-system>} sont définis pour supporter d'autres
5670conventions et outils utilisés par les paquets de logiciels libres. Ils
5671héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
5672l'ensemble des entrées implicites ajoutées au processus de construction et
5673dans la liste des phases exécutées. Certains de ces systèmes de
5674construction sont listés ci-dessous.
bf5c74e7 5675
15f1bff4
JL
5676@defvr {Variable Scheme} ant-build-system
5677Cette variable est exportée par @code{(guix build-system ant)}. Elle
5678implémente la procédure de construction pour les paquets Java qui peuvent
5679être construits avec @url{http://ant.apache.org/, l'outil de construction
5680Ant}.
bf5c74e7 5681
15f1bff4
JL
5682Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
5683(JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
5684paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
5685et @code{#:jdk} respectivement.
5686
5687Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
5688acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
5689fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
5690construire l'archive jar spécifiée. Dans ce cas, le paramètre
5691@code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
5692sources, par défaut « src ».
bf5c74e7 5693
15f1bff4
JL
5694Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
5695construction minimal pour spécifier la classe principale du jar. Cela rend
5696le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
5697utilisé pour spécifier la liste des tests junits à lancer. Il vaut par
5698défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
5699peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
5700@code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
5701peuvent pas être utilisées comme des tests.
bf5c74e7 5702
15f1bff4
JL
5703Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
5704Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
5705tâche « jar » sera lancée.
bf5c74e7 5706
15f1bff4 5707@end defvr
bf5c74e7 5708
15f1bff4
JL
5709@defvr {Variable Scheme} android-ndk-build-system
5710@cindex Distribution android
5711@cindex système de construction Android NDK
5712Cette variable est exportée par @code{(guix build-system android-ndk)}.
5713Elle implémente une procédure de construction pour les paquets du NDK
5714Android (@i{native development kit}) avec des processus de construction
5715spécifiques à Guix.
bf5c74e7 5716
15f1bff4
JL
5717Le système de construction suppose que les paquets installent leur interface
5718publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
5719« out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
5720« out ».
bf5c74e7 5721
15f1bff4
JL
5722Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
5723pas de fichiers en conflit.
bf5c74e7 5724
15f1bff4
JL
5725Pour l'instant, la compilation croisée n'est pas supportées — donc pour
5726l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
5727des outils de l'hôte.
bf5c74e7 5728
15f1bff4 5729@end defvr
bf5c74e7 5730
15f1bff4
JL
5731@defvr {Variable Scheme} asdf-build-system/source
5732@defvrx {Variable Scheme} asdf-build-system/sbcl
5733@defvrx {Variable Scheme} asdf-build-system/ecl
bf5c74e7 5734
15f1bff4
JL
5735Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
5736les procédures de constructions pour les paquets en Common Lisp qui
5737utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
5738un dispositif de définition de systèmes pour les programmes et les
5739bibliothèques en Common Lisp.
bf5c74e7 5740
15f1bff4
JL
5741Le système @code{asdf-build-system/source} installe les paquets au format
5742source qui peuvent être chargés avec n'importe quelle implémentation de
5743common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
5744installent des binaires au format qu'un implémentation particulière
5745comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
5746produire des programmes exécutables ou des images lisp qui contiennent un
5747ensemble de paquets pré-chargés.
bf5c74e7 5748
15f1bff4
JL
5749Le système de construction utilise des conventions de nommage. Pour les
5750paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
5751lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
bf5c74e7 5752
15f1bff4
JL
5753En plus, le paquet source correspondant devrait étiquetté avec la même
5754convention que les paquets python (voir @ref{Modules python}), avec le
5755préfixe @code{cl-}.
bf5c74e7 5756
15f1bff4
JL
5757Pour les paquets binaires, chaque système devrait être défini comme un
5758paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
5759peut créer des variantes du paquet pour construire tous les systèmes. Les
5760paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
5761contenir plusieurs systèmes.
bf5c74e7 5762
15f1bff4
JL
5763Pour créer des programmes exécutables et des images, les procédures côté
5764construction @code{build-program} et @code{build-image} peuvent être
5765utilisées. Elles devraient être appelées dans une phase de construction
5766après la phase @code{create-symlinks} pour que le système qui vient d'être
5767construit puisse être utilisé dans l'image créée. @code{build-program}
5768requiert une liste d'expressions Common Lisp dans l'argument
5769@code{#:entry-program}.
bf5c74e7 5770
15f1bff4
JL
5771Si le système n'est pas défini dans son propre fichier @code{.asd} du même
5772nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
5773spécifier dans quel fichier le système est défini. De plus, si le paquet
5774défini un système pour ses tests dans un fichier séparé, il sera chargé
5775avant que les tests ne soient lancés s'il est spécifié par le paramètre
5776@code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
5777@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
5778@code{test.asd} seront testés.
3cacfa9e 5779
15f1bff4
JL
5780Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
5781différente de ce que la convention de nommage suggère, le paramètre
5782@code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
3cacfa9e 5783
15f1bff4 5784@end defvr
3cacfa9e 5785
15f1bff4
JL
5786@defvr {Variable Scheme} cargo-build-system
5787@cindex Langage de programmation Rust
5788@cindex Cargo (système de construction Rust)
5789Cette variable est exportée par @code{(guix build-system cargo)}. Elle
5790supporte les construction de paquets avec Cargo, le système de construction
5791du @uref{https://www.rust-lang.org, langage de programmation Rust}.
bf5c74e7 5792
15f1bff4
JL
5793Dans sa phase @code{configure}, ce système de construction remplace les
5794dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
5795Guix. La phase @code{install} installe les binaires et installe aussi le
5796code source et le fichier @file{Cargo.toml}.
5797@end defvr
bf5c74e7 5798
15f1bff4
JL
5799@cindex Clojure (langage de programmation)
5800@cindex système de construction Clojure simple
5801@defvr {Variable Scheme} clojure-build-system
5802Cette variable est exportée par @code{(guix build-system clojure)}. Elle
5803implémente une procédure de construction des paquets simple qui utilise le
5804bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
5805encore supportée.
bf5c74e7 5806
15f1bff4
JL
5807Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
5808entrées. Des paquets différents peuvent être spécifiés avec les paramètres
5809@code{#:clojure}, @code{#:jdk} et @code{#:zip}.
bf5c74e7 5810
15f1bff4
JL
5811Une liste de répertoires sources, de répertoires de tests et de noms de jar
5812peuvent être spécifiés avec les paramètres @code{#:source-dirs},
5813@code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
5814la classe principale peuvent être spécifiés avec les paramètres
5815@code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
5816documentés plus bas.
bf5c74e7 5817
15f1bff4
JL
5818Ce système de construction est une extension de @var{ant-build-system}, mais
5819avec les phases suivantes modifiées :
bf5c74e7 5820
15f1bff4 5821@table @code
bf5c74e7 5822
15f1bff4
JL
5823@item build
5824Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
5825sources et lance @command{jar} pour créer les fichiers jar à partir des
5826fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
5827d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
5828La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
5829consistent en des symboles représentant des bibliothèque Clojure ou le mot
5830clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
5831trouvées dans les répertoires des sources. Le paramètre
5832@code{#:omit-source?} décide si les sources devraient être incluses dans les
5833fichiers jar.
bf5c74e7 5834
15f1bff4
JL
5835@item check
5836Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
5837spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
5838signification est analogue à celle de @code{#:aot-include} et
5839@code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
5840maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
5841tests. Le paramètre @code{#:tests?} décide si les tests devraient être
5842lancés.
bf5c74e7 5843
15f1bff4
JL
5844@item install
5845Cette phase installe tous les fichiers jar précédemment construits.
5846@end table
bf5c74e7 5847
15f1bff4
JL
5848En dehors de cela, le système de construction contient aussi la phase
5849suivante :
bf5c74e7 5850
15f1bff4 5851@table @code
bf5c74e7 5852
15f1bff4
JL
5853@item install-doc
5854Cette phase installe tous les fichiers dans le répertoire de plus haut
5855niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
5856regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
5857(récursivement) dans les répertoires de documentations spécifiés dans
5858@code{#:doc-dirs} sont aussi installés.
bf5c74e7 5859@end table
15f1bff4 5860@end defvr
bf5c74e7 5861
15f1bff4
JL
5862@defvr {Variable Scheme} cmake-build-system
5863Cette variable est exportée par @code{(guix build-system cmake)}. Elle
5864implémente la procédure de construction des paquets qui utilisent
5865l'@url{http://www.cmake.org, outil de construction CMake}.
bf5c74e7 5866
15f1bff4
JL
5867Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
5868entrées. Le paquet utilisé peut être spécifié par le paramètre
5869@code{#:cmake}.
bf5c74e7 5870
15f1bff4
JL
5871Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
5872passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
5873spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
5874par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
5875les informations de débogage » en plus court), ce qui signifie en gros que
5876le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
5877défaut.
5878@end defvr
bf5c74e7 5879
15f1bff4
JL
5880@defvr {Scheme Variable} dune-build-system
5881This variable is exported by @code{(guix build-system dune)}. It supports
5882builds of packages using @uref{https://dune.build/, Dune}, a build tool for
5883the OCaml programming language. It is implemented as an extension of the
5884@code{ocaml-build-system} which is described below. As such, the
5885@code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
5886system.
bf5c74e7 5887
15f1bff4
JL
5888It automatically adds the @code{dune} package to the set of inputs. Which
5889package is used can be specified with the @code{#:dune} parameter.
bf5c74e7 5890
15f1bff4
JL
5891There is no @code{configure} phase because dune packages typically don't
5892need to be configured. The @code{#:build-flags} parameter is taken as a
5893list of flags passed to the @code{dune} command during the build.
bf5c74e7 5894
15f1bff4
JL
5895The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
5896command instead of the more recent @code{dune} command while building a
5897package. Its default value is @code{#f}.
5898@end defvr
3cacfa9e 5899
15f1bff4
JL
5900@defvr {Variable Scheme} go-build-system
5901Cette variable est exportée par @code{(guix build-system go)}. Elle
5902implémente la procédure pour les paquets Go utilisant les
5903@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
5904mécanismes de construction Go} standard.
3cacfa9e 5905
15f1bff4
JL
5906L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
5907dans certains cas, @code{#:unpack-path}. Le
5908@url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
5909correspond au chemin dans le système de fichiers attendu par le script de
5910construction du paquet et les paquets qui s'y réfèrent et fournit une
5911manière unique de se référer à un paquet Go. Il est typiquement basé sur
5912une combinaison de l'URI du code source du paquet et d'une structure
5913hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
5914le code source du paquet dans une structure de répertoires différente que
5915celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
5916utilisé dans ces cas-là.
bf5c74e7 5917
15f1bff4
JL
5918Les paquets qui fournissent des bibliothèques Go devraient être installées
5919avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
5920par défaut, contrôle l'installation du code source. Elle peut être mise à
5921@code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
5922@end defvr
524756d1 5923
15f1bff4
JL
5924@defvr {Variable Scheme} glib-or-gtk-build-system
5925Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
5926Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
5927GTK+.
524756d1 5928
15f1bff4
JL
5929Ce système de construction ajoute les deux phases suivantes à celles
5930définies par @var{gnu-build-system} :
524756d1 5931
15f1bff4
JL
5932@table @code
5933@item glib-or-gtk-wrap
5934La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
5935@file{bin/} sont capable de trouver les « schemas » GLib et les
5936@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
5937GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
5938lancement qui initialisent correctement les variables d'environnement
5939@code{XDG_DATA_DIRS} et @code{GTK_PATH}.
524756d1 5940
15f1bff4
JL
5941Il est possible d'exclure des sorties spécifiques de ce processus
5942d'enveloppage en listant leur nom dans le paramètre
5943@code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
5944est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
5945ajouterait une dépendance inutile vers GLib et GTK+.
bf5c74e7 5946
15f1bff4
JL
5947@item glib-or-gtk-compile-schemas
5948La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
5949@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
5950schémas GSettings} de GLib sont compilés. La compilation est effectuée par
5951le programme @command{glib-compile-schemas}. Il est fournit par le paquet
5952@code{glib:bin} qui est automatiquement importé par le système de
5953construction. Le paquet @code{glib} qui fournit
5954@command{glib-compile-schemas} peut être spécifié avec le paramètre
5955@code{#:glib}.
5956@end table
bf5c74e7 5957
15f1bff4
JL
5958Ces deux phases sont exécutées après la phase @code{install}.
5959@end defvr
bf5c74e7 5960
15f1bff4
JL
5961@defvr {Variable Scheme} guile-build-system
5962Ce système de construction sert aux paquets Guile qui consistent
5963exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
5964makefile, sans parler d'un script @file{configure}. Il compile le code
5965Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
5966GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
5967@file{.go} aux bons emplacements. Il installe aussi la documentation.
bf5c74e7 5968
15f1bff4
JL
5969Ce système de construction supporte la compilation croisée en utilisant
5970l'option @code{--target} de @command{guild compile}.
bf5c74e7 5971
15f1bff4
JL
5972Les paquets construits avec @code{guile-build-system} doivent fournir un
5973paquet Guile dans leur champ @code{native-inputs}.
5974@end defvr
bf5c74e7 5975
15f1bff4
JL
5976@defvr {Variable Scheme} minify-build-system
5977Cette variable est exportée par @code{(guix build-system minify)}. Elle
5978implémente une procédure de minification pour des paquets JavaScript
5979simples.
bf5c74e7 5980
15f1bff4
JL
5981Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
5982compresser tous les fichiers JavaScript du répertoire @file{src}. Un
5983minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
5984mais il est attendu que ce paquet écrive le code minifié sur la sortie
5985standard.
bf5c74e7 5986
15f1bff4
JL
5987Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
5988répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
5989utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
5990@end defvr
bf5c74e7 5991
15f1bff4
JL
5992@defvr {Variable Scheme} ocaml-build-system
5993Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
5994implémente une procédure de construction pour les paquets
5995@uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
5996commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
5997des commandes diverses pour être construit. Ce système de construction en
5998essaye certaines.
524756d1 5999
15f1bff4
JL
6000Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
6001haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
6002setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
6003construction supposera que ces fichiers ont été générés par
6004@uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
6005d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
6006désactivés. Vous pouvez passer des drapeaux de configuration et de
6007construction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
6008@code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
6009utilisés pour activer les tests. La clef @code{#:use-make?} peut être
6010utilisée pour outrepasser ce système dans les phases de construction et
6011d'installation.
6012
6013Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
6014d'un script configure écrit à la main qui demande un format différent de
6015celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
6016la clef @code{#:configure-flags}.
524756d1 6017
15f1bff4
JL
6018Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
6019@code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
6020construction et l'installation avec la clef @code{#:make-flags}.
524756d1 6021
15f1bff4
JL
6022Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
6023plus ou moins standard pour leur système de construction. Dans ce cas, le
6024système de construction lancera @code{ocaml pkg/pkg.ml} ou
6025@code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
6026requis. Des drapeaux supplémentaires peuvent être passés via la clef
6027@code{#:bulid-flags}. L'installation se fait avec
6028@command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
6029ajouté au champ @code{native-inputs} de la définition du paquet.
524756d1 6030
15f1bff4
JL
6031Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
6032dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
6033dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
6034leur propre répertoire de module, ce qui est normalement correct puisqu'il
6035s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
6036bibliothèques ne peuvent pas y être trouvées et on utilise
6037@code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
6038@file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
6039@file{.so} devraient être installées.
6040@end defvr
bf5c74e7 6041
15f1bff4
JL
6042@defvr {Variable Scheme} python-build-system
6043Cette variable est exportée par @code{(guix build-system python)}. Elle
6044implémente la procédure de construction plus ou moins standard utilisée pour
6045les paquets Python, qui consiste à lancer @code{python setup.py build} puis
6046@code{python setup.py install --prefix=/gnu/store/@dots{}}.
bf5c74e7 6047
15f1bff4
JL
6048Pour les paquets qui installent des programmes autonomes dans @code{bin/},
6049elle prend soin d'envelopper ces binaires pour que leur variable
6050d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
6051Python dont ils dépendent.
bf5c74e7 6052
15f1bff4
JL
6053Le paquet Python utilisé pour effectuer la construction peut être spécifié
6054avec le paramètre @code{#:python}. C'est une manière utile de forcer un
6055paquet à être construit avec une version particulière de l'interpréteur
6056python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
6057une version de l'interpréteur.
bf5c74e7 6058
15f1bff4
JL
6059Par défaut Guix appelle @code{setup.py} sous le contrôle de
6060@code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
6061pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
6062en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
6063@end defvr
bf5c74e7 6064
15f1bff4
JL
6065@defvr {Variable Scheme} perl-build-system
6066Cette variable est exportée par @code{(guix build-system perl)}. Elle
6067implémente la procédure de construction standard des paquets Perl, qui
6068consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
6069suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
6070Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
6071install}, en fonction de la présence de @code{Build.PL} ou
6072@code{Makefile.PL} dans la distribution du paquet. Le premier a la
6073préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
6074la distribution du paquet. Cette préférence peut être inversée en
6075spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
bf5c74e7 6076
15f1bff4
JL
6077L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
6078passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
6079@code{#:module-build-flags}, respectivement.
bf5c74e7 6080
15f1bff4
JL
6081Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
6082@end defvr
bf5c74e7 6083
15f1bff4
JL
6084@defvr {Variable Scheme} r-build-system
6085Cette variable est exportée par @code{(guix build-system r)}. Elle
6086implémente la procédure de construction utilisée par les paquets
6087@uref{http://r-project.org, R} qui consiste à lancer à peine plus que
6088@code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
6089@code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
6090sont lancés après l'installation avec la fonction R
6091@code{tools::testInstalledPackage}.
6092@end defvr
bf5c74e7 6093
15f1bff4
JL
6094@defvr {Variable Scheme} texlive-build-system
6095Cette variable est exportée par @code{(guix build-system texlive)}. Elle
6096est utilisée pour construire des paquets TeX en mode batch avec le moteur
6097spécifié. Le système de construction initialise la variable
6098@code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
bf5c74e7 6099
15f1bff4
JL
6100Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
6101par @code{ins}. Un moteur et un format différent peuvent être spécifiés
6102avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
6103peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
6104liste de noms de fichiers. Le système de construction ajoute uniquement
6105@code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
6106tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
6107arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
6108respectivement.
bf5c74e7 6109
15f1bff4
JL
6110Le paramètre @code{#:tex-directory} dit au système de construction où
6111installer les fichiers construit dans l'arbre texmf.
6112@end defvr
bf5c74e7 6113
15f1bff4
JL
6114@defvr {Variable Scheme} ruby-build-system
6115Cette variable est exportée par @code{(guix build-system ruby)}. Elle
6116implémenter la procédure de construction RubyGems utilisée par les paquets
6117Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
bf5c74e7 6118
15f1bff4
JL
6119Le champ @code{source} d'un paquet qui utilise ce système de construction
6120référence le plus souvent une archive gem, puisque c'est le format utilisé
6121par les développeurs Ruby quand ils publient leur logiciel. Le système de
6122construction décompresse l'archive gem, éventuellement en corrigeant les
6123sources, lance la suite de tests, recompresse la gemme et l'installe. En
6124plus, des répertoires et des archives peuvent être référencés pour permettre
6125de construire des gemmes qui n'ont pas été publiées depuis Git ou une
6126archive de sources traditionnelle.
524756d1 6127
15f1bff4
JL
6128Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
6129Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
6130peut être spécifiée avec le paramètre @code{#:gem-flags}.
6131@end defvr
524756d1 6132
15f1bff4
JL
6133@defvr {Variable Scheme} waf-build-system
6134Cette variable est exportée par @code{(guix build-system waf)}. Elle
6135implémente une procédure de construction autour du script @code{waf}. Les
6136phases usuelles — @code{configure}, @code{build} et @code{install} — sont
6137implémentée en passant leur nom en argument au script @code{waf}.
bf5c74e7 6138
15f1bff4
JL
6139Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
6140Python utilisé pour lancer le script peut être spécifié avec le paramètre
6141@code{#:python}.
6142@end defvr
bf5c74e7 6143
15f1bff4
JL
6144@defvr {Variable Scheme} scons-build-system
6145Cette variable est exportée par @code{(guix build-system scons)}. Elle
6146implémente la procédure de construction utilisée par l'outil de construction
6147SCons. Ce système de construction lance @code{scons} pour construire le
6148paquet, @code{scons test} pour lancer les tests puis @code{scons install}
6149pour installer le paquet.
bf5c74e7 6150
15f1bff4
JL
6151On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
6152avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
6153lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
6154avec le paramètre @code{#:scons}.
6155@end defvr
bf5c74e7 6156
15f1bff4
JL
6157@defvr {Variable Scheme} haskell-build-system
6158Cette variable est exportée par @code{(guix build-system haskell)}. Elle
6159implémente la procédure de construction Cabal utilisée par les paquets
6160Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
6161--prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
6162que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
6163pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
6164dépôt en lecture-seule du compilateur, le système de construction utilise
6165@code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
6166register}. En plus, le système de construction génère la documentation du
6167paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
6168@code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
6169peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
6170fichier @code{Setup.hs} n'est pas trouvé, le système de construction
6171cherchera @code{Setup.lhs} à la place.
bf5c74e7 6172
15f1bff4
JL
6173Le compilateur Haskell utilisé peut être spécifié avec le paramètre
6174@code{#:haskell} qui a pour valeur par défaut @code{ghc}.
6175@end defvr
bf5c74e7 6176
15f1bff4
JL
6177@defvr {Variable Scheme} dub-build-system
6178Cette variable est exportée par @code{(guix build-system dub)}. Elle
6179implémente la procédure de construction Dub utilisée par les paquets D qui
6180consiste à lancer @code{dub build} et @code{dub run}. L'installation est
6181effectuée en copiant les fichiers manuellement.
bf5c74e7 6182
15f1bff4
JL
6183Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
6184qui vaut par défaut @code{ldc}.
6185@end defvr
bf5c74e7 6186
15f1bff4
JL
6187@defvr {Variable Scheme} emacs-build-system
6188Cette variable est exportée par @code{(guix build-system emacs)}. Elle
6189implémente une procédure d'installation similaire au système de gestion de
6190paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6191
6192Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
6193tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
6194gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
6195dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
6196paquet est installé dans son propre répertoire dans
6197@file{share/emacs/site-lisp/guix.d}.
6198@end defvr
bf5c74e7 6199
15f1bff4
JL
6200@defvr {Variable Scheme} font-build-system
6201This variable is exported by @code{(guix build-system font)}. It implements
6202an installation procedure for font packages where upstream provides
6203pre-compiled TrueType, OpenType, etc.@: font files that merely need to be
6204copied into place. It copies font files to standard locations in the output
6205directory.
6206@end defvr
bf5c74e7 6207
15f1bff4
JL
6208@defvr {Variable Scheme} meson-build-system
6209Cette variable est exportée par @code{(guix build-system meson)}. Elle
6210implémente la procédure de construction des paquets qui utilisent
6211@url{http://mesonbuild.com, Meson} comme système de construction.
bf5c74e7 6212
15f1bff4
JL
6213Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
6214l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
6215@code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
6216@code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
6217@code{RUNPATH} des binaires et les bibliothèques qu'il installe.
bf5c74e7 6218
15f1bff4
JL
6219Ce système de construction est une extension de @var{gnu-build-system}, mais
6220avec les phases suivantes modifiées pour Meson :
bf5c74e7 6221
15f1bff4 6222@table @code
bf5c74e7 6223
15f1bff4
JL
6224@item configure
6225La phase lance @code{meson} avec les drapeaux spécifiés dans
6226@code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
6227initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
6228dans @code{#:build-type}.
bf5c74e7 6229
15f1bff4
JL
6230@item build
6231La phase lance @code{ninja} pour construire le paquet en parallèle par
6232défaut, mais cela peut être changé avec @code{#:parallel-build?}.
bf5c74e7 6233
15f1bff4
JL
6234@item check
6235La phase lance @code{ninja} avec la cible spécifiée dans
6236@code{#:test-target}, qui est @code{"test"} par défaut.
bf5c74e7 6237
15f1bff4
JL
6238@item install
6239La phase lance @code{ninja install} et ne peut pas être changée.
6240@end table
bf5c74e7 6241
15f1bff4
JL
6242En dehors de cela, le système de construction ajoute aussi la phase suivante
6243:
bf5c74e7 6244
15f1bff4 6245@table @code
bf5c74e7 6246
15f1bff4
JL
6247@item fix-runpath
6248Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
6249dont ils ont besoin. Elle cherche les bibliothèques requises dans les
6250sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
6251là où c'est nécessaire. Elle supprime aussi les références aux
6252bibliothèques laissées là par la phase de construction par
6253@code{meson-for-build} comme les dépendances des tests, qui ne sont pas
6254vraiment requises pour le programme.
bf5c74e7 6255
15f1bff4
JL
6256@item glib-or-gtk-wrap
6257Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
6258n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
bf5c74e7 6259
15f1bff4
JL
6260@item glib-or-gtk-compile-schemas
6261Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
6262n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
6263@end table
6264@end defvr
bf5c74e7 6265
15f1bff4
JL
6266Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
6267système de construction « trivial » est disponible. Il est trivial dans le
6268sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
6269implicite, et n'a pas de notion de phase de construction.
524756d1 6270
15f1bff4
JL
6271@defvr {Variable Scheme} trivial-build-system
6272Cette variable est exportée par @code{(guix build-system trivial)}.
524756d1 6273
15f1bff4
JL
6274Ce système de construction requiert un argument @code{#:builder}. Cet
6275argument doit être une expression Scheme qui construit la sortie du paquet —
6276comme avec @code{build-expression->derivation} (@pxref{Dérivations,
6277@code{build-expression->derivation}}).
6278@end defvr
bf5c74e7 6279
15f1bff4
JL
6280@node Le dépôt
6281@section Le dépôt
bf5c74e7 6282
15f1bff4
JL
6283@cindex dépôt
6284@cindex éléments du dépôt
6285@cindex chemins dans le dépôt
524756d1 6286
15f1bff4
JL
6287Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
6288bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
6289sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
6290parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
6291qui contient des informations comme les chemins du dépôt auxquels se
6292réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
6293@emph{valides} — les résultats d'une construction réussie. Cette base de
6294données se trouve dans @file{@var{localstatedir}/guix/db} où
6295@var{localstatedir} est le répertoire d'états spécifié @i{via} @option
6296{--localstatedir} à la configuration, typiquement @file{/var}.
bf5c74e7 6297
15f1bff4
JL
6298C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
6299clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
6300clients se connectent au démon par un socket Unix-domain, envoient une
6301requête dessus et lisent le résultat — ce sont des appels de procédures
6302distantes, ou RPC.
524756d1 6303
15f1bff4
JL
6304@quotation Remarque
6305Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
6306@file{/gnu/store} directement. Cela entraînerait des incohérences et
6307casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
6308(@pxref{Introduction}).
524756d1 6309
15f1bff4
JL
6310@xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
6311sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
6312modifications accidentelles.
6313@end quotation
524756d1 6314
15f1bff4
JL
6315Le module @code{(guix store)} fournit des procédures pour se connecter au
6316démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
6317@code{open-connection}, et donc toutes les commandes @command{guix} se
6318connectent au démon local ou à l'URI spécifiée par la variable
6319d'environnement @code{GUIX_DAEMON_SOCKET}.
524756d1 6320
15f1bff4
JL
6321@defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
6322Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
6323de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
6324nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
6325des noms de fichiers, les schémas d'URI supportés sont :
524756d1
JL
6326
6327@table @code
15f1bff4
JL
6328@item file
6329@itemx unix
6330Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
6331est équivalent à @file{/var/guix/daemon-socket/socket}.
bf5c74e7 6332
15f1bff4
JL
6333@item guix
6334@cindex démon, accès distant
6335@cindex accès distant au démon
6336@cindex démon, paramètres de grappes
6337@cindex grappes, paramètres du démon
6338Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
6339authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
6340éventuellement un numéro de port (par défaut 44146) :
bf5c74e7 6341
15f1bff4
JL
6342@example
6343guix://master.guix.example.org:1234
6344@end example
bf5c74e7 6345
15f1bff4
JL
6346Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
6347de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
6348construction sur @code{master.guix.example.org}.
bf5c74e7 6349
15f1bff4
JL
6350L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
6351dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
6352@code{--listen}}).
bf5c74e7 6353
15f1bff4
JL
6354@item ssh
6355@cindex accès SSH au démon de construction
6356Ces URI vous permettent de vous connecter au démon à distance à travers
6357SSH@footnote{Cette fonctionnalité requiert Guile-SSH
6358(@pxref{Prérequis}).}.
bf5c74e7
JL
6359
6360@example
15f1bff4 6361ssh://charlie@@guix.example.org:22
bf5c74e7
JL
6362@end example
6363
15f1bff4
JL
6364Comme pour @command{guix copy}, les fichiers de configuration du client
6365OpenSSH sont respectés (@pxref{Invoquer guix copy}).
6366@end table
bf5c74e7 6367
15f1bff4 6368Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
bf5c74e7 6369
15f1bff4
JL
6370@c XXX: Remove this note when the protocol incurs fewer round trips
6371@c and when (guix derivations) no longer relies on file system access.
6372@quotation Remarque
6373La capacité de se connecter à un démon de construction distant est considéré
6374comme expérimental à la version @value{VERSION}. Contactez-nous pour
6375partager vos problèmes ou des suggestions que vous pourriez avoir
6376(@pxref{Contribuer}).
6377@end quotation
6378@end defvr
bf5c74e7 6379
15f1bff4
JL
6380@deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
6381Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
6382de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
6383réserver un peu de place supplémentaire sur le système de fichiers pour que
6384le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
6385un objet serveur.
bf5c74e7 6386
15f1bff4
JL
6387@var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
6388l'emplacement normal en fonction des options données à @command{configure}.
6389@end deffn
bf5c74e7 6390
15f1bff4
JL
6391@deffn {Procédure Scheme} close-connection @var{server}
6392Ferme la connexion au @var{serveur}.
6393@end deffn
bf5c74e7 6394
15f1bff4
JL
6395@defvr {Variable Scheme} current-build-output-port
6396Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
6397journaux de construction et d'erreur envoyés par le démon devraient être
6398écrits.
6399@end defvr
bf5c74e7 6400
15f1bff4
JL
6401Les procédures qui font des RPC prennent toutes un objet serveur comme
6402premier argument.
bf5c74e7 6403
15f1bff4
JL
6404@deffn {Procédure Scheme} valid-path? @var{server} @var{path}
6405@cindex éléments du dépôt invalides
6406Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
6407@code{#f} sinon (un élément invalide peut exister sur le disque mais rester
6408invalide, par exemple parce que c'est le résultat d'une construction annulée
6409ou échouée).
bf5c74e7 6410
15f1bff4
JL
6411A @code{&store-protocol-error} condition is raised if @var{path} is not
6412prefixed by the store directory (@file{/gnu/store}).
6413@end deffn
bf5c74e7 6414
15f1bff4
JL
6415@deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
6416Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
6417chemin. @var{references} est la liste des chemins du dépôt référencés par
6418le chemin du dépôt qui en résulte.
6419@end deffn
bf5c74e7 6420
15f1bff4
JL
6421@deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
6422Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
6423chemins de dérivations) et retourne quand le travailleur a fini de les
6424construire. Renvoie @code{#t} en cas de réussite.
6425@end deffn
bf5c74e7 6426
15f1bff4
JL
6427Remarque que le module @code{(guix monads)} fournit une monade ainsi que des
6428version monadiques des procédures précédentes, avec le but de rendre plus
6429facile de travailler avec le code qui accède au dépôt (@pxref{La monade du dépôt}).
bf5c74e7 6430
15f1bff4
JL
6431@c FIXME
6432@i{Cette section est actuellement incomplète.}
bf5c74e7 6433
15f1bff4
JL
6434@node Dérivations
6435@section Dérivations
adfb167f 6436
15f1bff4
JL
6437@cindex dérivations
6438Les actions de construction à bas-niveau et l'environnement dans lequel
6439elles sont effectuées sont représentés par des @dfn{dérivations}. Une
6440dérivation contient cet ensemble d'informations :
bf5c74e7 6441
15f1bff4
JL
6442@itemize
6443@item
6444Les sorties de la dérivation — les dérivations produisent au moins un
6445fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
bf5c74e7 6446
15f1bff4
JL
6447@item
6448Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
6449fichiers dans le dépôt (correctifs, scripts de construction, etc).
bf5c74e7 6450
15f1bff4
JL
6451@item
6452Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
bf5c74e7 6453
15f1bff4
JL
6454@item
6455Le nom de fichier d'un script de construction dans le dépôt avec les
6456arguments à lui passer.
bf5c74e7 6457
15f1bff4
JL
6458@item
6459Une liste de variables d'environnement à définir.
bf5c74e7 6460
15f1bff4 6461@end itemize
bf5c74e7 6462
15f1bff4
JL
6463@cindex chemin de dérivation
6464Les dérivations permettent aux client du démon de communiquer des actions de
6465construction dans le dépôt. Elles existent sous deux formes : en tant que
6466représentation en mémoire, à la fois côté client et démon, et en tant que
6467fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
6468des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
6469passés à la procédure @code{build-derivations} pour effectuer les actions de
6470construction qu'ils prescrivent (@pxref{Le dépôt}).
bf5c74e7 6471
15f1bff4
JL
6472@cindex dérivations à sortie fixe
6473Des opérations comme le téléchargement de fichiers et la récupération de
6474sources gérés par un logiciel de contrôle de version pour lesquels le hash
6475du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
6476sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
6477dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
6478source téléchargé produit le même résultat quelque soit la méthode de
6479téléchargement utilisée.
bf5c74e7 6480
15f1bff4
JL
6481Le module @code{(guix derivations)} fournit une représentation des
6482dérivations comme des objets Scheme, avec des procédures pour créer et
6483manipuler des dérivations. La primitive de plus bas-niveau pour créer une
6484dérivation est la procédure @code{derivation} :
bf5c74e7 6485
15f1bff4
JL
6486@deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
6487 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6488[#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
6489[#:system (%current-system)] [#:references-graphs #f] @
6490[#:allowed-references #f] [#:disallowed-references #f] @
6491[#:leaked-env-vars #f] [#:local-build? #f] @
6492[#:substitutable? #t] [#:properties '()]
6493Construit une dérivation avec les arguments donnés et renvoie l'objet
6494@code{<derivation>} obtenu.
bf5c74e7 6495
15f1bff4
JL
6496Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
6497sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
6498à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
6499@var{recursive?} est vrai, alors la sortie fixe peut être un fichier
6500exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
6501contenant la sortie.
bf5c74e7 6502
15f1bff4
JL
6503Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
6504paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
6505des références de chaque chemin du dépôt est exporté dans l'environnement de
6506construction dans le fichier correspondant, dans un simple format texte.
bf5c74e7 6507
15f1bff4
JL
6508Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
6509d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
6510peut faire référence. De même, @var{disallowed-references}, si vrai, doit
6511être une liste de choses que la sortie ne doit @emph{pas} référencer.
bf5c74e7 6512
15f1bff4
JL
6513Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
6514chaînes de caractères qui désignent les variables d'environnements qui
6515peuvent « fuiter » de l'environnement du démon dans l'environnement de
6516construction. Ce n'est possible que pour les dérivations à sortie fixe —
6517c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
6518permettre à des variables comme @code{http_proxy} d'être passées aux
6519dérivations qui téléchargent des fichiers.
6520
6521Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
6522bon candidat pour le déchargement et devrait plutôt être construit
6523localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
6524dérivations où le coût du transfert de données est plus important que les
6525bénéfices.
bf5c74e7 6526
15f1bff4
JL
6527Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
6528sortie de la dérivation ne devraient pas être utilisés
6529(@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
6530qui utilisent des détails du jeu d'instruction du CPU hôte.
bf5c74e7 6531
15f1bff4
JL
6532@var{properties} doit être une liste d'association décrivant les «
6533propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
6534interprétée, dans la dérivation.
6535@end deffn
bf5c74e7 6536
15f1bff4
JL
6537@noindent
6538Voici un exemple avec un script shell comme constructeur, en supposant que
6539@var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
6540exécutable Bash dans le dépôt :
bf5c74e7 6541
15f1bff4
JL
6542@lisp
6543(use-modules (guix utils)
6544 (guix store)
6545 (guix derivations))
bf5c74e7 6546
15f1bff4
JL
6547(let ((builder ; ajoute le script Bash au dépôt
6548 (add-text-to-store store "my-builder.sh"
6549 "echo hello world > $out\n" '())))
6550 (derivation store "foo"
6551 bash `("-e" ,builder)
6552 #:inputs `((,bash) (,builder))
6553 #:env-vars '(("HOME" . "/homeless"))))
6554@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
6555@end lisp
bf5c74e7 6556
15f1bff4
JL
6557Comme on pourrait s'en douter, cette primitive est difficile à utiliser
6558directement. Une meilleure approche est d'écrire les scripts de
6559construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
6560le code de construction comme une « G-expression » et de la passer à
6561@code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
bf5c74e7 6562
15f1bff4
JL
6563Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
6564une dérivation donc le code de construction était écrit en Scheme se faisait
6565avec @code{build-expression->derivation}, documenté plus bas. Cette
6566procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
6567est meilleure.
bf5c74e7 6568
15f1bff4
JL
6569@deffn {Procédure Scheme} build-expression->derivation @var{store} @
6570 @var{name} @var{exp} @
6571[#:system (%current-system)] [#:inputs '()] @
6572[#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6573[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
6574[#:references-graphs #f] [#:allowed-references #f] @
6575[#:disallowed-references #f] @
6576[#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
6577Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
6578constructeur pour la dérivation @var{name}. @var{inputs} doit être une
6579liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
6580omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
6581modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
6582compilés et rendus disponibles dans le chemin de chargement pendant
6583l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
6584gnu-build-system))}.
bf5c74e7 6585
15f1bff4
JL
6586@var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
6587une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
6588une liste de paires de chaînes de caractères et de chemin de sortie
6589construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
6590liste de paires de chaînes de caractères spécifiant le nom et la valeur de
6591variables d'environnement visibles pour le constructeur. Le constructeur
6592termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
6593@var{exp} renvoie @code{#f}, la construction est considérée en échec.
bf5c74e7 6594
15f1bff4
JL
6595@var{exp} est construite avec @var{guile-for-build} (une dérivation).
6596Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
6597@code{%guile-for-build} est utilisée à la place.
bf5c74e7 6598
15f1bff4
JL
6599Voir la procédure @code{derivation} pour la signification de
6600@var{references-graph}, @var{allowed-references},
6601@var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
6602@end deffn
bf5c74e7 6603
15f1bff4
JL
6604@noindent
6605Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
6606un fichier :
bf5c74e7 6607
15f1bff4
JL
6608@lisp
6609(let ((builder '(let ((out (assoc-ref %outputs "out")))
6610 (mkdir out) ; create /gnu/store/@dots{}-goo
6611 (call-with-output-file (string-append out "/test")
6612 (lambda (p)
6613 (display '(hello guix) p))))))
6614 (build-expression->derivation store "goo" builder))
bf5c74e7 6615
15f1bff4
JL
6616@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
6617@end lisp
bf5c74e7 6618
bf5c74e7 6619
15f1bff4
JL
6620@node La monade du dépôt
6621@section La monade du dépôt
bf5c74e7 6622
15f1bff4 6623@cindex monad
bf5c74e7 6624
15f1bff4
JL
6625Les procédures qui travaillent sur le dépôt décrites dans les sections
6626précédentes prennent toutes une connexion ouverte au démon de construction
6627comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
6628elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
bf5c74e7 6629
15f1bff4
JL
6630Le premier point est embêtant : on doit se balader avec la connexion au
6631démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
6632des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
6633prennent. Le deuxième point est problématique : comme les opérations sur le
6634dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
6635être enchaînés correctement.
bf5c74e7 6636
15f1bff4
JL
6637@cindex valeurs monadiques
6638@cindex fonctions monadiques
6639C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
6640module fournit un cadre pour travailler avec des @dfn{monads}, en
6641particulier une monade très utile pour notre usage, la @dfn{monade du
6642dépôt}. Les monades sont des constructions qui permettent deux choses :
6643associer un « contexte » avec une valeur (dans notre cas, le contexte est le
6644dépôt) et construire une séquence de calculs (ici les calculs comprennent
6645des accès au dépôt). Les valeurs dans une monade — les valeurs qui
6646contiennent ce contexte supplémentaire — sont appelées des @dfn{valeurs
6647monadiques} ; les procédures qui renvoient ce genre de valeur sont appelées
6648des @dfn{procédures monadiques}.
bf5c74e7 6649
15f1bff4 6650Considérez cette procédure « normale » :
bf5c74e7
JL
6651
6652@example
15f1bff4
JL
6653(define (sh-symlink store)
6654 ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
6655 (let* ((drv (package-derivation store bash))
6656 (out (derivation->output-path drv))
6657 (sh (string-append out "/bin/bash")))
6658 (build-expression->derivation store "sh"
6659 `(symlink ,sh %output))))
bf5c74e7
JL
6660@end example
6661
15f1bff4
JL
6662En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
6663en une fonction monadique :
bf5c74e7
JL
6664
6665@example
15f1bff4
JL
6666(define (sh-symlink)
6667 ;; Pareil, mais renvoie une valeur monadique.
6668 (mlet %store-monad ((drv (package->derivation bash)))
6669 (gexp->derivation "sh"
6670 #~(symlink (string-append #$drv "/bin/bash")
6671 #$output))))
bf5c74e7
JL
6672@end example
6673
15f1bff4
JL
6674Il y a plusieurs choses à remarquer avec cette deuxième version : le
6675paramètre @code{store} est maintenant implicitement « enfilé » dans les
6676appels aux procédures monadiques @code{package->derivation} et
6677@code{gexp->derivation}, et la valeur monadique renvoyée par
6678@code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
6679simple @code{let}.
bf5c74e7 6680
15f1bff4
JL
6681Il se trouve que l'appel à @code{package->derivation} peut même être omis
6682puisqu'il aura lieu implicitement, comme nous le verrons plus tard
6683(@pxref{G-Expressions}) :
bf5c74e7
JL
6684
6685@example
15f1bff4
JL
6686(define (sh-symlink)
6687 (gexp->derivation "sh"
6688 #~(symlink (string-append #$bash "/bin/bash")
6689 #$output)))
bf5c74e7
JL
6690@end example
6691
15f1bff4
JL
6692@c See
6693@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
6694@c for the funny quote.
6695L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
6696anglais on pourrait dire « you exit a monad like you exit a building on
6697fire: by running »@footnote{NdT : « on sort d'une monade comme d'un immeuble
6698en flamme, en courant ». Le jeu de mot est perdu à la traduction : courir
6699et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
6700la monade et obtenir l'effet escompté, on doit utiliser
6701@code{run-with-store}.
bf5c74e7
JL
6702
6703@example
15f1bff4
JL
6704(run-with-store (open-connection) (sh-symlink))
6705@result{} /gnu/store/...-sh-symlink
bf5c74e7
JL
6706@end example
6707
15f1bff4
JL
6708Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
6709de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
6710procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
6711première est utilisée pour « lancer » une seule valeur monadique à travers
6712le dépôt :
adfb167f 6713
15f1bff4
JL
6714@example
6715scheme@@(guile-user)> ,run-in-store (package->derivation hello)
6716$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6717@end example
6718
6719La deuxième entre dans une console récursive, où toutes les valeurs de
6720retour sont automatiquement lancées à travers le dépôt :
adfb167f
JL
6721
6722@example
15f1bff4
JL
6723scheme@@(guile-user)> ,enter-store-monad
6724store-monad@@(guile-user) [1]> (package->derivation hello)
6725$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6726store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
6727$3 = "/gnu/store/@dots{}-foo"
6728store-monad@@(guile-user) [1]> ,q
6729scheme@@(guile-user)>
adfb167f
JL
6730@end example
6731
15f1bff4
JL
6732@noindent
6733Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
6734@code{store-monad}.
adfb167f 6735
15f1bff4
JL
6736Les formes syntaxiques principales pour utiliser des monades en général sont
6737disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
adfb167f 6738
15f1bff4
JL
6739@deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
6740Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
6741comme une @var{monad}.
6742@end deffn
bf5c74e7 6743
15f1bff4
JL
6744@deffn {Syntaxe Scheme} return @var{val}
6745Renvoie une valeur monadique qui encapsule @var{val}.
6746@end deffn
bf5c74e7 6747
15f1bff4
JL
6748@deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
6749@dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
6750procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
6751souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
6752voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
6753langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
6754cet exemple :
bf5c74e7 6755
15f1bff4
JL
6756@example
6757(run-with-state
6758 (with-monad %state-monad
6759 (>>= (return 1)
6760 (lambda (x) (return (+ 1 x)))
6761 (lambda (x) (return (* 2 x)))))
6762 'some-state)
bf5c74e7 6763
15f1bff4
JL
6764@result{} 4
6765@result{} some-state
6766@end example
6767@end deffn
bf5c74e7 6768
15f1bff4
JL
6769@deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
6770 @var{body} ...
6771@deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
6772 @var{body} ...
6773Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
6774@var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
6775on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
6776» dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
6777cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
6778(@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
6779comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
6780vers la droite. La dernière expression de @var{body} doit être une
6781expression monadique et son résultat deviendra le résultat de @code{mlet} ou
6782@code{mlet*} lorsque lancé dans la @var{monad}.
bf5c74e7 6783
15f1bff4
JL
6784@code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
6785(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
6786@end deffn
bf5c74e7 6787
15f1bff4
JL
6788@deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
6789Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
6790renvoie le résultat de la dernière expression. Chaque expression dans la
6791séquence doit être une expression monadique.
bf5c74e7 6792
15f1bff4
JL
6793Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
6794des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
6795@code{begin}, mais appliqué à des expressions monadiques.
6796@end deffn
bf5c74e7 6797
15f1bff4
JL
6798@deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
6799Lorsque la @var{condition} est vraie, évalue la séquence des expressions
6800monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
6801@var{condition} est fausse, renvoie @code{*unspecified*} dans la monade
6802actuelle. Chaque expression dans la séquence doit être une expression
6803monadique.
6804@end deffn
bf5c74e7 6805
15f1bff4
JL
6806@deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
6807Lorsque la @var{condition} est fausse, évalue la séquence des expressions
6808monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
6809@var{condition} est vraie, renvoie @code{*unspecified*} dans la monade
6810actuelle. Chaque expression dans la séquence doit être une expression
6811monadique.
6812@end deffn
bf5c74e7 6813
15f1bff4
JL
6814@cindex monade d'état
6815Le module @code{(guix monads)} fournit la @dfn{monade d'état} qui permet à
6816une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
6817procédures.
bf5c74e7 6818
15f1bff4
JL
6819@defvr {Variable Scheme} %state-monad
6820La monade d'état. les procédure dans la monade d'état peuvent accéder et
6821modifier l'état qui est enfilé.
bf5c74e7 6822
15f1bff4
JL
6823Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
6824valeur dans la monade d'état. Elle renvoie le carré de son argument, mais
6825incrémente aussi la valeur actuelle de l'état :
bf5c74e7 6826
15f1bff4
JL
6827@example
6828(define (square x)
6829 (mlet %state-monad ((count (current-state)))
6830 (mbegin %state-monad
6831 (set-current-state (+ 1 count))
6832 (return (* x x)))))
bf5c74e7 6833
15f1bff4
JL
6834(run-with-state (sequence %state-monad (map square (iota 3))) 0)
6835@result{} (0 1 4)
6836@result{} 3
6837@end example
bf5c74e7 6838
15f1bff4
JL
6839Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
6840d'état supplémentaire, qui est le nombre d'appels à @code{square}.
6841@end defvr
bf5c74e7 6842
15f1bff4
JL
6843@deffn {Procédure monadique} current-state
6844Renvoie l'état actuel dans une valeur monadique.
6845@end deffn
bf5c74e7 6846
15f1bff4
JL
6847@deffn {Procédure monadique} set-current-state @var{value}
6848Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
6849valeur monadique.
6850@end deffn
bf5c74e7 6851
15f1bff4
JL
6852@deffn {Procédure monadique} state-push @var{value}
6853Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
6854renvoie l'état précédent dans une valeur monadique.
6855@end deffn
bf5c74e7 6856
15f1bff4
JL
6857@deffn {Procédure monadique} state-pop
6858Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
6859monadique. L'état est supposé être une liste.
6860@end deffn
bf5c74e7 6861
15f1bff4
JL
6862@deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
6863Lance la valeur monadique @var{mval} avec @var{state} comme valeur
6864initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
6865résultat.
6866@end deffn
bf5c74e7 6867
15f1bff4
JL
6868L'interface principale avec la monade du dépôt, fournit par le module
6869@code{(guix store)}, est la suivante.
bf5c74e7 6870
15f1bff4
JL
6871@defvr {Variable Scheme} %store-monad
6872La monade du dépôt — un alias pour @var{%state-monad}.
bf5c74e7 6873
15f1bff4
JL
6874Les valeurs dans la monade du dépôt encapsulent des accès au dépôt. Lorsque
6875son effet est requis, une valeur de la monade du dépôt doit être « évaluée »
6876en la passant à la procédure @code{run-with-store} (voir plus bas).
6877@end defvr
bf5c74e7 6878
15f1bff4
JL
6879@deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
6880Lance @var{mval}, une valeur monadique dans la monade du dépôt, dans
6881@var{store}, une connexion ouvert au dépôt.
6882@end deffn
3cacfa9e 6883
15f1bff4
JL
6884@deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
6885Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
6886du fichier contenant @var{text}, une chaîne de caractères. @var{references}
6887est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
6888réfère ; c'est la liste vide par défaut.
6889@end deffn
bf5c74e7 6890
15f1bff4
JL
6891@deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
6892Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
6893dépôt du fichier contenant @var{data}, un vecteur d'octets.
6894@var{references} est une liste d'éléments du dépôt auxquels le fichier
6895binaire en résultat se réfère ; c'est la liste vide par défaut.
6896@end deffn
6897
6898@deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
6899 [#:recursive? #t] [#:select? (const #t)]
6900Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
6901comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
6902omis.
bf5c74e7 6903
15f1bff4
JL
6904Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
6905récursivement ; si @var{file} désigne un fichier simple et que
6906@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
6907sont préservés.
bf5c74e7 6908
15f1bff4
JL
6909Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
6910@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
6911absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
6912l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
bf5c74e7 6913
15f1bff4 6914L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
bf5c74e7 6915
15f1bff4
JL
6916@example
6917(run-with-store (open-connection)
6918 (mlet %store-monad ((a (interned-file "README"))
6919 (b (interned-file "README" "LEGU-MIN")))
6920 (return (list a b))))
bf5c74e7 6921
15f1bff4
JL
6922@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
6923@end example
bf5c74e7 6924
15f1bff4 6925@end deffn
bf5c74e7 6926
15f1bff4
JL
6927Le module @code{(guix packages)} exporte les procédures monadiques liées aux
6928paquets suivantes :
bf5c74e7 6929
15f1bff4
JL
6930@deffn {Procédure monadique} package-file @var{package} [@var{file}] @
6931 [#:system (%current-system)] [#:target #f] @
6932[#:output "out"]
6933Renvoie une valeur monadique qui contient le nom de fichier absolu de
6934@var{file} dans le répertoire @var{output} de @var{package}. Lorsque
6935@var{file} est omis, renvoie le nom du répertoire @var{output} de
6936@var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
6937cible pour la compilation croisée.
6938@end deffn
bf5c74e7 6939
15f1bff4
JL
6940@deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
6941@deffnx {Procédure monadique} package->cross-derivation @var{package} @
6942 @var{target} [@var{system}]
6943Version monadique de @code{package-derivation} et
6944@code{package-cross-derivation} (@pxref{Définition des paquets}).
6945@end deffn
bf5c74e7 6946
bf5c74e7 6947
15f1bff4
JL
6948@node G-Expressions
6949@section G-Expressions
bf5c74e7 6950
15f1bff4
JL
6951@cindex G-expression
6952@cindex quoting du code de construction
6953On a donc des « dérivations » qui représentent une séquence d'actions de
6954construction à effectuer pour produire un élément du dépôt
6955(@pxref{Dérivations}). Ces actions de construction sont effectuées
6956lorsqu'on demande au démon de construire effectivement les dérivations ;
6957elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
bf5c74e7 6958
15f1bff4
JL
6959@cindex strate de code
6960Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
6961construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
6962de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
6963par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
6964sur Hop. Oleg Kiselyov, qui a écrit des
6965@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
6966et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
6967genre de génération de code.} : le « code hôte » — le code qui défini les
6968paquets, parle au démon, etc — et le « code côté construction » — le code
6969qui effectue effectivement les actions de construction, comme créer des
6970répertoires, invoquer @code{make}, etc.
bf5c74e7 6971
15f1bff4
JL
6972Pour décrire une dérivation et ses actions de construction, on a typiquement
6973besoin d'intégrer le code de construction dans le code hôte. Ça revient à
6974manipuler le code de construction comme de la donnée, et l'homoiconicité de
6975Scheme — le code a une représentation directe en tant que donnée — est très
6976utile pour cela. Mais on a besoin de plus que le mécanisme de
6977@code{quasiquote} en Scheme pour construire des expressions de construction.
bf5c74e7 6978
15f1bff4
JL
6979Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
6980de S-expression adaptée aux expressions de construction. Les G-expression,
6981ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
6982@code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
6983@code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
6984@code{quasiquote}, @code{unquote} et @code{unquote-splicing} respectivement
6985(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
6986Manual}). Cependant il y a des différences majeures :
bf5c74e7 6987
15f1bff4
JL
6988@itemize
6989@item
6990Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
6991manipulées par d'autres processus.
bf5c74e7 6992
15f1bff4
JL
6993@item
6994Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
6995unquotée dans une gexp, le résultat est comme si le nom de fichier de son
6996résultat avait été introduit.
bf5c74e7 6997
15f1bff4
JL
6998@item
6999Les gexps transportent des informations sur les paquets ou les dérivations
7000auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
7001comme des entrées du processus de construction qui les utilise.
7002@end itemize
bf5c74e7 7003
15f1bff4
JL
7004@cindex abaissement, des objets haut-niveau dans les gepxs
7005Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
7006définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
7007haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
7008aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
7009utiles qui pourraient être insérées dans une gexp sont les « objets
7010simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
7011les références vers eux dans les dérivations et autres (voir
7012@code{local-file} et @code{plain-file} ci-dessous).
bf5c74e7 7013
15f1bff4 7014Pour illustrer cette idée, voici un exemple de gexp :
bf5c74e7
JL
7015
7016@example
15f1bff4
JL
7017(define build-exp
7018 #~(begin
7019 (mkdir #$output)
7020 (chdir #$output)
7021 (symlink (string-append #$coreutils "/bin/ls")
7022 "list-files")))
bf5c74e7
JL
7023@end example
7024
15f1bff4
JL
7025Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
7026dérivation qui construit une répertoire contenant exactement un lien
7027symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
bf5c74e7
JL
7028
7029@example
15f1bff4 7030(gexp->derivation "the-thing" build-exp)
bf5c74e7
JL
7031@end example
7032
15f1bff4
JL
7033Comme on pourrait s'y attendre, la chaîne
7034@code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
7035référence au paquet @var{coreutils} dans le code de construction final, et
7036@var{coreutils} est automatiquement devenu une entrée de la dérivation. De
7037même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
7038une chaîne de caractères contenant le nom du répertoire de la sortie de la
7039dérivation.
bf5c74e7 7040
15f1bff4
JL
7041@cindex compilation croisée
7042Dans le contexte d'une compilation croisée, il est utile de distinguer entre
7043des références à la construction @emph{native} d'un paquet — qui peut être
7044lancé par l'hôte — et des références à la construction croisée d'un paquet.
7045Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
7046construction native d'un paquet :
bf5c74e7
JL
7047
7048@example
15f1bff4
JL
7049(gexp->derivation "vi"
7050 #~(begin
7051 (mkdir #$output)
7052 (system* (string-append #+coreutils "/bin/ln")
7053 "-s"
7054 (string-append #$emacs "/bin/emacs")
7055 (string-append #$output "/bin/vi")))
7056 #:target "mips64el-linux-gnu")
bf5c74e7
JL
7057@end example
7058
15f1bff4
JL
7059@noindent
7060Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
7061utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
7062mais ensuite la construction croisée d'@var{emacs} est utilisée.
bf5c74e7 7063
15f1bff4
JL
7064@cindex modules importés, pour les gexps
7065@findex with-imported-modules
7066Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
7067voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
7068dans la gexp, donc ces modules devraient être importés dans «
7069l'environnement de construction ». La forme @code{with-imported-modules}
7070vous permet d'exprimer ça :
bf5c74e7
JL
7071
7072@example
15f1bff4
JL
7073(let ((build (with-imported-modules '((guix build utils))
7074 #~(begin
7075 (use-modules (guix build utils))
7076 (mkdir-p (string-append #$output "/bin"))))))
7077 (gexp->derivation "empty-dir"
7078 #~(begin
7079 #$build
7080 (display "success!\n")
7081 #t)))
bf5c74e7
JL
7082@end example
7083
15f1bff4
JL
7084@noindent
7085Dans cet exemple, le module @code{(guix build utils)} est automatiquement
7086récupéré dans l'environnement de construction isolé de notre gexp, pour que
7087@code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
bf5c74e7 7088
15f1bff4
JL
7089@cindex closure de module
7090@findex source-module-closure
7091Typiquement, vous voudriez que la @emph{closure} complète du module soit
7092importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
7093plutôt que seulement le module ; sinon, une tentative de chargement du
7094module échouera à cause des modules dépendants manquants. La procédure
7095@code{source-module-closure} calcule la closure d'un module en cherchant
7096dans ses en-têtes sources, ce qui est pratique dans ce cas :
bf5c74e7 7097
15f1bff4
JL
7098@example
7099(use-modules (guix modules)) ;pour 'source-module-closure'
bf5c74e7 7100
15f1bff4
JL
7101(with-imported-modules (source-module-closure
7102 '((guix build utils)
7103 (gnu build vm)))
7104 (gexp->derivation "something-with-vms"
7105 #~(begin
7106 (use-modules (guix build utils)
7107 (gnu build vm))
7108 @dots{})))
7109@end example
7110
7111@cindex extensions, des gexps
7112@findex with-extensions
7113Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
7114modules en Scheme pur, mais aussi des « extensions » comme des liaisons
7115Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
7116voulez utiliser le paquet @code{guile-json} du côté de la construction,
7117voici comme procéder :
bf5c74e7
JL
7118
7119@example
15f1bff4
JL
7120(use-modules (gnu packages guile)) ;pour 'guile-json'
7121
7122(with-extensions (list guile-json)
7123 (gexp->derivation "something-with-json"
7124 #~(begin
7125 (use-modules (json))
7126 @dots{})))
bf5c74e7
JL
7127@end example
7128
15f1bff4 7129La forme syntaxique pour construire des gexps est résumée ci-dessous.
bf5c74e7 7130
15f1bff4
JL
7131@deffn {Syntaxe Scheme} #~@var{exp}
7132@deffnx {Syntaxe Scheme} (gexp @var{exp})
7133Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
7134ou plusieurs de ces formes :
bf5c74e7 7135
15f1bff4
JL
7136@table @code
7137@item #$@var{obj}
7138@itemx (ungexp @var{obj})
7139Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
7140supportés, par exemple un paquet ou une dérivation, auquel cas la forme
7141@code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
7142@code{"/gnu/store/@dots{}-coreutils-8.22}.
bf5c74e7 7143
15f1bff4
JL
7144Si @var{boj} est une liste, elle est traversée et les références aux objets
7145supportés sont substitués de manière similaire.
bf5c74e7 7146
15f1bff4
JL
7147Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
7148sont ajoutées à celle de la gexp qui l'entoure.
524756d1 7149
15f1bff4 7150Si @var{obj} est un autre type d'objet, il est inséré tel quel.
524756d1 7151
15f1bff4
JL
7152@item #$@var{obj}:@var{output}
7153@itemx (ungexp @var{obj} @var{output})
7154Cette forme est similaire à la précédente, mais se réfère explicitement à la
7155sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
7156produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
524756d1 7157
15f1bff4
JL
7158@item #+@var{obj}
7159@itemx #+@var{obj}:output
7160@itemx (ungexp-native @var{obj})
7161@itemx (ungexp-native @var{obj} @var{output})
7162Comme @code{ungexp}, mais produit une référence à la construction
7163@emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
7164croisée.
524756d1 7165
15f1bff4
JL
7166@item #$output[:@var{output}]
7167@itemx (ungexp output [@var{output}])
7168Insère une référence à la sortie @var{output} de la dérivation, ou à la
7169sortie principale lorsque @var{output} est omis.
bf5c74e7 7170
15f1bff4 7171Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
bf5c74e7 7172
15f1bff4
JL
7173@item #$@@@var{lst}
7174@itemx (ungexp-splicing @var{lst})
7175Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
7176liste qui la contient.
bf5c74e7 7177
15f1bff4
JL
7178@item #+@@@var{lst}
7179@itemx (ungexp-native-splicing @var{lst})
7180Comme au dessus, mais se réfère à la construction native des objets listés
7181dans @var{lst}.
bf5c74e7 7182
bf5c74e7
JL
7183@end table
7184
15f1bff4
JL
7185Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
7186l'exécution du type @code{gexp?} (voir plus bas).
7187@end deffn
bf5c74e7 7188
15f1bff4
JL
7189@deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
7190Marque les gexps définies dans @var{body}@dots{} comme requérant
7191@var{modules} dans leur environnement d'exécution.
bf5c74e7 7192
15f1bff4
JL
7193Chaque élément dans @var{module} peut être le nom d'un module, comme
7194@code{(guix build utils)} ou le nom d'un module suivi d'une flèche, suivie
7195d'un objet simili-fichier :
bf5c74e7
JL
7196
7197@example
15f1bff4
JL
7198`((guix build utils)
7199 (guix gcrypt)
7200 ((guix config) => ,(scheme-file "config.scm"
7201 #~(define-module @dots{}))))
bf5c74e7
JL
7202@end example
7203
15f1bff4
JL
7204@noindent
7205Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
7206chemin de recherche, et le dernier est créé à partir d'un objet
7207simili-fichier.
bf5c74e7 7208
15f1bff4
JL
7209Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
7210directement définies dans @var{body}@dots{}, mais pas sur celles définies
7211dans des procédures appelées par @var{body}@dots{}.
7212@end deffn
bf5c74e7 7213
15f1bff4
JL
7214@deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
7215Marque les gexps définies dans @var{body}@dots{} comme requérant
7216@var{extensions} dans leur environnement de construction et d'exécution.
7217@var{extensions} est typiquement une liste d'objets paquets comme définis
7218dans le module @code{(gnu packages guile)}.
bf5c74e7 7219
15f1bff4
JL
7220Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
7221chemin de chargement lors de la compilation des modules importés dans
7222@var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
7223gexp renvoyée par @var{body}@dots{}.
7224@end deffn
bf5c74e7 7225
15f1bff4
JL
7226@deffn {Procédure Scheme} gexp? @var{obj}
7227Renvoie @code{#t} si @var{obj} est une G-expression.
7228@end deffn
bf5c74e7 7229
15f1bff4
JL
7230Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
7231que code pour construire une dérivation, soit en tant que fichier normal
7232dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
7233cela (@pxref{La monade du dépôt}, pour plus d'information sur les monads).
bf5c74e7 7234
15f1bff4
JL
7235@deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
7236 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
7237[#:hash #f] [#:hash-algo #f] @
7238[#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7239[#:module-path @var{%load-path}] @
7240[#:effective-version "2.2"] @
7241[#:references-graphs #f] [#:allowed-references #f] @
7242[#:disallowed-references #f] @ [#:leaked-env-vars #f] @
7243[#:script-name (string-append @var{name} "-builder")] @
7244[#:deprecation-warnings #f] @
7245[#:local-build? #f] [#:substitutable? #t] @
7246[#:properties '()] [#:guile-for-build #f]
7247Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
7248@var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
7249stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
7250vraie, elle est utilisée comme triplet de cible de compilation croisée pour
7251les paquets référencés par @var{exp}.
bf5c74e7 7252
15f1bff4
JL
7253@var{modules} est devenu obsolète en faveur de
7254@code{with-imported-modules}. Sa signification est de rendre @var{modules}
7255disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
7256une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
7257pour les copier dans le dépôt, les compiler et les rendre disponibles dans
7258le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
7259@code{((guix build utils) (guix build gnu-build-system))}.
bf5c74e7 7260
15f1bff4
JL
7261@var{effective-version} détermine la chaîne à utiliser lors d'ajout
7262d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
7263recherche — p.@: ex.@: @code{"2.2"}.
524756d1 7264
15f1bff4
JL
7265@var{graft?} détermine si les paquets référencés par @var{exp} devraient
7266être greffés si possible.
bf5c74e7 7267
15f1bff4
JL
7268Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
7269tuples de la forme suivante :
bf5c74e7
JL
7270
7271@example
15f1bff4
JL
7272(@var{file-name} @var{package})
7273(@var{file-name} @var{package} @var{output})
7274(@var{file-name} @var{derivation})
7275(@var{file-name} @var{derivation} @var{output})
7276(@var{file-name} @var{store-item})
bf5c74e7
JL
7277@end example
7278
15f1bff4
JL
7279La partie droite des éléments de @var{references-graphs} est automatiquement
7280transformée en une entrée du processus de construction @var{exp}. Dans
7281l'environnement de construction, chaque @var{file-name} contient le graphe
7282des références de l'élément correspondant, dans un format texte simple.
bf5c74e7 7283
15f1bff4
JL
7284@var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
7285sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
7286dépôt auxquels le résultat a le droit de faire référence. Toute référence à
7287un autre élément du dépôt conduira à une erreur à la construction. Comme
7288pour @var{disallowed-references}, qui peut lister des éléments qui ne
7289doivent pas être référencés par les sorties.
bf5c74e7 7290
15f1bff4
JL
7291@var{deprecation-warnings} détermine s'il faut afficher les avertissement
7292d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
7293@code{t} ou @code{'detailed}.
bf5c74e7 7294
15f1bff4
JL
7295Les autres arguments sont les mêmes que pour @code{derivation}
7296(@pxref{Dérivations}).
7297@end deffn
7298
7299@cindex objets simili-fichiers
7300Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
7301@code{program-file} et @code{scheme-file} ci-dessous renvoient des
7302@dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
7303une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
7304cette G-expression :
bf5c74e7
JL
7305
7306@example
15f1bff4
JL
7307#~(system* #$(file-append glibc "/sbin/nscd") "-f"
7308 #$(local-file "/tmp/my-nscd.conf"))
bf5c74e7
JL
7309@end example
7310
15f1bff4
JL
7311Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
7312dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
7313G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
7314modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
7315fait la G-expression. @code{plain-file} peut être utilisé de la même
7316manière ; elle est seulement différente par le fait que le contenu du
7317fichier est passé directement par une chaîne de caractères.
bf5c74e7 7318
15f1bff4
JL
7319@deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
7320 [#:recursive? #f] [#:select? (const #t)]
7321Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
7322; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
7323fichier relatif, il est récupéré à partir de la position du fichier source
7324dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
7325@var{name} — par défaut le nom de base de @var{file}.
bf5c74e7 7326
15f1bff4
JL
7327Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
7328récursivement ; si @var{file} désigne un fichier simple et que
7329@var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
7330sont préservés.
bf5c74e7 7331
15f1bff4
JL
7332Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
7333@var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
7334absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
7335l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
bf5c74e7 7336
15f1bff4
JL
7337C'est la version déclarative de la procédure monadique @code{interned-file}
7338(@pxref{La monade du dépôt, @code{interned-file}}).
7339@end deffn
bf5c74e7 7340
15f1bff4
JL
7341@deffn {Procédure Scheme} plain-file @var{name} @var{content}
7342Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
7343contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
7344ajouter un dépôt.
adfb167f 7345
15f1bff4
JL
7346C'est la version déclarative de @code{text-file}.
7347@end deffn
bf5c74e7 7348
15f1bff4
JL
7349@deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
7350 [#:options '(#:local-build? #t)]
7351Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
7352un répertoire calculé par @var{gexp}. @var{options} est une liste
7353d'arguments supplémentaires à passer à @code{gexp->derivation}.
bf5c74e7 7354
15f1bff4
JL
7355C'est la version déclarative de @code{gexp->derivation}.
7356@end deffn
bf5c74e7 7357
15f1bff4
JL
7358@deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
7359 [#:guile (default-guile)] [#:module-path %load-path]
7360Renvoie un script exécutable @var{name} qui lance @var{exp} avec
7361@var{guile}, avec les modules importés de @var{exp} dans son chemin de
7362recherche. Cherche les modules de @var{exp} dans @var{module-path}.
524756d1 7363
15f1bff4
JL
7364L'exemple ci-dessous construit un script qui invoque simplement la commande
7365@command{ls} :
bf5c74e7 7366
15f1bff4
JL
7367@example
7368(use-modules (guix gexp) (gnu packages base))
7369
7370(gexp->script "list-files"
7371 #~(execl #$(file-append coreutils "/bin/ls")
7372 "ls"))
7373@end example
7374
7375Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monade du dépôt,
7376@code{run-with-store}}), on obtient une dérivation qui produit une fichier
7377exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
bf5c74e7
JL
7378
7379@example
15f1bff4
JL
7380#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
7381!#
7382(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
bf5c74e7 7383@end example
15f1bff4 7384@end deffn
bf5c74e7 7385
15f1bff4
JL
7386@deffn {Procédure Scheme} program-file @var{name} @var{exp} @
7387 [#:guile #f] [#:module-path %load-path]
7388Renvoie un objet représentant un élément du dépôt @var{name} qui lance
7389@var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
7390script. Les modules importés par @var{gexp} sont recherchés dans
7391@var{module-path}.
bf5c74e7 7392
15f1bff4
JL
7393C'est la version déclarative de @code{gexp->script}.
7394@end deffn
bf5c74e7 7395
15f1bff4
JL
7396@deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
7397 [#:set-load-path? #t] [#:module-path %load-path] @
7398[#:splice? #f] @
7399[#:guile (default-guile)]
7400Renvoie une dérivation qui construit un fichier @var{name} contenant
7401@var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
7402une liste d'expressions qui seront splicée dans le fichier qui en résulte.
bf5c74e7 7403
15f1bff4
JL
7404Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
7405résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
7406pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
7407sont trouvés dans @var{module-path}.
bf5c74e7 7408
15f1bff4
JL
7409Le fichier qui en résulte retient les références à toutes les dépendances de
7410@var{exp} ou un sous-ensemble.
7411@end deffn
bf5c74e7 7412
15f1bff4
JL
7413@deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
7414Renvoie un objet représentant le fichier Scheme @var{name} qui contient
7415@var{exp}.
bf5c74e7 7416
15f1bff4
JL
7417C'est la version déclarative de @code{gexp->file}.
7418@end deffn
bf5c74e7 7419
15f1bff4
JL
7420@deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
7421Renvoie une valeur monadique qui construit un ficher texte contenant
7422@var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
7423objet de n'importe quel type qui peut être utilisé dans une gexp : des
7424paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
7425dépôt qui en résulte en retient toutes les références.
7426
7427Cette variante devrait être préférée à @code{text-file} lorsque vous
7428souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
7429typiquement lorsque vous construisez un fichier de configuration qui
7430contient des noms de fichiers du dépôt, comme ceci :
bf5c74e7
JL
7431
7432@example
15f1bff4
JL
7433(define (profile.sh)
7434 ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
7435 ;; la variable d'environnement « PATH ».
7436 (text-file* "profile.sh"
7437 "export PATH=" coreutils "/bin:"
7438 grep "/bin:" sed "/bin\n"))
bf5c74e7
JL
7439@end example
7440
15f1bff4
JL
7441Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
7442résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
7443empêche d'être glanés tant que le script est accessible.
7444@end deffn
bf5c74e7 7445
15f1bff4
JL
7446@deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
7447Renvoie un objet représentant le fichier du dépôt @var{name} contenant
7448@var{text}. @var{text} est une séquence de chaînes de caractères et de
7449fichiers simili-objets, comme dans :
bf5c74e7
JL
7450
7451@example
15f1bff4
JL
7452(mixed-text-file "profile"
7453 "export PATH=" coreutils "/bin:" grep "/bin")
bf5c74e7
JL
7454@end example
7455
15f1bff4
JL
7456C'est la version déclarative de @code{text-file*}.
7457@end deffn
bf5c74e7 7458
15f1bff4
JL
7459@deffn {Procédure Scheme} file-union @var{name} @var{files}
7460Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
7461tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
7462une paire où le premier élément est le nom de fichier à utiliser dans le
7463nouveau répertoire et le second élément est une gexp dénotant le fichier
7464cible. Voici un exemple :
bf5c74e7
JL
7465
7466@example
15f1bff4
JL
7467(file-union "etc"
7468 `(("hosts" ,(plain-file "hosts"
7469 "127.0.0.1 localhost"))
7470 ("bashrc" ,(plain-file "bashrc"
7471 "alias ls='ls --color=auto'"))))
bf5c74e7
JL
7472@end example
7473
15f1bff4
JL
7474Cela crée un répertoire @code{etc} contenant ces deux fichiers.
7475@end deffn
7476
7477@deffn {Procédure Scheme} directory-union @var{name} @var{things}
7478Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
7479une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
7480:
bf5c74e7
JL
7481
7482@example
15f1bff4 7483(directory-union "guile+emacs" (list guile emacs))
bf5c74e7
JL
7484@end example
7485
15f1bff4
JL
7486crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
7487@end deffn
bf5c74e7 7488
15f1bff4
JL
7489@deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
7490Renvoie un objet simili-fichier qui correspond à la concaténation de
7491@var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
7492@var{suffix} est une chaîne de caractères.
7493
7494Par exemple, considérez cette gexp :
bf5c74e7
JL
7495
7496@example
15f1bff4
JL
7497(gexp->script "run-uname"
7498 #~(system* #$(file-append coreutils
7499 "/bin/uname")))
bf5c74e7
JL
7500@end example
7501
15f1bff4 7502On peut obtenir le même effet avec :
bf5c74e7
JL
7503
7504@example
15f1bff4
JL
7505(gexp->script "run-uname"
7506 #~(system* (string-append #$coreutils
7507 "/bin/uname")))
bf5c74e7
JL
7508@end example
7509
15f1bff4
JL
7510Il y a une différence cependant : dans le cas @code{file-append}, le script
7511qui en résulte contient le nom de fichier absolu comme une chaîne de
7512caractère alors que dans le deuxième cas, le script contient une expression
7513@code{(string-append @dots{})} pour construire le nom de fichier @emph{à
7514l'exécution}.
7515@end deffn
bf5c74e7 7516
bf5c74e7 7517
15f1bff4
JL
7518Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
7519contiennent des outils de construction. Pour savoir facilement qu'ils sont
7520à utiliser dans la strate de construction, ces modules sont gardés dans
7521l'espace de nom @code{(guix build @dots{})}.
bf5c74e7 7522
15f1bff4
JL
7523@cindex abaissement, des objets haut-niveau dans les gepxs
7524En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
7525compilateur, soit en des dérivations, soit en des objets du dépôt. Par
7526exemple, abaisser un paquet crée une dérivation, et abaisser un
7527@code{plain-file} crée un élément du dépôt. Cela est effectué par la
7528procédure monadique @code{lower-object}.
bf5c74e7 7529
15f1bff4
JL
7530@deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
7531 [#:target #f]
7532Renvoie la dérivation ou l'élément du dépôt comme une valeur de
7533@var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
7534compilant de manière croisée pour @var{target} si @var{target} est vrai.
7535@var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
7536@code{<package>}.
7537@end deffn
bf5c74e7 7538
15f1bff4
JL
7539@node Invoquer guix repl
7540@section Invoquer @command{guix repl}
7541
7542@cindex REPL, read-eval-print loop
7543La commande @command{guix repl} démarre un @dfn{boucle
7544lecture-évaluation-affichage} Guile pour la programmation interactive
7545(@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
7546Comparé au lancement de la commande @command{guile}, @command{guix repl}
7547garanti que tous les modules Guix et toutes ses dépendances sont disponibles
7548dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
bf5c74e7
JL
7549
7550@example
15f1bff4
JL
7551$ guix repl
7552scheme@@(guile-user)> ,use (gnu packages base)
7553scheme@@(guile-user)> coreutils
7554$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
bf5c74e7
JL
7555@end example
7556
15f1bff4
JL
7557@cindex inférieurs
7558En plus, @command{guix repl} implémente un protocole REPL simple lisible par
7559une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
7560interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
7561une version potentiellement différente de Guix.
bf5c74e7 7562
15f1bff4 7563Les options disponibles sont les suivante :
bf5c74e7
JL
7564
7565@table @code
15f1bff4
JL
7566@item --type=@var{type}
7567@itemx -t @var{type}
7568Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
7569
7570@table @code
7571@item guile
7572C'est la valeur par défaut. Elle démarre un REPL Guile standard
7573fonctionnel.
7574@item machine
7575Démarre un REPL qui utilise le protocole lisible par machine. C'est le
7576protocole que parle le module @code{(guix inferior)}.
bf5c74e7
JL
7577@end table
7578
15f1bff4
JL
7579@item --listen=@var{extrémité}
7580Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
7581sortie standard. Lorsque cette option est passée, il écoutera plutôt les
7582connexions sur @var{endpoint}. Voici un exemple d'options valides :
bf5c74e7 7583
15f1bff4
JL
7584@table @code
7585@item --listen=tcp:37146
7586Accepte les connexions sur localhost, sur le port 31.
bf5c74e7 7587
15f1bff4
JL
7588@item --listen=unix:/tmp/socket
7589Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
7590@end table
7591@end table
bf5c74e7 7592
15f1bff4
JL
7593@c *********************************************************************
7594@node Utilitaires
7595@chapter Utilitaires
bf5c74e7 7596
15f1bff4
JL
7597cette section décrit les utilitaires en ligne de commande de Guix. certains
7598sont surtout faits pour les développeurs qui écrivent de nouvelles
7599définitions de paquets tandis que d'autres sont plus utiles pour une
7600utilisation générale. Ils complètent l'interface de programmation Scheme de
7601Guix d'une manière pratique.
bf5c74e7 7602
15f1bff4
JL
7603@menu
7604* Invoquer guix build:: Construire des paquets depuis la ligne de
7605 commande.
7606* Invoquer guix edit:: Modifier les définitions de paquets.
7607* Invoquer guix download:: Télécharger un fichier et afficher son hash.
7608* Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
7609* Invoquer guix import:: Importer des définitions de paquets.
7610* Invoquer guix refresh:: Mettre à jour les définitions de paquets.
7611* Invoquer guix lint:: Trouver des erreurs dans les définitions de
7612 paquets.
7613* Invoquer guix size:: Profiler l'utilisation du disque.
7614* Invoquer guix graph:: Visualiser le graphe des paquets.
7615* Invoquer guix publish:: Partager des substituts.
7616* Invoquer guix challenge:: Défier les serveurs de substituts.
7617* Invoquer guix copy:: Copier vers et depuis un dépôt distant.
7618* Invoquer guix container:: Isolation de processus.
7619* Invoquer guix weather:: Mesurer la disponibilité des substituts.
7620* Invoquer guix processes:: Lister les processus clients.
7621@end menu
bf5c74e7 7622
15f1bff4
JL
7623@node Invoquer guix build
7624@section Invoquer @command{guix build}
bf5c74e7 7625
15f1bff4
JL
7626@cindex construction de paquets
7627@cindex @command{guix build}
7628La commande @command{guix build} construit des paquets ou des dérivations et
7629leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
7630qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
7631commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
7632elle est surtout utile pour les développeurs de la distribution.
7633
7634La syntaxe générale est :
bf5c74e7
JL
7635
7636@example
15f1bff4 7637guix build @var{options} @var{package-or-derivation}@dots{}
bf5c74e7
JL
7638@end example
7639
15f1bff4
JL
7640Par exemple, la commande suivante construit la dernière version d'Emacs et
7641de Guile, affiche leur journaux de construction et enfin affiche les
7642répertoires des résultats :
bf5c74e7 7643
15f1bff4
JL
7644@example
7645guix build emacs guile
7646@end example
bf5c74e7 7647
15f1bff4 7648De même, la commande suivante construit tous les paquets disponibles :
bf5c74e7 7649
15f1bff4
JL
7650@example
7651guix build --quiet --keep-going \
7652 `guix package -A | cut -f1,2 --output-delimiter=@@`
7653@end example
bf5c74e7 7654
15f1bff4
JL
7655@var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
7656distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
7657soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
7658Dans le premier cas, la commande cherchera un paquet avec le nom
7659correspondant (et éventuellement la version) dans les modules de la
7660distribution GNU (@pxref{Modules de paquets}).
3cacfa9e 7661
15f1bff4
JL
7662Autrement, l'option @code{--expression} peut être utilisée pour spécifier
7663une expression Scheme qui s'évalue en un paquet ; c'est utile pour
7664différencier des paquets avec le même nom ou des variantes de paquets.
bf5c74e7 7665
15f1bff4
JL
7666Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
7667disponibles sont décrites dans les sous-sections ci-dessous.
524756d1 7668
15f1bff4
JL
7669@menu
7670* Options de construction communes:: Options de construction pour la
7671 plupart des commandes.
7672* Options de transformation de paquets:: Créer des variantes de paquets.
7673* Options de construction supplémentaires:: Options spécifiques à «
7674 guix build ».
7675* Débogage des échecs de construction:: La vie d'un empaqueteur.
7676@end menu
bf5c74e7 7677
15f1bff4
JL
7678@node Options de construction communes
7679@subsection Options de construction communes
bf5c74e7 7680
15f1bff4
JL
7681Un certain nombre d'options qui contrôlent le processus de construction sont
7682communes avec @command{guix build} et les autres commandes qui peuvent
7683générer des constructions, comme @command{guix package} ou @command{guix
7684archive}. Voici ces options :
bf5c74e7 7685
15f1bff4 7686@table @code
bf5c74e7 7687
15f1bff4
JL
7688@item --load-path=@var{répertoire}
7689@itemx -L @var{répertoire}
7690Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
7691(@pxref{Modules de paquets}).
bf5c74e7 7692
15f1bff4
JL
7693Cela permet à des utilisateurs de définir leur propres paquets et les rendre
7694disponibles aux outils en ligne de commande.
bf5c74e7 7695
15f1bff4
JL
7696@item --keep-failed
7697@itemx -K
7698Garde l'arborescence de construction des constructions en échec. Ainsi, si
7699une construction échoue, son arborescence de construction est préservée dans
7700@file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
7701de construction. Cela est utile pour déboguer des échecs de construction.
7702@xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
7703des problèmes de construction.
bf5c74e7 7704
15f1bff4
JL
7705Cette option n'a pas d'effet lors de la connexion à un démon distant avec
7706l'URI @code{guix://} (@pxref{Le dépôt, la variable
7707@code{GUIX_DAEMON_SOCKET}}).
bf5c74e7 7708
15f1bff4
JL
7709@item --keep-going
7710@itemx -k
7711Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
7712toutes les constructions ont soit réussies, soit échouées.
bf5c74e7 7713
15f1bff4
JL
7714Le comportement par défaut est de s'arrêter dès qu'une des dérivations
7715spécifiées échoue.
bf5c74e7 7716
15f1bff4
JL
7717@item --dry-run
7718@itemx -n
7719Ne pas construire les dérivations.
bf5c74e7 7720
15f1bff4
JL
7721@anchor{option de repli}
7722@item --fallback
7723Lorsque la substitution d'un binaire pré-compilé échoue, construit les
7724paquets localement à la place (@pxref{Échec de substitution}).
bf5c74e7 7725
15f1bff4
JL
7726@item --substitute-urls=@var{urls}
7727@anchor{client-substitute-urls}
7728Considère @var{urls} comme une liste d'URL de sources de substituts séparés
7729par des espaces, et remplace la liste par défaut d'URL de
7730@command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
7731URLs}).
bf5c74e7 7732
15f1bff4
JL
7733Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
7734tant qu'ils sont signés par une clef autorisée par l'administrateur système
7735(@pxref{Substituts}).
bf5c74e7 7736
15f1bff4
JL
7737Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
7738substitution.
bf5c74e7 7739
15f1bff4
JL
7740@item --no-substitutes
7741Ne pas utiliser de substitut pour les résultats de la construction.
7742C'est-à-dire, toujours construire localement plutôt que de permettre le
7743téléchargement de binaires pré-construits (@pxref{Substituts}).
bf5c74e7 7744
15f1bff4
JL
7745@item --no-grafts
7746Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
7747jour des paquets disponibles comme des greffes ne sont pas appliquées.
7748@xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
bf5c74e7 7749
15f1bff4
JL
7750@item --rounds=@var{n}
7751Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
7752les constructions consécutives ne sont pas identiques bit-à-bit.
bf5c74e7 7753
15f1bff4
JL
7754Cela est une manière utile pour détecter des processus de construction non
7755déterministes. Les processus de construction non déterministes sont
7756problématiques car ils rendent pratiquement impossible la
7757@emph{vérification} par les utilisateurs de l'authenticité de binaires
7758tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
bf5c74e7 7759
15f1bff4
JL
7760Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
7761devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
7762résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
7763puis en reconstruisant, et enfin en comparant les deux résultats.
bf5c74e7 7764
15f1bff4
JL
7765@item --no-build-hook
7766N'essaye pas de décharger les constructions via le « crochet de construction
7767» du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
7768construit localement plutôt que de décharger les constructions à une machine
7769distante.
bf5c74e7 7770
15f1bff4
JL
7771@item --max-silent-time=@var{secondes}
7772Lorsque le processus de construction ou de substitution restent silencieux
7773pendant plus de @var{secondes}, le terminer et rapporter une erreur de
7774construction.
bf5c74e7 7775
15f1bff4 7776Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
bf5c74e7 7777
15f1bff4
JL
7778@item --timeout=@var{secondes}
7779De même, lorsque le processus de construction ou de substitution dure plus
7780de @var{secondes}, le terminer et rapporter une erreur de construction.
bf5c74e7 7781
15f1bff4 7782Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
bf5c74e7 7783
15f1bff4
JL
7784@c Note: This option is actually not part of %standard-build-options but
7785@c most programs honor it.
7786@cindex verbosity, of the command-line tools
7787@cindex build logs, verbosity
7788@item -v @var{level}
7789@itemx --verbosity=@var{level}
7790Use the given verbosity @var{level}, an integer. Choosing 0 means that no
7791output is produced, 1 is for quiet output, and 2 shows all the build log
7792output on standard error.
bf5c74e7 7793
15f1bff4
JL
7794@item --cores=@var{n}
7795@itemx -c @var{n}
7796Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
7797valeur spéciale @code{0} signifie autant de cœurs que possible.
bf5c74e7 7798
15f1bff4
JL
7799@item --max-jobs=@var{n}
7800@itemx -M @var{n}
7801Permet 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
7802l'option équivalente pour @command{guix-daemon}.
7803
7804@item --debug=@var{level}
7805Produce debugging output coming from the build daemon. @var{level} must be
7806an integer between 0 and 5; higher means more verbose output. Setting a
7807level of 4 or more may be helpful when debugging setup issues with the build
7808daemon.
bf5c74e7
JL
7809
7810@end table
7811
15f1bff4
JL
7812Sous le capot, @command{guix build} est surtout un interface à la procédure
7813@code{package-derivation} du module @code{(guix packages)}, et à la
7814procédure @code{build-derivations} du module @code{(guix derivations)}.
7815
7816En plus des options passées explicitement par la ligne de commande,
7817@command{guix build} et les autres commande @command{guix} qui peuvent
7818effectuer des construction honorent la variable d'environnement
7819@code{GUIX_BUILD_OPTIONS}.
7820
7821@defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
7822Les utilisateurs peuvent définir cette variable à une liste d'options de la
7823ligne de commande qui seront automatiquement utilisées par @command{guix
7824build} et les autres commandes @command{guix} qui peuvent effectuer des
7825constructions, comme dans l'exemple suivant :
bf5c74e7
JL
7826
7827@example
15f1bff4 7828$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
bf5c74e7
JL
7829@end example
7830
15f1bff4
JL
7831Ces options sont analysées indépendamment, et le résultat est ajouté aux
7832options de la ligne de commande analysées.
7833@end defvr
bf5c74e7 7834
15f1bff4
JL
7835
7836@node Options de transformation de paquets
7837@subsection Options de transformation de paquets
7838
7839@cindex variantes de paquets
7840Un autre ensemble d'options de la ligne de commande supportés par
7841@command{guix build} et aussi @command{guix package} sont les @dfn{options
7842de transformation de paquets}. Ce sont des options qui rendent possible la
7843définition de @dfn{variantes de paquets} — par exemple, des paquets
7844construit à partir de sources différentes. C'est une manière simple de
7845créer des paquets personnalisés à la volée sans avoir à taper les
7846définitions de variantes de paquets (@pxref{Définition des paquets}).
bf5c74e7
JL
7847
7848@table @code
7849
15f1bff4
JL
7850@item --with-source=@var{source}
7851@itemx --with-source=@var{paquet}=@var{source}
7852@itemx --with-source=@var{paquet}@@@var{version}=@var{source}
7853Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
7854son numéro de version. @var{source} doit être un nom de fichier ou une URL,
7855comme pour @command{guix download} (@pxref{Invoquer guix download}).
bf5c74e7 7856
15f1bff4
JL
7857Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
7858spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
7859@code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
bf5c74e7 7860
15f1bff4
JL
7861De même, lorsque @var{version} est omis, la chaîne de version est inférée à
7862partir de @var{source} ; dans l'exemple précédent, il s'agit de
7863@code{2.0.10}.
bf5c74e7 7864
15f1bff4
JL
7865Cette option permet aux utilisateurs d'essayer des version des paquets
7866différentes de celles fournies par la distribution. L'exemple ci-dessous
7867télécharge @file{ed-1.7.tar.g} depuis un miroir GNU et l'utilise comme
7868source pour le paquet @code{ed} :
bf5c74e7 7869
15f1bff4
JL
7870@example
7871guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
7872@end example
bf5c74e7 7873
15f1bff4
JL
7874En tant que développeur, @code{--with-source} permet de tester facilement
7875des version bêta :
bf5c74e7
JL
7876
7877@example
15f1bff4 7878guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
bf5c74e7
JL
7879@end example
7880
15f1bff4
JL
7881@dots{} ou pour construire un dépôt de gestion de version dans un
7882environnement vierge :
bf5c74e7 7883
15f1bff4
JL
7884@example
7885$ git clone git://git.sv.gnu.org/guix.git
7886$ guix build guix --with-source=guix@@1.0=./guix
7887@end example
bf5c74e7 7888
15f1bff4
JL
7889@item --with-input=@var{paquet}=@var{remplaçant}
7890Remplace la dépendance sur @var{paquet} par une dépendance à
7891@var{remplaçant}. @var{paquet} doit être un nom de paquet et
7892@var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
7893@code{guile@@1.8}.
bf5c74e7 7894
15f1bff4
JL
7895Par exemple, la commande suivante construit Guix, mais remplace sa
7896dépendance à la version stable actuelle de Guile par une dépendance à une
7897ancienne version de Guile, @code{guile@@2.0} :
bf5c74e7 7898
15f1bff4
JL
7899@example
7900guix build --with-input=guile=guile@@2.0 guix
7901@end example
adfb167f 7902
15f1bff4
JL
7903C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
7904@code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
7905@code{guile}) sont reconstruits avec @code{guile@@2.0}.
adfb167f 7906
15f1bff4
JL
7907Cette option est implémentée avec la procédure Scheme
7908@code{package-input-rewriting} (@pxref{Définition des paquets,
7909@code{package-input-rewriting}}).
7910
7911@item --with-graft=@var{paquet}=@var{remplaçant}
7912Cette option est similaire à @code{--with-input} mais avec une différence
7913importante : plutôt que de reconstruire la chaîne de dépendance complète,
7914@var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
7915référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
7916d'information sur les greffes.
7917
7918Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
7919Wget et toutes ses dépendances, en remplaçant les références à la version
7920actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
adfb167f
JL
7921
7922@example
15f1bff4 7923guix build --with-graft=gnutls=gnutls@@3.5.4 wget
adfb167f
JL
7924@end example
7925
15f1bff4
JL
7926Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
7927y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
7928sont strictement compatibles — par exemple, s'ils fournissent une
7929bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
7930doivent être compatibles. Si @var{remplaçant} est incompatible avec
7931@var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
7932utilisez avec précaution !
7933
7934@item --with-branch=@var{package}=@var{branch}
7935@cindex Git, using the latest commit
7936@cindex latest commit, building
7937Build @var{package} from the latest commit of @var{branch}. The
7938@code{source} field of @var{package} must be an origin with the
7939@code{git-fetch} method (@pxref{Référence d'origine}) or a @code{git-checkout}
7940object; the repository URL is taken from that @code{source}. Git
7941sub-modules of the repository are fetched, recursively.
7942
7943For instance, the following command builds @code{guile-sqlite3} from the
7944latest commit of its @code{master} branch, and then builds @code{guix}
7945(which depends on it) and @code{cuirass} (which depends on @code{guix})
7946against this specific @code{guile-sqlite3} build:
adfb167f
JL
7947
7948@example
15f1bff4 7949guix build --with-branch=guile-sqlite3=master cuirass
adfb167f
JL
7950@end example
7951
15f1bff4
JL
7952@cindex intégration continue
7953Obviously, since it uses the latest commit of the given branch, the result
7954of such a command varies over time. Nevertheless it is a convenient way to
7955rebuild entire software stacks against the latest commit of one or more
7956packages. This is particularly useful in the context of continuous
7957integration (CI).
adfb167f 7958
15f1bff4
JL
7959Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
7960up consecutive accesses to the same repository. You may want to clean it up
7961once in a while to save disk space.
bf5c74e7 7962
15f1bff4
JL
7963@item --with-commit=@var{package}=@var{commit}
7964This is similar to @code{--with-branch}, except that it builds from
7965@var{commit} rather than the tip of a branch. @var{commit} must be a valid
7966Git commit SHA1 identifier.
7967@end table
bf5c74e7 7968
15f1bff4
JL
7969@node Options de construction supplémentaires
7970@subsection Options de construction supplémentaires
7971
7972Les options de la ligne de commande ci-dessous sont spécifiques à
7973@command{guix build}.
bf5c74e7 7974
15f1bff4 7975@table @code
bf5c74e7 7976
15f1bff4
JL
7977@item --quiet
7978@itemx -q
7979Build quietly, without displaying the build log; this is equivalent to
7980@code{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
7981(or similar) and can always be retrieved using the @option{--log-file}
7982option.
bf5c74e7 7983
15f1bff4
JL
7984@item --file=@var{fichier}
7985@itemx -f @var{fichier}
7986Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
7987code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
bf5c74e7 7988
15f1bff4
JL
7989Par exemple, @var{file} peut contenir une définition de paquet comme ceci
7990(@pxref{Définition des paquets}) :
bf5c74e7 7991
15f1bff4
JL
7992@example
7993@verbatiminclude package-hello.scm
7994@end example
bf5c74e7 7995
15f1bff4
JL
7996@item --expression=@var{expr}
7997@itemx -e @var{expr}
7998Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
bf5c74e7 7999
15f1bff4
JL
8000Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
8001guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
8002version 1.8 de Guile.
bf5c74e7 8003
15f1bff4
JL
8004Autrement, @var{exp} peut être une G-expression, auquel cas elle est
8005utilisée comme un programme de construction passé à @code{gexp->derivation}
8006(@pxref{G-Expressions}).
bf5c74e7 8007
15f1bff4
JL
8008Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
8009argument (@pxref{La monade du dépôt}). La procédure doit renvoyer une
8010dérivation comme une valeur monadique, qui est ensuite lancée à travers
8011@code{run-with-store}.
bf5c74e7 8012
15f1bff4
JL
8013@item --source
8014@itemx -S
8015Construit les dérivation source des paquets, plutôt que des paquets
8016eux-mêmes.
bf5c74e7 8017
15f1bff4
JL
8018Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
8019@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
8020de GCC.
bf5c74e7 8021
15f1bff4
JL
8022L'archive des sources renvoyée est le résultat de l'application des
8023correctifs et des extraits de code éventuels spécifiés dans le champ
8024@code{origin} du paquet (@pxref{Définition des paquets}).
bf5c74e7 8025
15f1bff4
JL
8026@item --sources
8027Récupère et renvoie la source de @var{package-or-derivation} et toute ses
8028dépendances, récursivement. C'est pratique pour obtenir une copie locale de
8029tous les codes sources requis pour construire @var{packages}, ce qui vous
8030permet de les construire plus tard même sans accès réseau. C'est une
8031extension de l'option @code{--source} et peut accepter l'un des arguments
8032facultatifs suivants :
bf5c74e7 8033
15f1bff4
JL
8034@table @code
8035@item package
8036Cette valeur fait que l'option @code{--sources} se comporte comme l'option
8037@code{--source}.
bf5c74e7 8038
15f1bff4
JL
8039@item all
8040Construit les dérivations des sources de tous les paquets, dont les sources
8041qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
bf5c74e7
JL
8042
8043@example
15f1bff4
JL
8044$ guix build --sources tzdata
8045The following derivations will be built:
8046 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
8047 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
3cacfa9e
LC
8048@end example
8049
15f1bff4
JL
8050@item transitive
8051Build the source derivations of all packages, as well of all transitive
8052inputs to the packages. This can be used e.g.@: to prefetch package source
8053for later offline building.
3cacfa9e
LC
8054
8055@example
15f1bff4
JL
8056$ guix build --sources=transitive tzdata
8057The following derivations will be built:
8058 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8059 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
8060 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
8061 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
8062 /gnu/store/@dots{}-make-4.1.tar.xz.drv
8063 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
8064@dots{}
bf5c74e7
JL
8065@end example
8066
bf5c74e7
JL
8067@end table
8068
15f1bff4
JL
8069@item --system=@var{système}
8070@itemx -s @var{système}
8071Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
8072plutôt que pour le type de système de l'hôte de construction.
bf5c74e7 8073
15f1bff4
JL
8074@quotation Remarque
8075Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
8076ne doit pas être confondu avec une compilation croisée. Voir
8077@code{--target} ci-dessous pour des informations sur la compilation croisée.
8078@end quotation
bf5c74e7 8079
15f1bff4
JL
8080Par exemple, passer @code{--system=i686-linux} sur un système
8081@code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
8082@code{aarch64-linux} vous permet de construire des paquets dans un
8083environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
8084option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
bf5c74e7 8085
15f1bff4
JL
8086@quotation Remarque
8087La possibilité de construire pour un système @code{armhf-linux} est activé
8088sans condition sur les machines @code{aarch64-linux}, bien que certaines
8089puces aarch64 n'en soient pas capables, comme les ThunderX.
8090@end quotation
bf5c74e7 8091
15f1bff4
JL
8092De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
8093est activée (@pxref{Services de virtualisation,
8094@code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
8095quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
8096installé.
bf5c74e7 8097
15f1bff4
JL
8098Les constructions pour un autre système que celui de la machine que vous
8099utilisez peuvent aussi être déchargées à une machine distante de la bonne
8100architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
8101déchargement.
bf5c74e7 8102
15f1bff4
JL
8103@item --target=@var{triplet}
8104@cindex compilation croisée
8105Effectuer une compilation croisée pour @var{triplet} qui doit être un
8106triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
8107target triplets, GNU configuration triplets,, autoconf, Autoconf}).
bf5c74e7 8108
15f1bff4
JL
8109@anchor{vérification de la construction}
8110@item --check
8111@cindex déterminisme, vérification
8112@cindex reproductibilité, vérification
8113Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
8114le dépôt et lève une erreur si les résultats des constructions ne sont pas
8115identiques bit-à-bit.
8116
8117Ce mécanisme vous permet de vérifier si les substituts précédemment
8118installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
8119construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
8120pour plus d'informations et pour les outils.
8121
8122Lorsqu'utilisé avec @option{--keep-failed}, la sortie différente est gardée
8123dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
8124l'étude des différences entre les deux résultats.
8125
8126@item --repair
8127@cindex réparer les éléments du dépôt
8128@cindex corruption, récupérer de
8129Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
8130les téléchargeant ou en les construisant à nouveau.
8131
8132Cette opération n'est pas atomique et donc restreinte à l'utilisateur
8133@code{root}
8134
8135@item --derivations
8136@itemx -d
8137Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
8138donnés.
8139
8140@item --root=@var{fichier}
8141@itemx -r @var{fichier}
8142@cindex racines du GC, ajout
8143@cindex ajout de racines au ramasse-miettes
8144Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
8145en tant que racine du ramasse-miettes.
8146
8147En conséquence, les résultats de cette invocation de @command{guix build}
8148sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
8149supprimé. Lorsque cette option est omise, les constructions sont
8150susceptibles d'être glanées.
8151
8152@item --log-file
8153@cindex journaux de construction, accès
8154Renvoie les noms des journaux de construction ou les URL des
8155@var{package-or-derivation} donnés ou lève une erreur si les journaux de
8156construction sont absents.
bf5c74e7 8157
15f1bff4
JL
8158Cela fonctionne indépendamment de la manière dont les paquets ou les
8159dérivations sont spécifiées. Par exemple, les invocations suivantes sont
8160équivalentes :
bf5c74e7
JL
8161
8162@example
15f1bff4
JL
8163guix build --log-file `guix build -d guile`
8164guix build --log-file `guix build guile`
8165guix build --log-file guile
8166guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
bf5c74e7
JL
8167@end example
8168
15f1bff4
JL
8169Si un journal n'est pas disponible localement, à moins que
8170@code{--no-substitutes} ne soit passé, la commande cherche un journal
8171correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
8172@code{--substitute-urls}.)
8173
8174Donc par exemple, imaginons que vous souhaitiez voir le journal de
8175construction de GDB sur MIPS, mais que vous n'avez qu'une machine
8176@code{x86_64} :
bf5c74e7
JL
8177
8178@example
15f1bff4
JL
8179$ guix build --log-file gdb -s mips64el-linux
8180https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
bf5c74e7
JL
8181@end example
8182
15f1bff4
JL
8183Vous pouvez accéder librement à un vaste bibliothèque de journaux de
8184construction !
8185@end table
524756d1 8186
15f1bff4
JL
8187@node Débogage des échecs de construction
8188@subsection Débogage des échecs de construction
524756d1 8189
15f1bff4
JL
8190@cindex échecs de construction, débogage
8191Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
8192passerez probablement du temps à déboguer et modifier la construction
8193jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
8194construction vous-même dans un environnement le plus proche possible de
8195celui qu'utilise le démon de construction.
3cacfa9e 8196
15f1bff4
JL
8197Pour cela, la première chose à faire est d'utiliser l'option
8198@option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
8199l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
8200par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
bf5c74e7 8201
15f1bff4
JL
8202À partir de là, vous pouvez vous déplacer dans l'arborescence de
8203construction et sourcer le fichier @file{environment-variables}, qui
8204contient toutes les variables d'environnement qui étaient définies lorsque
8205la construction a échoué. Disons que vous déboguez un échec de construction
8206dans le paquet @code{foo} ; une session typique ressemblerait à cela :
bf5c74e7
JL
8207
8208@example
15f1bff4
JL
8209$ guix build foo -K
8210@dots{} @i{build fails}
8211$ cd /tmp/guix-build-foo.drv-0
8212$ source ./environment-variables
8213$ cd foo-1.2
bf5c74e7
JL
8214@end example
8215
15f1bff4
JL
8216Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
8217(presque) et corriger le processus de construction.
bf5c74e7 8218
15f1bff4
JL
8219Parfois il arrive que, par exemple, les tests d'un paquet réussissent
8220lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
8221le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
8222contrairement à notre environnement au-dessus, l'accès réseau est
8223indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
bf5c74e7 8224
15f1bff4
JL
8225Dans ce cas, vous pourriez avoir besoin de lancer le processus de
8226construction dans un conteneur similaire à celui que le démon crée :
bf5c74e7 8227
15f1bff4
JL
8228@example
8229$ guix build -K foo
8230@dots{}
8231$ cd /tmp/guix-build-foo.drv-0
8232$ guix environment --no-grafts -C foo --ad-hoc strace gdb
8233[env]# source ./environment-variables
8234[env]# cd foo-1.2
8235@end example
bf5c74e7 8236
15f1bff4
JL
8237Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
8238shell dedans (@pxref{Invoquer guix environment}). La partie
8239@command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
8240@command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
8241débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
8242environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
8243plus d'informations sur les greffes).
bf5c74e7 8244
15f1bff4
JL
8245Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
8246de construction, on peut enlever @file{/bin/sh} :
bf5c74e7 8247
15f1bff4
JL
8248@example
8249[env]# rm /bin/sh
8250@end example
bf5c74e7 8251
15f1bff4
JL
8252Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
8253conteneur jetable créé par @command{guix environment}.
bf5c74e7 8254
15f1bff4
JL
8255La commande @command{strace} n'est probablement pas dans le chemin de
8256recherche, mais on peut lancer :
bf5c74e7 8257
15f1bff4
JL
8258@example
8259[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
8260@end example
bf5c74e7 8261
15f1bff4
JL
8262De cette manière, non seulement vous aurez reproduit les variables
8263d'environnement utilisées par le démon, mais vous lancerez aussi le
8264processus de construction dans un conteneur similaire à celui utilisé par le
8265démon.
bf5c74e7 8266
bf5c74e7 8267
15f1bff4
JL
8268@node Invoquer guix edit
8269@section Invoquer @command{guix edit}
bf5c74e7 8270
15f1bff4
JL
8271@cindex @command{guix edit}
8272@cindex définition de paquets, modification
8273Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
8274facilite la vie des utilisateurs et des empaqueteurs en plaçant leur éditeur
8275sur le fichier source qui contient la définition des paquets spécifiés. Par
8276exemple :
bf5c74e7
JL
8277
8278@example
15f1bff4 8279guix edit gcc@@4.9 vim
bf5c74e7
JL
8280@end example
8281
15f1bff4
JL
8282@noindent
8283lance le programme spécifié dans la variable d'environnement @code{VISUAL}
8284ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et celle de
8285Vim.
bf5c74e7 8286
15f1bff4
JL
8287Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
8288ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
8289(@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
8290Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
8291actuellement dans le dépôt.
bf5c74e7 8292
bf5c74e7 8293
15f1bff4
JL
8294@node Invoquer guix download
8295@section Invoquer @command{guix download}
bf5c74e7 8296
15f1bff4
JL
8297@cindex @command{guix download}
8298@cindex télécharger les sources des paquets
8299En écrivant des définitions de paquets, les développeurs ont généralement
8300besoin de télécharger une archive des sources, calculer son hash SHA256 et
8301écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
8302L'outil @command{guix download} aide à cette tâche : il télécharge un
8303fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
8304le dépôt et son hash SHA56.
bf5c74e7 8305
15f1bff4
JL
8306Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
8307passante : lorsque les développeurs finissent par construire le paquet
8308nouvellement défini avec @command{guix build}, l'archive des sources n'aura
8309pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
8310le dépôt. C'est aussi une manière pratique de garder des fichiers
8311temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
8312
8313La commande @command{guix download} supporte les mêmes URI que celles
8314utilisées dans les définitions de paquets. En particulier, elle supporte
8315les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
8316supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
8317l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
8318erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
8319bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
8320
8321@command{guix download} vérifie les certificats du serveur HTTPS en
8322chargeant les autorités de certification X.509 depuis le répertoire vers
8323lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
8324
8325Les options suivantes sont disponibles :
bf5c74e7
JL
8326
8327@table @code
15f1bff4
JL
8328@item --format=@var{fmt}
8329@itemx -f @var{fmt}
8330Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
8331d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
bf5c74e7 8332
15f1bff4
JL
8333@item --no-check-certificate
8334Ne pas valider les certificats HTTPS des serveurs.
bf5c74e7 8335
15f1bff4
JL
8336Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
8337garanti} que vous communiquez avec le serveur authentique responsable de
8338l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
8339milieu ».
bf5c74e7 8340
15f1bff4
JL
8341@item --output=@var{fichier}
8342@itemx -o @var{fichier}
8343Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
8344au dépôt.
8345@end table
bf5c74e7 8346
15f1bff4
JL
8347@node Invoquer guix hash
8348@section Invoquer @command{guix hash}
bf5c74e7 8349
15f1bff4
JL
8350@cindex @command{guix hash}
8351La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
8352surtout un outil pour simplifier la vie des contributeurs de la distribution
8353: il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
8354la définition d'un paquet (@pxref{Définition des paquets}).
bf5c74e7 8355
15f1bff4 8356La syntaxe générale est :
bf5c74e7
JL
8357
8358@example
15f1bff4 8359guix hash @var{option} @var{fichier}
bf5c74e7
JL
8360@end example
8361
15f1bff4
JL
8362Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
8363hash des données lues depuis l'entrée standard. @command{guix hash} a les
8364options suivantes :
bf5c74e7 8365
15f1bff4 8366@table @code
bf5c74e7 8367
15f1bff4
JL
8368@item --format=@var{fmt}
8369@itemx -f @var{fmt}
8370Écrit le hash dans le format spécifié par @var{fmt}.
bf5c74e7 8371
15f1bff4
JL
8372Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
8373(@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
bf5c74e7 8374
15f1bff4
JL
8375Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
8376affichera le hash en @code{nix-base32}. Cette représentation est utilisée
8377dans les définitions des paquets.
bf5c74e7 8378
15f1bff4
JL
8379@item --recursive
8380@itemx -r
8381Calcule le hash sur @var{fichier} récursivement.
bf5c74e7 8382
15f1bff4
JL
8383@c FIXME: Replace xref above with xref to an ``Archive'' section when
8384@c it exists.
8385Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
8386dont ses enfants si c'est un répertoire. Certaines métadonnées de
8387@var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
8388est un fichier normal, le hash est différent que le @var{fichier} soit
8389exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
8390sur le hash (@pxref{Invoquer guix archive}).
bf5c74e7 8391
15f1bff4
JL
8392@item --exclude-vcs
8393@itemx -x
8394Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
8395système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
8396
8397@vindex git-fetch
8398Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
8399avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
bf5c74e7
JL
8400
8401@example
15f1bff4
JL
8402$ git clone http://example.org/foo.git
8403$ cd foo
8404$ guix hash -rx .
bf5c74e7 8405@end example
15f1bff4 8406@end table
bf5c74e7 8407
15f1bff4
JL
8408@node Invoquer guix import
8409@section Invoquer @command{guix import}
8410
8411@cindex importer des paquets
8412@cindex paquets importés
8413@cindex conversion de paquets
8414@cindex Invoquer @command{guix import}
8415La commande @command{guix import} est utile pour les gens qui voudraient
8416ajouter un paquet à la distribution avec aussi peu de travail que possible —
8417une demande légitime. La commande connaît quelques dépôts logiciels d'où
8418elle peut « importer » des métadonnées de paquets. Le résultat est une
8419définition de paquet, ou un modèle de définition, dans le format reconnu par
8420Guix (@pxref{Définition des paquets}).
8421
8422La syntaxe générale est :
bf5c74e7
JL
8423
8424@example
15f1bff4 8425guix import @var{importer} @var{options}@dots{}
bf5c74e7 8426@end example
bf5c74e7 8427
15f1bff4
JL
8428@var{importer} spécifie la source depuis laquelle importer des métadonnées
8429de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
8430options spécifiques à @var{importer}. Actuellement les « importateurs »
8431disponibles sont :
bf5c74e7
JL
8432
8433@table @code
15f1bff4
JL
8434@item gnu
8435Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
8436la dernière version de ce paquet GNU, avec le hash de son archive, le
8437synopsis et la description canonique.
bf5c74e7 8438
15f1bff4
JL
8439Les informations supplémentaires comme les dépendances du paquet et sa
8440licence doivent être renseignées manuellement.
bf5c74e7 8441
15f1bff4
JL
8442Par exemple, la commande suivante renvoie une définition de paquets pour
8443GNU@tie{}Hello :
bf5c74e7
JL
8444
8445@example
15f1bff4 8446guix import gnu hello
bf5c74e7
JL
8447@end example
8448
15f1bff4 8449Les options spécifiques sont :
bf5c74e7 8450
15f1bff4
JL
8451@table @code
8452@item --key-download=@var{politique}
8453Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
8454OpenPGP manquantes lors de la vérification de la signature d'un paquet.
8455@xref{Invoquer guix refresh, @code{--key-download}}.
bf5c74e7
JL
8456@end table
8457
15f1bff4
JL
8458@item pypi
8459@cindex pypi
8460Import metadata from the @uref{https://pypi.python.org/, Python Package
8461Index}. Information is taken from the JSON-formatted description available
8462at @code{pypi.python.org} and usually includes all the relevant information,
8463including package dependencies. For maximum efficiency, it is recommended
8464to install the @command{unzip} utility, so that the importer can unzip
8465Python wheels and gather data from them.
bf5c74e7 8466
15f1bff4
JL
8467La commande ci-dessous importe les métadonnées du paquet Python
8468@code{itsdangerous} :
bf5c74e7 8469
15f1bff4
JL
8470@example
8471guix import pypi itsdangerous
8472@end example
bf5c74e7 8473
15f1bff4
JL
8474@table @code
8475@item --recursive
8476@itemx -r
8477Traverse le graphe des dépendances du paquet amont donné et génère les
8478expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8479@end table
bf5c74e7 8480
15f1bff4
JL
8481@item gem
8482@cindex gem
8483Import metadata from @uref{https://rubygems.org/, RubyGems}. Information is
8484taken from the JSON-formatted description available at @code{rubygems.org}
8485and includes most relevant information, including runtime dependencies.
8486There are some caveats, however. The metadata doesn't distinguish between
8487synopses and descriptions, so the same string is used for both fields.
8488Additionally, the details of non-Ruby dependencies required to build native
8489extensions is unavailable and left as an exercise to the packager.
bf5c74e7 8490
15f1bff4
JL
8491La commande ci-dessous importe les métadonnées pour le paquet Ruby
8492@code{rails} :
bf5c74e7
JL
8493
8494@example
15f1bff4 8495guix import gem rails
bf5c74e7 8496@end example
adfb167f 8497
15f1bff4
JL
8498@table @code
8499@item --recursive
8500@itemx -r
8501Traverse le graphe des dépendances du paquet amont donné et génère les
8502expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
bf5c74e7
JL
8503@end table
8504
15f1bff4
JL
8505@item cpan
8506@cindex CPAN
8507Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}.
8508Information is taken from the JSON-formatted metadata provided through
8509@uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
8510relevant information, such as module dependencies. License information
8511should be checked closely. If Perl is available in the store, then the
8512@code{corelist} utility will be used to filter core modules out of the list
8513of dependencies.
bf5c74e7 8514
15f1bff4
JL
8515La commande ci-dessous importe les métadonnées du module Perl
8516@code{Acme::Boolean} :
bf5c74e7
JL
8517
8518@example
15f1bff4 8519guix import cpan Acme::Boolean
bf5c74e7
JL
8520@end example
8521
15f1bff4
JL
8522@item cran
8523@cindex CRAN
8524@cindex Bioconductor
8525Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
8526dépôt central de @uref{http://r-project.org, l'environnement statistique et
8527graphique GUN@tie{}R}.
8528
8529Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
8530
8531La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
bf5c74e7
JL
8532
8533@example
15f1bff4 8534guix import cran Cairo
bf5c74e7
JL
8535@end example
8536
15f1bff4
JL
8537Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
8538le graphe des dépendances du paquet amont récursivement et générera des
8539expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
8540
8541Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
8542sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
8543répertoire de paquets R pour l'analyse et la compréhension de données
8544génomiques volumineuses en bioinformatique.
8545
8546Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
8547publié sur l'interface web du dépôt SVN de Bioconductor.
bf5c74e7 8548
15f1bff4
JL
8549La commande ci-dessous importe les métadonnées du paquet R
8550@code{GenomicRanges} :
bf5c74e7
JL
8551
8552@example
15f1bff4 8553guix import cran --archive=bioconductor GenomicRanges
bf5c74e7
JL
8554@end example
8555
15f1bff4
JL
8556@item texlive
8557@cindex TeX Live
8558@cindex CTAN
8559Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
8560réseau complète pour les paquets TeX qui font partie de la
8561@uref{https://www.tug.org/texlive/, distribution TeX Live}.
bf5c74e7 8562
15f1bff4
JL
8563Les informations sur les paquets sont obtenues à travers l'API XML fournie
8564par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
8565projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
8566d'archives versionnées.
bf5c74e7 8567
15f1bff4
JL
8568La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
8569:
bf5c74e7
JL
8570
8571@example
15f1bff4 8572guix import texlive fontspec
bf5c74e7
JL
8573@end example
8574
15f1bff4
JL
8575Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
8576n'est pas téléchargé depuis le sous-répertoire @file{latex} du
8577l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
8578depuis le répertoire voisin spécifié sous la même racine.
8579
8580La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
8581depuis CTAN en récupérant les sources depuis le répertoire
8582@file{texmf/source/generic} :
bf5c74e7
JL
8583
8584@example
15f1bff4 8585guix import texlive --archive=generic ifxetex
bf5c74e7
JL
8586@end example
8587
15f1bff4
JL
8588@item json
8589@cindex JSON, import
8590Import package metadata from a local JSON file. Consider the following
8591example package definition in JSON format:
bf5c74e7
JL
8592
8593@example
15f1bff4
JL
8594@{
8595 "name": "hello",
8596 "version": "2.10",
8597 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
8598 "build-system": "gnu",
8599 "home-page": "https://www.gnu.org/software/hello/",
8600 "synopsis": "Hello, GNU world: An example GNU package",
8601 "description": "GNU Hello prints a greeting.",
8602 "license": "GPL-3.0+",
8603 "native-inputs": ["gcc@@6"]
8604@}
bf5c74e7
JL
8605@end example
8606
15f1bff4
JL
8607Les noms des champs sont les mêmes que pour les enregistrements de
8608@code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
8609paquets sont fournies comme des listes JSON de chaînes de spécifications de
8610paquets comme @code{guile} ou @code{guile@@2.0}.
8611
8612L'importateur supporte aussi une définition plus explicite des sources avec
8613les champs habituels pour les enregistrements @code{<origin>} :
bf5c74e7
JL
8614
8615@example
15f1bff4
JL
8616@{
8617 @dots{}
8618 "source": @{
8619 "method": "url-fetch",
8620 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
8621 "sha256": @{
8622 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
8623 @}
8624 @}
8625 @dots{}
8626@}
bf5c74e7
JL
8627@end example
8628
15f1bff4
JL
8629La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
8630et renvoie une expression de paquet :
bf5c74e7
JL
8631
8632@example
15f1bff4 8633guix import json hello.json
bf5c74e7
JL
8634@end example
8635
15f1bff4
JL
8636@item nix
8637Importe les métadonnées d'une copie locale des source de
8638@uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
8639repose sur la commande @command{nix-instantiate} de
8640@uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
8641Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
8642Bash. Cette commande n'importe que la structure de haut-niveau du paquet
8643qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
8644de base de la définition d'un paquet.
bf5c74e7 8645
15f1bff4
JL
8646Lorsque vous importez un paquet GNU, le synopsis et la description sont
8647replacés par la version canonique en amont.
bf5c74e7 8648
15f1bff4 8649Normalement, vous devrez d'abord faire :
bf5c74e7
JL
8650
8651@example
15f1bff4 8652export NIX_REMOTE=daemon
bf5c74e7
JL
8653@end example
8654
15f1bff4
JL
8655@noindent
8656pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
8657de Nix.
bf5c74e7 8658
15f1bff4
JL
8659Par exemple, la commande ci-dessous importe la définition du paquet de
8660LibreOffice (plus précisément, elle importe la définition du paquet lié à
8661l'attribut de plus haut-niveau @code{libreoffice}) :
bf5c74e7
JL
8662
8663@example
15f1bff4 8664guix import nix ~/path/to/nixpkgs libreoffice
bf5c74e7
JL
8665@end example
8666
15f1bff4
JL
8667@item hackage
8668@cindex hackage
8669Importe les métadonnées de l'archive de paquets centrale de la communauté
8670Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
8671sont récupérées depuis les fichiers Cabal et incluent toutes les
8672informations utiles, dont les dépendances des paquets.
bf5c74e7 8673
15f1bff4
JL
8674Les options spécifiques sont :
8675
8676@table @code
8677@item --stdin
8678@itemx -s
8679Lit un fichier Cabal depuis l'entrée standard.
8680@item --no-test-dependencies
8681@itemx -t
8682N'inclut pas les dépendances requises uniquement par les suites de tests.
8683@item --cabal-environment=@var{alist}
8684@itemx -e @var{alist}
8685@var{alist} est une alist Scheme qui définie l'environnement dans lequel les
8686conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
8687@code{arch}, @code{impl} et une représentation sous forme de chaîne de
8688caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
8689le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
8690doivent se conformer avec la définition du format de fichiers Cabal. La
8691valeur par défaut associée avec les clefs @code{os}, @code{arch} et
8692@code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
8693@item --recursive
8694@itemx -r
8695Traverse le graphe des dépendances du paquet amont donné et génère les
8696expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8697@end table
8698
8699La commande ci-dessous importe les métadonnées de la dernière version du
8700paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
8701spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
8702:
bf5c74e7
JL
8703
8704@example
15f1bff4 8705guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
bf5c74e7
JL
8706@end example
8707
15f1bff4
JL
8708Une version spécifique du paquet peut éventuellement être spécifiée en
8709faisant suivre le nom du paquet par un arobase et un numéro de version comme
8710dans l'exemple suivant :
bf5c74e7
JL
8711
8712@example
15f1bff4 8713guix import hackage mtl@@2.1.3.1
bf5c74e7
JL
8714@end example
8715
15f1bff4
JL
8716@item stackage
8717@cindex stackage
8718L'importateur @code{stackage} est une enveloppe autour de l'importateur
8719@code{hackage}. Il prend un nom de paquet, recherche la version incluse
8720dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
8721Stackage} et utilise l'importateur @code{hackage} pour récupérer les
8722métadonnées. Remarquez que c'est à vous de choisir une version LTS
8723compatible avec le compilateur GHC utilisé par Guix.
bf5c74e7 8724
15f1bff4 8725Les options spécifiques sont :
bf5c74e7 8726
15f1bff4
JL
8727@table @code
8728@item --no-test-dependencies
8729@itemx -t
8730N'inclut pas les dépendances requises uniquement par les suites de tests.
8731@item --lts-version=@var{version}
8732@itemx -l @var{version}
8733@var{version} est la version LTS désirée. Si elle est omise, la dernière
8734version est utilisée.
8735@item --recursive
8736@itemx -r
8737Traverse le graphe des dépendances du paquet amont donné et génère les
8738expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8739@end table
bf5c74e7 8740
15f1bff4
JL
8741La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
8742inclus dans la version LTS 7.18 de Stackage :
bf5c74e7
JL
8743
8744@example
15f1bff4 8745guix import stackage --lts-version=7.18 HTTP
bf5c74e7
JL
8746@end example
8747
15f1bff4
JL
8748@item elpa
8749@cindex elpa
8750Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
8751Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
8752
8753Les options spécifiques sont :
8754
8755@table @code
8756@item --archive=@var{repo}
8757@itemx -a @var{repo}
8758@var{repo} identifie le dépôt d'archive depuis lequel récupérer les
8759informations. Actuellement les dépôts supportés et leurs identifiants sont
8760:
8761@itemize -
8762@item
8763@uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
8764l'identifiant @code{gnu}. C'est la valeur par défaut.
bf5c74e7 8765
15f1bff4
JL
8766Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
8767porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
8768similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
8769package signatures,, emacs, The GNU Emacs Manual}).
bf5c74e7 8770
15f1bff4
JL
8771@item
8772@uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
8773sélectionner avec l'identifiant @code{melpa-stable}.
bf5c74e7 8774
15f1bff4
JL
8775@item
8776@uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
8777l'identifiant @code{melpa}.
8778@end itemize
bf5c74e7 8779
15f1bff4
JL
8780@item --recursive
8781@itemx -r
8782Traverse le graphe des dépendances du paquet amont donné et génère les
8783expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
8784@end table
bf5c74e7 8785
15f1bff4
JL
8786@item crate
8787@cindex crate
8788Importe les métadonnées du répertoire des paquets Rust
8789@uref{https://crates.io, crates.io}.
bf5c74e7 8790
15f1bff4
JL
8791@item opam
8792@cindex OPAM
8793@cindex OCaml
8794Importe les métadonnées du répertoire de paquets
8795@uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml
8796@end table
bf5c74e7 8797
15f1bff4
JL
8798La structure du code de @command{guix import} est modulaire. Il serait
8799utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
8800aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
bf5c74e7 8801
15f1bff4
JL
8802@node Invoquer guix refresh
8803@section Invoquer @command{guix refresh}
524756d1 8804
15f1bff4
JL
8805@cindex @command{guix refresh}
8806L'audience première de la commande @command{guix refresh} est l'ensemble des
8807développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
8808les paquets fournis par la distribution qui sont en retard par rapport aux
8809dernières versions disponibles en amont, comme ceci :
524756d1 8810
15f1bff4
JL
8811@example
8812$ guix refresh
8813gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
8814gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
8815@end example
524756d1 8816
15f1bff4
JL
8817Autrement, on peut spécifier les paquets à considérer, auquel cas un
8818avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
8819mise à jour associé :
524756d1
JL
8820
8821@example
15f1bff4
JL
8822$ guix refresh coreutils guile guile-ssh
8823gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
8824gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
bf5c74e7
JL
8825@end example
8826
15f1bff4
JL
8827@command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
8828le numéro de version le plus élevé parmi les versions publiées. La commande
8829sait comment mettre à jour certains types de paquets : les paquets GNU, les
8830paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
8831Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
8832déterminer si une nouvelle version est disponible en amont. Cependant, le
8833mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
8834une nouvelle méthode !
bf5c74e7 8835
15f1bff4 8836@table @code
bf5c74e7 8837
15f1bff4
JL
8838@item --recursive
8839Consider the packages specified, and all the packages upon which they
8840depend.
bf5c74e7
JL
8841
8842@example
15f1bff4
JL
8843$ guix refresh --recursive coreutils
8844gnu/packages/acl.scm:35:2: warning: no updater for acl
8845gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
8846gnu/packages/xml.scm:68:2: warning: no updater for expat
8847gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
8848@dots{}
bf5c74e7
JL
8849@end example
8850
15f1bff4 8851@end table
bf5c74e7 8852
15f1bff4
JL
8853Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
8854@command{guix refresh} a besoin d'un peu d'aide. La plupart des
8855gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
8856les définitions de paquets, ce qui peut être utilisé à cette fin :
bf5c74e7
JL
8857
8858@example
15f1bff4
JL
8859(define-public network-manager
8860 (package
8861 (name "network-manager")
8862 ;; @dots{}
8863 (properties '((upstream-name . "NetworkManager")))))
bf5c74e7 8864@end example
bf5c74e7 8865
15f1bff4
JL
8866Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
8867source de la distribution pour mettre à jour le numéro de version et le hash
8868de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
8869Cela est effectué en téléchargeant la dernière version de l'archive des
8870sources de chaque paquet et des signatures associées, en authentifiant
8871l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
8872calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
8873manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
8874récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
8875clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
8876refresh} rapporte une erreur.
bf5c74e7 8877
15f1bff4 8878Les options suivantes sont supportées :
bf5c74e7 8879
15f1bff4 8880@table @code
bf5c74e7 8881
15f1bff4
JL
8882@item --expression=@var{expr}
8883@itemx -e @var{expr}
8884Considérer le paquet évalué par @var{expr}.
bf5c74e7 8885
15f1bff4
JL
8886C'est utile pour précisément se référer à un paquet, comme dans cet exemple
8887:
bf5c74e7 8888
15f1bff4
JL
8889@example
8890guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
8891@end example
bf5c74e7 8892
15f1bff4
JL
8893Cette commande liste les paquets qui dépendent de la libc « finale » (en
8894gros tous les paquets).
bf5c74e7 8895
15f1bff4
JL
8896@item --update
8897@itemx -u
8898Met à jour les fichiers source de la distribution (les recettes de paquets)
8899en place. Cette option est généralement utilisée depuis une copie du dépôt
8900git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
bf5c74e7
JL
8901
8902@example
15f1bff4 8903$ ./pre-inst-env guix refresh -s non-core -u
bf5c74e7
JL
8904@end example
8905
15f1bff4
JL
8906@xref{Définition des paquets}, pour plus d'information sur les définitions des
8907paquets.
bf5c74e7 8908
15f1bff4
JL
8909@item --select=[@var{subset}]
8910@itemx -s @var{subset}
8911Choisi tous les paquets dans @var{subset}, entre @code{core} et
8912@code{non-core}.
bf5c74e7 8913
15f1bff4
JL
8914Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
8915distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
8916tout le reste ». Cela comprend GCC, libc, Binutils, Bash, etc.
8917Habituellement, changer l'un de ces paquets dans la distribution implique de
8918reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
8919pour les utilisateurs, en terme de temps de compilation et de bande passante
8920utilisés pour effectuer la mise à jour.
bf5c74e7 8921
15f1bff4
JL
8922Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
8923habituellement utile dans les cas où une mise à jour des paquets du cœur
8924serait dérangeante.
bf5c74e7 8925
15f1bff4
JL
8926@item --manifest=@var{fichier}
8927@itemx -m @var{fichier}
8928Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
8929vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
8930jour.
8931
8932@item --type=@var{updater}
8933@itemx -t @var{updater}
8934Chois uniquement les paquets pris en charge par @var{updater}
8935(éventuellement une liste de gestionnaires de mise à jour séparés par des
8936virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
8937:
8938
8939@table @code
8940@item gnu
8941le gestionnaire de mise à jour pour les paquets GNU ;
8942@item gnome
8943le gestionnaire de mise à jour pour les paquets GNOME ;
8944@item kde
8945le gestionnaire de mise à jour pour les paquets KDE ;
8946@item xorg
8947le gestionnaire de mise à jour pour les paquets X.org ;
8948@item kernel.org
8949le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
8950@item elpa
8951le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
8952ELPA} ;
8953@item cran
8954le gestionnaire de mise à jour pour les paquets
8955@uref{https://cran.r-project.org/, CRAN} ;
8956@item bioconductor
8957le gestionnaire de mise à jour pour les paquets
8958@uref{https://www.bioconductor.org/, Bioconductor} ;
8959@item cpan
8960le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
8961CPAN} ;
8962@item pypi
8963le gestionnaire de mise à jour pour les paquets
8964@uref{https://pypi.python.org, PyPI} ;
8965@item gem
8966le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
8967RubyGems} ;
8968@item github
8969le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
8970GitHub} ;
8971@item hackage
8972le gestionnaire de mise à jour pour les paquets
8973@uref{https://hackage.haskell.org, Hackage} ;
8974@item stackage
8975le gestionnaire de mise à jour pour les paquets
8976@uref{https://www.stackage.org, Stackage} ;
8977@item crate
8978le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
8979Crates} ;
8980@end table
bf5c74e7 8981
15f1bff4
JL
8982Par exemple, la commande suivante ne vérifie que les mises à jour des
8983paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
bf5c74e7
JL
8984
8985@example
15f1bff4
JL
8986$ guix refresh --type=elpa,cran
8987gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
8988gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
bf5c74e7
JL
8989@end example
8990
15f1bff4 8991@end table
bf5c74e7 8992
15f1bff4
JL
8993En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
8994paquets, comme dans cet exemple :
bf5c74e7
JL
8995
8996@example
15f1bff4 8997$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
bf5c74e7
JL
8998@end example
8999
9000@noindent
15f1bff4
JL
9001La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
9002@code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
bf5c74e7 9003
15f1bff4
JL
9004Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
9005de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
9006vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
9007avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
bf5c74e7
JL
9008
9009@table @code
524756d1 9010
15f1bff4
JL
9011@item --list-updaters
9012@itemx -L
9013Liste les gestionnaires de mise à jour et quitte (voir l'option
9014@option{--type} plus haut).
524756d1 9015
15f1bff4
JL
9016Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
9017la fin, affiche le pourcentage de paquets couverts par tous les
9018gestionnaires.
524756d1 9019
15f1bff4
JL
9020@item --list-dependent
9021@itemx -l
9022Liste les paquets de plus haut-niveau qui devraient être reconstruits après
9023la mise à jour d'un ou plusieurs paquets.
524756d1 9024
15f1bff4
JL
9025@xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
9026graph}}, pour des informations sur la manière de visualiser la liste des
9027paquets dépendant d'un autre.
bf5c74e7 9028
bf5c74e7
JL
9029@end table
9030
15f1bff4
JL
9031Soyez conscients que l'option @code{--list-dependent} ne fait
9032@emph{qu'approximer} les reconstructions qui seraient requises par une mise
9033à jour. Plus de reconstructions pourraient être requises dans certaines
9034circonstances.
bf5c74e7
JL
9035
9036@example
15f1bff4
JL
9037$ guix refresh --list-dependent flex
9038Building the following 120 packages would ensure 213 dependent packages are rebuilt:
9039hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
bf5c74e7
JL
9040@end example
9041
15f1bff4
JL
9042La commande ci-dessus liste un ensemble de paquets qui peuvent être
9043construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
bf5c74e7 9044
15f1bff4 9045@table @code
bf5c74e7 9046
15f1bff4
JL
9047@item --list-transitive
9048List all the packages which one or more packages depend upon.
bf5c74e7 9049
15f1bff4
JL
9050@example
9051$ guix refresh --list-transitive flex
9052flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
9053bison@@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{}
9054@end example
bf5c74e7 9055
15f1bff4 9056@end table
bf5c74e7 9057
15f1bff4
JL
9058The command above lists a set of packages which, when changed, would cause
9059@code{flex} to be rebuilt.
bf5c74e7 9060
15f1bff4
JL
9061Les options suivante peuvent être utilisées pour personnaliser les
9062opérations avec GnuPG :
bf5c74e7 9063
15f1bff4 9064@table @code
bf5c74e7 9065
15f1bff4
JL
9066@item --gpg=@var{commande}
9067Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
9068recherchée dans @code{PATH}.
bf5c74e7 9069
15f1bff4
JL
9070@item --keyring=@var{fichier}
9071Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
9072doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
9073un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
9074manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
9075Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
9076fichiers keybox).
bf5c74e7 9077
15f1bff4
JL
9078Lorsque cette option est omise, @command{guix refresh} utilise
9079@file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
9080clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
9081clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
9082(voir @option{--key-download} plus bas).
bf5c74e7 9083
15f1bff4
JL
9084Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
9085fichier keybox avec une commande telle que :
524756d1 9086
15f1bff4
JL
9087@example
9088gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
9089@end example
524756d1 9090
15f1bff4
JL
9091De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
9092comme ceci :
bf5c74e7
JL
9093
9094@example
15f1bff4
JL
9095gpg --no-default-keyring --keyring mykeyring.kbx \
9096 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
bf5c74e7
JL
9097@end example
9098
15f1bff4
JL
9099@ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
9100Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
9101GPG.
bf5c74e7 9102
15f1bff4
JL
9103@item --key-download=@var{politique}
9104Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
9105l'une des suivantes :
bf5c74e7 9106
15f1bff4
JL
9107@table @code
9108@item always
9109Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
9110ajouter au porte-clefs de l'utilisateur.
bf5c74e7 9111
15f1bff4
JL
9112@item never
9113Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
9114place.
bf5c74e7 9115
15f1bff4
JL
9116@item interactive
9117Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
9118à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
9119par défaut.
9120@end table
bf5c74e7 9121
15f1bff4
JL
9122@item --key-server=@var{host}
9123Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
9124clef publique.
bf5c74e7 9125
15f1bff4 9126@end table
bf5c74e7 9127
15f1bff4
JL
9128The @code{github} updater uses the @uref{https://developer.github.com/v3/,
9129GitHub API} to query for new releases. When used repeatedly e.g.@: when
9130refreshing all packages, GitHub will eventually refuse to answer any further
9131API requests. By default 60 API requests per hour are allowed, and a full
9132refresh on all GitHub packages in Guix requires more than this.
9133Authentication with GitHub through the use of an API token alleviates these
9134limits. To use an API token, set the environment variable
9135@code{GUIX_GITHUB_TOKEN} to a token procured from
9136@uref{https://github.com/settings/tokens} or otherwise.
bf5c74e7 9137
15f1bff4
JL
9138
9139@node Invoquer guix lint
9140@section Invoquer @command{guix lint}
9141
9142@cindex @command{guix lint}
9143@cindex paquets, chercher des erreurs
9144La commande @command{guix lint} est conçue pour aider les développeurs à
9145éviter des erreurs commune et à utiliser un style cohérent lors de
9146l'écriture de recettes de paquets. Elle lance des vérifications sur un
9147ensemble de paquets donnés pour trouver des erreurs communes dans leur
9148définition. Les @dfn{vérifieurs} disponibles comprennent (voir
9149@code{--list-checkers} pour une liste complète) :
bf5c74e7
JL
9150
9151@table @code
15f1bff4
JL
9152@item synopsis
9153@itemx description
9154Vérifie certaines règles typographiques et stylistiques dans les
9155descriptions et les synopsis.
bf5c74e7 9156
15f1bff4
JL
9157@item inputs-should-be-native
9158Identifie les entrées qui devraient sans doute plutôt être des entrées
9159natives.
bf5c74e7 9160
15f1bff4
JL
9161@item source
9162@itemx home-page
9163@itemx mirror-url
9164@itemx github-url
9165@itemx source-file-name
9166Probe @code{home-page} and @code{source} URLs and report those that are
9167invalid. Suggest a @code{mirror://} URL when applicable. If the
9168@code{source} URL redirects to a GitHub URL, recommend usage of the GitHub
9169URL. Check that the source file name is meaningful, e.g.@: is not just a
9170version number or ``git-checkout'', without a declared @code{file-name}
9171(@pxref{Référence d'origine}).
bf5c74e7 9172
15f1bff4
JL
9173@item source-unstable-tarball
9174Parse the @code{source} URL to determine if a tarball from GitHub is
9175autogenerated or if it is a release tarball. Unfortunately GitHub's
9176autogenerated tarballs are sometimes regenerated.
bf5c74e7 9177
15f1bff4
JL
9178@item cve
9179@cindex vulnérabilités
9180@cindex CVE, Common Vulnerabilities and Exposures
9181Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
9182(Common Vulnerabilities and Exposures) de l'année en cours et des années
9183précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
9184NIST américain}.
bf5c74e7 9185
15f1bff4
JL
9186Pour voir les informations sur une vulnérabilité en particulier, visitez les
9187pages :
bf5c74e7 9188
15f1bff4
JL
9189@itemize
9190@item
9191@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
9192@item
9193@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
9194@end itemize
bf5c74e7 9195
15f1bff4
JL
9196@noindent
9197où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
9198@code{CVE-2015-7554}.
bf5c74e7 9199
15f1bff4
JL
9200Les développeurs de paquets peuvent spécifier dans les recettes des paquets
9201le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
9202et la version du paquet s'ils diffèrent du nom et de la version que Guix
9203utilise, comme dans cet exemple :
bf5c74e7
JL
9204
9205@example
15f1bff4
JL
9206(package
9207 (name "grub")
9208 ;; @dots{}
9209 ;; CPE calls this package "grub2".
9210 (properties '((cpe-name . "grub2")
9211 (cpe-version . "2.3")))
bf5c74e7
JL
9212@end example
9213
15f1bff4
JL
9214@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
9215Certaines entrées dans la base de données CVE ne spécifient pas la version
9216du paquet auquel elles s'appliquent et lui restera donc attachée pour
9217toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
9218qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
bf5c74e7 9219
15f1bff4
JL
9220@example
9221(package
9222 (name "t1lib")
9223 ;; @dots{}
9224 ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
9225 (properties `((lint-hidden-cve . ("CVE-2011-0433"
9226 "CVE-2011-1553"
9227 "CVE-2011-1554"
9228 "CVE-2011-5244")))))
9229@end example
9230
9231@item formatting
9232Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
9233source évident : des espaces en fin de ligne, des tabulations, etc.
9234@end table
bf5c74e7 9235
3cacfa9e 9236La syntaxe générale est :
bf5c74e7
JL
9237
9238@example
15f1bff4 9239guix lint @var{options} @var{package}@dots{}
bf5c74e7
JL
9240@end example
9241
15f1bff4
JL
9242Si aucun paquet n'est donné par la ligne de commande, tous les paquets
9243seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
9244options suivantes :
bf5c74e7
JL
9245
9246@table @code
15f1bff4
JL
9247@item --list-checkers
9248@itemx -l
9249Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
9250paquets puis quitte.
bf5c74e7 9251
15f1bff4
JL
9252@item --checkers
9253@itemx -c
9254N'active que les vérificateurs spécifiés dans une liste de noms séparés par
9255des virgules parmi la liste renvoyée par @code{--list-checkers}.
bf5c74e7 9256
15f1bff4 9257@end table
bf5c74e7 9258
15f1bff4
JL
9259@node Invoquer guix size
9260@section Invoquer @command{guix size}
bf5c74e7 9261
15f1bff4
JL
9262@cindex taille
9263@cindex paquet, taille
9264@cindex closure
9265@cindex @command{guix size}
9266La commande @command{guix size} aide les développeurs à dresser un profil de
9267l'utilisation du disque que font les paquets. C'est facile de négliger
9268l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
9269l'utilisation d'une sortie unique pour un paquet qui pourrait être
9270facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
9271problèmes que @command{guix size} peut typiquement mettre en valeur.
bf5c74e7 9272
15f1bff4
JL
9273On peut passer un ou plusieurs spécifications de paquets à la commande,
9274comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
9275dépôt. Regardez cet exemple :
9276
9277@example
9278$ guix size coreutils
9279store item total self
9280/gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
9281/gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
9282/gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
9283/gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
9284/gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
9285/gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
9286/gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
9287/gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
9288total: 78.9 MiB
9289@end example
bf5c74e7 9290
15f1bff4
JL
9291@cindex closure
9292Les éléments du dépôt listés ici constituent la @dfn{clôture transitive} de
9293Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
9294comme ce qui serait renvoyé par :
bf5c74e7
JL
9295
9296@example
15f1bff4 9297$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
bf5c74e7
JL
9298@end example
9299
15f1bff4
JL
9300Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
9301première colonne, nommée « total », montre la taille en mébioctet (Mio) de
9302la clôture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
9303taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
9304la taille de l'élément lui-même. La dernière colonne montre le ration de la
9305taille de l'élément lui-même par rapport à celle de tous les éléments
9306montrés.
bf5c74e7 9307
15f1bff4
JL
9308Dans cet exemple, on voit que la clôture de Coreutils pèse 79@tie{}Mio, dont
9309la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
9310n'est pas un problème en soit que la libc et les bibliothèques de GCC
9311représentent une grande part de la clôture parce qu'elles sont toujours
9312disponibles sur le système de toute façon).
bf5c74e7 9313
15f1bff4
JL
9314Lorsque les paquets passés à @command{guix size} sont disponibles dans le
9315dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
9316@emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
9317@code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
9318informations sur les greffes}, @command{guix size} demande au démon de
9319déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
9320@command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
9321Coreutils}).
bf5c74e7 9322
15f1bff4
JL
9323Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
9324size} rapporte les informations en se basant sur les substituts disponibles
9325(@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
9326éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
9327distance.
bf5c74e7 9328
15f1bff4 9329Vous pouvez aussi spécifier plusieurs noms de paquets :
bf5c74e7
JL
9330
9331@example
15f1bff4
JL
9332$ guix size coreutils grep sed bash
9333store item total self
9334/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
9335/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
9336/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
9337/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
9338@dots{}
9339total: 102.3 MiB
bf5c74e7
JL
9340@end example
9341
15f1bff4
JL
9342@noindent
9343Dans cet exemple on voit que la combinaison des quatre paquets prend
9344102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clôtures
9345puisqu'ils ont beaucoup de dépendances en commun.
bf5c74e7 9346
15f1bff4 9347Les options disponibles sont :
bf5c74e7 9348
15f1bff4 9349@table @option
bf5c74e7 9350
15f1bff4
JL
9351@item --substitute-urls=@var{urls}
9352Utilise les informations de substituts de @var{urls}.
9353@xref{client-substitute-urls, the same option for @code{guix build}}.
bf5c74e7 9354
15f1bff4
JL
9355@item --sort=@var{clef}
9356Trie les lignes en fonction de la @var{clef}, l'une des options suivantes :
524756d1 9357
15f1bff4
JL
9358@table @code
9359@item self
9360la taille de chaque élément (par défaut) ;
9361@item closure
9362la taille totale de la clôture de l'élément.
9363@end table
524756d1 9364
15f1bff4
JL
9365@item --map-file=@var{fichier}
9366Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
524756d1 9367
15f1bff4 9368Pour l'exemple au-dessus, le schéma ressemble à ceci :
524756d1 9369
15f1bff4
JL
9370@image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
9371Coreutils produit par @command{guix size}}
bf5c74e7 9372
15f1bff4
JL
9373Cette option requiert l'installation de
9374@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
9375soit visible dans le chemin de recherche des modules Guile. Lorsque ce
9376n'est pas le cas, @command{guix size} plante en essayant de le charger.
bf5c74e7 9377
3cacfa9e
LC
9378@item --system=@var{système}
9379@itemx -s @var{système}
15f1bff4 9380Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
bf5c74e7 9381
bf5c74e7
JL
9382@end table
9383
15f1bff4
JL
9384@node Invoquer guix graph
9385@section Invoque @command{guix graph}
adfb167f 9386
15f1bff4
JL
9387@cindex DAG
9388@cindex @command{guix graph}
9389@cindex dépendances des paquets
9390Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
9391un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
9392une représentation mentale du DAG d'un paquet, donc la commande
9393@command{guix graph} fournit une représentation visuelle du DAG. Par
9394défaut, @command{guix graph} émet un représentation du DAG dans le format
9395d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
9396puisse être passée directement à la commande @command{dot} de Graphviz.
9397Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
9398un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
9399@uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
9400construire un graphe dans une base de donnée de graphes supportant le
9401langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
9402syntaxe générale est :
adfb167f
JL
9403
9404@example
15f1bff4
JL
9405guix graph @var{options} @var{paquet}@dots{}
9406@end example
adfb167f 9407
15f1bff4
JL
9408Par exemple, la commande suivante génère un fichier PDF représentant le DAG
9409du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
9410compilation :
adfb167f 9411
15f1bff4
JL
9412@example
9413guix graph coreutils | dot -Tpdf > dag.pdf
adfb167f
JL
9414@end example
9415
15f1bff4 9416La sortie ressemble à ceci :
adfb167f 9417
15f1bff4 9418@image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
adfb167f 9419
15f1bff4
JL
9420Joli petit graphe, non ?
9421
9422Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
9423graphe des objets paquets, en omettant les entrées implicites comme GCC,
9424libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
9425parfois on veut voir plus de détails. @command{guix graph} supporte
9426plusieurs types de graphes, qui vous permettent de choisir le niveau de
9427détails :
9428
9429@table @code
9430@item package
9431C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
9432des objets paquets, sans les dépendances implicites. C'est concis, mais
9433omet pas mal de détails.
9434
9435@item reverse-package
9436Cela montre le DAG @emph{inversé} des paquets. Par exemple :
adfb167f
JL
9437
9438@example
15f1bff4 9439guix graph --type=reverse-package ocaml
adfb167f 9440@end example
bf5c74e7 9441
15f1bff4 9442...@: yields the graph of packages that depend on OCaml.
bf5c74e7 9443
15f1bff4
JL
9444Remarquez que pour les paquets du cœur de la distribution, cela crée des
9445graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
9446dépendent d'un paquet donnés, utilisez @command{guix refresh
9447--list-dependent} (@pxref{Invoquer guix refresh,
9448@option{--list-dependent}}).
9449
9450@item bag-emerged
9451C'est le DAG du paquet, @emph{avec} les entrées implicites.
9452
9453Par exemple, la commande suivante :
bf5c74e7
JL
9454
9455@example
15f1bff4 9456guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
bf5c74e7
JL
9457@end example
9458
15f1bff4
JL
9459...@: yields this bigger graph:
9460
9461@image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
9462GNU Coreutils}
bf5c74e7 9463
15f1bff4
JL
9464En bas du graphe, on voit toutes les entrées implicites de
9465@var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
bf5c74e7 9466
15f1bff4
JL
9467Maintenant, remarquez que les dépendances de ces entrées implicites —
9468c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
9469sont pas affichées, pour rester concis.
bf5c74e7 9470
15f1bff4
JL
9471@item bag
9472Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
9473bootstrap.
bf5c74e7 9474
15f1bff4
JL
9475@item bag-with-origins
9476Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
bf5c74e7 9477
15f1bff4
JL
9478@item dérivation
9479C'est la représentation lu plus détaillée : elle montre le DAG des
9480dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
9481représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
9482scripts de construction, les correctifs, les modules Guile, etc.
bf5c74e7 9483
15f1bff4
JL
9484Pour ce type de graphe, il est aussi possible de passer un nom de fichier
9485@file{.drv} à la place d'un nom de paquet, comme dans :
bf5c74e7 9486
15f1bff4
JL
9487@example
9488guix graph -t derivation `guix system build -d my-config.scm`
9489@end example
9490
9491@item module
9492C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
9493exemple, la commande suivante montre le graphe des modules de paquets qui
9494définissent le paquet @code{guile} :
bf5c74e7 9495
15f1bff4
JL
9496@example
9497guix graph -t module guile | dot -Tpdf > module-graph.pdf
9498@end example
bf5c74e7
JL
9499@end table
9500
15f1bff4
JL
9501Tous les types ci-dessus correspondent aux @emph{dépendances à la
9502construction}. Le type de graphe suivant représente les @emph{dépendances à
9503l'exécution} :
bf5c74e7 9504
15f1bff4
JL
9505@table @code
9506@item references
9507C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
9508renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
bf5c74e7 9509
15f1bff4
JL
9510Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
9511@command{guix graph} essayera d'obtenir les informations sur les dépendances
9512à travers les substituts.
bf5c74e7 9513
15f1bff4
JL
9514Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
9515paquet. Par exemple, la commande ci-dessous produit le graphe des
9516références de votre profile (qui peut être gros !) :
bf5c74e7 9517
15f1bff4
JL
9518@example
9519guix graph -t references `readlink -f ~/.guix-profile`
9520@end example
bf5c74e7 9521
15f1bff4
JL
9522@item referrers
9523C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
9524par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
bf5c74e7 9525
15f1bff4
JL
9526Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
9527supposons que Inkscape est actuellement disponible dans 10 profils sur votre
9528machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
9529la racine est Inkscape avec 10 profils qui y sont liés.
bf5c74e7 9530
15f1bff4
JL
9531Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
9532glané.
bf5c74e7 9533
15f1bff4 9534@end table
bf5c74e7 9535
15f1bff4 9536Les options disponibles sont les suivante :
bf5c74e7 9537
15f1bff4
JL
9538@table @option
9539@item --type=@var{type}
9540@itemx -t @var{type}
9541Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
9542des types au-dessus.
bf5c74e7 9543
15f1bff4
JL
9544@item --list-types
9545Liste les types de graphes supportés.
bf5c74e7 9546
15f1bff4
JL
9547@item --backend=@var{moteur}
9548@itemx -b @var{moteur}
9549Produit un graphe avec le @var{moteur} choisi.
bf5c74e7 9550
15f1bff4
JL
9551@item --list-backends
9552Liste les moteurs de graphes supportés.
bf5c74e7 9553
15f1bff4 9554Actuellement les moteurs disponibles sont Graphviz et d3.js.
bf5c74e7 9555
15f1bff4
JL
9556@item --expression=@var{expr}
9557@itemx -e @var{expr}
9558Considérer le paquet évalué par @var{expr}.
bf5c74e7 9559
15f1bff4
JL
9560C'est utile pour précisément se référer à un paquet, comme dans cet exemple
9561:
bf5c74e7 9562
15f1bff4
JL
9563@example
9564guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
9565@end example
bf5c74e7 9566
15f1bff4
JL
9567@item --system=@var{système}
9568@itemx -s @var{système}
9569Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
bf5c74e7 9570
15f1bff4
JL
9571Le graphe de dépendance des paquets est la plupart du temps indépendant de
9572l'architecture, mais il y a quelques parties qui dépendent de l'architecture
9573que cette option vous permet de visualiser.
9574@end table
bf5c74e7 9575
bf5c74e7 9576
bf5c74e7 9577
15f1bff4
JL
9578@node Invoquer guix publish
9579@section Invoquer @command{guix publish}
bf5c74e7 9580
15f1bff4
JL
9581@cindex @command{guix publish}
9582Le but de @command{guix publish} est de vous permettre de partager
9583facilement votre dépôt avec d'autres personnes qui peuvent ensuite
9584l'utiliser comme serveur de substituts (@pxref{Substituts}).
bf5c74e7 9585
15f1bff4
JL
9586When @command{guix publish} runs, it spawns an HTTP server which allows
9587anyone with network access to obtain substitutes from it. This means that
9588any machine running Guix can also act as if it were a build farm, since the
9589HTTP interface is compatible with Hydra, the software behind the
9590@code{@value{SUBSTITUTE-SERVER}} build farm.
bf5c74e7 9591
15f1bff4
JL
9592Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
9593destinataires de vérifier leur authenticité et leur intégrité
9594(@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
9595signature du système, qui n'est lisible que par l'administrateur système, il
9596doit être lancé en root ; l'option @code{--user} lui fait baisser ses
9597privilèges le plus tôt possible.
bf5c74e7 9598
15f1bff4
JL
9599La pair de clefs pour les signatures doit être générée avant de lancer
9600@command{guix publish}, avec @command{guix archive --generate-key}
9601(@pxref{Invoquer guix archive}).
bf5c74e7 9602
15f1bff4 9603La syntaxe générale est :
bf5c74e7
JL
9604
9605@example
15f1bff4 9606guix publish @var{options}@dots{}
bf5c74e7
JL
9607@end example
9608
15f1bff4
JL
9609Lancer @command{guix publish} sans arguments supplémentaires lancera un
9610serveur HTTP sur le port 8080 :
bf5c74e7
JL
9611
9612@example
15f1bff4 9613guix publish
bf5c74e7
JL
9614@end example
9615
15f1bff4 9616Une 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 :
bf5c74e7 9617
15f1bff4
JL
9618@example
9619guix-daemon --substitute-urls=http://example.org:8080
9620@end example
bf5c74e7 9621
15f1bff4
JL
9622Par défaut, @command{guix publish} compresse les archives à la volée quand
9623il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
9624aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
9625s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
9626@option{--cache}, qui active le cache des archives avant de les envoyer aux
9627clients — voir les détails plus bas. La commande @command{guix weather}
9628fournit un manière pratique de vérifier ce qu'un serveur fournit
9629(@pxref{Invoquer guix weather}).
bf5c74e7 9630
15f1bff4
JL
9631En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
9632des fichiers source référencées dans les enregistrements @code{origin}
9633(@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
9634publish} tourne sur @code{example.org}, l'URL suivante renverra le fichier
9635brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
9636format @code{nix-base32}, @pxref{Invoquer guix hash}) :
bf5c74e7
JL
9637
9638@example
15f1bff4 9639http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
bf5c74e7
JL
9640@end example
9641
15f1bff4
JL
9642Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
9643dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
9644
9645@cindex journaux de construction, publication
9646Les journaux de construction sont disponibles à partir des URL @code{/log}
9647comme ceci :
bf5c74e7
JL
9648
9649@example
15f1bff4 9650http://example.org/log/gwspk@dots{}-guile-2.2.3
bf5c74e7
JL
9651@end example
9652
15f1bff4
JL
9653@noindent
9654Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
9655construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
9656avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
9657Nous recommandons de lancer @command{guix-daemon} avec
9658@code{--log-compression=gzip} parce que les navigateurs web les
9659décompressent automatiquement, ce qui n'est pas le cas avec la compression
9660bzip2.
bf5c74e7 9661
15f1bff4 9662Les options suivantes sont disponibles :
bf5c74e7 9663
15f1bff4
JL
9664@table @code
9665@item --port=@var{port}
9666@itemx -p @var{port}
9667Écoute les requêtes HTTP sur le @var{port}
bf5c74e7 9668
15f1bff4
JL
9669@item --listen=@var{hôte}
9670Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
9671accepte les connexions de n'importe quelle interface.
bf5c74e7 9672
15f1bff4
JL
9673@item --user=@var{utilisateur}
9674@itemx -u @var{utilisateur}
9675Charge les privilèges de @var{utilisateur} le plus vite possible —
9676c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
9677signature a été lue.
bf5c74e7 9678
15f1bff4
JL
9679@item --compression[=@var{niveau}]
9680@itemx -C [@var{niveau}]
9681Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
9682zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
9683différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
9684meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
bf5c74e7 9685
15f1bff4
JL
9686À moins que @option{--cache} ne soit utilisé, la compression se fait à la
9687volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
9688charge sur la machine qui fait tourner @command{guix publish}, c'est une
9689bonne idée de choisir un niveau de compression faible, de lancer
9690@command{guix publish} derrière un serveur de cache ou d'utiliser
9691@option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
9692@command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
9693réponse.
bf5c74e7 9694
15f1bff4
JL
9695@item --cache=@var{répertoire}
9696@itemx -c @var{répertoire}
9697Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
9698@var{répertoire} et ne sert que les archives dans ce cache.
bf5c74e7 9699
15f1bff4
JL
9700Lorsque cette option est omise, les archives et les métadonnées sont crées à
9701la volée. Cela réduit la bande passante disponible, surtout quand la
9702compression est activée puisqu'elle pourrait être limitée par le CPU. Un
9703autre inconvénient au mode par défaut est que la taille des archives n'est
9704pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
9705@code{Content-Length} à ses réponses, ce qui empêche les clients de savoir
9706la quantité de données à télécharger.
bf5c74e7 9707
15f1bff4
JL
9708À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
9709un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
9710déclenche la création de l'archive — en calculant son @code{.narinfo} et en
9711compressant l'archive au besoin. Une fois l'archive cachée dans
9712@var{répertoire}, les requêtes suivantes réussissent et sont servies
9713directement depuis le cache, ce qui garanti que les clients ont la meilleure
9714bande passante possible.
bf5c74e7 9715
15f1bff4
JL
9716Le processus de création est effectué par des threads de travail. Par
9717défaut, un thread par cœur du CPU est créé, mais cela peut être
9718personnalisé. Voir @option{--workers} plus bas.
bf5c74e7 9719
15f1bff4
JL
9720Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
9721automatiquement supprimées lorsqu'elles expirent.
bf5c74e7 9722
15f1bff4
JL
9723@item --workers=@var{N}
9724Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
9725thread de travail pour créer les archives.
bf5c74e7 9726
15f1bff4
JL
9727@item --ttl=@var{ttl}
9728Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
9729vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
9730signifie 5 jours, @code{1m} signifie un mois, etc.
bf5c74e7 9731
15f1bff4
JL
9732Cela permet au Guix de l'utilisateur de garder les informations en cache
9733pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
9734pas lui-même que les éléments du dépôt qu'il fournit seront toujours
9735disponible pendant la durée @var{ttl}.
9736
9737En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
9738n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
9739dans le dépôt peuvent être supprimées.
bf5c74e7 9740
15f1bff4
JL
9741@item --nar-path=@var{chemin}
9742Utilise @var{chemin} comme préfixe des URL de fichier « nar »
9743(@pxref{Invoquer guix archive, normalized archives}).
bf5c74e7 9744
15f1bff4
JL
9745Par défaut, les nars sont présents à l'URL comme
9746@code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
9747changer la partie @code{/nar} en @var{chemin}.
bf5c74e7 9748
15f1bff4
JL
9749@item --public-key=@var{fichier}
9750@itemx --private-key=@var{fichier}
9751Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
9752signer les éléments avant de les publier.
bf5c74e7 9753
15f1bff4
JL
9754Les fichiers doivent correspondre à la même pair de clefs (la clef privée
9755est utilisée pour signer et la clef publique est seulement ajouté aux
9756métadonnées de la signature). Ils doivent contenir les clefs dans le format
9757s-expression canonique produit par @command{guix archive --generate-key}
9758(@pxref{Invoquer guix archive}). Par défaut,
9759@file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
9760utilisés.
bf5c74e7 9761
15f1bff4
JL
9762@item --repl[=@var{port}]
9763@itemx -r [@var{port}]
9764Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
9765Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
9766pour déboguer un serveur @command{guix publish} qui tourne.
9767@end table
bf5c74e7 9768
15f1bff4
JL
9769Enabling @command{guix publish} on Guix System is a one-liner: just
9770instantiate a @code{guix-publish-service-type} service in the
9771@code{services} field of the @code{operating-system} declaration
9772(@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
bf5c74e7 9773
15f1bff4
JL
9774Si vous avez installé Guix sur une « distro extérieure », suivez ces
9775instructions :
9776
9777@itemize
9778@item
9779Si votre distro hôte utilise le système d'init systemd :
bf5c74e7
JL
9780
9781@example
15f1bff4
JL
9782# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
9783 /etc/systemd/system/
9784# systemctl start guix-publish && systemctl enable guix-publish
bf5c74e7
JL
9785@end example
9786
15f1bff4
JL
9787@item
9788Si votre distribution hôte utilise le système d'initialisation Upstart :
bf5c74e7
JL
9789
9790@example
15f1bff4
JL
9791# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
9792# start guix-publish
bf5c74e7
JL
9793@end example
9794
15f1bff4
JL
9795@item
9796Sinon, procédez de manière similaire avec votre système d'init de votre
9797distro.
9798@end itemize
bf5c74e7 9799
15f1bff4
JL
9800@node Invoquer guix challenge
9801@section Invoquer @command{guix challenge}
bf5c74e7 9802
15f1bff4
JL
9803@cindex constructions reproductibles
9804@cindex constructions vérifiables
9805@cindex @command{guix challenge}
9806@cindex défi
9807Est-ce que les binaires fournis par ce serveur correspondent réellement au
9808code source qu'il dit avoir construit ? Est-ce que le processus de
9809construction d'un paquet est déterministe ? Ce sont les question auxquelles
9810la commande @command{guix challenge} essaye de répondre.
bf5c74e7 9811
15f1bff4
JL
9812La première question est évidemment importante : avant d'utiliser un serveur
9813de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
9814fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
9815permet la première : si les constructions des paquets sont déterministes
9816alors des constructions indépendantes du paquet devraient donner le même
9817résultat, bit à bit ; si un serveur fournit un binaire différent de celui
9818obtenu localement, il peut être soit corrompu, soit malveillant.
bf5c74e7 9819
15f1bff4
JL
9820On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
9821toutes les entrées du processus qui construit le fichier ou le répertoire —
9822les compilateurs, les bibliothèques, les scripts de construction,
9823etc. (@pxref{Introduction}). En supposant que les processus de construction
9824sont déterministes, un nom de fichier dans le dépôt devrait correspondre
9825exactement à une sortie de construction. @command{guix challenge} vérifie
9826si il y a bien effectivement une seule correspondance en comparant les
9827sorties de plusieurs constructions indépendantes d'un élément du dépôt
9828donné.
bf5c74e7 9829
15f1bff4 9830La sortie de la commande ressemble à :
bf5c74e7 9831
15f1bff4
JL
9832@smallexample
9833$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
9834updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
9835updating list of substitutes from 'https://guix.example.org'... 100.0%
9836/gnu/store/@dots{}-openssl-1.0.2d contents differ:
9837 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
9838 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
9839 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
9840/gnu/store/@dots{}-git-2.5.0 contents differ:
9841 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
9842 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
9843 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
9844/gnu/store/@dots{}-pius-2.1.1 contents differ:
9845 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
9846 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
9847 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
bf5c74e7 9848
15f1bff4 9849@dots{}
bf5c74e7 9850
15f1bff4
JL
98516,406 éléments du dépôt ont été analysés :
9852 - 4,749 (74.1%) étaient identiques
9853 - 525 (8.2%) étaient différents
9854 - 1,132 (17.7%) étaient impossibles à évaluer
9855@end smallexample
bf5c74e7 9856
15f1bff4
JL
9857@noindent
9858Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
9859déterminer l'ensemble des dérivations construites localement — en opposition
9860aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
9861demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
9862les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
9863différent de la construction locale.
bf5c74e7 9864
15f1bff4
JL
9865@cindex non-déterminisme, dans les constructions des paquets
9866As an example, @code{guix.example.org} always gets a different answer.
9867Conversely, @code{@value{SUBSTITUTE-SERVER}} agrees with local builds,
9868except in the case of Git. This might indicate that the build process of
9869Git is non-deterministic, meaning that its output varies as a function of
9870various things that Guix does not fully control, in spite of building
9871packages in isolated environments (@pxref{Fonctionnalités}). Most common sources
9872of non-determinism include the addition of timestamps in build results, the
9873inclusion of random numbers, and directory listings sorted by inode number.
9874See @uref{https://reproducible-builds.org/docs/}, for more information.
9875
9876Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
9877chose comme cela (@pxref{Invoquer guix archive}) :
bf5c74e7
JL
9878
9879@example
15f1bff4
JL
9880$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
9881 | guix archive -x /tmp/git
9882$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
bf5c74e7
JL
9883@end example
9884
15f1bff4
JL
9885This command shows the difference between the files resulting from the local
9886build, and the files resulting from the build on
9887@code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging
9888Files,, diffutils, Comparing and Merging Files}). The @command{diff}
9889command works great for text files. When binary files differ, a better
9890option is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
9891visualize differences for all kinds of files.
9892
9893Une fois que vous avez fait ce travail, vous pourrez dire si les différences
9894sont dues au non-déterminisme du processus de construction ou à la
9895malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
9896les sources de non-déterminisme dans les paquets pour rendre plus facile la
9897vérification des substituts, mais bien sûr, c'est un processus qui
9898n'implique pas que Guix, mais une grande partie de la communauté des
9899logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
9900pour aider à corriger le problème.
9901
9902If you are writing packages for Guix, you are encouraged to check whether
9903@code{@value{SUBSTITUTE-SERVER}} and other substitute servers obtain the
9904same build result as you did with:
bf5c74e7
JL
9905
9906@example
15f1bff4 9907$ guix challenge @var{paquet}
bf5c74e7
JL
9908@end example
9909
15f1bff4
JL
9910@noindent
9911où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
9912@code{glibc:debug}.
bf5c74e7 9913
15f1bff4 9914La syntaxe générale est :
bf5c74e7
JL
9915
9916@example
15f1bff4 9917guix challenge @var{options} [@var{paquets}@dots{}]
bf5c74e7
JL
9918@end example
9919
15f1bff4
JL
9920Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
9921localement et celle d'un substitut fournit par un serveur, ou parmi les
9922substituts fournis par différents serveurs, la commande l'affiche comme dans
9923l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
9924différentes de 0 indiquent d'autres sortes d'erreurs).
bf5c74e7 9925
15f1bff4 9926L'option qui compte est :
bf5c74e7 9927
15f1bff4 9928@table @code
bf5c74e7 9929
15f1bff4
JL
9930@item --substitute-urls=@var{urls}
9931Considère @var{urls} comme la liste des URL des sources de substituts
9932séparés par des espaces avec lesquels comparer les paquets locaux.
bf5c74e7 9933
15f1bff4
JL
9934@item --verbose
9935@itemx -v
9936Montre des détails sur les correspondances (contenu identique) en plus des
9937informations sur différences.
bf5c74e7 9938
15f1bff4 9939@end table
bf5c74e7 9940
15f1bff4
JL
9941@node Invoquer guix copy
9942@section Invoquer @command{guix copy}
524756d1 9943
15f1bff4
JL
9944@cindex copier des éléments du dépôt par SSH
9945@cindex SSH, copie d'éléments du dépôt
9946@cindex partager des éléments du dépôt entre plusieurs machines
9947@cindex transférer des éléments du dépôt entre plusieurs machines
9948La commande @command{guix copy} copie des éléments du dépôt d'une machine
9949vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
9950commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
9951pour des détails}. Par exemple, la commande suivante copie le paquet
9952@code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
9953@var{hôte}, en tant qu'utilisateur @var{utilisateur} :
bf5c74e7
JL
9954
9955@example
15f1bff4
JL
9956guix copy --to=@var{utilisateur}@@@var{hôte} \
9957 coreutils `readlink -f ~/.guix-profile`
bf5c74e7
JL
9958@end example
9959
15f1bff4
JL
9960Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
9961pas envoyés.
9962
9963La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
9964@var{hôte}, en supposant qu'ils y sont présents :
bf5c74e7
JL
9965
9966@example
15f1bff4 9967guix copy --from=@var{hôte} libreoffice gimp
bf5c74e7
JL
9968@end example
9969
15f1bff4
JL
9970La connexion SSH est établie avec le client Guile-SSH, qui set compatible
9971avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
9972et utilise l'agent SSH pour l'authentification.
bf5c74e7 9973
15f1bff4
JL
9974La clef utilisée pour signer les éléments qui sont envoyés doit être
9975acceptée par la machine distante. De même, la clef utilisée pour la machine
9976distante depuis laquelle vous récupérez des éléments doit être dans
9977@file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
9978@xref{Invoquer guix archive}, pour plus d'informations sur
9979l'authentification des éléments du dépôt.
bf5c74e7 9980
15f1bff4 9981La syntaxe générale est :
bf5c74e7
JL
9982
9983@example
15f1bff4 9984guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
bf5c74e7
JL
9985@end example
9986
15f1bff4 9987Vous devez toujours spécifier l'une des options suivantes :
bf5c74e7 9988
15f1bff4
JL
9989@table @code
9990@item --to=@var{spec}
9991@itemx --from=@var{spec}
9992Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
9993être une spécification SSH comme @code{example.org},
9994@code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
9995@end table
bf5c74e7 9996
15f1bff4
JL
9997L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
9998éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
bf5c74e7 9999
15f1bff4
JL
10000Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
10001construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
10002options de construction communes sont supportées (@pxref{Options de construction communes}).
bf5c74e7 10003
bf5c74e7 10004
15f1bff4
JL
10005@node Invoquer guix container
10006@section Invoquer @command{guix container}
10007@cindex conteneur
10008@cindex @command{guix container}
10009@quotation Remarque
10010À la version @value{VERSION}, cet outil est toujours expérimental.
10011L'interface est sujette à changement radicaux dans le futur.
10012@end quotation
bf5c74e7 10013
15f1bff4
JL
10014Le but de @command{guix container} est de manipuler des processus qui
10015tournent dans un environnement séparé, connus sous le nom de « conteneur »,
10016typiquement créés par les commandes @command{guix environment}
10017(@pxref{Invoquer guix environment}) et @command{guix system container}
10018(@pxref{Invoquer guix system}).
bf5c74e7 10019
15f1bff4 10020La syntaxe générale est :
bf5c74e7
JL
10021
10022@example
15f1bff4 10023guix container @var{action} @var{options}@dots{}
bf5c74e7
JL
10024@end example
10025
15f1bff4
JL
10026@var{action} spécifie les opérations à effectuer avec un conteneur, et
10027@var{options} spécifie les arguments spécifiques au contexte pour l'action.
1d8d69c8 10028
15f1bff4 10029Les actions suivantes sont disponibles :
bf5c74e7 10030
15f1bff4
JL
10031@table @code
10032@item exec
10033Exécute une commande dans le contexte d'un conteneur lancé.
10034
10035La syntaxe est :
bf5c74e7
JL
10036
10037@example
15f1bff4 10038guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
bf5c74e7
JL
10039@end example
10040
15f1bff4
JL
10041@var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
10042nom du fichier exécutable dans le système de fichiers racine du conteneur.
10043@var{arguments} sont les options supplémentaires à passer à @var{programme}.
bf5c74e7 10044
15f1bff4
JL
10045The following command launches an interactive login shell inside a Guix
10046system container, started by @command{guix system container}, and whose
10047process ID is 9001:
bf5c74e7
JL
10048
10049@example
15f1bff4 10050guix container exec 9001 /run/current-system/profile/bin/bash --login
bf5c74e7
JL
10051@end example
10052
15f1bff4
JL
10053Remarquez que @var{pid} ne peut pas être le processus parent d'un
10054conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
10055fils.
1d8d69c8 10056
15f1bff4
JL
10057@end table
10058
10059@node Invoquer guix weather
10060@section Invoquer @command{guix weather}
1d8d69c8 10061
15f1bff4
JL
10062Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
10063et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
10064commande @command{guix weather} rapporte la disponibilité des substituts sur
10065les serveurs spécifiés pour que vous sachiez si vous allez raller
10066aujourd'hui. Cela peut parfois être une information utile pour les
10067utilisateurs, mais elle est surtout utile pour les personnes qui font
10068tourner @command{guix publish} (@pxref{Invoquer guix publish}).
1d8d69c8 10069
15f1bff4
JL
10070@cindex statistiques sur les substituts
10071@cindex disponibilité des substituts
10072@cindex substituts, disponibilité
10073@cindex weather, disponibilité des substituts
10074Voici un exemple :
bf5c74e7 10075
15f1bff4
JL
10076@example
10077$ guix weather --substitute-urls=https://guix.example.org
10078calcul de 5,872 dérivations de paquets pour x86_64-linux…
10079recherche de 6,128 éléments du dépôt sur https://guix.example.org…
10080mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
10081https://guix.example.org
10082 43.4% substituts disponibles (2,658 sur 6,128)
10083 7,032.5 Mo de fichiers nar (compressés)
10084 19,824.2 Mo sur le disque (décompressés)
10085 0.030 secondes par requêtes (182.9 secondes au total)
10086 33.5 requêtes par seconde
bf5c74e7 10087
15f1bff4
JL
10088 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
10089 867 constructions dans la queue
10090 x86_64-linux : 518 (59.7%)
10091 i686-linux : 221 (25.5%)
10092 aarch64-linux : 128 (14.8%)
10093 vitesse de construction : 23.41 constructions par heure
10094 x86_64-linux : 11.16 constructions par heure
10095 i686-linux : 6.03 constructions par heure
10096 aarch64-linux : 6.41 constructions par heure
10097@end example
bf5c74e7 10098
15f1bff4
JL
10099@cindex intégration continue, statistiques
10100As you can see, it reports the fraction of all the packages for which
10101substitutes are available on the server---regardless of whether substitutes
10102are enabled, and regardless of whether this server's signing key is
10103authorized. It also reports the size of the compressed archives (``nars'')
10104provided by the server, the size the corresponding store items occupy in the
10105store (assuming deduplication is turned off), and the server's throughput.
10106The second part gives continuous integration (CI) statistics, if the server
10107supports it. In addition, using the @option{--coverage} option,
10108@command{guix weather} can list ``important'' package substitutes missing on
10109the server (see below).
bf5c74e7 10110
15f1bff4
JL
10111Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
10112(@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
10113@command{guix challenge}, il ignore les signatures de ces substituts, ce qui
10114n'est pas dangereux puisque la commande ne fait que récupérer des
10115statistiques et n'installe pas ces substituts.
bf5c74e7 10116
15f1bff4
JL
10117Entre autres choses, il est possible de demander des types de système
10118particuliers et des ensembles de paquets particuliers. Les options
10119disponibles sont listées plus bas.
bf5c74e7 10120
15f1bff4
JL
10121@table @code
10122@item --substitute-urls=@var{urls}
10123@var{urls} est la liste des URL des serveurs de substituts séparés par des
10124espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
10125de substituts par défaut est utilisé.
bf5c74e7 10126
15f1bff4
JL
10127@item --system=@var{système}
10128@itemx -s @var{système}
10129Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
10130@code{aarch64-linux}. Cette option peut être répétée, auquel cas
10131@command{guix weather} demandera les substituts de plusieurs types de
10132systèmes.
bf5c74e7 10133
15f1bff4
JL
10134@item --manifest=@var{fichier}
10135Plutôt que de demander des substituts pour tous les paquets, demande
10136uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
10137contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
10138package} (@pxref{Invoquer guix package}).
bf5c74e7 10139
15f1bff4
JL
10140@item --coverage[=@var{count}]
10141@itemx -c [@var{count}]
10142Report on substitute coverage for packages: list packages with at least
10143@var{count} dependents (zero by default) for which substitutes are
10144unavailable. Dependent packages themselves are not listed: if @var{b}
10145depends on @var{a} and @var{a} has no substitutes, only @var{a} is listed,
10146even though @var{b} usually lacks substitutes as well. The result looks
10147like this:
10148
10149@example
10150$ guix weather --substitute-urls=https://ci.guix.fr.info -c 10
10151computing 8,983 package derivations for x86_64-linux...
10152looking for 9,343 store items on https://ci.guix.fr.info...
10153updating substitutes from 'https://ci.guix.fr.info'... 100.0%
10154https://ci.guix.fr.info
10155 64.7% substitutes available (6,047 out of 9,343)
10156@dots{}
101572502 packages are missing from 'https://ci.guix.fr.info' for 'x86_64-linux', among which:
10158 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
10159 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
10160 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
10161 @dots{}
bf5c74e7
JL
10162@end example
10163
15f1bff4
JL
10164What this example shows is that @code{kcoreaddons} and presumably the 58
10165packages that depend on it have no substitutes at @code{ci.guix.fr.info};
10166likewise for @code{qgpgme} and the 46 packages that depend on it.
bf5c74e7 10167
15f1bff4
JL
10168If you are a Guix developer, or if you are taking care of this build farm,
10169you'll probably want to have a closer look at these packages: they may
10170simply fail to build.
10171@end table
bf5c74e7 10172
15f1bff4
JL
10173@node Invoquer guix processes
10174@section Invoquer @command{guix processes}
bf5c74e7 10175
15f1bff4
JL
10176La commande @command{guix processes} peut être utile pour les développeurs
10177et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
10178et sur les fermes de construction : elle liste les sessions actuelles (les
10179connexions au démon), ainsi que des informations sur les processus en
10180question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
10181démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
10182@emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
bf5c74e7 10183
15f1bff4
JL
10184@example
10185$ sudo guix processes
10186SessionPID: 19002
10187ClientPID: 19090
10188ClientCommand: guix environment --ad-hoc python
bf5c74e7 10189
15f1bff4
JL
10190SessionPID: 19402
10191ClientPID: 19367
10192ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
bf5c74e7 10193
15f1bff4
JL
10194SessionPID: 19444
10195ClientPID: 19419
10196ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10197LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
10198LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
10199LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
10200ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
10201ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
10202ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
bf5c74e7
JL
10203@end example
10204
15f1bff4
JL
10205Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
10206: @command{guix environment}, @command{guix publish} et l'outil
10207d'intégration continue Cuirass ; leur identifiant de processus (PID) est
10208donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
10209PID du sous-processus @command{guix-daemon} de cette session particulière.
2cf2c778 10210
15f1bff4
JL
10211Les champs @code{LockHeld} montrent quels éléments du dépôt sont
10212actuellement verrouillés par cette session, ce qui correspond aux éléments
10213du dépôt qui sont en train d'être construits ou d'être substitués (le champ
10214@code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
10215en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
10216ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
2cf2c778 10217
15f1bff4
JL
10218La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
10219@command{recsel} pour sélectionner les sessions qui nous intéressent
10220(@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
10221exemple, la commande montre la ligne de commande et le PID du client qui
10222effectue la construction d'un paquet Perl :
2cf2c778
JL
10223
10224@example
15f1bff4
JL
10225$ sudo guix processes | \
10226 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
10227ClientPID: 19419
10228ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
2cf2c778
JL
10229@end example
10230
2cf2c778 10231
bf5c74e7 10232@node Configuration système
15f1bff4 10233@chapter Configuration système
bf5c74e7 10234
1d8d69c8
JL
10235@cindex configuration du système
10236La distribution système Guix utilise un mécanisme de configuration du
10237système cohérent. On veut dire par là que tous les aspects de la
10238configuration globale du système — comme la disponibilité des services
10239système, des fuseaux horaires, des paramètres linguistiques, des comptes
10240utilisateurs — sont déclarés à un seul endroit. Une telle
10241@dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
10242en vigueur.
bf5c74e7
JL
10243
10244@c Yes, we're talking of Puppet, Chef, & co. here. ↑
1d8d69c8
JL
10245L'un des avantages de placer toute la configuration du système sous le
10246contrôle de Guix est de permettre les mises à jour transactionnelles du
10247système ce qui rend possible le fait de revenir en arrière à une
10248instanciation précédent du système, si quelque chose se passait mal avec le
10249nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
10250réplication de la même configuration sur plusieurs machines différentes ou à
10251différents moments dans le temps, sans avoir à recourir à des outils
10252d'administrations supplémentaires au-dessus des outils du système.
10253
10254Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
10255le point de vue de l'administrateur système en expliquant comment le système
10256est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
10257être étendu, par exemple pour supporter de nouveaux services systèmes.
bf5c74e7
JL
10258
10259@menu
3cacfa9e
LC
10260* Utiliser le système de configuration:: Personnaliser votre système
10261 GNU@.
bf5c74e7
JL
10262* Référence de système d'exploitation:: Détail sur la déclaration de
10263 système d'exploitation.
10264* Systèmes de fichiers:: Configurer les montages de systèmes de
10265 fichiers.
10266* Périphériques mappés:: Gestion des périphériques de bloc.
10267* Comptes utilisateurs:: Spécifier des comptes utilisateurs.
10268* Régionalisation:: Paramétrer la langue et les conventions
10269 culturelles.
10270* Services:: Spécifier les services du système.
10271* Programmes setuid:: Programmes tournant avec les privilèges root.
3cacfa9e 10272* Certificats X.509:: Authentifier les serveurs HTTPS@.
bf5c74e7
JL
10273* Name Service Switch:: Configurer le « name service switch » de la
10274 libc.
10275* Disque de RAM initial:: Démarrage de Linux-Libre.
10276* Configuration du chargeur d'amorçage:: Configurer le chargeur
10277 d'amorçage.
10278* Invoquer guix system:: Instantier une configuration du système.
15f1bff4 10279* Running Guix in a VM:: How to run Guix System in a virtual machine.
bf5c74e7
JL
10280* Définir des services:: Ajouter de nouvelles définitions de services.
10281@end menu
10282
10283@node Utiliser le système de configuration
15f1bff4 10284@section Utiliser le système de configuration
bf5c74e7 10285
1d8d69c8
JL
10286Le système d'exploitation est configuré en fournissant une déclaration
10287@code{operating-system} dans un fichier qui peut être passé à la command
10288@command{guix system} (@pxref{Invoquer guix system}). Une configuration
10289simple, avec les services systèmes par défaut, le noyau Linux-Libre par
10290défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
10291:
bf5c74e7
JL
10292
10293@findex operating-system
10294@lisp
10295@include os-config-bare-bones.texi
10296@end lisp
10297
1d8d69c8
JL
10298Cet exemple devrait se comprendre de lui-même. Certains champs définis
10299ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
10300D'autres comme @code{packages} et @code{services} peuvent être omis auquel
10301cas ils ont une valeur par défaut.
bf5c74e7 10302
1d8d69c8
JL
10303Ci-dessous nous discutons des effets de certains des champs les plus
10304importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
10305les champs disponibles) et comment @dfn{instancier} le système
10306d'exploitation avec @command{guix system}.
bf5c74e7 10307
15f1bff4 10308@unnumberedsubsec Bootloader
524756d1 10309
adfb167f
JL
10310@cindex ancien système de démarrage, sur les machines Intel
10311@cindex démarrage BIOS, sur les machines Intel
10312@cindex démarrage UEFI
10313@cindex démarrage EFI
10314Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
10315votre système. Les machines basées sur les processeurs Intel peuvent
10316démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
10317Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
10318Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
10319@code{bootloader} devrait contenir quelque chose comme cela :
524756d1
JL
10320
10321@example
10322(bootloader-configuration
10323 (bootloader grub-efi-bootloader)
10324 (target "/boot/efi"))
10325@end example
10326
adfb167f
JL
10327@xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
10328configuration disponibles.
524756d1 10329
15f1bff4 10330@unnumberedsubsec Paquets visibles sur tout le système
bf5c74e7
JL
10331
10332@vindex %base-packages
1d8d69c8
JL
10333Le champ @code{packages} liste les paquets qui seront visibles sur tout le
10334système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
adfb167f
JL
10335d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
10336utilisateurs (@pxref{Invoquer guix package}). La variable
1d8d69c8
JL
10337@var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
10338les taches de base de l'administrateur et de l'utilisateur — dont les GNU
10339Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
adfb167f
JL
10340Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
10341GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
10342screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
10343@code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
bf5c74e7
JL
10344
10345@lisp
10346(use-modules (gnu packages))
10347(use-modules (gnu packages dns))
10348
10349(operating-system
10350 ;; ...
10351 (packages (cons (list bind "utils")
10352 %base-packages)))
10353@end lisp
10354
10355@findex specification->package
1d8d69c8
JL
10356Se référer aux paquets par le nom de leur variable, comme @code{bind}
10357ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
10358rendre rapidement compte de coquilles quand on a des « variables non liées
10359». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
10360le paquet, et de modifier la ligne @code{use-package-modules} en
10361conséquence. Pour éviter cela, on peut utiliser la procédure
10362@code{specification->package} du module @code{(gnu packages)}, qui renvoie
10363le meilleur paquet pour un nom donné ou un nom et une version :
bf5c74e7
JL
10364
10365@lisp
10366(use-modules (gnu packages))
10367
10368(operating-system
10369 ;; ...
10370 (packages (append (map specification->package
10371 '("tcpdump" "htop" "gnupg@@2.0"))
10372 %base-packages)))
10373@end lisp
10374
15f1bff4 10375@unnumberedsubsec Services systèmes
bf5c74e7
JL
10376
10377@cindex services
10378@vindex %base-services
15f1bff4
JL
10379The @code{services} field lists @dfn{system services} to be made available
10380when the system starts (@pxref{Services}). The @code{operating-system}
10381declaration above specifies that, in addition to the basic services, we want
10382the OpenSSH secure shell daemon listening on port 2222 (@pxref{Services réseau, @code{openssh-service-type}}). Under the hood,
10383@code{openssh-service-type} arranges so that @command{sshd} is started with
10384the right command-line options, possibly with supporting configuration files
10385generated as needed (@pxref{Définir des services}).
1d8d69c8
JL
10386
10387@cindex personnalisation des services
bf5c74e7 10388@findex modify-services
1d8d69c8
JL
10389Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
10390vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
10391(@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
bf5c74e7 10392
1d8d69c8
JL
10393Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
10394Mingetty (l'écran de connexion en console) dans la liste
10395@var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
10396cela, vous pouvez écrire ce qui suit dans votre déclaration de système
10397d'exploitation :
bf5c74e7
JL
10398
10399@lisp
10400(define %my-services
1d8d69c8 10401 ;; Ma propre liste de services.
bf5c74e7
JL
10402 (modify-services %base-services
10403 (guix-service-type config =>
10404 (guix-configuration
10405 (inherit config)
10406 (use-substitutes? #f)
10407 (extra-options '("--gc-keep-derivations"))))
10408 (mingetty-service-type config =>
10409 (mingetty-configuration
10410 (inherit config)))))
bf5c74e7
JL
10411(operating-system
10412 ;; @dots{}
10413 (services %my-services))
10414@end lisp
10415
1d8d69c8
JL
10416Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
10417l'instance de @code{guix-service-type}, et de toutes les instances de
10418@code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
10419comment on fait cela : d'abord, on s'arrange pour que la configuration de
10420départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
10421@var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
10422remarquez comment on utilise @code{inherit} pour créer une nouvelle
10423configuration qui a les même valeurs que l'ancienne configuration, avec
10424seulement quelques modifications.
10425
10426@cindex chiffrement du disque
10427La configuration pour une utilisation de « bureau » typique, avec une
10428partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
10429utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
10430connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
10431l'énergie, et bien plus, ressemblerait à ceci :
bf5c74e7
JL
10432
10433@lisp
10434@include os-config-desktop.texi
10435@end lisp
10436
adfb167f
JL
10437Un système graphique avec un choix de gestionnaires de fenêtres légers
10438plutôt que des environnement de bureaux complets ressemblerait à cela :
bf5c74e7
JL
10439
10440@lisp
10441@include os-config-lightweight-desktop.texi
10442@end lisp
10443
1d8d69c8
JL
10444Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
10445@code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
10446renvoyé par la commande @command{blkid}.
bf5c74e7 10447
1d8d69c8
JL
10448@xref{Services de bureaux}, pour la liste exacte des services fournis par
10449@var{%desktop-services}. @xref{Certificats X.509}, pour des informations
10450sur le paquet @code{nss-certs} utilisé ici.
bf5c74e7 10451
1d8d69c8
JL
10452Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
10453service. Si vous voulez en supprimer des services, vous pouvez le faire
10454avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
10455Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
10456l'expression suivante renvoie une liste qui contient tous les services dans
10457@var{%desktop-services} sauf le service Avahi :
bf5c74e7
JL
10458
10459@example
10460(remove (lambda (service)
10461 (eq? (service-kind service) avahi-service-type))
10462 %desktop-services)
10463@end example
10464
15f1bff4 10465@unnumberedsubsec Instancier le système
1d8d69c8
JL
10466
10467En supposant que la déclaration @code{operating-system} est stockée dans le
10468fichier @file{my-system-config.scm}, la commande @command{guix system
10469reconfigure my-system-config.scm} instancie cette configuration et en fait
10470l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
10471
10472Pour changer la configuration du système, on met normalement à jour ce
10473fichier et on relance @command{guix system reconfigure}. On ne devrait
10474jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
10475commandes qui modifient l'état du système comme @command{useradd} ou
10476@command{grub-install}. En fait, vous devez les éviter parce que non
10477seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
10478à des versions précédents du système, si vous en avez besoin.
10479
10480@cindex revenir en arrière dans la configuration du système
10481En parlant de revenir en arrière, à chaque fois que vous lancez
10482@command{guix system reconfigure}, une nouvelle @dfn{génération} du système
10483est crée — sans modifier ou supprimer les générations précédentes. Les
10484anciennes générations du système ont une entrée dans le menu du chargeur
10485d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
10486serait mal passé avec la dernière génération. C'est rassurant, non ? La
10487commande @command{guix system list-generations} liste les générations du
10488système disponibles sur le disque. Il est possible de revenir à une
10489ancienne génération via les commandes @command{guix system roll-back} et
10490@command{guix system switch-generation}.
10491
adfb167f
JL
10492Bien que la commande @command{guix system reconfigure} ne modifiera pas les
10493générations précédentes, vous devez faire attention lorsque votre génération
10494actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
10495system roll-back}), puisque l'opération pourrait remplacer une génération
10496suivante (@pxref{Invoquer guix system}).
bf5c74e7 10497
15f1bff4 10498@unnumberedsubsec L'interface de programmation
bf5c74e7 10499
1d8d69c8 10500Au niveau Scheme, la grosse déclaration @code{operating-system} est
15f1bff4 10501instanciée avec la procédure monadique suivante (@pxref{La monade du dépôt}) :
bf5c74e7 10502
adfb167f 10503@deffn {Procédure monadique} operating-system-derivation os
1d8d69c8
JL
10504Renvoie une dérivation qui construit @var{os}, un objet
10505@code{operating-system} (@pxref{Dérivations}).
bf5c74e7 10506
1d8d69c8
JL
10507La sortie de la dérivation est un répertoire qui se réfère à tous les
10508paquets et d'autres fichiers supports requis pour instancier @var{os}.
bf5c74e7
JL
10509@end deffn
10510
15f1bff4
JL
10511This procedure is provided by the @code{(gnu system)} module. Along with
10512@code{(gnu services)} (@pxref{Services}), this module contains the guts of
10513Guix System. Make sure to visit it!
bf5c74e7
JL
10514
10515
10516@node Référence de système d'exploitation
15f1bff4 10517@section Référence de @code{operating-system}
bf5c74e7 10518
1d8d69c8
JL
10519Cette section résume toutes les options disponibles dans les déclarations
10520@code{operating-system} (@pxref{Utiliser le système de configuration}).
bf5c74e7 10521
1d8d69c8
JL
10522@deftp {Type de données} operating-system
10523C'est le type de données représentant une configuration d'un système
10524d'exploitation. On veut dire par là toute la configuration globale du
10525système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
bf5c74e7
JL
10526
10527@table @asis
1d8d69c8
JL
10528@item @code{kernel} (par défaut : @var{linux-libre})
10529L'objet paquet d'un noyau de système d'exploitation à
10530utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
10531le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
10532
10533@item @code{kernel-arguments} (par défaut : @code{'()})
10534Liste de chaînes ou de gexps représentant des arguments supplémentaires à
10535passer sur la ligne de commande du noyau — p.@: ex.@:
10536@code{("console=ttyS0")}.
bf5c74e7
JL
10537
10538@item @code{bootloader}
1d8d69c8 10539L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
bf5c74e7 10540
1d8d69c8 10541@item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
bf5c74e7 10542@cindex initrd
1d8d69c8
JL
10543@cindex disque de RAM initial
10544La liste des modules du noyau linux requis dans l'image disque de RAM
10545initiale. @xref{Disque de RAM initial}.
bf5c74e7 10546
1d8d69c8 10547@item @code{initrd} (par défaut : @code{base-initrd})
adfb167f
JL
10548Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
10549champ est fournit pour pouvoir personnaliser son système à bas-niveau et
10550n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
bf5c74e7 10551
1d8d69c8 10552@item @code{firmware} (par défaut : @var{%base-firmware})
bf5c74e7 10553@cindex firmware
1d8d69c8
JL
10554Liste les paquets de microgiciels chargeables pour le noyau de système
10555d'exploitation.
bf5c74e7 10556
1d8d69c8
JL
10557La valeur par défaut contient les microgiciels requis pour les périphériques
10558WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
10559Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
10560d'info sur les périphériques supportés.
bf5c74e7
JL
10561
10562@item @code{host-name}
1d8d69c8 10563Le nom d'hôte.
bf5c74e7
JL
10564
10565@item @code{hosts-file}
1d8d69c8
JL
10566@cindex fichier hosts
10567Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
10568utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
10569Library Reference Manual}). La valeur par défaut est un fichier avec des
10570entrées pour @code{localhost} et @var{host-name}.
bf5c74e7 10571
1d8d69c8
JL
10572@item @code{mapped-devices} (par défaut : @code{'()})
10573Une liste de périphériques mappés. @xref{Périphériques mappés}.
bf5c74e7
JL
10574
10575@item @code{file-systems}
1d8d69c8 10576Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
bf5c74e7 10577
1d8d69c8
JL
10578@item @code{swap-devices} (par défaut : @code{'()})
10579@cindex espaces d'échange
10580Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
10581pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
10582Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
10583@code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
10584sur un périphérique mappé, tant que le périphérique nécessaire et le système
10585de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
bf5c74e7 10586
1d8d69c8
JL
10587@item @code{users} (par défaut : @code{%base-user-accounts})
10588@itemx @code{groups} (par défaut : @var{%base-groups})
10589Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
bf5c74e7 10590
1d8d69c8
JL
10591Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
10592root » avec l'UID@tie{}0 est automatiquement ajouté.
bf5c74e7 10593
1d8d69c8
JL
10594@item @code{skeletons} (par défaut : @code{(default-skeletons)})
10595Une liste de couples composés d'un nom de fichier cible et d'un objet
10596simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
10597fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
10598utilisateurs nouvellement créés.
bf5c74e7 10599
1d8d69c8 10600Par exemple, un valeur valide ressemblerait à cela :
bf5c74e7
JL
10601
10602@example
10603`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
10604 (".guile" ,(plain-file "guile"
10605 "(use-modules (ice-9 readline))
10606 (activate-readline)")))
10607@end example
10608
1d8d69c8
JL
10609@item @code{issue} (par défaut : @var{%default-issue})
10610Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
10611affiché lorsqu'un utilisateur se connecte sur la console.
bf5c74e7 10612
1d8d69c8
JL
10613@item @code{packages} (par défaut : @var{%base-packages})
10614L'ensemble des paquets installés dans le profil global, qui est accessible à
10615partir de @file{/run/current-system/profile}.
bf5c74e7 10616
1d8d69c8
JL
10617L'ensemble par défaut contient les utilitaires de base et c'est une bonne
10618pratique d'installer les utilitaires non essentiels dans les profils
10619utilisateurs (@pxref{Invoquer guix package}).
bf5c74e7
JL
10620
10621@item @code{timezone}
1d8d69c8 10622Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
bf5c74e7 10623
1d8d69c8
JL
10624Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
10625horaire correspondant à votre région. Si vous choisissez un nom de fuseau
10626horaire invalide, @command{guix system} échouera.
bf5c74e7 10627
1d8d69c8
JL
10628@item @code{locale} (par défaut : @code{"en_US.utf8"})
10629Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
10630GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
bf5c74e7 10631
1d8d69c8
JL
10632@item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
10633La liste des définitions de locales à compiler et qui devraient être
10634utilisées à l'exécution. @xref{Régionalisation}.
bf5c74e7 10635
1d8d69c8
JL
10636@item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
10637La liste des paquets GNU@tie{}libc dont les données des paramètres
10638linguistiques sont utilisées pour construire les définitions des paramètres
10639linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
10640qui justifient cette option.
bf5c74e7 10641
1d8d69c8
JL
10642@item @code{name-service-switch} (par défaut : @var{%default-nss})
10643La configuration de NSS de la libc (name service switch) — un objet
10644@code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
bf5c74e7 10645
1d8d69c8
JL
10646@item @code{services} (par défaut : @var{%base-services})
10647Une liste d'objets services qui dénotent les services du système.
10648@xref{Services}.
bf5c74e7 10649
1d8d69c8 10650@item @code{pam-services} (par défaut : @code{(base-pam-services)})
bf5c74e7
JL
10651@cindex PAM
10652@cindex pluggable authentication modules
10653@c FIXME: Add xref to PAM services section.
1d8d69c8 10654Services PAM (@dfn{pluggable authentication module}) Linux.
bf5c74e7 10655
1d8d69c8
JL
10656@item @code{setuid-programs} (par défaut : @var{%setuid-programs})
10657Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
10658les programmes setuid. @xref{Programmes setuid}.
bf5c74e7 10659
1d8d69c8
JL
10660@item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
10661@cindex fichier sudoers
10662Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
10663(@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
bf5c74e7 10664
1d8d69c8
JL
10665Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
10666@command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
10667peuvent gagner. La valeur par défaut est que seul @code{root} et les
10668membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
bf5c74e7
JL
10669
10670@end table
10671@end deftp
10672
10673@node Systèmes de fichiers
15f1bff4 10674@section Systèmes de fichiers
bf5c74e7 10675
1d8d69c8
JL
10676La liste des systèmes de fichiers à monter est spécifiée dans le champ
10677@code{file-systems} de la déclaration de système d'exploitation
10678(@pxref{Utiliser le système de configuration}). Chaque système de fichier est
10679déclaré avec la forme @code{file-system}, comme ceci :
bf5c74e7
JL
10680
10681@example
10682(file-system
10683 (mount-point "/home")
10684 (device "/dev/sda3")
10685 (type "ext4"))
10686@end example
10687
1d8d69c8
JL
10688Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
10689l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
10690décrits plus bas.
bf5c74e7 10691
1d8d69c8
JL
10692@deftp {Type de données} file-system
10693Les objets de ce type représentent des systèmes de fichiers à monter. Ils
10694contiennent les membres suivants :
bf5c74e7
JL
10695
10696@table @asis
10697@item @code{type}
1d8d69c8
JL
10698C'est une chaîne de caractères spécifiant le type du système de fichier —
10699p.@: ex.@: @code{"ext4"}.
bf5c74e7
JL
10700
10701@item @code{mount-point}
1d8d69c8 10702Désigne l'emplacement où le système de fichier sera monté.
bf5c74e7
JL
10703
10704@item @code{device}
1d8d69c8
JL
10705Ce champ nomme le système de fichier « source ». il peut être l'une de ces
10706trois choses : une étiquette de système de fichiers, un UUID de système de
10707fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
10708offrent une manière de se référer à des systèmes de fichiers sans avoir à
10709coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
10710d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
10711obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
10712périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
10713disponibles au moment de monter le périphérique.}.
3cacfa9e
LC
10714
10715@findex file-system-label
1d8d69c8
JL
10716Les étiquettes de systèmes de fichiers sont crées avec la procédure
10717@code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
10718@file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
10719système de fichiers référencé par son étiquette, donnée par la commande
10720@command{e2label} :
bf5c74e7 10721
3cacfa9e
LC
10722@example
10723(file-system
10724 (mount-point "/home")
10725 (type "ext4")
10726 (device (file-system-label "my-home")))
10727@end example
bf5c74e7 10728
3cacfa9e 10729@findex uuid
1d8d69c8
JL
10730Les UUID sont convertis à partir de leur représentation en chaîne de
10731caractères (montrée par la command @command{tune2fs -l}) en utilisant la
10732forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
10733octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
10734RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
10735systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
10736que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
10737comme ceci :
bf5c74e7
JL
10738
10739@example
10740(file-system
10741 (mount-point "/home")
10742 (type "ext4")
bf5c74e7
JL
10743 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
10744@end example
10745
1d8d69c8
JL
10746Lorsque la source d'un système de fichiers est un périphérique mappé
10747(@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
10748nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
10749Cela est requis pour que le système sache que monter ce système de fichier
10750dépend de la présence du périphérique mappé correspondant.
10751
10752@item @code{flags} (par défaut : @code{'()})
10753C'est une liste de symboles qui dénotent des drapeaux de montage. Les
10754drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
10755(interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
10756setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
10757
10758@item @code{options} (par défaut : @code{#f})
10759C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
10760montage.
10761
10762@item @code{mount?} (par défaut : @code{#t})
10763Cette valeur indique s'il faut monter automatiquement le système de fichier
10764au démarrage du système. Lorsque la valeur est @code{#f}, le système de
10765fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
10766@command{mount}) mais n'est pas monté automatiquement.
10767
10768@item @code{needed-for-boot?} (par défaut : @code{#f})
10769Cette valeur booléenne indique si le système de fichier est nécessaire au
10770démarrage. Si c'est vrai alors le système de fichier est monté au
10771chargement du disque de RAM initial. C'est toujours le cas par exemple du
10772système de fichiers racine.
10773
10774@item @code{check?} (par défaut : @code{#t})
10775Cette valeur booléenne indique si le système de fichier doit être vérifié
10776avant de le monter.
10777
10778@item @code{create-mount-point?} (par défaut : @code{#f})
10779Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
10780pas déjà.
10781
10782@item @code{dependencies} (par défaut : @code{'()})
10783C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
10784représentent les systèmes de fichiers qui doivent être montés ou les
10785périphériques mappés qui doivent être ouverts avant (et monté ou fermés
10786après) celui-ci.
10787
10788Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
10789est une dépendance de @file{/sys/fs/cgroup/cpu} et
10790@file{/sys/fs/cgroup/memory}.
10791
10792Un autre exemple est un système de fichier qui dépend d'un périphérique
10793mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
bf5c74e7
JL
10794@end table
10795@end deftp
10796
1d8d69c8
JL
10797Le module @code{(gnu system file-systems)} exporte les variables utiles
10798suivantes.
bf5c74e7 10799
1d8d69c8
JL
10800@defvr {Variable Scheme} %base-file-systems
10801Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
10802normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
10803(voir plus bas). Les déclarations de systèmes d'exploitation devraient au
10804moins les contenir.
bf5c74e7
JL
10805@end defvr
10806
1d8d69c8
JL
10807@defvr {Variable Scheme} %pseudo-terminal-file-system
10808C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
10809@dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
10810(@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
10811pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
10812@command{xterm}.
bf5c74e7
JL
10813@end defvr
10814
1d8d69c8
JL
10815@defvr {Variable Scheme} %shared-memory-file-system
10816Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
10817partage de mémoire entre processus (@pxref{Memory-mapped I/O,
10818@code{shm_open},, libc, The GNU C Library Reference Manual}).
bf5c74e7
JL
10819@end defvr
10820
1d8d69c8
JL
10821@defvr {Variable Scheme} %immutable-store
10822Ce système de fichiers effectue un « montage lié » en lecture-seule de
10823@file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
10824les utilisateurs dont @code{root}. Cela évite que des logiciels qui
10825tournent en @code{root} ou des administrateurs systèmes ne modifient
10826accidentellement le dépôt.
bf5c74e7 10827
1d8d69c8
JL
10828Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
10829remonté en lecture-écriture dans son propre « espace de nom ».
bf5c74e7
JL
10830@end defvr
10831
1d8d69c8
JL
10832@defvr {Variable Scheme} %binary-format-file-system
10833Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
10834quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
10835demande que le module du noyau @code{binfmt.ko} soit chargé.
bf5c74e7
JL
10836@end defvr
10837
1d8d69c8
JL
10838@defvr {Variable Scheme} %fuse-control-file-system
10839Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
10840privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
10841utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
10842chargé.
bf5c74e7
JL
10843@end defvr
10844
10845@node Périphériques mappés
15f1bff4 10846@section Périphériques mappés
bf5c74e7 10847
1d8d69c8
JL
10848@cindex mappage de périphériques
10849@cindex périphériques mappés
10850Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
10851périphérique bloc, comme une partition sur un disque dur, peut être
10852@dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
10853avec des calculs supplémentaires sur les données qui naviguent entre les
10854deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
10855concept de « périphérique mappé » et celle d'un système de fichiers : les
10856deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
10857faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
10858Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
10859avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
10860hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
10861de périphériques chiffrés : toutes les écritures sont sur le périphérique
10862mappé sont chiffrées, toutes les lectures déchiffrées, de manière
10863transparente. Guix étend cette notion en considérant que tout périphérique
10864ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
10865manière créent un nouveau périphérique ; par exemple, les périphériques RAID
10866sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
10867disque ou des partitions, en un nouveau périphérique en tant qu'unique
10868partition. Un autre exemple, qui n'est pas encore disponible, sont les
10869volumes logiques LVM.
10870
10871Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
10872définie comme suit ; par exemple, voir ci-dessous.
10873
10874@deftp {Type de données} mapped-device
10875Les objets de ce type représentent des mappages de périphériques qui seront
10876effectués au démarrage du système.
bf5c74e7
JL
10877
10878@table @code
10879@item source
1d8d69c8
JL
10880C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
10881comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
10882assembler pour en créer un nouveau.
bf5c74e7
JL
10883
10884@item target
1d8d69c8
JL
10885Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
10886mappeurs noyaux comme les périphériques chiffrés de type
10887@code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
10888périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
10889de type @code{raid-device-mapping}, il faut donner le nom complet comme
10890@code{"/dev/md0"}.
bf5c74e7
JL
10891
10892@item type
1d8d69c8
JL
10893Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
10894@var{source} est mappés sur @var{target}.
bf5c74e7
JL
10895@end table
10896@end deftp
10897
1d8d69c8
JL
10898@defvr {Variable Scheme} luks-device-mapping
10899Cela définie les périphériques blocs chiffrés en LUKS avec
10900@command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
10901noyau Linux @code{dm-crypt}.
bf5c74e7
JL
10902@end defvr
10903
1d8d69c8
JL
10904@defvr {Variable Scheme} raid-device-mapping
10905Cela définie un périphérique RAID qui est assemblé avec la commande
10906@code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
10907approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
10908RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
bf5c74e7
JL
10909@end defvr
10910
1d8d69c8 10911@cindex chiffrement du disque
bf5c74e7 10912@cindex LUKS
1d8d69c8
JL
10913L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
10914@file{/dev/mapper/home} avec LUKS —
10915@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
10916mécanisme standard pour chiffrer les disques. Le périphérique
10917@file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
10918déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
bf5c74e7
JL
10919
10920@example
10921(mapped-device
10922 (source "/dev/sda3")
10923 (target "home")
10924 (type luks-device-mapping))
10925@end example
10926
1d8d69c8
JL
10927Autrement, pour devenir indépendant du numéro de périphérique, on peut
10928obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
10929une commande comme :
bf5c74e7
JL
10930
10931@example
10932cryptsetup luksUUID /dev/sda3
10933@end example
10934
1d8d69c8 10935et l'utiliser ainsi :
bf5c74e7
JL
10936
10937@example
10938(mapped-device
10939 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
10940 (target "home")
10941 (type luks-device-mapping))
10942@end example
10943
1d8d69c8
JL
10944@cindex chiffrement de l'espace d'échange
10945Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
10946d'échange peut contenir des données sensibles. Une manière de faire cela
10947est d'utiliser un fichier d'échange dans un système de fichiers sur un
10948périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
10949d'échange est chiffré parce que tout le périphérique est chiffré.
10950@xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
bf5c74e7 10951
1d8d69c8
JL
10952Un périphérique RAID formé des partitions @file{/dev/sda1} et
10953@file{/dev/sdb1} peut être déclaré ainsi :
bf5c74e7
JL
10954
10955@example
10956(mapped-device
10957 (source (list "/dev/sda1" "/dev/sdb1"))
10958 (target "/dev/md0")
10959 (type raid-device-mapping))
10960@end example
10961
1d8d69c8
JL
10962Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
10963@code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
10964Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
10965pendant la création initiale du périphérique RAID et est ensuite déterminé
10966automatiquement.
bf5c74e7
JL
10967
10968
10969@node Comptes utilisateurs
15f1bff4 10970@section Comptes utilisateurs
bf5c74e7 10971
1d8d69c8
JL
10972@cindex utilisateurs
10973@cindex comptes
10974@cindex comptes utilisateurs
10975Les comptes utilisateurs et les groupes sont gérés entièrement par la
10976déclaration @code{operating-system}. Ils sont spécifiés avec les formes
10977@code{user-account} et @code{user-group} :
bf5c74e7
JL
10978
10979@example
10980(user-account
10981 (name "alice")
10982 (group "users")
1d8d69c8
JL
10983 (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
10984 "audio" ;carte son
10985 "video" ;périphériques réseaux comme les webcams
10986 "cdrom")) ;le bon vieux CD-ROM
bf5c74e7
JL
10987 (comment "Bob's sister")
10988 (home-directory "/home/alice"))
10989@end example
10990
1d8d69c8
JL
10991Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
10992système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
10993dans la déclaration @code{operating-system} existent, et avec les propriétés
10994spécifiées. Ainsi, les modifications ou les créations de comptes ou de
10995groupes effectuées directement en invoquant des commandes comme
10996@command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
10997permet de s'assurer que le système reste exactement tel que déclaré.
bf5c74e7 10998
1d8d69c8
JL
10999@deftp {Type de données} user-account
11000Les objets de se type représentent les comptes utilisateurs. Les membres
11001suivants peuvent être spécifiés :
bf5c74e7
JL
11002
11003@table @asis
11004@item @code{name}
1d8d69c8 11005Le nom du compte utilisateur.
bf5c74e7
JL
11006
11007@item @code{group}
1d8d69c8
JL
11008@cindex groupes
11009C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
11010utilisateur auquel ce compte appartient.
bf5c74e7 11011
1d8d69c8
JL
11012@item @code{supplementary-groups} (par défaut : @code{'()})
11013Éventuellement, cela peut être définie comme une liste de noms de groupes
11014auxquels ce compte appartient.
bf5c74e7 11015
1d8d69c8
JL
11016@item @code{uid} (par défaut : @code{#f})
11017C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
11018dernier cas, le nombre est choisi automatiquement par le système à la
11019création du compte.
bf5c74e7 11020
1d8d69c8
JL
11021@item @code{comment} (par défaut : @code{""})
11022Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
bf5c74e7
JL
11023
11024@item @code{home-directory}
1d8d69c8 11025C'est le nom du répertoire personnel du compte.
bf5c74e7 11026
1d8d69c8
JL
11027@item @code{create-home-directory?} (par défaut : @code{#t})
11028Indique si le répertoire personnel du compte devrait être créé s'il n'existe
11029pas déjà.
bf5c74e7 11030
1d8d69c8
JL
11031@item @code{shell} (par défaut : Bash)
11032C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
11033comme shell (@pxref{G-Expressions}).
bf5c74e7 11034
1d8d69c8
JL
11035@item @code{system?} (par défaut : @code{#f})
11036C'est une valeur booléenne qui indique si le compte est un compte « système
11037». Les comptes systèmes sont parfois traités à part ; par exemple, les
11038gestionnaires de connexion graphiques ne les liste pas.
bf5c74e7
JL
11039
11040@anchor{user-account-password}
1d8d69c8
JL
11041@item @code{password} (par défaut : @code{#f})
11042Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
11043de passe utilisateurs en tant que @code{root} avec la commande
11044@command{passwd}, puis laisseriez l'utilisateur le changer avec
11045@command{passwd}. Les mots de passes définis avec @command{passwd} sont
11046bien sûr préservés après redémarrage et reconfiguration.
11047
11048Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
11049ce champ doit contenir le mot de passe chiffré, comme une chaîne de
11050caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
11051plus d'information sur le chiffrement des mots de passe et
11052@ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
11053sur la procédure @code{crypt} de Guile.
bf5c74e7
JL
11054
11055@end table
11056@end deftp
11057
1d8d69c8
JL
11058@cindex groupes
11059Les déclarations de groupes sont encore plus simple :
bf5c74e7
JL
11060
11061@example
11062(user-group (name "students"))
11063@end example
11064
1d8d69c8
JL
11065@deftp {Type de données} user-group
11066C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
11067quelques champs :
bf5c74e7
JL
11068
11069@table @asis
11070@item @code{name}
1d8d69c8 11071Le nom du groupe.
bf5c74e7 11072
1d8d69c8
JL
11073@item @code{id} (par défaut : @code{#f})
11074L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
11075est alloué automatiquement lorsque le groupe est créé.
bf5c74e7 11076
1d8d69c8
JL
11077@item @code{system?} (par défaut : @code{#f})
11078Cette valeur booléenne indique si le groupe est un groupe « système ». les
11079groupes systèmes ont un numéro d'ID bas.
bf5c74e7 11080
1d8d69c8
JL
11081@item @code{password} (par défaut : @code{#f})
11082Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
11083bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
11084passe du groupe.
bf5c74e7
JL
11085
11086@end table
11087@end deftp
11088
1d8d69c8
JL
11089Par simplicité, une variable liste les groupes utilisateurs de base auxquels
11090on pourrait s'attendre :
bf5c74e7 11091
1d8d69c8
JL
11092@defvr {Variable Scheme} %base-groups
11093C'est la liste des groupes utilisateur de base que les utilisateurs et les
11094paquets s'attendent à trouver sur le système. Cela comprend des groupes
11095comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
11096contrôler l'accès à certains périphériques, comme « audio », « disk » et «
11097cdrom ».
bf5c74e7
JL
11098@end defvr
11099
1d8d69c8
JL
11100@defvr {Variable Scheme} %base-user-accounts
11101C'est la liste des compte du système de base que les programmes peuvent
11102s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
bf5c74e7 11103
1d8d69c8
JL
11104Remarquez que le compte « root » n'est pas défini ici. C'est un cas
11105particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
bf5c74e7
JL
11106@end defvr
11107
11108@node Régionalisation
15f1bff4 11109@section Régionalisation
bf5c74e7 11110
1d8d69c8
JL
11111@cindex paramètres linguistiques
11112Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
11113langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
11114Library Reference Manual}). Chaque paramètre linguistique a un nom de la
11115forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
11116ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
11117avec les conventions culturelles du Luxembourg, en utilisant l'encodage
11118UTF-8.
11119
11120@cindex définition des paramètres linguistiques
11121Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
11122pour la machine en utilisant le champ @code{locale} de la déclaration
11123@code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
11124
11125Les paramètres régionaux choisis sont automatiquement ajoutés aux
11126définitions des @dfn{paramètres régionaux} connues par le système au besoin,
11127avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
11128@code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
11129@code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
11130le champ @code{locale-definitions} de @code{operating-system} — c'est utile
11131par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
11132L'ensemble par défaut de définitions comprend certains paramètres
11133linguistiques parmi les plus utilisés, mais pas toutes les variantes
11134disponibles, pour gagner de la place.
11135
11136Par exemple, pour ajouter les paramètres pour le frison septentrional en
11137Allemagne, la valeur de ce champ serait :
bf5c74e7
JL
11138
11139@example
11140(cons (locale-definition
11141 (name "fy_DE.utf8") (source "fy_DE"))
11142 %default-locale-definitions)
11143@end example
11144
1d8d69c8
JL
11145De me, pour gagner de la place, on peut vouloir lister dans
11146@code{locale-definitions} seulement les paramètres qui sont vraiment
11147utilisés, comme dans :
bf5c74e7
JL
11148
11149@example
11150(list (locale-definition
11151 (name "ja_JP.eucjp") (source "ja_JP")
11152 (charset "EUC-JP")))
11153@end example
11154
11155@vindex LOCPATH
1d8d69c8
JL
11156Les définitions des paramètres linguistiques compilées sont disponibles dans
11157@file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
11158libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
11159Guix cherche les données de régionalisation. Cet emplacement peut être
11160modifié avec la variable d'environnement @code{LOCPATH}
11161(@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
bf5c74e7 11162
1d8d69c8
JL
11163La forme @code{locale-definition} est fournie par le module @code{(gnu
11164system locale)}. Des détails sont disponibles plus bas.
bf5c74e7 11165
1d8d69c8
JL
11166@deftp {Type de données} locale-definition
11167C'est le type de données d'une définition de paramètres linguistiques.
bf5c74e7
JL
11168
11169@table @asis
11170
11171@item @code{name}
1d8d69c8
JL
11172Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
11173Library Reference Manual}, pour en savoir plus sur les noms de paramètres
11174linguistiques.
bf5c74e7
JL
11175
11176@item @code{source}
1d8d69c8
JL
11177Le nom de la source pour ce paramètre linguistique. C'est typiquement la
11178partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
bf5c74e7 11179
1d8d69c8
JL
11180@item @code{charset} (par défaut : @code{"UTF-8"})
11181Le « jeu de caractères » d'un paramètre linguistique,
11182@uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
bf5c74e7
JL
11183
11184@end table
11185@end deftp
11186
1d8d69c8
JL
11187@defvr {Variable Scheme} %default-locale-definitions
11188Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
11189comme valeur par défaut pour le champ @code{locale-definitions} des
11190déclarations @code{operating-system}.
11191
11192@cindex nom de paramètre linguistique
11193@cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
11194Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
11195caractère normalisé} pour la partie qui suit le point dans le nom
11196(@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
11197Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
11198@emph{pas}, disons, @code{uk_UA.UTF-8}.
bf5c74e7
JL
11199@end defvr
11200
15f1bff4 11201@subsection Considérations sur la compatibilité des données linguistiques
bf5c74e7 11202
1d8d69c8
JL
11203@cindex incompatibilité, des données linguistiques
11204Les déclaration @code{operating-system} fournissent un champ
11205@code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
11206compiler les déclarations de paramètres linguistiques
11207(@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
11208», vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
11209des données linguistique est parfois incompatible d'une version de la libc à
11210une autre.
bf5c74e7
JL
11211
11212@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
11213@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
1d8d69c8
JL
11214Par exemple, un programme lié à la libc version 2.21 est incapable de lire
11215les données linguistiques produites par la libc 2.22 ; pire, ce programme
11216@emph{plante} plutôt que d'ignorer les données linguistiques
11217incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
11218sauteront simplement les données linguistiques incompatibles, ce qui est
11219déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
11220mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
11221les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
11222@code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
11223
15f1bff4
JL
11224The ``problem'' with Guix is that users have a lot of freedom: They can
11225choose whether and when to upgrade software in their profiles, and might be
11226using a libc version different from the one the system administrator used to
11227build the system-wide locale data.
1d8d69c8
JL
11228
11229Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
11230propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
11231(@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
11232
11233Cependant, c'est encore mieux si les données linguistiques du système dans
11234@file{/run/current-system/locale} étaient construites avec les versions de
11235la libc utilisées sur le système, pour que tous les programmes puissent y
11236accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
11237cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
11238champ @code{locale-libcs} de @code{operating-system} :
bf5c74e7
JL
11239
11240@example
11241(use-package-modules base)
11242
11243(operating-system
11244 ;; @dots{}
11245 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
11246@end example
11247
1d8d69c8
JL
11248cet exemple créera un système contenant les définitions des paramètres
11249linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
bf5c74e7
JL
11250@file{/run/current-system/locale}.
11251
11252
11253@node Services
15f1bff4 11254@section Services
bf5c74e7 11255
1d8d69c8
JL
11256@cindex services systèmes
11257Une part importante de la préparation d'une déclaration
11258@code{operating-system} est la liste des @dfn{services systèmes} et de leur
11259configuration (@pxref{Utiliser le système de configuration}). Les services
11260systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
11261requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
11262
15f1bff4
JL
11263Guix has a broad definition of ``service'' (@pxref{Composition de services}),
11264but many services are managed by the GNU@tie{}Shepherd (@pxref{Services Shepherd}). On a running system, the @command{herd} command allows you to
11265list the available services, show their status, start and stop them, or do
11266other specific operations (@pxref{Jump Start,,, shepherd, The GNU Shepherd
11267Manual}). For example:
bf5c74e7
JL
11268
11269@example
11270# herd status
11271@end example
11272
1d8d69c8
JL
11273La commande ci-dessus, lancée en @code{root}, liste les services
11274actuellement définis. La commande @command{herd doc} montre un synopsis du
adfb167f 11275service donné et ses actions associées :
bf5c74e7
JL
11276
11277@example
11278# herd doc nscd
11279Run libc's name service cache daemon (nscd).
adfb167f
JL
11280
11281# herd doc nscd action invalidate
11282invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
bf5c74e7
JL
11283@end example
11284
1d8d69c8
JL
11285Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
11286l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
11287service nscd et redémarrent le serveur d'affichage Xorg :
bf5c74e7
JL
11288
11289@example
11290# herd stop nscd
11291Service nscd has been stopped.
11292# herd restart xorg-server
11293Service xorg-server has been stopped.
11294Service xorg-server has been started.
11295@end example
11296
1d8d69c8
JL
11297Les sections suivantes documentent les services disponibles, en commençant
11298par les services de base qui peuvent être utilisés avec une déclaration
11299@code{operating-system}.
bf5c74e7
JL
11300
11301@menu
11302* Services de base:: Services systèmes essentiels.
3cacfa9e
LC
11303* Exécution de tâches planifiées:: Le service mcron.
11304* Rotation des journaux:: Le service rottlog.
15f1bff4 11305* Services réseau:: Paramètres réseau, démon SSH, etc.
3cacfa9e
LC
11306* Système de fenêtrage X:: Affichage graphique.
11307* Services d'impression:: Support pour les imprimantes locales et
11308 distantes.
11309* Services de bureaux:: D-Bus et les services de bureaux.
2cf2c778 11310* Services de son:: Services ALSA et Pulseaudio.
3cacfa9e
LC
11311* Services de bases de données:: Bases SQL, clefs-valeurs, etc.
11312* Services de courriels:: IMAP, POP3, SMTP, et tout ça.
11313* Services de messagerie:: Services de messagerie.
11314* Services de téléphonie:: Services de téléphonie.
11315* Services de surveillance:: Services de surveillance.
11316* Services Kerberos:: Services Kerberos.
11317* Services web:: Services web.
11318* Services de certificats:: Certificats TLS via Let's Encrypt.
11319* Services DNS:: Démons DNS@.
11320* Services VPN:: Démons VPN
11321* Système de fichiers en réseau:: Services liés à NFS@.
11322* Intégration continue:: Le service Cuirass.
adfb167f
JL
11323* Services de gestion de l'énergie:: Augmenter la durée de vie de la
11324 batterie.
3cacfa9e
LC
11325* Services audio:: MPD@.
11326* Services de virtualisation:: Services de virtualisation.
11327* Services de contrôle de version:: Fournit des accès distants à des
11328 dépôts Git.
11329* Services de jeu:: Serveurs de jeu.
11330* Services divers:: D'autres services.
bf5c74e7
JL
11331@end menu
11332
11333@node Services de base
15f1bff4 11334@subsection Services de base
bf5c74e7 11335
1d8d69c8 11336Le module @code{(gnu services base)} fournit des définitions de services
15f1bff4 11337pour les services de base qu'on peut attendre du système. Les services
1d8d69c8 11338exportés par ce module sort listés ci-dessous.
bf5c74e7 11339
1d8d69c8
JL
11340@defvr {Variable Scheme} %base-services
11341Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
11342attendre du système : un service de connexion (mingetty) sur chaque tty,
11343syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
11344périphériques udev, et plus.
bf5c74e7 11345
1d8d69c8
JL
11346C'est la valeur par défaut du champ @code{services} des déclarations
11347@code{operating-system}. Habituellement, lors de la personnalisation d'un
11348système, vous voudrez ajouter des services à ceux de @var{%base-services},
11349comme ceci :
bf5c74e7
JL
11350
11351@example
15f1bff4
JL
11352(append (list (service avahi-service-type)
11353 (service openssh-service-type))
11354 %base-services)
bf5c74e7
JL
11355@end example
11356@end defvr
11357
1d8d69c8
JL
11358@defvr {Variable Scheme} special-files-service-type
11359C'est le service qui met en place des « fichiers spéciaux » comme
11360@file{/bin/sh} ; une instance de ce service fait partie de
11361@code{%base-services}.
bf5c74e7 11362
1d8d69c8
JL
11363La valeur associée avec les services @code{special-files-service-type} doit
11364être une liste de couples dont le premier élément est le « fichier spécial »
11365et le deuxième sa cible. Par défaut il s'agit de :
bf5c74e7
JL
11366
11367@cindex @file{/bin/sh}
1d8d69c8 11368@cindex @file{sh}, dans @file{/bin}
bf5c74e7
JL
11369@example
11370`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
11371@end example
11372
11373@cindex @file{/usr/bin/env}
1d8d69c8
JL
11374@cindex @file{env}, dans @file{/usr/bin}
11375Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
11376pouvez changer cela en :
bf5c74e7
JL
11377
11378@example
11379`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
11380 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
11381@end example
11382
1d8d69c8
JL
11383Comme il fait parti de @code{%base-services}, vous pouvez utiliser
11384@code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
11385(@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
11386simple d'ajouter un fichier spécial est d'utiliser la procédure
11387@code{extra-special-file} (voir plus bas).
bf5c74e7
JL
11388@end defvr
11389
1d8d69c8
JL
11390@deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
11391Utilise @var{target} comme « fichier spécial » @var{file}.
bf5c74e7 11392
1d8d69c8
JL
11393Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
11394votre déclaration de système d'exploitation crée un lien symbolique
11395@file{/usr/bin/env} :
bf5c74e7
JL
11396
11397@example
11398(extra-special-file "/usr/bin/env"
11399 (file-append coreutils "/bin/env"))
11400@end example
11401@end deffn
11402
1d8d69c8
JL
11403@deffn {Procédure Scheme} host-name-service @var{name}
11404Renvoie un service qui paramètre le nom d'hôte à @var{name}.
bf5c74e7
JL
11405@end deffn
11406
1d8d69c8
JL
11407@deffn {Procédure Scheme} login-service @var{config}
11408Renvoie un service pour lancer login en suivant @var{config}, un objet
11409@code{<login-configuration>} qui spécifie le message du jour, entre autres
11410choses.
bf5c74e7
JL
11411@end deffn
11412
1d8d69c8
JL
11413@deftp {Type de données} login-configuration
11414Le type de données qui représente la configuration de login.
bf5c74e7
JL
11415
11416@table @asis
11417
11418@item @code{motd}
1d8d69c8
JL
11419@cindex message du jour
11420Un objet simili-fichier contenant le « message du jour ».
bf5c74e7 11421
1d8d69c8
JL
11422@item @code{allow-empty-passwords?} (par défaut : @code{#t})
11423Permet les mots de passes vides par défaut pour que les utilisateurs
11424puissent se connecter au compte « root » la première fois après sa création.
bf5c74e7
JL
11425
11426@end table
11427@end deftp
11428
1d8d69c8
JL
11429@deffn {Procédure Scheme} mingetty-service @var{config}
11430Renvoie un service qui lance mingetty en suivant @var{config}, un objet
11431@code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
11432choses.
bf5c74e7
JL
11433@end deffn
11434
1d8d69c8
JL
11435@deftp {Type de données} mingetty-configuration
11436C'est le type de données représentant la configuration de Mingetty, qui
11437fournit l'implémentation par défaut de l'écran de connexion des consoles
11438virtuelles.
bf5c74e7
JL
11439
11440@table @asis
11441
11442@item @code{tty}
1d8d69c8
JL
11443Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
11444@code{"tty1"}.
bf5c74e7 11445
1d8d69c8
JL
11446@item @code{auto-login} (par défaut : @code{#f})
11447Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
11448dénotant le nom d'utilisateur pour lequel le système se connecte
11449automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
11450d'utilisateur et un mot de passe pour se connecter.
bf5c74e7 11451
1d8d69c8
JL
11452@item @code{login-program} (par défaut : @code{#f})
11453Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
11454est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
11455dénotant le nom d'un programme de connexion.
bf5c74e7 11456
1d8d69c8
JL
11457@item @code{login-pause?} (par défaut : @code{#f})
11458Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
11459devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
bf5c74e7 11460
1d8d69c8
JL
11461@item @code{mingetty} (par défaut : @var{mingetty})
11462Le paquet Mingetty à utiliser.
bf5c74e7
JL
11463
11464@end table
11465@end deftp
11466
1d8d69c8
JL
11467@deffn {Procédure Scheme} agetty-service @var{config}
11468Renvoie un service pour lancer agetty en suivant @var{config}, un objet
11469@code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
11470choses.
bf5c74e7
JL
11471@end deffn
11472
1d8d69c8
JL
11473@deftp {Type de données} agetty-configuration
11474Ce type de données représente la configuration de agetty, qui implémente
11475l'écran de connexion des consoles virtuelles et series. Voir la page de
11476manuel de @code{agetty(8)} pour plus d'informations.
bf5c74e7
JL
11477
11478@table @asis
11479
11480@item @code{tty}
1d8d69c8
JL
11481Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
11482@code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
11483raisonnable d'un port série utilisé par le noyau Linux.
11484
11485Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
11486ligne de commande du noyau, agetty extraira le nom du périphérique du port
11487série à partir de cette option.
11488
11489Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
11490la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
11491du port série et l'utilisera.
11492
adfb167f
JL
11493In both cases, agetty will leave the other serial device settings (baud rate
11494etc.)@: alone---in the hope that Linux pinned them to the correct values.
1d8d69c8
JL
11495
11496@item @code{baud-rate} (par défaut : @code{#f})
11497Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
11498des virgules, en ordre décroissant.
11499
11500@item @code{term} (par défaut : @code{#f})
11501Une chaîne contenant la valeur utilisée pour la variable d'environnement
11502@code{TERM}.
11503
11504@item @code{eight-bits?} (par défaut : @code{#f})
11505Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
11506caractères 8-bit et la détection de parité est désactivée.
11507
11508@item @code{auto-login} (par défaut : @code{#f})
11509Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
11510l'utilisateur spécifié sera automatiquement connecté sans demande du nom
11511d'utilisateur ni du mot de passe.
11512
11513@item @code{no-reset?} (par défaut : @code{#f})
11514Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
11515de contrôle).
11516
11517@item @code{host} (par défaut : @code{#f})
11518Cette option accepte une chaîne contenant le « login_host », qui sera écrit
11519dans le fichier @file{/var/run/utmpx}.
11520
11521@item @code{remote?} (par défaut : @code{#f})
11522Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
11523une option fakehost @code{-r} à la ligne de commande du programme de
11524connexion spécifié dans @var{login-program}.
11525
11526@item @code{flow-control?} (par défaut : @code{#f})
11527Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
11528(RTS/CTS).
11529
11530@item @code{no-issue?} (par défaut : @code{#f})
11531Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
11532sera pas affiché avant de présenter l'écran de connexion.
11533
11534@item @code{init-string} (par défaut : @code{#f})
11535Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
11536modem avant toute autre chose. Elle peut être utilisée pour initialiser un
11537modem.
11538
11539@item @code{no-clear?} (par défaut : @code{#f})
11540Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
11541montrer l'écran de connexion.
11542
11543@item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
11544Cette option doit être soit une gexp dénotant le nom d'un programme de
11545connexion, soit non définie, auquel cas la valeur par défaut est la commande
11546@command{login} de la suite d'outils Shadow.
11547
11548@item @code{local-line} (par défaut : @code{#f})
11549Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
11550comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
11551est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
11552
11553@item @code{extract-baud?} (par défaut : @code{#f})
11554Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
11555de baud depuis les messages de statut produits par certains modems.
11556
11557@item @code{skip-login?} (par défaut : @code{#f})
11558Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
11559peut être utilisée avec le champ @var{login-program} pour utiliser des
11560systèmes de connexion non standards.
11561
11562@item @code{no-newline?} (par défaut : @code{#f})
11563Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
11564d'afficher le fichier @file{/etc/issue}.
bf5c74e7
JL
11565
11566@c Is this dangerous only when used with login-program, or always?
1d8d69c8
JL
11567@item @code{login-options} (par défaut : @code{#f})
11568Cette option accepte une chaîne de caractères contenant des options passées
11569au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
11570conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
11571d'utilisateur contenant des options incluses qui pourraient être analysées
11572par le programme de connexion.
11573
11574@item @code{login-pause} (par défaut : @code{#f})
11575Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
11576montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
11577pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
11578
11579@item @code{chroot} (par défaut : @code{#f})
11580Change de racine dans le répertoire donné. Cette option accepte un chemin
11581en tant que chaîne de caractères.
11582
11583@item @code{hangup?} (par défaut : @code{#f})
11584Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
11585le terminal spécifié.
11586
11587@item @code{keep-baud?} (par défaut : @code{#f})
11588Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
11589Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
11590caractères @key{BREAK}.
11591
11592@item @code{timeout} (par défaut : @code{#f})
11593Lorsque la valeur est un nombre entier, termine la session si aucun nom
11594d'utilisateur n'a pu être lu après @var{timeout} secondes.
11595
11596@item @code{detect-case?} (par défaut : @code{#f})
11597Lorsque la valeur est @code{#t}, active le support pour la détection des
11598terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
11599d'utilisateur qui ne contient que des majuscules indique un terminal en
11600majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
11601que cela ne fonctionne pas avec les caractères unicode.
11602
11603@item @code{wait-cr?} (par défaut : @code{#f})
11604Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
11605un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
11606l'écran de connexion. Cela est typiquement utilisé avec l'option
11607@var{init-string}.
11608
11609@item @code{no-hints?} (par défaut : @code{#f})
11610Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
11611verrouillages numériques, majuscule et défilement.
11612
11613@item @code{no-hostname?} (par défaut : @code{#f})
11614Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
11615aucun nom d'hôte ne sera affiché.
11616
11617@item @code{long-hostname?} (par défaut : @code{#f})
11618Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
11619la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
11620@code{gethostname} ou @code{getaddrinfo} sera affiché.
11621
11622@item @code{erase-characters} (par défaut : @code{#f})
11623Cette option accepte une chaîne de caractères de caractères supplémentaires
11624qui devraient être interprétés comme des effacements lorsque l'utilisateur
11625les tape dans leur nom d'utilisateur.
11626
11627@item @code{kill-characters} (par défaut : @code{#f})
11628Cette option accepte une chaîne de caractères qui devrait être interprété
11629comme signifiant « ignore tous les caractères précédent » (aussi appelé un
11630caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
11631
11632@item @code{chdir} (par défaut : @code{#f})
11633Cette option accepte, en tant que chaîne de caractères, un chemin vers un
11634répertoire dans lequel se trouvera la commande avant la connexion.
11635
11636@item @code{delay} (par défaut : @code{#f})
11637Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
11638avant d'ouvrir le tty et afficher l'écran de connexion.
11639
11640@item @code{nice} (par défaut : @code{#f})
11641Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
11642programme @command{login} tourne.
11643
11644@item @code{extra-options} (par défaut : @code{'()})
11645Cette option fournie un « mécanisme de secours » pour que l'utilisateur
11646puisse ajouter des arguments de la ligne de commande arbitraires à
11647@command{agetty} comme une liste de chaînes de caractères.
bf5c74e7
JL
11648
11649@end table
11650@end deftp
11651
1d8d69c8
JL
11652@deffn {Procédure Scheme} kmscon-service-type @var{config}
11653Renvoie un service qui lance
11654@uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
11655@var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
11656sur lequel tourner, entre autres choses.
bf5c74e7
JL
11657@end deffn
11658
1d8d69c8
JL
11659@deftp {Type de données} kmscon-configuration
11660C'est le type de données représentant la configuration de Kscon, qui
11661implémente l'écran de chargement de la console virtuelle.
bf5c74e7
JL
11662
11663@table @asis
11664
11665@item @code{virtual-terminal}
1d8d69c8 11666Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
bf5c74e7 11667
1d8d69c8
JL
11668@item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
11669Une gexp qui dénote le nom d'un programme de connexion. le programme de
11670connexion par défaut est @command{login} de la suite d'outils Shadow.
bf5c74e7 11671
1d8d69c8
JL
11672@item @code{login-arguments} (par défaut : @code{'("-p")})
11673Une liste d'arguments à passer à @command{login}.
bf5c74e7 11674
adfb167f
JL
11675@item @code{auto-login} (par défaut : @code{#f})
11676Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
11677l'utilisateur spécifié sera automatiquement connecté sans demande du nom
11678d'utilisateur ni du mot de passe.
11679
1d8d69c8
JL
11680@item @code{hardware-acceleration?} (par défaut : #f)
11681S'il faut utiliser l'accélération matérielle.
bf5c74e7 11682
1d8d69c8
JL
11683@item @code{kmscon} (par défaut : @var{kmscon})
11684Le paquet Kmscon à utiliser.
bf5c74e7
JL
11685
11686@end table
11687@end deftp
11688
11689@cindex name service cache daemon
11690@cindex nscd
1d8d69c8
JL
11691@deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
11692 [#:name-services '()]
11693Renvoie un service qui lance le démon de cache de services de noms de la
11694libc (nscd) avec la @var{config} donnée — un objet
11695@code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
adfb167f
JL
11696
11697Parce que c'est pratique, le service du Shepherd pour nscd fournit les
11698actions suivantes :
11699
11700@table @code
11701@item invalidate
11702@cindex invalidation du cache, nscd
11703@cindex nscd, invalidation du cache
15f1bff4 11704Cela invalide le cache donné. Par exemple, en laçant :
adfb167f
JL
11705
11706@example
11707herd invalidate nscd hosts
11708@end example
11709
11710@noindent
11711on invalide le cache de noms d'hôtes de nscd.
11712
11713@item statistiques
11714Lancer @command{herd statistics nscd} affiche des informations sur
11715l'utilisation de nscd et des caches.
11716@end table
11717
bf5c74e7
JL
11718@end deffn
11719
1d8d69c8
JL
11720@defvr {Variable Scheme} %nscd-default-configuration
11721C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
11722utilisée par @code{nscd-service}. Elle utilise les caches définis par
11723@var{%nscd-default-caches} ; voir plus bas.
bf5c74e7
JL
11724@end defvr
11725
1d8d69c8
JL
11726@deftp {Type de données} nscd-configuration
11727C'est le type de données qui représente la configuration du démon de cache
11728de services de noms (nscd).
bf5c74e7
JL
11729
11730@table @asis
11731
1d8d69c8
JL
11732@item @code{name-services} (par défaut : @code{'()})
11733Liste des paquets dénotant des @dfn{services de noms} qui doivent être
11734visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
bf5c74e7 11735
1d8d69c8 11736@item @code{glibc} (par défaut : @var{glibc})
15f1bff4 11737Objet de paquet qui dénote la Bibliothèque C de GNU qui fournit la commande
1d8d69c8 11738@command{nscd}.
bf5c74e7 11739
1d8d69c8
JL
11740@item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
11741Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
11742envoyée lorsque @code{debug-level} est strictement positif.
bf5c74e7 11743
1d8d69c8
JL
11744@item @code{debug-level} (par défaut : @code{0})
11745Entier qui dénote le niveau de débogage. Les entiers les plus grands
11746signifient plus de sortie de débogage.
bf5c74e7 11747
1d8d69c8
JL
11748@item @code{caches} (par défaut : @var{%nscd-default-caches})
11749Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
11750; voir plus bas.
bf5c74e7
JL
11751
11752@end table
11753@end deftp
11754
1d8d69c8
JL
11755@deftp {Type de données} nscd-cache
11756Type de données représentant une base de données de cache de nscd et ses
11757paramètres.
bf5c74e7
JL
11758
11759@table @asis
11760
11761@item @code{database}
1d8d69c8
JL
11762C'est un symbole qui représente le nom de la base de donnée à mettre en
11763cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
11764@code{services} qui désignent les bases de données NSS correspondantes
11765(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
bf5c74e7
JL
11766
11767@item @code{positive-time-to-live}
1d8d69c8
JL
11768@itemx @code{negative-time-to-live} (par défaut : @code{20})
11769Un entier qui représente le nombre de secondes pendant lesquelles un
11770résultat positif ou négatif reste en cache.
bf5c74e7 11771
1d8d69c8
JL
11772@item @code{check-files?} (par défaut : @code{#t})
11773Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
11774à @var{database}.
bf5c74e7 11775
1d8d69c8
JL
11776Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
11777nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
11778prendre en compte.
bf5c74e7 11779
1d8d69c8
JL
11780@item @code{persistent?} (par défaut : @code{#t})
11781Indique si le cache devrait être stocké de manière persistante sur le
11782disque.
bf5c74e7 11783
1d8d69c8
JL
11784@item @code{shared?} (par défaut : @code{#t})
11785Indique si le cache devrait être partagé entre les utilisateurs.
bf5c74e7 11786
1d8d69c8
JL
11787@item @code{max-database-size} (par défaut : 32@tie{}MiB)
11788Taille maximale en octets de la base de données en cache.
bf5c74e7
JL
11789
11790@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
11791@c settings, so leave them out.
11792
11793@end table
11794@end deftp
11795
1d8d69c8
JL
11796@defvr {Variable Scheme} %nscd-default-caches
11797Liste d'objets @code{<nscd-cache>} utilisés par défaut par
11798@code{nscd-configuration} (voir plus haut).
bf5c74e7 11799
1d8d69c8
JL
11800Elle active la mise en cache persistante et agressive des recherches de
11801services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
11802d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
11803et une protection de votre vie privée plus efficace — souvent le résultat
11804des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
11805de nom externes n'ont même pas besoin d'être questionnés.
bf5c74e7
JL
11806@end defvr
11807
11808@anchor{syslog-configuration-type}
11809@cindex syslog
11810@cindex logging
1d8d69c8
JL
11811@deftp {Type de données} syslog-configuration
11812Ce type de données représente la configuration du démon syslog.
bf5c74e7
JL
11813
11814@table @asis
1d8d69c8
JL
11815@item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
11816Le démon syslog à utiliser.
bf5c74e7 11817
1d8d69c8
JL
11818@item @code{config-file} (par défaut : @code{%default-syslog.conf})
11819Le fichier de configuration de syslog à utiliser.
bf5c74e7
JL
11820
11821@end table
11822@end deftp
11823
11824@anchor{syslog-service}
11825@cindex syslog
1d8d69c8
JL
11826@deffn {Procédure Scheme} syslog-service @var{config}
11827Renvoie un service qui lance un démon syslog en suivant @var{config}.
bf5c74e7 11828
1d8d69c8
JL
11829@xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
11830d'informations sur la syntaxe du fichier de configuration.
bf5c74e7
JL
11831@end deffn
11832
adfb167f
JL
11833@defvr {Variable Scheme} guix-service-type
11834C'est le type de service qui lance le démon de construction,
11835@command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
11836un enregistrement @code{guix-configuration} décrit plus bas.
11837@end defvr
11838
bf5c74e7 11839@anchor{guix-configuration-type}
1d8d69c8
JL
11840@deftp {Type de données} guix-configuration
11841Ce type de données représente la configuration du démon de construction de
11842Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
bf5c74e7
JL
11843
11844@table @asis
1d8d69c8
JL
11845@item @code{guix} (par défaut : @var{guix})
11846Le paquet Guix à utiliser.
bf5c74e7 11847
1d8d69c8
JL
11848@item @code{build-group} (par défaut : @code{"guixbuild"})
11849Nom du groupe des comptes utilisateurs de construction.
bf5c74e7 11850
1d8d69c8
JL
11851@item @code{build-accounts} (par défaut : @code{10})
11852Nombre de comptes utilisateurs de construction à créer.
bf5c74e7 11853
1d8d69c8 11854@item @code{authorize-key?} (par défaut : @code{#t})
3cacfa9e 11855@cindex substituts, autorisations
15f1bff4
JL
11856Whether to authorize the substitute keys listed in
11857@code{authorized-keys}---by default that of @code{@value{SUBSTITUTE-SERVER}}
11858(@pxref{Substituts}).
bf5c74e7
JL
11859
11860@vindex %default-authorized-guix-keys
1d8d69c8 11861@item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
15f1bff4
JL
11862The list of authorized key files for archive imports, as a list of
11863string-valued gexps (@pxref{Invoquer guix archive}). By default, it
11864contains that of @code{@value{SUBSTITUTE-SERVER}} (@pxref{Substituts}).
bf5c74e7 11865
1d8d69c8
JL
11866@item @code{use-substitutes?} (par défaut : @code{#t})
11867S'il faut utiliser les substituts.
bf5c74e7 11868
1d8d69c8
JL
11869@item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
11870La liste des URL où trouver des substituts par défaut.
bf5c74e7 11871
1d8d69c8
JL
11872@item @code{max-silent-time} (par défaut : @code{0})
11873@itemx @code{timeout} (par défaut : @code{0})
11874Le nombre de secondes de silence et le nombre de secondes d'inactivité,
11875respectivement, après lesquelles un processus de construction son délai
11876d'attente. Une valeur de zéro désactive le délai d'attente.
bf5c74e7 11877
1d8d69c8
JL
11878@item @code{log-compression} (par défaut : @code{'bzip2})
11879Le type de compression utilisé par les journaux de construction — parmi
11880@code{gzip}, @code{bzip2} et @code{none}.
bf5c74e7 11881
1d8d69c8
JL
11882@item @code{extra-options} (par défaut : @code{'()})
11883Liste d'options supplémentaires de la ligne de commande pour
11884@command{guix-daemon}.
bf5c74e7 11885
1d8d69c8
JL
11886@item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
11887Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
11888écrites.
bf5c74e7 11889
1d8d69c8
JL
11890@item @code{http-proxy} (par défaut : @code{#f})
11891Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
11892sortie fixe et les substituts.
bf5c74e7 11893
1d8d69c8
JL
11894@item @code{tmpdir} (par défaut : @code{#f})
11895Un répertoire où @command{guix-daemon} effectuera ses constructions.
bf5c74e7
JL
11896
11897@end table
11898@end deftp
11899
1d8d69c8
JL
11900@deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
11901Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
11902règles udev peuvent être fournies comme une liste de fichier via la variable
11903@var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
11904@code{(gnu services base)} simplifient la création de ces fichiers de règle.
15f1bff4 11905@end deffn
bf5c74e7 11906
1d8d69c8
JL
11907@deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
11908Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
15f1bff4 11909définie par le littéral @var{contents}.
bf5c74e7 11910
1d8d69c8
JL
11911Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
11912sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
11913script à la détection du périphérique USB avec l'identifiant de produit
11914donné.
bf5c74e7
JL
11915
11916@example
11917(define %example-udev-rule
11918 (udev-rule
11919 "90-usb-thing.rules"
11920 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
11921 "ATTR@{product@}==\"Example\", "
11922 "RUN+=\"/path/to/script\"")))
11923@end example
15f1bff4
JL
11924
11925The @command{herd rules udev} command, as root, returns the name of the
11926directory containing all the active udev rules.
bf5c74e7
JL
11927@end deffn
11928
1d8d69c8
JL
11929Ici on montre comment le service @var{udev-service} par défaut peut être
11930étendu avec cette règle.
bf5c74e7
JL
11931
11932@example
11933(operating-system
11934 ;; @dots{}
11935 (services
11936 (modify-services %desktop-services
11937 (udev-service-type config =>
11938 (udev-configuration (inherit config)
11939 (rules (append (udev-configuration-rules config)
11940 (list %example-udev-rule))))))))
11941@end example
11942
1d8d69c8
JL
11943@deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
11944Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
11945dans @var{file}, un objet simili-fichier.
bf5c74e7 11946
1d8d69c8 11947L'exemple suivant montre comment utiliser un fichier de règles existant.
bf5c74e7
JL
11948
11949@example
1d8d69c8
JL
11950(use-modules (guix download) ;pour url-fetch
11951 (guix packages) ;pour origin
bf5c74e7
JL
11952 ;; @dots{})
11953
11954(define %android-udev-rules
11955 (file->udev-rule
11956 "51-android-udev.rules"
11957 (let ((version "20170910"))
11958 (origin
11959 (method url-fetch)
11960 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
11961 "android-udev-rules/" version "/51-android.rules"))
11962 (sha256
11963 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
11964@end example
11965@end deffn
11966
1d8d69c8
JL
11967En plus, les définitions des paquets de Guix peuvent être inclus dans
11968@var{rules} pour étendre les règles avec les définitions trouvées dans leur
11969sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
11970@var{file->udev-rule} précédent, on aurait pu utiliser le paquet
11971@var{android-udev-rules} qui existe dans le module @code{(gnu packages
11972android)}.
bf5c74e7 11973
1d8d69c8
JL
11974L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
11975pour que l'outil Android @command{adb} puisse détecter les appareils sans
15f1bff4 11976privilège root. Il détaille aussi comment créer le groupe @code{adbusers},
1d8d69c8
JL
11977requis pour le bon fonctionnement des règles définies dans le paquet
11978@var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
11979@var{supplementary-groups} de la déclaration @var{user-account} ainsi que
11980dans le champ @var{groups} de l'enregistrement @var{operating-system}.
bf5c74e7
JL
11981
11982@example
11983(use-modules (gnu packages android) ;for android-udev-rules
11984 (gnu system shadow) ;for user-group
11985 ;; @dots{})
11986
11987(operating-system
11988 ;; @dots{}
11989 (users (cons (user-acount
11990 ;; @dots{}
11991 (supplementary-groups
11992 '("adbusers" ;for adb
11993 "wheel" "netdev" "audio" "video"))
11994 ;; @dots{})))
11995
11996 (groups (cons (user-group (system? #t) (name "adbusers"))
11997 %base-groups))
11998
11999 ;; @dots{}
12000
12001 (services
15f1bff4
JL
12002 (modify-services %desktop-services
12003 (udev-service-type
12004 config =>
12005 (udev-configuration (inherit config)
12006 (rules (cons android-udev-rules
12007 (udev-configuration-rules config))))))))
bf5c74e7 12008@end example
bf5c74e7 12009
1d8d69c8
JL
12010@defvr {Variable Scheme} urandom-seed-service-type
12011Garde de l'entropie dans @var{%random-seed-file} pour démarrer
12012@file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
12013@file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
12014@file{/dev/hwrng} existe et peut être lu.
bf5c74e7
JL
12015@end defvr
12016
1d8d69c8
JL
12017@defvr {Variable Scheme} %random-seed-file
12018C'est le nom du fichier où des octets aléatoires sont sauvegardés par
12019@var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
12020redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
bf5c74e7
JL
12021@end defvr
12022
1d8d69c8
JL
12023@cindex disposition clavier
12024@cindex clavier
12025@deffn {Procédure Scheme} console-keymap-service @var{files} ...
12026@cindex disposition du clavier
12027Renvoie un service qui charge les dispositions claviers de @var{files} avec
12028la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
12029disposition par défaut, ce qui se fait ainsi :
bf5c74e7
JL
12030
12031@example
12032(console-keymap-service "dvorak")
12033@end example
12034
1d8d69c8
JL
12035Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
12036combiner les dispositions suivantes :
bf5c74e7
JL
12037@example
12038(console-keymap-service "se-lat6" "se-fi-lat6")
12039@end example
12040
1d8d69c8
JL
12041Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
12042complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
bf5c74e7
JL
12043
12044@end deffn
12045
1d8d69c8 12046@cindex souris
bf5c74e7 12047@cindex gpm
2cf2c778 12048@defvr {Variable Scheme} gpm-service-type
1d8d69c8
JL
12049C'est le type du service qui lance GPM, le @dfn{démon de souris à but
12050général}, qui fournit le support de la souris sur la console Linux. GPM
12051permet aux utilisateurs d'utiliser la souris dans la console, entre autres
12052pour sélectionner, copier et coller du texte.
3cacfa9e 12053
1d8d69c8
JL
12054La valeur pour les services de ce type doit être un @code{gpm-configuration}
12055(voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
3cacfa9e
LC
12056@end defvr
12057
1d8d69c8 12058@deftp {Type de données} gpm-configuration
2cf2c778 12059Type de données représentant la configuration de GPM.
3cacfa9e
LC
12060
12061@table @asis
2cf2c778 12062@item @code{options} (par défaut : @code{%default-gpm-options})
1d8d69c8
JL
12063Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
12064des options par défaut dit à @command{gpm} d'écouter les événements de la
12065souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
12066pour plus d'informations.
3cacfa9e 12067
2cf2c778
JL
12068@item @code{gpm} (par défaut : @code{gpm})
12069Le paquet GPM à utiliser.
3cacfa9e
LC
12070
12071@end table
12072@end deftp
bf5c74e7
JL
12073
12074@anchor{guix-publish-service-type}
1d8d69c8
JL
12075@deffn {Variable Scheme} guix-publish-service-type
12076C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
12077plus bas.
bf5c74e7 12078
1d8d69c8
JL
12079Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
12080créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
bf5c74e7
JL
12081@end deffn
12082
1d8d69c8
JL
12083@deftp {Type de données} guix-publish-configuration
12084Le type de données représentant la configuration du service @code{guix
12085publish}.
bf5c74e7
JL
12086
12087@table @asis
1d8d69c8
JL
12088@item @code{guix} (par défaut : @code{guix})
12089Le paquet Guix à utiliser.
bf5c74e7 12090
1d8d69c8
JL
12091@item @code{port} (par défaut : @code{80})
12092Le port TCP sur lequel écouter les connexions.
bf5c74e7 12093
1d8d69c8
JL
12094@item @code{host} (par défaut : @code{"localhost"})
12095L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
12096@code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
bf5c74e7 12097
3cacfa9e 12098@item @code{compression-level} (par défaut : @code{3})
1d8d69c8
JL
12099Le niveau de compression gzip auquel les substituts sont compressés.
12100Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
12101pour avoir le meilleur taux de compression contre une plus grande
12102utilisation du CPU.
12103
12104@item @code{nar-path} (par défaut : @code{"nar"})
12105Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
12106@code{--nar-path}}, pour des détails.
12107
12108@item @code{cache} (par défaut : @code{#f})
12109Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
12110la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
12111@code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
12112des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
12113impliqués.
12114
12115@item @code{workers} (par défaut : @code{#f})
12116Lorsque la valeur est un entier, c'est le nombre de threads de travail
12117utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
12118processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
12119pour plus d'informations.
12120
12121@item @code{ttl} (par défaut : @code{#f})
12122Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
12123des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
12124plus d'informations.
bf5c74e7
JL
12125@end table
12126@end deftp
12127
12128@anchor{rngd-service}
1d8d69c8
JL
12129@deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
12130 [#:device "/dev/hwrng"]
12131Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
12132pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
12133échouera si @var{device} n'existe pas.
bf5c74e7
JL
12134@end deffn
12135
12136@anchor{pam-limits-service}
1d8d69c8 12137@cindex limites de session
bf5c74e7 12138@cindex ulimit
1d8d69c8
JL
12139@cindex priorités
12140@cindex temps réel
bf5c74e7 12141@cindex jackd
1d8d69c8 12142@deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
bf5c74e7 12143
1d8d69c8
JL
12144Renvoie un service qui installe un fichier de configuration pour le
12145@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
12146@code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
12147@code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
12148limites @code{ulimit} et les priorités des sessions utilisateurs.
bf5c74e7 12149
1d8d69c8
JL
12150La définition de limites suivante défini deux limites matérielles et
12151logicielles pour toutes les sessions connectées des utilisateurs du groupe
12152@code{realtime} :
bf5c74e7
JL
12153
12154@example
12155(pam-limits-service
12156 (list
12157 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
12158 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
12159@end example
12160
1d8d69c8
JL
12161La première entrée augment la priorité en temps réel maximale des processus
12162non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
12163d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
12164sont souvent utilisés sur les systèmes audio temps-réel.
bf5c74e7
JL
12165@end deffn
12166
3cacfa9e 12167@node Exécution de tâches planifiées
15f1bff4 12168@subsection Exécution de tâches planifiées
bf5c74e7
JL
12169
12170@cindex cron
12171@cindex mcron
1d8d69c8
JL
12172@cindex tâches planifiées
12173Le module @code{(gnu services mcron)} fournit une interface pour
12174GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
12175mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
15f1bff4 12176traditionnel @command{cron} ; la principale différence est qu'il est
1d8d69c8
JL
12177implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
12178spécification de la planification des tâches et de leurs actions.
12179
15f1bff4 12180L'exemple en dessous définit un système d'exploitation qui lance les
1d8d69c8
JL
12181commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
12182Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
12183ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
12184(@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
12185gexps pour introduire des définitions de tâches qui sont passées à mcron
12186(@pxref{G-Expressions}).
bf5c74e7
JL
12187
12188@lisp
12189(use-modules (guix) (gnu) (gnu services mcron))
12190(use-package-modules base idutils)
12191
12192(define updatedb-job
1d8d69c8
JL
12193 ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
12194 ;; l'action de la tâche comme une procédure Scheme.
bf5c74e7
JL
12195 #~(job '(next-hour '(3))
12196 (lambda ()
12197 (execl (string-append #$findutils "/bin/updatedb")
12198 "updatedb"
12199 "--prunepaths=/tmp /var/tmp /gnu/store"))))
12200
12201(define garbage-collector-job
1d8d69c8
JL
12202 ;; Lance le ramasse-miettes tous les jours à minuit cinq.
12203 ;; L'action de la tâche est une commande shell.
bf5c74e7
JL
12204 #~(job "5 0 * * *" ;Vixie cron syntax
12205 "guix gc -F 1G"))
12206
12207(define idutils-job
1d8d69c8
JL
12208 ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
12209 ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
bf5c74e7
JL
12210 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
12211 (string-append #$idutils "/bin/mkid src")
12212 #:user "charlie"))
12213
12214(operating-system
12215 ;; @dots{}
15f1bff4
JL
12216 (services (cons (service mcron-service-type
12217 (mcron-configuration
12218 (jobs (list garbage-collector-job
12219 updatedb-job
12220 idutils-job))))
bf5c74e7
JL
12221 %base-services)))
12222@end lisp
12223
1d8d69c8
JL
12224@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
12225plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
12226est la référence du service mcron.
bf5c74e7 12227
adfb167f
JL
12228Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
12229service pour visualiser les travaux mcron qui seront exécutés ensuite :
524756d1
JL
12230
12231@example
12232# herd schedule mcron
12233@end example
12234
12235@noindent
adfb167f
JL
12236Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
12237pouvez spécifier le nombre de tâches à afficher :
524756d1
JL
12238
12239@example
12240# herd schedule mcron 10
12241@end example
12242
1d8d69c8
JL
12243@defvr {Variable Scheme} mcron-service-type
12244C'est le type du service @code{mcron}, dont la valeur est un objet
12245@code{mcron-configuration}
bf5c74e7 12246
1d8d69c8
JL
12247Ce type de service peut être la cible d'une extension de service qui lui
12248fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
12249qui fournissent des tâches mcron à lancer.
bf5c74e7
JL
12250@end defvr
12251
1d8d69c8
JL
12252@deftp {Type de données} mcron-configuration
12253Type données qui représente la configuration de mcron.
bf5c74e7
JL
12254
12255@table @asis
1d8d69c8
JL
12256@item @code{mcron} (par défaut : @var{mcron})
12257Le paquet mcron à utiliser.
bf5c74e7
JL
12258
12259@item @code{jobs}
1d8d69c8
JL
12260C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
12261à une spécification de tâche de mcron (@pxref{Syntax, mcron job
12262specifications,, mcron, GNU@tie{}mcron}).
bf5c74e7
JL
12263@end table
12264@end deftp
12265
12266
3cacfa9e 12267@node Rotation des journaux
15f1bff4 12268@subsection Rotation des journaux
bf5c74e7
JL
12269
12270@cindex rottlog
1d8d69c8 12271@cindex journaux, rotation
bf5c74e7 12272@cindex logging
1d8d69c8
JL
12273Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
12274tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
12275tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
12276fichiers séparés, potentiellement compressés. Le module @code{(gnu services
12277admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
12278de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
bf5c74e7 12279
1d8d69c8
JL
12280L'exemple ci-dessous définit un système d'exploitation qui fournit la
12281rotation des journaux avec les paramètres par défaut, pour les journaux les
12282plus courants.
bf5c74e7
JL
12283
12284@lisp
12285(use-modules (guix) (gnu))
12286(use-service-modules admin mcron)
12287(use-package-modules base idutils)
12288
12289(operating-system
12290 ;; @dots{}
12291 (services (cons (service rottlog-service-type)
12292 %base-services)))
12293@end lisp
12294
1d8d69c8
JL
12295@defvr {Variable Scheme} rottlog-service-type
12296C'est le type du service Rotlog, dont la valeur est un objet
12297@code{rottlog-configuration}.
bf5c74e7 12298
1d8d69c8
JL
12299D'autres services peuvent étendre celui-ci avec de nouveaux objets
12300@code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
12301fichiers à faire tourner.
bf5c74e7 12302
1d8d69c8
JL
12303Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
12304pour lancer le service rottlog.
bf5c74e7
JL
12305@end defvr
12306
1d8d69c8
JL
12307@deftp {Type de données} rottlog-configuration
12308Type de données représentant la configuration de rottlog.
bf5c74e7
JL
12309
12310@table @asis
1d8d69c8
JL
12311@item @code{rottlog} (par défaut : @code{rottlog})
12312Le paquet Rottlog à utiliser.
bf5c74e7 12313
1d8d69c8
JL
12314@item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
12315Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
12316Variables,,, rottlog, GNU Rot[t]log Manual}).
bf5c74e7 12317
1d8d69c8
JL
12318@item @code{rotations} (par défaut : @code{%default-rotations})
12319Une liste d'objets @code{log-rotation} définis plus bas.
bf5c74e7
JL
12320
12321@item @code{jobs}
1d8d69c8
JL
12322C'est une liste de gexps où chaque gexp correspond à une spécification de
12323tache de mcron (@pxref{Exécution de tâches planifiées}).
bf5c74e7
JL
12324@end table
12325@end deftp
12326
1d8d69c8
JL
12327@deftp {Type de données} log-rotation
12328Type de données représentant la rotation d'un groupe de fichiers journaux.
bf5c74e7 12329
1d8d69c8
JL
12330En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
12331Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
12332d'un journal de cette manière :
bf5c74e7
JL
12333
12334@example
12335(log-rotation
12336 (frequency 'daily)
12337 (files '("/var/log/apache/*"))
12338 (options '("storedir apache-archives"
12339 "rotate 6"
12340 "notifempty"
12341 "nocompress")))
12342@end example
12343
1d8d69c8 12344La liste des champs est la suivante :
bf5c74e7
JL
12345
12346@table @asis
1d8d69c8
JL
12347@item @code{frequency} (par défaut : @code{'weekly})
12348La fréquence de rotation, un symbole.
bf5c74e7
JL
12349
12350@item @code{files}
1d8d69c8 12351La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
bf5c74e7 12352
1d8d69c8
JL
12353@item @code{options} (par défaut : @code{'()})
12354La liste des options de rottlog pour cette rotation (@pxref{Configuration
bf5c74e7
JL
12355parameters,,, rottlog, GNU Rot[t]lg Manual}).
12356
1d8d69c8
JL
12357@item @code{post-rotate} (par défaut : @code{#f})
12358Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
bf5c74e7
JL
12359@end table
12360@end deftp
12361
1d8d69c8
JL
12362@defvr {Variable Scheme} %default-rotations
12363Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
12364autres fichiers.
bf5c74e7
JL
12365@end defvr
12366
1d8d69c8
JL
12367@defvr {Variable Scheme} %rotated-files
12368La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
12369s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
bf5c74e7
JL
12370@end defvr
12371
3cacfa9e 12372@node Services réseau
15f1bff4 12373@subsection Services réseau
bf5c74e7 12374
1d8d69c8
JL
12375Le module @code{(gnu services networking)} fournit des services pour
12376configurer les interfaces réseaux.
bf5c74e7 12377
1d8d69c8 12378@cindex DHCP, service réseau
adfb167f
JL
12379@defvr {Variable Scheme} dhcp-client-service-type
12380C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
12381configuration d'hôte dynamique) sur toutes les interfaces réseau
12382non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
12383@code{isc-dhcp} par défaut.
12384@end defvr
bf5c74e7 12385
1d8d69c8
JL
12386@deffn {Procédure Scheme} dhcpd-service-type
12387Ce type définie un service qui lance un démon DHCP. Pour créer un service
12388de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
12389exemple :
3cacfa9e
LC
12390
12391@example
12392(service dhcpd-service-type
12393 (dhcpd-configuration
12394 (config-file (local-file "my-dhcpd.conf"))
12395 (interfaces '("enp0s25"))))
12396@end example
12397@end deffn
12398
1d8d69c8 12399@deftp {Type de données} dhcpd-configuration
3cacfa9e 12400@table @asis
1d8d69c8
JL
12401@item @code{package} (par défaut : @code{isc-dhcp})
12402Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
12403@file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
12404défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
12405@item @code{config-file} (par défaut : @code{#f})
12406Le fichier de configuration à utiliser. Il est requis. Il sera passé à
12407@code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
12408objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
12409@code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
12410configuration.
12411@item @code{version} (par défaut : @code{"4"})
12412La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
124134 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
12414et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
12415de détails.
12416@item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
12417Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
12418ce répertoire sera créé s'il n'existe pas.
12419@item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
12420Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
12421@code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
12422@item @code{interfaces} (par défaut : @code{'()})
12423Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
12424n'est pas vide, alors ses éléments (qui doivent être des chaînes de
12425caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
12426du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
12427; voir @code{man dhcpd} pour plus de détails.
3cacfa9e
LC
12428@end table
12429@end deftp
12430
1d8d69c8 12431@defvr {Variable Scheme} static-networking-service-type
bf5c74e7 12432@c TODO Document <static-networking> data structures.
1d8d69c8 12433C'est le type des interfaces réseaux configurés statiquement.
bf5c74e7
JL
12434@end defvr
12435
1d8d69c8 12436@deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
adfb167f
JL
12437 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
12438[#:requirement @code{'(udev)}]
12439Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
12440@var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
12441@var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
12442la passerelle par défaut du réseau. @var{requirement} peut être utilisé
12443pour déclarer une dépendance sur un autre service avant de configurer
12444l'interface.
bf5c74e7 12445
1d8d69c8
JL
12446On peut appeler cette procédure plusieurs fois, une fois par interface
12447réseau qui nous intéresse. Dans les coulisses, elle étend
12448@code{static-networking-service-type} avec les interfaces réseaux
12449supplémentaires à gérer.
adfb167f
JL
12450
12451Par exemple :
12452
12453@example
12454(static-networking-service "eno1" "192.168.1.82"
12455 #:gateway "192.168.1.2"
12456 #:name-servers '("192.168.1.2"))
12457@end example
bf5c74e7
JL
12458@end deffn
12459
12460@cindex wicd
1d8d69c8 12461@cindex sans-fil
bf5c74e7 12462@cindex WiFi
1d8d69c8
JL
12463@cindex gestion du réseau
12464@deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
12465Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
15f1bff4 12466de gestion réseau qui cherche à simplifier la configuration des réseaux
1d8d69c8
JL
12467filaires et sans fil.
12468
12469Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
12470commandes pour interagir avec le démon et configurer le réseau :
12471@command{wicd-client}, une interface graphique et les interfaces
12472utilisateurs @command{wicd-cli} et @command{wicd-curses}.
bf5c74e7
JL
12473@end deffn
12474
3cacfa9e
LC
12475@cindex ModemManager
12476
2cf2c778 12477@defvr {Variable Scheme} modem-manager-service-type
1d8d69c8
JL
12478C'est le type de service pour le service
12479@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
12480valeur de ce type de service est un enregistrement
12481@code{modem-manager-configuration}.
3cacfa9e 12482
1d8d69c8 12483Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
3cacfa9e
LC
12484@end defvr
12485
1d8d69c8 12486@deftp {Type de données} modem-manager-configuration
2cf2c778 12487Type de donnée représentant la configuration de ModemManager.
3cacfa9e
LC
12488
12489@table @asis
2cf2c778
JL
12490@item @code{modem-manager} (par défaut : @code{modem-manager})
12491Le paquet ModemManager à utiliser.
3cacfa9e
LC
12492
12493@end table
12494@end deftp
12495
bf5c74e7
JL
12496@cindex NetworkManager
12497
1d8d69c8
JL
12498@defvr {Variable Scheme} network-manager-service-type
12499C'est le type de service pour le service
12500@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
12501valeur pour ce type de service est un enregistrement
12502@code{network-manager-configuration}.
bf5c74e7 12503
1d8d69c8 12504Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
bf5c74e7
JL
12505@end defvr
12506
1d8d69c8
JL
12507@deftp {Type de données} network-manager-configuration
12508Type de données représentant la configuration de NetworkManager.
bf5c74e7
JL
12509
12510@table @asis
1d8d69c8
JL
12511@item @code{network-manager} (par défaut : @code{network-manager})
12512Le paquet NetworkManager à utiliser.
bf5c74e7 12513
1d8d69c8
JL
12514@item @code{dns} (par défaut : @code{"default"})
12515Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
12516utilise le fichier de configuration @code{resolv.conf}
bf5c74e7
JL
12517
12518@table @samp
12519@item default
1d8d69c8
JL
12520NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
12521de noms fournis par les connexions actives.
bf5c74e7
JL
12522
12523@item dnsmasq
1d8d69c8
JL
12524NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
12525utilisant une configuration « DNS disjointe » si vous êtes connecté par un
12526VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
12527nom local.
bf5c74e7
JL
12528
12529@item none
1d8d69c8 12530NetworkManager ne modifiera pas @code{resolv.conf}.
bf5c74e7
JL
12531@end table
12532
1d8d69c8
JL
12533@item @code{vpn-plugins} (par défaut : @code{'()})
12534C'est la liste des greffons disponibles pour les VPN (réseaux privés
12535virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
12536permet à NetworkManager de gérer des VPN via OpenVPN.
bf5c74e7
JL
12537
12538@end table
12539@end deftp
12540
12541@cindex Connman
1d8d69c8
JL
12542@deffn {Variable Scheme} connman-service-type
12543C'est le type de service pour lancer @url{https://01.org/connman,Connman},
12544un gestionnaire de connexions réseaux.
bf5c74e7 12545
1d8d69c8
JL
12546Sa valeur doit être un enregistrement @code{connman-configuration} comme
12547dans cet exemple :
bf5c74e7
JL
12548
12549@example
12550(service connman-service-type
12551 (connman-configuration
12552 (disable-vpn? #t)))
12553@end example
12554
1d8d69c8 12555Voir plus bas pour des détails sur @code{connman-configuration}.
bf5c74e7
JL
12556@end deffn
12557
1d8d69c8
JL
12558@deftp {Type de données} connman-configuration
12559Type de données représentant la configuration de connman.
bf5c74e7
JL
12560
12561@table @asis
1d8d69c8
JL
12562@item @code{connman} (par défaut : @var{connman})
12563Le paquet connman à utiliser.
bf5c74e7 12564
1d8d69c8 12565@item @code{disable-vpn?} (par défaut : @code{#f})
adfb167f 12566Lorsque la valeur est vraie, désactive le greffon vpn de connman.
bf5c74e7
JL
12567@end table
12568@end deftp
12569
12570@cindex WPA Supplicant
1d8d69c8 12571@defvr {Variable Scheme} wpa-supplicant-service-type
adfb167f 12572C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
1d8d69c8 12573supplicant}, un démon d'authentification requis pour s'authentifier sur des
adfb167f
JL
12574WiFi chiffrés ou des réseaux ethernet.
12575@end defvr
bf5c74e7 12576
adfb167f
JL
12577@deftp {Type de données} wpa-supplicant-configuration
12578Type données qui représente la configuration de WPA Supplicant.
bf5c74e7 12579
adfb167f
JL
12580Il prend les paramètres suivants :
12581
12582@table @asis
12583@item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
12584Le paquet WPA Supplicant à utiliser.
12585
12586@item @code{dbus?} (par défaut : @code{#t})
12587Indique s'il faut écouter les requêtes sur D-Bus.
12588
12589@item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
12590Où stocker votre fichier de PID.
12591
12592@item @code{interface} (par défaut : @code{#f})
12593Si une valeur est indiquée, elle doit spécifier le nom d'une interface
12594réseau que WPA supplicant contrôlera.
12595
12596@item @code{config-file} (par défaut : @code{#f})
12597Fichier de configuration facultatif à utiliser.
12598
12599@item @code{extra-options} (par défaut : @code{'()})
12600Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
12601@end table
12602@end deftp
12603
12604@cindex iptables
12605@defvr {Variable Scheme} iptables-service-type
12606This is the service type to set up an iptables configuration. iptables is a
12607packet filtering framework supported by the Linux kernel. This service
12608supports configuring iptables for both IPv4 and IPv6. A simple example
12609configuration rejecting all incoming connections except those to the ssh
12610port 22 is shown below.
bf5c74e7 12611
adfb167f
JL
12612@lisp
12613(service iptables-service-type
12614 (iptables-configuration
12615 (ipv4-rules (plain-file "iptables.rules" "*filter
12616:INPUT ACCEPT
12617:FORWARD ACCEPT
12618:OUTPUT ACCEPT
12619-A INPUT -p tcp --dport 22 -j ACCEPT
12620-A INPUT -j REJECT --reject-with icmp-port-unreachable
12621COMMIT
12622"))
12623 (ipv6-rules (plain-file "ip6tables.rules" "*filter
12624:INPUT ACCEPT
12625:FORWARD ACCEPT
12626:OUTPUT ACCEPT
12627-A INPUT -p tcp --dport 22 -j ACCEPT
12628-A INPUT -j REJECT --reject-with icmp6-port-unreachable
12629COMMIT
12630"))))
bf5c74e7
JL
12631@end lisp
12632@end defvr
12633
adfb167f
JL
12634@deftp {Type de données} iptables-configuration
12635Type de données représentant la configuration d'iptables.
12636
12637@table @asis
12638@item @code{iptables} (par défaut : @code{iptables})
12639Le paquet iptables qui fournit @code{iptables-restore} et
12640@code{ip6tables-restore}.
12641@item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
12642Les règles iptables à utiliser. Elles seront passées à
12643@code{iptables-restore}. Cela peut être un objet « simili-fichier »
12644(@pxref{G-Expressions, file-like objects}).
12645@item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
12646Les règles iptables à utiliser. Elles seront passées à
12647@code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
12648(@pxref{G-Expressions, file-like objects}).
12649@end table
12650@end deftp
12651
12652@cindex NTP (Network Time Protocol), service
1d8d69c8 12653@cindex horloge
adfb167f
JL
12654@defvr {Variable Scheme} ntp-service-type
12655This is the type of the service running the @uref{http://www.ntp.org,
12656Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
12657the system clock synchronized with that of the specified NTP servers.
12658
12659La valeur de ce service est un objet @code{ntpd-configuration}, décrit
12660ci-dessous.
12661@end defvr
12662
12663@deftp {Type de données} ntp-configuration
12664C'est le type de données représentant la configuration du service NTP.
12665
12666@table @asis
12667@item @code{servers} (par défaut : @code{%ntp-servers})
12668C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
12669synchronisé.
12670
12671@item @code{allow-large-adjustment?} (par défaut : @code{#f})
12672Détermine si @code{ntpd} peut faire un ajustement initial de plus de
126731@tie{}000 secondes.
12674
12675@item @code{ntp} (par défaut : @code{ntp})
12676Le paquet NTP à utiliser.
12677@end table
12678@end deftp
bf5c74e7 12679
1d8d69c8 12680@defvr {Variable Scheme} %ntp-servers
adfb167f
JL
12681Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
12682serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
bf5c74e7
JL
12683@end defvr
12684
12685@cindex OpenNTPD
1d8d69c8
JL
12686@deffn {Procédure Scheme} openntpd-service-type
12687Lance le démon NTP @command{ntpd}, implémenté par
12688@uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
12689système synchronisée avec celle des serveurs donnés.
bf5c74e7
JL
12690
12691@example
12692(service
12693 openntpd-service-type
12694 (openntpd-configuration
12695 (listen-on '("127.0.0.1" "::1"))
12696 (sensor '("udcf0 correction 70000"))
12697 (constraint-from '("www.gnu.org"))
12698 (constraints-from '("https://www.google.com/"))
12699 (allow-large-adjustment? #t)))
12700
12701@end example
12702@end deffn
12703
1d8d69c8 12704@deftp {Type de données} openntpd-configuration
bf5c74e7 12705@table @asis
1d8d69c8
JL
12706@item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
12707L'exécutable openntpd à utiliser.
12708@item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
12709Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
12710démon ntpd.
12711@item @code{query-from} (par défaut : @code{'()})
12712Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
12713sortantes.
12714@item @code{sensor} (par défaut : @code{'()})
12715Spécifie une liste de senseurs de différences de temps que ntpd devrait
12716utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
12717qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
12718documentation en amont} pour plus d'informations.
12719@item @code{server} (par défaut : @var{%ntp-servers})
12720Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
12721lesquels se synchroniser.
12722@item @code{servers} (par défaut : @code{'()})
12723Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
12724NTP avec lesquelles se synchroniser.
12725@item @code{constraint-from} (par défaut : @code{'()})
12726@code{ntpd} peut être configuré pour demander la « Date » à des serveurs
12727HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
12728pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
12729l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
12730authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
12731serveurs HTTPS qui fournissent cette contrainte.
12732@item @code{constraints-from} (par défaut : @code{'()})
12733Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
12734ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
12735noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
12736contrainte médiane.
12737@item @code{allow-large-adjustment?} (par défaut : @code{#f})
12738Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
12739secondes.
bf5c74e7
JL
12740@end table
12741@end deftp
12742
12743@cindex inetd
1d8d69c8
JL
12744@deffn {Variable Scheme} inetd-service-type
12745Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
15f1bff4 12746inetutils, GNU Inetutils}). @command{inetd} écoute des connexions sur des
1d8d69c8
JL
12747sockets internet et démarre le programme spécifié uniquement lorsqu'une
12748connexion arrive sur l'un de ces sockets.
12749
12750La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
12751suivant configure le démon @command{inetd} pour qu'il fournisse le service
15f1bff4 12752@command{echo}, ainsi qu'un service smtp qui transfère le trafic smtp par
1d8d69c8
JL
12753ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
12754:
bf5c74e7
JL
12755
12756@example
12757(service
12758 inetd-service-type
12759 (inetd-configuration
12760 (entries (list
12761 (inetd-entry
12762 (name "echo")
12763 (socket-type 'stream)
12764 (protocol "tcp")
12765 (wait? #f)
12766 (user "root"))
12767 (inetd-entry
12768 (node "127.0.0.1")
12769 (name "smtp")
12770 (socket-type 'stream)
12771 (protocol "tcp")
12772 (wait? #f)
12773 (user "root")
12774 (program (file-append openssh "/bin/ssh"))
12775 (arguments
12776 '("ssh" "-qT" "-i" "/path/to/ssh_key"
12777 "-W" "smtp-server:25" "user@@hostname")))))
12778@end example
12779
1d8d69c8 12780Voir plus bas pour plus de détails sur @code{inetd-configuration}.
bf5c74e7
JL
12781@end deffn
12782
1d8d69c8
JL
12783@deftp {Type de données} inetd-configuration
12784Type de données représentant la configuration de @command{inetd}.
bf5c74e7
JL
12785
12786@table @asis
1d8d69c8
JL
12787@item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
12788L'exécutable @command{inetd} à utiliser.
bf5c74e7 12789
1d8d69c8
JL
12790@item @code{entries} (par défaut : @code{'()})
12791Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
12792crée avec le constructeur @code{inetd-entry}.
bf5c74e7
JL
12793@end table
12794@end deftp
12795
1d8d69c8
JL
12796@deftp {Type de données} inetd-entry
12797Type de données représentant une entrée dans la configuration
12798d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
12799@command{inetd} écoutera les requêtes.
bf5c74e7
JL
12800
12801@table @asis
1d8d69c8
JL
12802@item @code{node} (par défaut : @code{#f})
12803Chaîne de caractères facultative, un liste d'adresses locales séparées par
12804des virgules que @command{inetd} devrait utiliser pour écouter ce service.
12805@xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
12806complète de toutes les options.
bf5c74e7 12807@item @code{name}
1d8d69c8
JL
12808Une chaîne de caractères dont le nom doit correspondre à une entrée de
12809@code{/etc/services}.
bf5c74e7 12810@item @code{socket-type}
1d8d69c8 12811Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
bf5c74e7
JL
12812@code{'seqpacket}.
12813@item @code{protocol}
1d8d69c8
JL
12814Une chaîne de caractères qui doit correspondre à une entrée dans
12815@code{/etc/protocols}.
12816@item @code{wait?} (par défaut : @code{#t})
12817Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
12818d'écouter de nouvelles demandes de service.
bf5c74e7 12819@item @code{user}
adfb167f
JL
12820A string containing the user (and, optionally, group) name of the user as
12821whom the server should run. The group name can be specified in a suffix,
12822separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
12823@code{"user.group"}.
1d8d69c8
JL
12824@item @code{program} (par défaut : @code{"internal"})
12825Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
12826@command{inetd} devrait utiliser un service inclus.
3cacfa9e 12827@item @code{arguments} (par défaut : @code{'()})
adfb167f
JL
12828A list strings or file-like objects, which are the server program's
12829arguments, starting with the zeroth argument, i.e.@: the name of the program
12830itself. For @command{inetd}'s internal services, this entry must be
12831@code{'()} or @code{'("internal")}.
bf5c74e7
JL
12832@end table
12833
1d8d69c8
JL
12834@xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
12835discussion plus détaillée de chaque champ de configuration.
bf5c74e7
JL
12836@end deftp
12837
12838@cindex Tor
adfb167f
JL
12839@defvr {Variable Scheme} tor-service-type
12840C'est le type pour un service qui lance le démon de navigation anonyme
12841@uref{https://torproject.org, Tor}. Le service est configuré avec un
12842enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
12843lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
12844@code{tor}.
12845
12846@end defvr
12847
adfb167f
JL
12848@deftp {Type de données} tor-configuration
12849@table @asis
12850@item @code{tor} (par défaut : @code{tor})
12851Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
12852@file{bin/tor} relativement à son répertoire de sortie. Le paquet par
12853défaut est le l'implémentation du @uref{https://www.torproject.org, projet
12854Tor}.
12855
12856@item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
12857Le fichier de configuration à utiliser. Il sera ajouté au fichier de
12858configuration par défaut, et le fichier de configuration final sera passé à
12859@code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
12860simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
12861tor} pour plus de détails sur la syntaxe du fichier de configuration.
12862
12863@item @code{hidden-services} (par défaut : @code{'()})
12864La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
12865n'importe quel service cache que vous ajoutez à cette liste, la
12866configuration appropriée pour activer le service caché sera automatiquement
12867ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
12868enregistrements @code{<hidden-service>} avec la procédure
12869@code{tor-hidden-service} décrite plus bas.
12870
12871@item @code{socks-socket-type} (par défaut : @code{'tcp})
12872Le type de socket par défaut que Tor devrait utiliser pour les socket
12873SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
12874@code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
12875l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
12876@code{'unix}, Tor écoutera sur le socket UNIX domain
12877@file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
12878groupe @code{tor}.
12879
12880Si vous voulez personnaliser le socket SOCKS plus avant, laissez
12881@code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
12882@code{config-file} pour remplacer les valeurs par défaut avec votre propre
12883option @code{SocksPort}.
12884@end table
12885@end deftp
12886
1d8d69c8
JL
12887@cindex service caché
12888@deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
12889Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
12890@var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
12891comme dans :
bf5c74e7
JL
12892
12893@example
12894 '((22 "127.0.0.1:22")
12895 (80 "127.0.0.1:8080"))
12896@end example
12897
1d8d69c8
JL
12898Dans cet exemple, le port 22 du service caché est relié au port local 22 et
12899le port 80 est relié au port local 8080.
bf5c74e7 12900
1d8d69c8
JL
12901Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
12902fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
12903caché.
bf5c74e7 12904
1d8d69c8
JL
12905Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
12906Tor project's documentation} pour trouver plus d'information.
bf5c74e7
JL
12907@end deffn
12908
1d8d69c8 12909Le module @code{(gnu services rsync)} fournit les services suivant :
bf5c74e7 12910
1d8d69c8
JL
12911Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
12912disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
12913fichiers existants ou en téléverser des nouveaux.
bf5c74e7 12914
1d8d69c8
JL
12915@deffn {Variable Scheme} rsync-service-type
12916C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
12917un enregistrement @command{rsync-configuration} comme dans cet exemple :
bf5c74e7
JL
12918
12919@example
12920(service rsync-service-type)
12921@end example
12922
1d8d69c8
JL
12923Voir plus pas pour trouver des détails à propos de
12924@code{rsync-configuration}.
bf5c74e7
JL
12925@end deffn
12926
1d8d69c8
JL
12927@deftp {Type de données} rsync-configuration
12928Type de données représentant la configuration de @code{rsync-service}.
bf5c74e7
JL
12929
12930@table @asis
1d8d69c8
JL
12931@item @code{package} (par défaut : @var{rsync})
12932Le paquet @code{rsync} à utiliser.
bf5c74e7 12933
1d8d69c8
JL
12934@item @code{port-number} (par défaut : @code{873})
12935Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
12936le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
12937tant qu'utilisateur et groupe @code{root}.
bf5c74e7 12938
1d8d69c8
JL
12939@item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
12940Nom du fichier où @command{rsync} écrit son PID.
bf5c74e7 12941
1d8d69c8
JL
12942@item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
12943Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
bf5c74e7 12944
1d8d69c8
JL
12945@item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
12946Nom du fichier où @command{rsync} écrit son fichier de journal.
bf5c74e7 12947
1d8d69c8
JL
12948@item @code{use-chroot?} (par défaut : @var{#t})
12949S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
bf5c74e7 12950
1d8d69c8
JL
12951@item @code{share-path} (par défaut : @file{/srv/rsync})
12952Emplacement du répertoire partagé de @command{rsync}.
bf5c74e7 12953
1d8d69c8
JL
12954@item @code{share-comment} (par défaut : @code{"Rsync share"})
12955Commentaire du répertoire partagé de @command{rsync}.
bf5c74e7 12956
1d8d69c8
JL
12957@item @code{read-only?} (par défaut : @var{#f})
12958Permission en écriture sur le répertoire partagé.
bf5c74e7 12959
1d8d69c8
JL
12960@item @code{timeout} (par défaut : @code{300})
12961Délai d'attente d'entrée-sortie en secondes.
bf5c74e7 12962
1d8d69c8
JL
12963@item @code{user} (par défaut : @var{"root"})
12964Propriétaire du processus @code{rsync}.
bf5c74e7 12965
1d8d69c8
JL
12966@item @code{group} (par défaut : @var{"root"})
12967Groupe du processus @code{rsync}.
bf5c74e7 12968
1d8d69c8
JL
12969@item @code{uid} (par défaut : @var{"rsyncd"})
12970Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
12971fichiers ont lieu si le démon a été lancé en @code{root}.
bf5c74e7 12972
1d8d69c8
JL
12973@item @code{gid} (par défaut : @var{"rsyncd"})
12974Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
bf5c74e7
JL
12975
12976@end table
12977@end deftp
12978
1d8d69c8 12979En plus, @code{(gnu services ssh)} fournit les services suivant.
bf5c74e7 12980@cindex SSH
1d8d69c8 12981@cindex serveur SSH
bf5c74e7 12982
1d8d69c8 12983@deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
bf5c74e7 12984 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
1d8d69c8
JL
12985[#:allow-empty-passwords? #f] [#:root-login? #f] @
12986[#:syslog-output? #t] [#:x11-forwarding? #t] @
12987[#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
12988[#:public-key-authentication? #t] [#:initialize? #t]
12989Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
12990@var{port-number}. @var{host-key} doit désigner un fichier contenant la
12991clef d'hôte et ne doit être lisible que par root.
12992
12993Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
12994qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
12995@var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
12996dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
12997vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
12998
12999Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
13000lors de l'activation du service s'ils n'existent pas encore. Cela peut
13001prendre du temps et demande une interaction.
13002
13003Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
13004générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
13005une paire de clefs dont la clef privée sera stockée dans le fichier
13006@var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
13007
13008Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
13009interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
13010d'hôtes et d'adresses.
13011
13012@var{allow-empty-passwords?} spécifie si les connexions avec des mots de
13013passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
13014root est acceptée.
13015
13016Les autres options devraient être évidentes.
bf5c74e7
JL
13017@end deffn
13018
13019@cindex SSH
1d8d69c8
JL
13020@cindex serveur SSH
13021@deffn {Variable Scheme} openssh-service-type
13022C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
13023@command{sshd}. Sa valeur doit être un enregistrement
13024@code{openssh-configuration} comme dans cet exemple :
bf5c74e7
JL
13025
13026@example
13027(service openssh-service-type
13028 (openssh-configuration
13029 (x11-forwarding? #t)
13030 (permit-root-login 'without-password)
13031 (authorized-keys
13032 `(("alice" ,(local-file "alice.pub"))
13033 ("bob" ,(local-file "bob.pub"))))))
13034@end example
13035
1d8d69c8 13036Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
bf5c74e7 13037
1d8d69c8
JL
13038Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
13039dans cet exemple :
bf5c74e7
JL
13040
13041@example
13042(service-extension openssh-service-type
13043 (const `(("charlie"
13044 ,(local-file "charlie.pub")))))
13045@end example
13046@end deffn
13047
1d8d69c8
JL
13048@deftp {Type de données} openssh-configuration
13049C'est l'enregistrement de la configuration de la commande @command{sshd}
13050d'OpenSSH.
bf5c74e7
JL
13051
13052@table @asis
1d8d69c8
JL
13053@item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
13054Nom du fichier où @command{sshd} écrit son PID.
13055
13056@item @code{port-number} (par défaut : @code{22})
13057Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
13058
13059@item @code{permit-root-login} (par défaut : @code{#f})
13060Ce champ détermine si et quand autoriser les connexions en root. Si la
13061valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
13062est @code{#t}, elles sont autorisées. S'il s'agit du symbole
13063@code{'without-password}, alors les connexions root sont autorisées mais pas
13064par une authentification par mot de passe.
13065
13066@item @code{allow-empty-passwords?} (par défaut : @code{#f})
13067Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
13068peuvent se connecter. Sinon, ils ne peuvent pas.
13069
13070@item @code{password-authentication?} (par défaut : @code{#t})
13071Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
13072mot de passe. Sinon, ils doivent utiliser une autre méthode
13073d'authentification.
13074
13075@item @code{public-key-authentication?} (par défaut : @code{#t})
13076Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
13077clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
13078d'authentification.
13079
13080Les clefs publiques autorisées sont stockées dans
13081@file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
13082version 2.
13083
13084@item @code{x11-forwarding?} (par défaut : @code{#f})
13085Lorsque la valeur est vraie, le transfert de connexion du client graphique
13086X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
13087de @command{ssh} fonctionneront.
bf5c74e7 13088
adfb167f
JL
13089@item @code{allow-agent-forwarding?} (par défaut : @code{#t})
13090Indique s'il faut autoriser la redirection d'agent.
524756d1 13091
adfb167f
JL
13092@item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
13093Indique s'il faut autoriser la redirection TCP.
524756d1 13094
adfb167f
JL
13095@item @code{gateway-ports?} (par défaut : @code{#f})
13096Indique s'il faut autoriser les ports de passerelle.
524756d1 13097
1d8d69c8 13098@item @code{challenge-response-authentication?} (par défaut : @code{#f})
adfb167f
JL
13099Specifies whether challenge response authentication is allowed (e.g.@: via
13100PAM).
bf5c74e7 13101
1d8d69c8
JL
13102@item @code{use-pam?} (par défaut : @code{#t})
13103Active l'interface avec le module d'authentification greffable, PAM. Si la
13104valeur est @code{#t}, cela activera l'authentification PAM avec
13105@code{challenge-response-authentication?} et
13106@code{password-authentication?}, en plus des modules de compte et de session
13107de PAM pour tous les types d'authentification.
bf5c74e7 13108
1d8d69c8
JL
13109Comme l'authentification par défi de PAM sert généralement un rôle
13110équivalent à l'authentification par mot de passe, vous devriez désactiver
13111soit @code{challenge-response-authentication?}, soit
bf5c74e7
JL
13112@code{password-authentication?}.
13113
1d8d69c8
JL
13114@item @code{print-last-log?} (par défaut : @code{#t})
13115Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
13116connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
13117interactive.
bf5c74e7 13118
1d8d69c8 13119@item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
adfb167f 13120Configures external subsystems (e.g.@: file transfer daemon).
bf5c74e7 13121
1d8d69c8
JL
13122C'est une liste de paires, composées chacune du nom du sous-système et d'une
13123commande (avec éventuellement des arguments) à exécuter à la demande du
13124sous-système.
bf5c74e7 13125
1d8d69c8
JL
13126La commande @command{internal-sftp} implémente un serveur SFTP dans le
13127processus. Autrement, on peut spécifier la commande @command{sftp-server} :
bf5c74e7
JL
13128@example
13129(service openssh-service-type
13130 (openssh-configuration
13131 (subsystems
13132 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
13133@end example
13134
1d8d69c8
JL
13135@item @code{accepted-environment} (par défaut : @code{'()})
13136Liste de chaînes de caractères qui décrivent les variables d'environnement
13137qui peuvent être exportées.
bf5c74e7 13138
1d8d69c8 13139Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
bf5c74e7
JL
13140@code{man sshd_config}.
13141
1d8d69c8
JL
13142Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
13143Elle est initialisée par les émulateurs de terminaux qui supportent les
13144couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
13145shell pour activer les couleurs sur la ligne de commande si cette variable
13146est initialisée.
bf5c74e7
JL
13147
13148@example
13149(service openssh-service-type
13150 (openssh-configuration
13151 (accepted-environment '("COLORTERM"))))
13152@end example
13153
1d8d69c8
JL
13154@item @code{authorized-keys} (par défaut : @code{'()})
13155@cindex clefs autorisées, SSH
13156@cindex SSH, clefs autorisées
13157C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
13158d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
13159représentent les clefs publiques SSH. Par exemple :
bf5c74e7
JL
13160
13161@example
13162(openssh-configuration
13163 (authorized-keys
13164 `(("rekado" ,(local-file "rekado.pub"))
13165 ("chris" ,(local-file "chris.pub"))
13166 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
13167@end example
13168
13169@noindent
1d8d69c8
JL
13170enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
13171@code{chris} et @code{root}.
bf5c74e7 13172
1d8d69c8 13173Des clefs autorisées supplémentaires peuvent être spécifiées via
bf5c74e7
JL
13174@code{service-extension}.
13175
1d8d69c8 13176Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
bf5c74e7 13177@file{~/.ssh/authorized_keys}.
adfb167f
JL
13178
13179@item @code{log-level} (par défaut : @code{'info})
13180C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
13181@code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
13182Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
13183des noms de niveaux.
13184
15f1bff4
JL
13185@item @code{extra-content} (par défaut : @code{""})
13186This field can be used to append arbitrary text to the configuration file.
13187It is especially useful for elaborate configurations that cannot be
13188expressed otherwise. This configuration, for example, would generally
13189disable root logins, but permit them from one specific IP address:
13190
13191@example
13192(openssh-configuration
13193 (extra-content "\
13194Match Address 192.168.0.1
13195 PermitRootLogin yes"))
13196@end example
13197
bf5c74e7
JL
13198@end table
13199@end deftp
13200
1d8d69c8
JL
13201@deffn {Procédure Scheme} dropbear-service [@var{config}]
13202Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
13203Dropbear} avec la configuration @var{config} donnée, un objet
13204@code{<dropbear-configuration>}.
bf5c74e7 13205
1d8d69c8 13206Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
15f1bff4 13207ajoutez cet appel au champ @code{services} de votre système d'exploitation :
bf5c74e7
JL
13208
13209@example
13210(dropbear-service (dropbear-configuration
13211 (port-number 1234)))
13212@end example
13213@end deffn
13214
1d8d69c8
JL
13215@deftp {Type de données} dropbear-configuration
13216Ce type de données représente la configuration d'un démon SSH Dropbear.
bf5c74e7
JL
13217
13218@table @asis
1d8d69c8
JL
13219@item @code{dropbear} (par défaut : @var{dropbear})
13220Le paquet Dropbear à utiliser.
bf5c74e7 13221
1d8d69c8
JL
13222@item @code{port-number} (par défaut : 22)
13223Le port TCP sur lequel le démon attend des connexions entrantes.
bf5c74e7 13224
1d8d69c8
JL
13225@item @code{syslog-output?} (par défaut : @code{#t})
13226Indique s'il faut activer la sortie vers syslog.
bf5c74e7 13227
1d8d69c8
JL
13228@item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
13229Nom du fichier de PID du démon.
bf5c74e7 13230
1d8d69c8
JL
13231@item @code{root-login?} (par défaut : @code{#f})
13232Indique s'il faut autoriser les connexions en @code{root}.
bf5c74e7 13233
1d8d69c8
JL
13234@item @code{allow-empty-passwords?} (par défaut : @code{#f})
13235Indique s'il faut autoriser les mots de passes vides.
bf5c74e7 13236
1d8d69c8
JL
13237@item @code{password-authentication?} (par défaut : @code{#t})
13238Indique s'il faut autoriser l'authentification par mot de passe.
bf5c74e7
JL
13239@end table
13240@end deftp
13241
1d8d69c8
JL
13242@defvr {Variable Scheme} %facebook-host-aliases
13243Cette variable contient une chaîne de caractères à utiliser dans
13244@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
13245Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
13246des serveurs connus du service en ligne Facebook — p.@: ex.@:
13247@code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
13248équivalent en IPv6, @code{::1}.
bf5c74e7 13249
1d8d69c8
JL
13250Cette variable est typiquement utilisée dans le champ @code{hosts-file}
13251d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
bf5c74e7
JL
13252
13253@example
13254(use-modules (gnu) (guix))
13255
13256(operating-system
1d8d69c8 13257 (host-name "mamachine")
bf5c74e7
JL
13258 ;; ...
13259 (hosts-file
1d8d69c8
JL
13260 ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
13261 ;; et « mamachine », ainsi que pour les serveurs de Facebook.
bf5c74e7
JL
13262 (plain-file "hosts"
13263 (string-append (local-host-aliases host-name)
13264 %facebook-host-aliases))))
13265@end example
13266
1d8d69c8
JL
13267Ce mécanisme peut éviter que des programmes qui tournent localement, comme
13268des navigateurs Web, ne se connectent à Facebook.
bf5c74e7
JL
13269@end defvr
13270
1d8d69c8
JL
13271Le module @code{(gnu services avahi)} fourni la définition suivante.
13272
15f1bff4
JL
13273@defvr {Scheme Variable} avahi-service-type
13274This is the service that runs @command{avahi-daemon}, a system-wide
13275mDNS/DNS-SD responder that allows for service discovery and
13276``zero-configuration'' host name lookups (see @uref{http://avahi.org/}).
13277Its value must be a @code{zero-configuration} record---see below.
13278
13279This service extends the name service cache daemon (nscd) so that it can
13280resolve @code{.local} host names using
13281@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name Service Switch}, for information on host name resolution.
13282
13283Additionally, add the @var{avahi} package to the system profile so that
13284commands such as @command{avahi-browse} are directly usable.
13285@end defvr
13286
13287@deftp {Data Type} avahi-configuration
13288Data type representation the configuration for Avahi.
13289
13290@table @asis
13291
13292@item @code{host-name} (default: @code{#f})
13293If different from @code{#f}, use that as the host name to publish for this
13294machine; otherwise, use the machine's actual host name.
13295
13296@item @code{publish?} (default: @code{#t})
13297When true, allow host names and services to be published (broadcast) over
13298the network.
13299
13300@item @code{publish-workstation?} (default: @code{#t})
13301When true, @command{avahi-daemon} publishes the machine's host name and IP
13302address via mDNS on the local network. To view the host names published on
13303your local network, you can run:
13304
13305@example
13306avahi-browse _workstation._tcp
13307@end example
13308
13309@item @code{wide-area?} (default: @code{#f})
13310When true, DNS-SD over unicast DNS is enabled.
13311
13312@item @code{ipv4?} (default: @code{#t})
13313@itemx @code{ipv6?} (default: @code{#t})
13314These fields determine whether to use IPv4/IPv6 sockets.
13315
13316@item @code{domains-to-browse} (default: @code{'()})
13317This is a list of domains to browse.
13318@end table
13319@end deftp
bf5c74e7 13320
1d8d69c8
JL
13321@deffn {Variable Scheme} openvswitch-service-type
13322C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
13323dont la valeur devrait être un objet @code{openvswitch-configuration}.
bf5c74e7
JL
13324@end deffn
13325
1d8d69c8
JL
13326@deftp {Type de données} openvswitch-configuration
13327Type de données représentant la configuration de Open vSwitch, un
13328commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
13329massive des réseaux avec des extensions programmables.
bf5c74e7
JL
13330
13331@table @asis
1d8d69c8
JL
13332@item @code{package} (par défaut : @var{openvswitch})
13333Objet de paquet de Open vSwitch.
bf5c74e7
JL
13334
13335@end table
13336@end deftp
13337
3cacfa9e 13338@node Système de fenêtrage X
15f1bff4 13339@subsection Système de fenêtrage X
bf5c74e7
JL
13340
13341@cindex X11
1d8d69c8
JL
13342@cindex Système de fenêtrage X
13343@cindex gestionnaire de connexion
13344Le support pour le système d'affichage graphique X Window — en particulier
13345Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
13346qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
13347est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
13348
13349@cindex gestionnaire de fenêtre
13350Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
13351fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
13352préférence en l'ajoutant au champ @code{packages} de votre définition de
13353système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
13354packages}).
13355
13356@defvr {Variable Scheme} slim-service-type
13357C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
13358
13359@cindex types de sessions (X11)
13360@cindex X11, types de sessions
13361SLiM cherche des @dfn{types de sessions} définies par les fichiers
13362@file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
13363permet aux utilisateurs de choisir une session depuis l'écran de connexion
13364avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
13365@code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
13366l'ensemble des paquets du système les rendra automatiquement disponibles sur
13367l'écran de connexion.
13368
13369En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
13370disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
13371un gestionnaire de fenêtre au un autre client X.
bf5c74e7
JL
13372@end defvr
13373
1d8d69c8
JL
13374@deftp {Type de données} slim-configuration
13375Type de données représentant la configuration de @code{slim-service-type}.
bf5c74e7
JL
13376
13377@table @asis
1d8d69c8
JL
13378@item @code{allow-empty-passwords?} (par défaut : @code{#t})
13379S'il faut autoriser les connexions avec un mot de passe vide.
bf5c74e7 13380
1d8d69c8
JL
13381@item @code{auto-login?} (par défaut : @code{#f})
13382@itemx @code{default-user} (par défaut : @code{""})
13383Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
bf5c74e7 13384
1d8d69c8
JL
13385Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
13386que @code{default-user}.
bf5c74e7 13387
1d8d69c8
JL
13388@item @code{theme} (par défaut : @code{%default-slim-theme})
13389@itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
13390Le thème graphique à utiliser et son nom.
bf5c74e7 13391
1d8d69c8
JL
13392@item @code{auto-login-session} (par défaut : @code{#f})
13393Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
13394comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
13395"/bin/windowmaker")}.
bf5c74e7 13396
1d8d69c8
JL
13397Si la valeur est fausse, une session décrite par l'un des fichiers
13398@file{.desktop} disponibles dans @code{/run/current-system/profile} et
13399@code{~/.guix-profile} sera utilisée.
bf5c74e7 13400
3cacfa9e 13401@quotation Remarque
1d8d69c8
JL
13402Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
13403système ou dans votre profil utilisateur. Sinon, si
13404@code{auto-login-session} est faux, vous ne serez jamais capable de vous
13405connecter.
bf5c74e7
JL
13406@end quotation
13407
1d8d69c8
JL
13408@item @code{startx} (par défaut : @code{(xorg-start-command)})
13409La commande utilisée pour démarrer le serveur graphique X11.
bf5c74e7 13410
1d8d69c8
JL
13411@item @code{xauth} (par défaut : @code{xauth})
13412Le paquet XAuth à utiliser.
bf5c74e7 13413
1d8d69c8
JL
13414@item @code{shepherd} (par défaut : @code{shepherd})
13415Le paquet Shepherd à utiliser pour invoquer @command{halt} et
13416@command{reboot}.
bf5c74e7 13417
1d8d69c8
JL
13418@item @code{sessreg} (par défaut : @code{sessreg})
13419Le paquet sessreg à utiliser pour enregistrer la session.
bf5c74e7 13420
1d8d69c8
JL
13421@item @code{slim} (par défaut : @code{slim})
13422Le paquet SLiM à utiliser.
bf5c74e7
JL
13423@end table
13424@end deftp
13425
1d8d69c8
JL
13426@defvr {Variable Scheme} %default-theme
13427@defvrx {Variable Scheme} %default-theme-name
13428Le thème SLiM par défaut et son nom.
bf5c74e7
JL
13429@end defvr
13430
13431
1d8d69c8
JL
13432@deftp {Type de données} sddm-configuration
13433C'est le type de données représentant la configuration du service sddm.
bf5c74e7
JL
13434
13435@table @asis
1d8d69c8
JL
13436@item @code{display-server} (par défaut : "x11")
13437Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
13438valeurs valides sont « x11 » et « wayland ».
bf5c74e7 13439
1d8d69c8
JL
13440@item @code{numlock} (par défaut : "on")
13441Les valeurs valides sont « on », « off » ou « none ».
bf5c74e7 13442
1d8d69c8
JL
13443@item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
13444La commande à lancer à l'arrêt du système.
bf5c74e7 13445
1d8d69c8
JL
13446@item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
13447La commande à lancer lors du redémarrage du système.
bf5c74e7 13448
1d8d69c8
JL
13449@item @code{theme} (par défaut : "maldives")
13450Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
13451et « maldives ».
bf5c74e7 13452
1d8d69c8
JL
13453@item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
13454Le répertoire où se trouvent les thèmes.
bf5c74e7 13455
1d8d69c8
JL
13456@item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
13457Répertoire où se trouvent les avatars.
bf5c74e7 13458
1d8d69c8
JL
13459@item @code{default-path} (par défaut : "/run/current-system/profile/bin")
13460Le PATH par défaut à utiliser.
bf5c74e7 13461
1d8d69c8
JL
13462@item @code{minimum-uid} (par défaut : 1000)
13463UID minimum pour être affiché dans SDDM.
bf5c74e7 13464
1d8d69c8
JL
13465@item @code{maximum-uid} (par défaut : 2000)
13466UID maximum pour être affiché dans SDDM.
bf5c74e7 13467
1d8d69c8
JL
13468@item @code{remember-last-user?} (par défaut : #t)
13469S'il faut se rappeler le dernier utilisateur connecté.
bf5c74e7 13470
1d8d69c8
JL
13471@item @code{remember-last-session?} (par défaut : #t)
13472S'il faut se rappeler la dernière session.
bf5c74e7 13473
1d8d69c8
JL
13474@item @code{hide-users} (par défaut : "")
13475Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
bf5c74e7 13476
1d8d69c8
JL
13477@item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
13478Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
13479de SDDM.
bf5c74e7 13480
1d8d69c8
JL
13481@item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
13482Le script à lancer avant de démarrer une session wayland.
bf5c74e7 13483
1d8d69c8
JL
13484@item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
13485Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
13486wayland.
bf5c74e7 13487
1d8d69c8
JL
13488@item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
13489Chemin vers xorg-server.
bf5c74e7 13490
1d8d69c8
JL
13491@item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
13492Chemin vers xauth.
bf5c74e7 13493
1d8d69c8
JL
13494@item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
13495Chemin vers Xephyr.
bf5c74e7 13496
1d8d69c8
JL
13497@item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
13498Le script à lancer après avoir démarré xorg-server.
bf5c74e7 13499
1d8d69c8
JL
13500@item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
13501Le script à lancer avant d'arrêter xorg-server.
bf5c74e7 13502
2cf2c778 13503@item @code{xsession-command} (par défaut : @code{xinitrc})
1d8d69c8 13504Le script à lancer avant de démarrer une session X.
bf5c74e7 13505
1d8d69c8
JL
13506@item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
13507Répertoire où trouver les fichiers .desktop pour les sessions X.
bf5c74e7 13508
1d8d69c8
JL
13509@item @code{minimum-vt} (par défaut : 7)
13510VT minimal à utiliser.
bf5c74e7 13511
1d8d69c8
JL
13512@item @code{xserver-arguments} (par défaut : "-nolisten tcp")
13513Arguments à passer à xorg-server.
bf5c74e7 13514
1d8d69c8
JL
13515@item @code{auto-login-user} (par défaut : "")
13516Utilisateur à utiliser pour la connexion automatique.
bf5c74e7 13517
1d8d69c8
JL
13518@item @code{auto-login-session} (par défaut : "")
13519Le fichier desktop à utiliser pour la connexion automatique.
bf5c74e7 13520
1d8d69c8
JL
13521@item @code{relogin?} (par défaut : #f)
13522S'il faut se reconnecter après la déconnexion.
bf5c74e7
JL
13523
13524@end table
13525@end deftp
13526
1d8d69c8
JL
13527@cindex gestionnaire de connexion
13528@cindex connexion X11
13529@deffn {Procédure Scheme} sddm-service config
13530Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
13531avec une configuration de type @code{<sddm-configuration>}.
bf5c74e7
JL
13532
13533@example
13534 (sddm-service (sddm-configuration
13535 (auto-login-user "Alice")
13536 (auto-login-session "xfce.desktop")))
13537@end example
13538@end deffn
13539
1d8d69c8 13540@deffn {Procédure Scheme} xorg-start-command [#:guile] @
15f1bff4
JL
13541 [#:modules %default-xorg-modules] @ [#:fonts %default-xorg-fonts] @
13542[#:configuration-file (xorg-configuration-file @dots{})] @ [#:xorg-server
13543@var{xorg-server}] [#:xserver-arguments '("-nolisten" "tcp")] Return a
13544@code{startx} script in which @var{modules}, a list of X module packages,
13545and @var{fonts}, a list of X font directories, are available. See
13546@code{xorg-wrapper} for more details on the arguments. The result should be
13547used in place of @code{startx}.
1d8d69c8
JL
13548
13549Habituellement le serveur X est démarré par un gestionnaire de connexion.
bf5c74e7
JL
13550@end deffn
13551
15f1bff4
JL
13552@cindex @code{-listen tcp}, for X11.
13553This procedure is useful to override command line options for the X server,
13554such as having it listen to over TCP:
13555
13556@example
13557(operating-system
13558 ...
13559 (services
13560 (modify-services %desktop-services
13561 (slim-service-type config =>
13562 (slim-configuration
13563 (inherit config)
13564 (startx (xorg-start-command
13565 #:xserver-arguments '("-listen" "tcp"))))))))
13566@end example
13567
1d8d69c8
JL
13568@deffn {Procédure Scheme} xorg-configuration-file @
13569 [#:modules %default-xorg-modules] @
13570[#:fonts %default-xorg-fonts] @
13571[#:drivers '()] [#:resolutions '()] [#:extra-config '()]
13572Renvoie un fichier de configuration pour le serveur Xorg qui contient des
13573chemins de recherche pour tous les pilotes communs.
13574
13575@var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
13576serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
13577etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
13578@dfn{chemin de polices} du serveur.
13579
13580@var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
13581pilote graphique automatiquement, soit une liste de noms de pilotes qui
13582seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
13583
13584De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
13585résolution d'écran appropriée ; autrement, ce doit être une liste de
13586résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
13587
13588Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
13589ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
13590supplémentaire à être ajouté directement au fichier de configuration.
13591
13592@cindex disposition clavier
13593@cindex disposition du clavier
13594Cette procédure est particulièrement utile pour configurer une disposition
13595de clavier différente de la disposition US par défaut. Par exemple, pour
13596utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
13597:
7f3f72b2
JL
13598
13599@example
13600(define bepo-evdev
13601 "Section \"InputClass\"
13602 Identifier \"evdev keyboard catchall\"
13603 Driver \"evdev\"
13604 MatchIsKeyboard \"on\"
13605 Option \"xkb_layout\" \"fr\"
13606 Option \"xkb_variant\" \"bepo\"
13607EndSection")
13608
13609(operating-system
13610 ...
13611 (services
13612 (modify-services %desktop-services
13613 (slim-service-type config =>
13614 (slim-configuration
13615 (inherit config)
13616 (startx (xorg-start-command
13617 #:configuration-file
13618 (xorg-configuration-file
13619 #:extra-config
13620 (list bepo-evdev)))))))))
13621@end example
13622
1d8d69c8
JL
13623La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
13624configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
13625comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
13626seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
13627utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
13628disposition de clavier préférée une fois connecté. Le premier argument
13629correspond à la disposition, tandis que le second argument correspond à la
13630variante. La ligne @code{xkb_variant} peut être omise pour choisir la
13631variante par défaut.
bf5c74e7
JL
13632@end deffn
13633
1d8d69c8
JL
13634@deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
13635Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
13636économiseur d'écran dont la commande est @var{program}, à l'ensemble des
13637programmes setuid et lui ajoute une entrée PAM. Par exemple :
bf5c74e7
JL
13638
13639@lisp
13640(screen-locker-service xlockmore "xlock")
13641@end lisp
13642
1d8d69c8 13643rend utilisable le bon vieux XlockMore.
bf5c74e7
JL
13644@end deffn
13645
13646
3cacfa9e 13647@node Services d'impression
15f1bff4 13648@subsection Services d'impression
bf5c74e7 13649
1d8d69c8 13650@cindex support des imprimantes avec CUPS
15f1bff4
JL
13651The @code{(gnu services cups)} module provides a Guix service definition for
13652the CUPS printing service. To add printer support to a Guix system, add a
13653@code{cups-service} to the operating system definition:
bf5c74e7 13654
1d8d69c8
JL
13655@deffn {Variable Scheme} cups-service-type
13656Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
13657être une configuration CUPS valide (voir plus bas). Pour utiliser les
13658paramètres par défaut, écrivez simplement :
bf5c74e7
JL
13659@example
13660(service cups-service-type)
13661@end example
13662@end deffn
13663
1d8d69c8
JL
13664La configuration de CUPS contrôle les paramètres de base de votre
13665installation CUPS : sur quelles interfaces il doit écouter, que faire si un
13666travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
13667une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
13668utiliser un outil comme les services de configuration d'imprimante de
13669GNOME. Par défaut, la configuration du service CUPS générera un certificat
13670auto-signé si besoin, pour les connexions sécurisée avec le serveur
13671d'impression.
bf5c74e7 13672
adfb167f 13673Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
15f1bff4 13674support pour les imprimantes Epson via le paquet @code{escpr} et pour les
adfb167f
JL
13675imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
13676directement, comme ceci (vous devez utiliser le module @code{(gnu packages
13677cups)}) :
bf5c74e7
JL
13678
13679@example
13680(service cups-service-type
13681 (cups-configuration
13682 (web-interface? #t)
13683 (extensions
524756d1 13684 (list cups-filters escpr hplip-minimal))))
bf5c74e7
JL
13685@end example
13686
adfb167f
JL
13687Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
13688paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
13689dans votre configuration d'OS, soit en tant qu'utilisateur.
524756d1 13690
1d8d69c8
JL
13691Les paramètres de configuration disponibles sont les suivants. Chaque
13692définition des paramètres est précédé par son type ; par exemple,
13693@samp{string-list foo} indique que le paramètre @code{foo} devrait être
13694spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
13695de spécifier la configuration comme une chaîne de caractères, si vous avez
13696un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
13697système ; voir la fin pour plus de détails.
bf5c74e7
JL
13698
13699@c The following documentation was initially generated by
13700@c (generate-documentation) in (gnu services cups). Manually maintained
13701@c documentation is better, so we shouldn't hesitate to edit below as
13702@c needed. However if the change you want to make to this documentation
13703@c can be done in an automated way, it's probably easier to change
13704@c (generate-documentation) than to make it below and have to deal with
13705@c the churn as CUPS updates.
13706
13707
1d8d69c8 13708Les champs de @code{cups-configuration} disponibles sont :
bf5c74e7 13709
1d8d69c8
JL
13710@deftypevr {paramètre de @code{cups-configuration}} package cups
13711Le paquet CUPS.
bf5c74e7
JL
13712@end deftypevr
13713
1d8d69c8
JL
13714@deftypevr {paramètre de @code{cups-configuration}} package-list extensions
13715Pilotes et autres extensions du paquet CUPS.
bf5c74e7
JL
13716@end deftypevr
13717
1d8d69c8
JL
13718@deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
13719Configuration de l'emplacement où écrire les journaux, quels répertoires
13720utiliser pour les travaux d'impression et les paramètres de configuration
13721privilégiés liés.
bf5c74e7 13722
1d8d69c8 13723Les champs @code{files-configuration} disponibles sont :
bf5c74e7 13724
1d8d69c8
JL
13725@deftypevr {paramètre de @code{files-configuration}} log-location access-log
13726Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
13727désactive la génération de journaux d'accès. La valeur @code{stderr} fait
13728que les entrées du journal seront envoyés sur l'erreur standard lorsque
13729l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13730lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13731entrées du journal sont envoyées au démon de journalisation du système. Le
13732nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13733@code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
bf5c74e7 13734
1d8d69c8 13735La valeur par défaut est @samp{"/var/log/cups/access_log"}.
bf5c74e7
JL
13736@end deftypevr
13737
1d8d69c8
JL
13738@deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
13739L'emplacement où CUPS devrait mettre les données en cache.
bf5c74e7 13740
1d8d69c8 13741La valeur par défaut est @samp{"/var/cache/cups"}.
bf5c74e7
JL
13742@end deftypevr
13743
1d8d69c8
JL
13744@deftypevr {paramètre de @code{files-configuration}} string config-file-perm
13745Spécifie les permissions pour tous les fichiers de configuration que
13746l'ordonnanceur écrit.
bf5c74e7 13747
1d8d69c8
JL
13748Remarquez que les permissions pour le fichier printers.conf sont
13749actuellement masqués pour ne permettre que l'accès par l'utilisateur de
13750l'ordonnanceur (typiquement root). La raison est que les URI des
13751imprimantes contiennent des informations d'authentification sensibles qui ne
13752devraient pas être connues sur le système. Il n'est pas possible de
13753désactiver cette fonctionnalité de sécurité.
bf5c74e7 13754
1d8d69c8 13755La valeur par défaut est @samp{"0640"}.
bf5c74e7
JL
13756@end deftypevr
13757
1d8d69c8
JL
13758@deftypevr {paramètre de @code{files-configuration}} log-location error-log
13759Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
13760désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
13761que les entrées du journal seront envoyés sur l'erreur standard lorsque
13762l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13763lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13764entrées du journal sont envoyées au démon de journalisation du système. Le
13765nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13766@code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
bf5c74e7 13767
1d8d69c8 13768La valeur par défaut est @samp{"/var/log/cups/error_log"}.
bf5c74e7
JL
13769@end deftypevr
13770
1d8d69c8
JL
13771@deftypevr {paramètre de @code{files-configuration}} string fatal-errors
13772Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
13773Les types de chaînes sont :
bf5c74e7
JL
13774
13775@table @code
13776@item none
1d8d69c8 13777Aucune erreur n'est fatale.
bf5c74e7
JL
13778
13779@item all
1d8d69c8 13780Toutes les erreurs ci-dessous sont fatales.
bf5c74e7
JL
13781
13782@item browse
1d8d69c8
JL
13783Les erreurs d'initialisation de la navigation sont fatales, par exemple les
13784connexion échouées au démon DNS-SD.
bf5c74e7
JL
13785
13786@item config
1d8d69c8 13787Les erreurs de syntaxe du fichier de configuration sont fatale.
bf5c74e7
JL
13788
13789@item listen
1d8d69c8
JL
13790Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
13791sur la boucle locale ou les adresses @code{any}.
bf5c74e7
JL
13792
13793@item log
1d8d69c8 13794Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
bf5c74e7
JL
13795
13796@item permissions
1d8d69c8
JL
13797Les mauvaises permissions des fichiers de démarrage sont fatales, par
13798exemple un certificat TLS et des fichiers de clefs avec des permissions
13799permettant la lecture à tout le monde.
bf5c74e7
JL
13800@end table
13801
1d8d69c8 13802La valeur par défaut est @samp{"all -browse"}.
bf5c74e7
JL
13803@end deftypevr
13804
1d8d69c8
JL
13805@deftypevr {paramètre de @code{files-configuration}} boolean file-device?
13806Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
13807nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
13808permise.
bf5c74e7 13809
1d8d69c8 13810La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13811@end deftypevr
13812
1d8d69c8
JL
13813@deftypevr {paramètre de @code{files-configuration}} string group
13814Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
13815programmes externes.
bf5c74e7 13816
1d8d69c8 13817La valeur par défaut est @samp{"lp"}.
bf5c74e7
JL
13818@end deftypevr
13819
1d8d69c8
JL
13820@deftypevr {paramètre de @code{files-configuration}} string log-file-perm
13821Spécifie les permissions pour tous les fichiers de journal que
13822l'ordonnanceur écrit.
bf5c74e7 13823
1d8d69c8 13824La valeur par défaut est @samp{"0644"}.
bf5c74e7
JL
13825@end deftypevr
13826
1d8d69c8
JL
13827@deftypevr {paramètre de @code{files-configuration}} log-location page-log
13828Définit le fichier de journal de page. Spécifier un nom de fichier vide
13829désactive la génération de journaux de pages. La valeur @code{stderr} fait
13830que les entrées du journal seront envoyés sur l'erreur standard lorsque
13831l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
13832lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
13833entrées du journal sont envoyées au démon de journalisation du système. Le
13834nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
13835@code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
bf5c74e7 13836
1d8d69c8 13837La valeur par défaut est @samp{"/var/log/cups/page_log"}.
bf5c74e7
JL
13838@end deftypevr
13839
1d8d69c8
JL
13840@deftypevr {paramètre de @code{files-configuration}} string remote-root
13841Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
13842clients qui se disent être l'utilisateur root. La valeur par défaut est
13843@code{remroot}.
bf5c74e7 13844
1d8d69c8 13845La valeur par défaut est @samp{"remroot"}.
bf5c74e7
JL
13846@end deftypevr
13847
1d8d69c8
JL
13848@deftypevr {paramètre de @code{files-configuration}} file-name request-root
13849Spécifie le répertoire qui contient les travaux d'impression et d'autres
13850données des requêtes HTTP.
bf5c74e7 13851
1d8d69c8 13852La valeur par défaut est @samp{"/var/spool/cups"}.
bf5c74e7
JL
13853@end deftypevr
13854
1d8d69c8
JL
13855@deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
13856Spécifie le niveau d'isolation de sécurité appliqué aux filtres
13857d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
13858soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
13859utilisée et supportée que sur macOS.
bf5c74e7 13860
1d8d69c8 13861La valeur par défaut est @samp{strict}.
bf5c74e7
JL
13862@end deftypevr
13863
1d8d69c8
JL
13864@deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
13865Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
13866cherchera les clefs publiques et privées dans ce répertoire : un fichier
13867@code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
13868correspondant pour la clef privée encodée en PEM.
bf5c74e7 13869
1d8d69c8 13870La valeur par défaut est @samp{"/etc/cups/ssl"}.
bf5c74e7
JL
13871@end deftypevr
13872
1d8d69c8
JL
13873@deftypevr {paramètre de @code{files-configuration}} file-name server-root
13874Spécifie le répertoire contenant les fichiers de configuration du serveur.
bf5c74e7 13875
1d8d69c8 13876La valeur par défaut est @samp{"/etc/cups"}.
bf5c74e7
JL
13877@end deftypevr
13878
1d8d69c8
JL
13879@deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
13880Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
13881configuration ou les fichiers d'état.
bf5c74e7 13882
1d8d69c8 13883La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13884@end deftypevr
13885
1d8d69c8
JL
13886@deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
13887Spécifie le groupe ou les groupes à utiliser pour l'authentification du
13888groupe @code{@@SYSTEM}.
bf5c74e7
JL
13889@end deftypevr
13890
1d8d69c8
JL
13891@deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
13892Spécifie le répertoire où les fichiers temporaires sont stockés.
bf5c74e7 13893
1d8d69c8 13894La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
bf5c74e7
JL
13895@end deftypevr
13896
1d8d69c8
JL
13897@deftypevr {paramètre de @code{files-configuration}} string user
13898Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
13899externes.
bf5c74e7 13900
1d8d69c8 13901La valeur par défaut est @samp{"lp"}.
bf5c74e7
JL
13902@end deftypevr
13903@end deftypevr
13904
1d8d69c8
JL
13905@deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
13906Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
13907@code{config} enregistre les ajouts, suppressions et modifications
13908d'imprimantes et de classes et lorsque les fichiers de configuration sont
13909accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
13910la suspension, la libération, la modification et l'annulation des travaux et
13911toutes les conditions de @code{config}. Le niveau @code{all} enregistre
13912toutes les requêtes.
bf5c74e7 13913
1d8d69c8 13914La valeur par défaut est @samp{actions}.
bf5c74e7
JL
13915@end deftypevr
13916
1d8d69c8
JL
13917@deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
13918Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
13919n'est plus nécessaire pour les quotas.
bf5c74e7 13920
1d8d69c8 13921La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13922@end deftypevr
13923
1d8d69c8
JL
13924@deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
13925Spécifie les protocoles à utiliser pour partager les imprimantes sur le
13926réseau local.
bf5c74e7 13927
1d8d69c8 13928La valeur par défaut est @samp{dnssd}.
bf5c74e7
JL
13929@end deftypevr
13930
1d8d69c8
JL
13931@deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
13932Spécifie si l'interface web de CUPS est publiée.
bf5c74e7 13933
1d8d69c8 13934La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13935@end deftypevr
13936
1d8d69c8
JL
13937@deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
13938Spécifie si les imprimantes partagées sont publiées.
bf5c74e7 13939
1d8d69c8 13940La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13941@end deftypevr
13942
1d8d69c8
JL
13943@deftypevr {paramètre de @code{cups-configuration}} string classification
13944Spécifie la classification de sécurité du serveur. N'importe quel nom de
13945bannière peut être utilisé, comme « classifié », « confidentiel », « secret
13946», « top secret » et « déclassifié » ou la bannière peut être omise pour
13947désactiver les fonctions d'impression sécurisées.
bf5c74e7 13948
1d8d69c8 13949La valeur par défaut est @samp{""}.
bf5c74e7
JL
13950@end deftypevr
13951
1d8d69c8
JL
13952@deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
13953Spécifie si les utilisateurs peuvent remplacer la classification (page de
13954couverture) des travaux d'impression individuels avec l'option
13955@code{job-sheets}.
bf5c74e7 13956
1d8d69c8 13957La valeur par défaut est @samp{#f}.
bf5c74e7
JL
13958@end deftypevr
13959
1d8d69c8
JL
13960@deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
13961Spécifie le type d'authentification par défaut à utiliser.
bf5c74e7 13962
1d8d69c8 13963La valeur par défaut est @samp{Basic}.
bf5c74e7
JL
13964@end deftypevr
13965
1d8d69c8
JL
13966@deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
13967Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
bf5c74e7 13968
1d8d69c8 13969La valeur par défaut est @samp{Required}.
bf5c74e7
JL
13970@end deftypevr
13971
1d8d69c8
JL
13972@deftypevr {paramètre de @code{cups-configuration}} string default-language
13973Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
bf5c74e7 13974
1d8d69c8 13975La valeur par défaut est @samp{"en"}.
bf5c74e7
JL
13976@end deftypevr
13977
1d8d69c8
JL
13978@deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
13979Spécifie la taille de papier par défaut pour les nouvelles queues
13980d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
13981régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
13982par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
13983et @samp{"A4"}.
bf5c74e7 13984
1d8d69c8 13985La valeur par défaut est @samp{"Auto"}.
bf5c74e7
JL
13986@end deftypevr
13987
1d8d69c8
JL
13988@deftypevr {paramètre de @code{cups-configuration}} string default-policy
13989Spécifie la politique d'accès par défaut à utiliser.
bf5c74e7 13990
1d8d69c8 13991La valeur par défaut est @samp{"default"}.
bf5c74e7
JL
13992@end deftypevr
13993
1d8d69c8
JL
13994@deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
13995Spécifie si les imprimantes locales sont partagées par défaut.
bf5c74e7 13996
1d8d69c8 13997La valeur par défaut est @samp{#t}.
bf5c74e7
JL
13998@end deftypevr
13999
1d8d69c8
JL
14000@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
14001Spécifie le délai pour mettre à jour les fichiers de configuration et
14002d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
14003possible, typiquement en quelques millisecondes.
bf5c74e7 14004
1d8d69c8 14005La valeur par défaut est @samp{30}.
bf5c74e7
JL
14006@end deftypevr
14007
1d8d69c8
JL
14008@deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
14009Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
14010sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
14011@code{retry-job}, qui tentera de nouveau l'impression plus tard ;
14012@code{retry-this-job}, qui retentera l'impression immédiatement ; et
14013@code{stop-printer} qui arrête l'imprimante.
bf5c74e7 14014
1d8d69c8 14015La valeur par défaut est @samp{stop-printer}.
bf5c74e7
JL
14016@end deftypevr
14017
1d8d69c8
JL
14018@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
14019Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
14020minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
14021limite de 0 désactive la limite de filtrage. Une impression standard vers
15f1bff4 14022une imprimante non-PostScript requiert une limite de filtre d'environ 200.
1d8d69c8
JL
14023Une imprimante PostScript requiert environ la moitié (100). Mettre en place
14024la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
14025travail d'impression à la fois.
bf5c74e7 14026
1d8d69c8 14027La valeur par défaut est @samp{0}.
bf5c74e7
JL
14028@end deftypevr
14029
1d8d69c8
JL
14030@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
14031Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
14032imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
14033plus basse priorité.
bf5c74e7 14034
1d8d69c8 14035La valeur par défaut est @samp{0}.
bf5c74e7
JL
14036@end deftypevr
14037
1d8d69c8
JL
14038@deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
14039Spécifie s'il faut faire des résolutions inverses sur les clients qui se
14040connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
14041nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
14042par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
14043avec des adresses non enregistrées ne s'adressent à votre serveur.
14044N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
14045absolument nécessaire.
bf5c74e7 14046
1d8d69c8 14047La valeur par défaut est @samp{#f}.
bf5c74e7
JL
14048@end deftypevr
14049
1d8d69c8
JL
14050@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
14051Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
14052moteurs associés avec un travail annulé ou suspendu.
bf5c74e7 14053
1d8d69c8 14054La valeur par défaut est @samp{30}.
bf5c74e7
JL
14055@end deftypevr
14056
1d8d69c8
JL
14057@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
14058Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
14059typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
14060des queues d'impressions normales dont la politique d'erreur est
14061@code{retry-job} ou @code{retry-current-job}.
bf5c74e7 14062
1d8d69c8 14063La valeur par défaut est @samp{30}.
bf5c74e7
JL
14064@end deftypevr
14065
1d8d69c8
JL
14066@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
14067Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
14068typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
14069les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
14070@code{retry-current-job}.
bf5c74e7 14071
1d8d69c8 14072La valeur par défaut est @samp{5}.
bf5c74e7
JL
14073@end deftypevr
14074
1d8d69c8
JL
14075@deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
14076Spécifie s'il faut supporter les connexion HTTP keep-alive.
bf5c74e7 14077
1d8d69c8 14078La valeur par défaut est @samp{#t}.
bf5c74e7
JL
14079@end deftypevr
14080
1d8d69c8
JL
14081@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
14082Spécifie combien de temps les connexions inactives avec les clients restent
14083ouvertes, en secondes.
bf5c74e7 14084
1d8d69c8 14085La valeur par défaut est @samp{30}.
bf5c74e7
JL
14086@end deftypevr
14087
1d8d69c8
JL
14088@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
14089Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
14090données de formulaires HTML. Une limite de 0 désactive la vérification de
14091la limite.
bf5c74e7 14092
1d8d69c8 14093La valeur par défaut est @samp{0}.
bf5c74e7
JL
14094@end deftypevr
14095
1d8d69c8
JL
14096@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
14097Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
15f1bff4 14098@var{adresse}:@var{port}, où @var{adresse} est soit une adresse IPv6 dans
1d8d69c8
JL
14099des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
14100adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
14101UNIX domain. La directive Listen est similaire à la directive Port mais
14102vous permet de restreindre l'accès à des interfaces ou des réseaux
14103spécifiques.
bf5c74e7
JL
14104@end deftypevr
14105
1d8d69c8
JL
14106@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
14107Spécifie le nombre de connexions en attente qui seront permises. Ça
14108n'affecte normalement que les serveurs très actifs qui ont atteint la limite
14109MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
14110simultanées. Lorsque la limite est atteinte, le système d'exploitation
14111refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
14112accepte les connexions en attente.
bf5c74e7 14113
1d8d69c8 14114La valeur par défaut est @samp{128}.
bf5c74e7
JL
14115@end deftypevr
14116
1d8d69c8
JL
14117@deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
14118Spécifie un ensemble de contrôles d'accès supplémentaires.
bf5c74e7 14119
1d8d69c8 14120Les champs de @code{location-access-controls} disponibles sont :
bf5c74e7 14121
1d8d69c8
JL
14122@deftypevr {paramètre de @code{location-access-controls}} file-name path
14123Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
bf5c74e7
JL
14124@end deftypevr
14125
1d8d69c8
JL
14126@deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
14127Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
14128que le champ @code{access-controls} de @code{operation-access-control}.
bf5c74e7 14129
1d8d69c8 14130La valeur par défaut est @samp{()}.
bf5c74e7
JL
14131@end deftypevr
14132
1d8d69c8
JL
14133@deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
14134Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
bf5c74e7 14135
1d8d69c8 14136La valeur par défaut est @samp{()}.
bf5c74e7 14137
1d8d69c8 14138Les champs de @code{method-access-controls} disponibles sont :
bf5c74e7 14139
1d8d69c8
JL
14140@deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
14141Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
14142méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
14143aux méthodes listées.
bf5c74e7 14144
1d8d69c8 14145La valeur par défaut est @samp{#f}.
bf5c74e7
JL
14146@end deftypevr
14147
1d8d69c8
JL
14148@deftypevr {paramètre de @code{method-access-controls}} method-list methods
14149Les méthodes auxquelles ce contrôle d'accès s'applique.
bf5c74e7 14150
1d8d69c8 14151La valeur par défaut est @samp{()}.
bf5c74e7
JL
14152@end deftypevr
14153
1d8d69c8
JL
14154@deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
14155Directives de contrôle d'accès, comme une liste de chaînes de caractères.
14156Chaque chaîne devrait être une directive, comme « Order allow, deny ».
bf5c74e7 14157
1d8d69c8 14158La valeur par défaut est @samp{()}.
bf5c74e7
JL
14159@end deftypevr
14160@end deftypevr
14161@end deftypevr
14162
1d8d69c8
JL
14163@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
14164Spécifie le nombre de messages de débogage qui sont retenu pour la
14165journalisation si une erreur arrive dans un travail d'impression. Les
14166messages de débogage sont journalisés indépendamment du paramètre LogLevel.
bf5c74e7 14167
1d8d69c8 14168La valeur par défaut est @samp{100}.
bf5c74e7
JL
14169@end deftypevr
14170
1d8d69c8
JL
14171@deftypevr {paramètre de @code{cups-configuration}} log-level log-level
14172Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
14173@code{none} arrête toute journalisation alors que que @code{debug2}
14174enregistre tout.
bf5c74e7 14175
1d8d69c8 14176La valeur par défaut est @samp{info}.
bf5c74e7
JL
14177@end deftypevr
14178
1d8d69c8
JL
14179@deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
14180Spécifie le format de la date et de l'heure dans les fichiers de journaux.
14181La valeur @code{standard} enregistre les secondes entières alors que
14182@code{usecs} enregistre les microsecondes.
bf5c74e7 14183
1d8d69c8 14184La valeur par défaut est @samp{standard}.
bf5c74e7
JL
14185@end deftypevr
14186
1d8d69c8
JL
14187@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
14188Spécifie le nombre maximum de clients simultanés qui sont autorisés par
14189l'ordonnanceur.
bf5c74e7 14190
1d8d69c8 14191La valeur par défaut est @samp{100}.
bf5c74e7
JL
14192@end deftypevr
14193
1d8d69c8
JL
14194@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
14195Spécifie le nombre maximum de clients simultanés permis depuis une même
14196adresse.
bf5c74e7 14197
1d8d69c8 14198La valeur par défaut est @samp{100}.
bf5c74e7
JL
14199@end deftypevr
14200
1d8d69c8
JL
14201@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
14202Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
14203chaque travail.
bf5c74e7 14204
1d8d69c8 14205La valeur par défaut est @samp{9999}.
bf5c74e7
JL
14206@end deftypevr
14207
1d8d69c8
JL
14208@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
14209Spécifie la durée maximum qu'un travail peut rester dans l'état de
14210suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
14211désactive l'annulation des travaux suspendus.
bf5c74e7 14212
1d8d69c8 14213La valeur par défaut est @samp{0}.
bf5c74e7
JL
14214@end deftypevr
14215
1d8d69c8
JL
14216@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
14217Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
14218permet un nombre illimité de travaux.
bf5c74e7 14219
1d8d69c8 14220La valeur par défaut est @samp{500}.
bf5c74e7
JL
14221@end deftypevr
14222
1d8d69c8
JL
14223@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
14224Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
14225La valeur 0 permet au plus MaxJobs travaux par imprimante.
bf5c74e7 14226
1d8d69c8 14227La valeur par défaut est @samp{0}.
bf5c74e7
JL
14228@end deftypevr
14229
1d8d69c8
JL
14230@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
14231Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
14232valeur 0 permet au plus MaxJobs travaux par utilisateur.
bf5c74e7 14233
1d8d69c8 14234La valeur par défaut est @samp{0}.
bf5c74e7
JL
14235@end deftypevr
14236
1d8d69c8
JL
14237@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
14238Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
14239annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
14240coincés ».
bf5c74e7 14241
1d8d69c8 14242La valeur par défaut est @samp{10800}.
bf5c74e7
JL
14243@end deftypevr
14244
1d8d69c8
JL
14245@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
14246Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
14247fasse tourner, en octets. La valeur 0 désactive la rotation.
bf5c74e7 14248
1d8d69c8 14249La valeur par défaut est @samp{1048576}.
bf5c74e7
JL
14250@end deftypevr
14251
1d8d69c8
JL
14252@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
14253Spécifie la durée maximale à permettre entre les fichiers d'un travail en
14254contenant plusieurs, en secondes.
bf5c74e7 14255
1d8d69c8 14256La valeur par défaut est @samp{300}.
bf5c74e7
JL
14257@end deftypevr
14258
1d8d69c8
JL
14259@deftypevr {paramètre de @code{cups-configuration}} string page-log-format
14260Spécifie le format des lignes PageLog. Les séquences qui commencent par un
14261pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
14262que les autres caractères sont copiés littéralement. Les séquences pourcent
14263suivantes sont reconnues :
bf5c74e7
JL
14264
14265@table @samp
14266@item %%
1d8d69c8 14267insère un seul caractères pourcent
bf5c74e7
JL
14268
14269@item %@{name@}
1d8d69c8 14270insère la valeur de l'attribut IPP spécifié
bf5c74e7
JL
14271
14272@item %C
1d8d69c8 14273insère le nombre de copies pour la page actuelle
bf5c74e7
JL
14274
14275@item %P
1d8d69c8 14276insère le numéro de page actuelle
bf5c74e7
JL
14277
14278@item %T
1d8d69c8 14279insère la date et l'heure actuelle dans un format de journal commun
bf5c74e7
JL
14280
14281@item %j
1d8d69c8 14282insère l'ID du travail
bf5c74e7
JL
14283
14284@item %p
1d8d69c8 14285insère le nom de l'imprimante
bf5c74e7
JL
14286
14287@item %u
1d8d69c8 14288insère le nom d'utilisateur
bf5c74e7
JL
14289@end table
14290
1d8d69c8
JL
14291Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
14292@code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
14293%@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
14294standards.
bf5c74e7 14295
1d8d69c8 14296La valeur par défaut est @samp{""}.
bf5c74e7
JL
14297@end deftypevr
14298
1d8d69c8
JL
14299@deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
14300Passe les variables d'environnement spécifiées aux processus fils ; une
14301liste de chaînes de caractères.
bf5c74e7 14302
1d8d69c8 14303La valeur par défaut est @samp{()}.
bf5c74e7
JL
14304@end deftypevr
14305
1d8d69c8
JL
14306@deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
14307Spécifie des politiques de contrôle d'accès nommées.
bf5c74e7 14308
1d8d69c8 14309Les champs de @code{policy-configuration} disponibles sont :
bf5c74e7 14310
1d8d69c8
JL
14311@deftypevr {paramètre de @code{policy-configuration}} string name
14312Nom de la politique.
bf5c74e7
JL
14313@end deftypevr
14314
1d8d69c8
JL
14315@deftypevr {paramètre de @code{policy-configuration}} string job-private-access
14316Spécifie une liste d'accès pour les valeurs privées du travail.
14317@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14318requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14319propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14320le champ @code{system-group} de la configuration @code{files-config}, qui
14321est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14322possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14323@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14324liste d'accès peut aussi être simplement @code{all} ou @code{default}.
bf5c74e7 14325
1d8d69c8 14326La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
bf5c74e7
JL
14327@end deftypevr
14328
1d8d69c8
JL
14329@deftypevr {paramètre de @code{policy-configuration}} string job-private-values
14330Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14331@code{default}, ou @code{none}.
bf5c74e7 14332
1d8d69c8 14333La valeur par défaut est @samp{"job-name job-originating-host-name
bf5c74e7
JL
14334job-originating-user-name phone"}.
14335@end deftypevr
14336
1d8d69c8
JL
14337@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
14338Spécifie un liste d'accès pour les valeurs privées de la souscription.
14339@code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
14340requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
14341propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
14342le champ @code{system-group} de la configuration @code{files-config}, qui
14343est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
14344possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
14345@code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
14346liste d'accès peut aussi être simplement @code{all} ou @code{default}.
bf5c74e7 14347
1d8d69c8 14348La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
bf5c74e7
JL
14349@end deftypevr
14350
1d8d69c8
JL
14351@deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
14352Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
14353@code{default}, ou @code{none}.
bf5c74e7 14354
1d8d69c8
JL
14355La valeur par défaut est @samp{"notify-events notify-pull-method
14356notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
bf5c74e7
JL
14357@end deftypevr
14358
1d8d69c8
JL
14359@deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
14360Contrôle d'accès par les actions IPP.
bf5c74e7 14361
1d8d69c8 14362La valeur par défaut est @samp{()}.
bf5c74e7
JL
14363@end deftypevr
14364@end deftypevr
14365
1d8d69c8
JL
14366@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
14367Spécifie si les fichiers de travaux (les documents) sont préservés après
14368qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
14369fichiers de travaux sont préservés pour le nombre de secondes indiquées
14370après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
bf5c74e7 14371
1d8d69c8 14372La valeur par défaut est @samp{86400}.
bf5c74e7
JL
14373@end deftypevr
14374
1d8d69c8
JL
14375@deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
14376Spécifie si l'historique des travaux est préservé après qu'un travail est
14377imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
14378est préservé pour le nombre de secondes indiquées après l'impression. Si la
14379valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
14380atteindre la limite MaxJobs.
bf5c74e7 14381
1d8d69c8 14382La valeur par défaut est @samp{#t}.
bf5c74e7
JL
14383@end deftypevr
14384
1d8d69c8
JL
14385@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
14386Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
14387l'ordonnanceur.
bf5c74e7 14388
1d8d69c8 14389La valeur par défaut est @samp{30}.
bf5c74e7
JL
14390@end deftypevr
14391
1d8d69c8
JL
14392@deftypevr {paramètre de @code{cups-configuration}} string rip-cache
14393Spécifie la quantité de mémoire maximale à utiliser pour convertir des
14394documents en bitmaps pour l'imprimante.
bf5c74e7 14395
1d8d69c8 14396La valeur par défaut est @samp{"128m"}.
bf5c74e7
JL
14397@end deftypevr
14398
1d8d69c8
JL
14399@deftypevr {paramètre de @code{cups-configuration}} string server-admin
14400Spécifie l'adresse de courriel de l'administrateur système.
bf5c74e7 14401
1d8d69c8 14402La valeur par défaut est @samp{"root@@localhost.localdomain"}.
bf5c74e7
JL
14403@end deftypevr
14404
1d8d69c8
JL
14405@deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
14406La directive ServerAlias est utilisée pour la validation des en-tête HTTP
14407Host lorsque les clients se connectent à l'ordonnanceur depuis des
14408interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
14409système à des attaques connues de recombinaison DNS dans le navigateur, même
14410lorsque vous accédez au site à travers un pare-feu. Si la découverte
14411automatique des autres noms ne fonctionne pas, nous vous recommandons de
14412lister chaque nom alternatif avec une directive SeverAlias plutôt que
14413d'utiliser @code{*}.
bf5c74e7 14414
1d8d69c8 14415La valeur par défaut est @samp{*}.
bf5c74e7
JL
14416@end deftypevr
14417
1d8d69c8
JL
14418@deftypevr {paramètre de @code{cups-configuration}} string server-name
14419Spécifie le nom d'hôte pleinement qualifié du serveur.
bf5c74e7 14420
1d8d69c8 14421La valeur par défaut est @samp{"localhost"}.
bf5c74e7
JL
14422@end deftypevr
14423
1d8d69c8
JL
14424@deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
14425Spécifie les informations incluses dans les en-têtes Server des réponses
14426HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
14427@code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
14428@code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
14429rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
14430commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
14431IPP/2.0}.
bf5c74e7 14432
1d8d69c8 14433La valeur par défaut est @samp{Minimal}.
bf5c74e7
JL
14434@end deftypevr
14435
1d8d69c8
JL
14436@deftypevr {paramètre de @code{cups-configuration}} string set-env
14437Indique que la variable d'environnement spécifiée doit être passée aux
14438processus fils.
bf5c74e7 14439
1d8d69c8 14440La valeur par défaut est @samp{"variable value"}.
bf5c74e7
JL
14441@end deftypevr
14442
1d8d69c8
JL
14443@deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
14444Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
14445valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
14446une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
14447pour indiquer toutes les interfaces.
bf5c74e7 14448
1d8d69c8 14449La valeur par défaut est @samp{()}.
bf5c74e7
JL
14450@end deftypevr
14451
1d8d69c8
JL
14452@deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
14453Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
14454chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
14455être sures. L'option @code{AllowRC4} active les suites de chiffrement
14456128-bits RC4, qui sont requises pour certains vieux clients qui
14457n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
14458v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
14459v1.0.
bf5c74e7 14460
1d8d69c8 14461La valeur par défaut est @samp{()}.
bf5c74e7
JL
14462@end deftypevr
14463
1d8d69c8
JL
14464@deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
14465Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
14466IPP.
bf5c74e7 14467
1d8d69c8 14468La valeur par défaut est @samp{#f}.
bf5c74e7
JL
14469@end deftypevr
14470
1d8d69c8
JL
14471@deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
14472Spécifie le délai d'attente des requêtes HTTP, en secondes.
bf5c74e7 14473
1d8d69c8 14474La valeur par défaut est @samp{300}.
bf5c74e7
JL
14475
14476@end deftypevr
14477
1d8d69c8
JL
14478@deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
14479Spécifie si l'interface web est activée.
bf5c74e7 14480
1d8d69c8 14481La valeur par défaut est @samp{#f}.
bf5c74e7
JL
14482@end deftypevr
14483
1d8d69c8
JL
14484Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
14485t'aime bien mais arrête maintenant avec ces options de configuration
14486»@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
14487traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
14488effet. cependant, encore un point supplémentaire : vous pouvez avoir un
14489fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
14490ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
14491configuration d'un @code{cups-service-type}.
bf5c74e7 14492
1d8d69c8 14493Les champs de @code{opaque-cups-configuration} disponibles sont :
bf5c74e7 14494
1d8d69c8
JL
14495@deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
14496Le paquet CUPS.
bf5c74e7
JL
14497@end deftypevr
14498
1d8d69c8
JL
14499@deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
14500Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
bf5c74e7
JL
14501@end deftypevr
14502
1d8d69c8
JL
14503@deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
14504Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
14505caractères.
bf5c74e7
JL
14506@end deftypevr
14507
1d8d69c8
JL
14508Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
14509sont dans des chaînes du même nom, pouvez instancier un service CUPS de
14510cette manière :
bf5c74e7
JL
14511
14512@example
14513(service cups-service-type
14514 (opaque-cups-configuration
14515 (cupsd.conf cupsd.conf)
14516 (cups-files.conf cups-files.conf)))
14517@end example
14518
14519
3cacfa9e 14520@node Services de bureaux
15f1bff4 14521@subsection Services de bureaux
bf5c74e7 14522
1d8d69c8
JL
14523Le module @code{(gnu services desktop)} fournit des services qui sont
14524habituellement utiles dans le contexte d'une installation « de bureau » —
14525c'est-à-dire sur une machine qui fait tourner un service d'affichage
14526graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
14527Il définit aussi des services qui fournissent des environnements de bureau
14528spécifiques comme GNOME, XFCE et MATE.
14529
14530Pour simplifier les choses, le module définit une variable contenant
14531l'ensemble des services que les utilisateurs s'attendent en général à avoir
14532sur une machine avec un environnement graphique et le réseau :
14533
14534@defvr {Variable Scheme} %desktop-services
14535C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
14536ajustant des services pour une configuration « de bureau » typique.
14537
14538En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{slim-service}}), des verrouilleurs d'écran, un outil de
14539gestion réseau (@pxref{Services réseau,
14540@code{network-manager-service-type}}), des services de gestion de l'énergie
14541et des couleurs, le gestionnaire de connexion et de session @code{elogind},
14542le service de privilèges Polkit, le service de géolocalisation GeoClue, le
14543démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
14544mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
14545et le service name service switch est configuré pour pouvoir utiliser
14546@code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
bf5c74e7
JL
14547@end defvr
14548
1d8d69c8
JL
14549La variable @var{%desktop-services} peut être utilisée comme champ
14550@code{services} d'une déclaration @code{operating-system}
14551(@pxref{Référence de système d'exploitation, @code{services}}).
14552
14553En plus, les procédures @code{gnome-desktop-service},
14554@code{xfce-desktop-service}, @code{mate-desktop-service} et
14555@code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
14556ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
14557du système comme les utilitaires d'ajustement de la luminosité et de gestion
14558de l'énergie sont ajoutés au système, en étendant @code{polkit} et
14559@code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
14560privilèges plus élevés sur un nombre limité d'interfaces systèmes
14561spécialisées. En plus, ajouter un service construit par
14562@code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
14563système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
14564au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
14565d'ouvrir une fenêtre de gestion des fichier « en mode root », si
14566l'utilisateur s'authentifie avec le mot de passe administrateur via
14567l'interface graphique polkit standard. « Ajouter MATE » signifie que
14568@code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
14569à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
14570d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
14571@code{dbus} est étendu comme il faut et que plusieurs binaires
14572d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
14573d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
14574correctement.
14575
14576Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
14577par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
14578récent Wayland, vous devez utiliser @code{sddm-service} à la place de
14579@code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
14580ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
14581vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
14582avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
14583gnome-session}. Actuellement seul GNOME support Wayland.
14584
14585@deffn {Procédure Scheme} gnome-desktop-service
14586Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
14587étend polkit avec des actions de @code{gnome-settings-daemon}.
bf5c74e7
JL
14588@end deffn
14589
1d8d69c8
JL
14590@deffn {Procédure Scheme} xfce-desktop-service
14591Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
14592étend polkit avec la capacité pour @code{thunar} de manipuler le système de
14593fichier en tant que root depuis une session utilisateur, après que
14594l'utilisateur s'est authentifié avec le mot de passe administrateur.
bf5c74e7
JL
14595@end deffn
14596
1d8d69c8
JL
14597@deffn {Procédure Scheme} mate-desktop-service
14598Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
14599étend polkit avec les actions de @code{mate-settings-daemon}.
bf5c74e7
JL
14600@end deffn
14601
2cf2c778 14602@deffn {Procédure Scheme} enlightenment-desktop-service-type
1d8d69c8
JL
14603Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
14604avec les actions de @code{efl}
3cacfa9e
LC
14605@end deffn
14606
1d8d69c8 14607@deftp {Type de données} enlightenment-desktop-service-configuration
3cacfa9e 14608@table @asis
2cf2c778
JL
14609@item @code{enlightenment} (par défaut : @code{enlightenment})
14610Le paquet enlightenment à utiliser.
3cacfa9e
LC
14611@end table
14612@end deftp
14613
1d8d69c8
JL
14614Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
14615la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
14616Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
14617@code{%desktop-services} dans le champ @code{services} de votre
14618@code{operating-system}.
bf5c74e7
JL
14619
14620@example
14621(use-modules (gnu))
14622(use-service-modules desktop)
14623(operating-system
14624 ...
1d8d69c8 14625 ;; cons* ajoute les élément à la liste donnée en dernier argument
bf5c74e7
JL
14626 (services (cons* (gnome-desktop-service)
14627 (xfce-desktop-service)
14628 %desktop-services))
14629 ...)
14630@end example
14631
1d8d69c8
JL
14632Ces environnements de bureau seront alors disponibles comme une option dans
14633la fenêtre de connexion graphique.
bf5c74e7 14634
1d8d69c8
JL
14635Les définitions de service qui sont vraiment incluses dans
14636@code{%desktop-services} et fournies par @code{(gnu services dbus)} et
14637@code{(gnu services desktop)} sont décrites plus bas.
bf5c74e7 14638
1d8d69c8
JL
14639@deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
14640Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
14641de @var{services}.
bf5c74e7 14642
1d8d69c8
JL
14643@uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
14644communication inter-processus. Son bus système est utilisé pour permettre à
14645des services systèmes de communiquer et d'être notifiés d'événements
14646systèmes.
bf5c74e7 14647
1d8d69c8
JL
14648@var{services} doit être une liste de paquets qui fournissent un répertoire
14649@file{etc/dbus-1/system.d} contenant de la configuration D-Bus
14650supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
14651avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
14652@code{(list avahi)}.
bf5c74e7
JL
14653@end deffn
14654
1d8d69c8
JL
14655@deffn {Procédure Scheme} elogind-service [#:config @var{config}]
14656Renvoie un service qui lance le démon de gestion de connexion et de session
14657@code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
14658une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
14659sont connectés, le type de session qu'ils sont ouverte, suspendre le
14660système, désactiver la veille système, redémarrer le système et d'autre
14661taches.
bf5c74e7 14662
1d8d69c8
JL
14663Elogind gère la plupart des événements liés à l'énergie du système, par
14664exemple mettre en veille le système quand l'écran est rabattu ou en
14665l'éteignant quand le bouton de démarrage est appuyé.
bf5c74e7 14666
1d8d69c8
JL
14667L'argument @var{config} spécifie la configuration d'elogind et devrait être
14668le résultat d'une invocation de @code{(elogind-configuration
14669(@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
14670valeur par défaut sont :
bf5c74e7
JL
14671
14672@table @code
14673@item kill-user-processes?
14674@code{#f}
14675@item kill-only-users
14676@code{()}
14677@item kill-exclude-users
14678@code{("root")}
14679@item inhibit-delay-max-seconds
14680@code{5}
14681@item handle-power-key
14682@code{poweroff}
14683@item handle-suspend-key
14684@code{suspend}
14685@item handle-hibernate-key
14686@code{hibernate}
14687@item handle-lid-switch
14688@code{suspend}
14689@item handle-lid-switch-docked
14690@code{ignore}
14691@item power-key-ignore-inhibited?
14692@code{#f}
14693@item suspend-key-ignore-inhibited?
14694@code{#f}
14695@item hibernate-key-ignore-inhibited?
14696@code{#f}
14697@item lid-switch-ignore-inhibited?
14698@code{#t}
14699@item holdoff-timeout-seconds
14700@code{30}
14701@item idle-action
14702@code{ignore}
14703@item idle-action-seconds
14704@code{(* 30 60)}
14705@item runtime-directory-size-percent
14706@code{10}
14707@item runtime-directory-size
14708@code{#f}
14709@item remove-ipc?
14710@code{#t}
14711@item suspend-state
14712@code{("mem" "standby" "freeze")}
14713@item suspend-mode
14714@code{()}
14715@item hibernate-state
14716@code{("disk")}
14717@item hibernate-mode
14718@code{("platform" "shutdown")}
14719@item hybrid-sleep-state
14720@code{("disk")}
14721@item hybrid-sleep-mode
14722@code{("suspend" "platform" "shutdown")}
14723@end table
14724@end deffn
14725
1d8d69c8
JL
14726@deffn {Procédure Scheme} accountsservice-service @
14727 [#:accountsservice @var{accountsservice}]
14728Renvoie un service qui lance AccountsService, un service système qui peut
14729lister les comptes disponibles, changer leur mot de passe, etc.
14730AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
14731privilégiés de pouvoir modifier la configuration de leur système.
14732@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
14733accountsservice} pour trouver plus d'informations.
14734
14735L'argument @var{accountsservice} est le paquet @code{accountsservice} à
14736exposer comme un service.
bf5c74e7
JL
14737@end deffn
14738
1d8d69c8
JL
14739@deffn {Procédure Scheme} polkit-service @
14740 [#:polkit @var{polkit}]
14741Renvoie un service qui lance le
14742@uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
14743des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
14744l'accès à des opération privilégiées d'une manière structurée. En demandant
14745au service Polkit, un composant système privilégié peut savoir lorsqu'il
14746peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
14747exemple, un utilisateur normal peut obtenir le droit de mettre le système en
14748veille si l'utilisateur est connecté localement.
bf5c74e7
JL
14749@end deffn
14750
15f1bff4
JL
14751@defvr {Scheme Variable} upower-service-type
14752Service that runs @uref{http://upower.freedesktop.org/, @command{upowerd}},
14753a system-wide monitor for power consumption and battery levels, with the
14754given configuration settings.
14755
14756It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
14757notably used by GNOME.
14758@end defvr
14759
14760@deftp {Data Type} upower-configuration
14761Data type representation the configuration for UPower.
14762
14763@table @asis
14764
14765@item @code{upower} (default: @var{upower})
14766Package to use for @code{upower}.
14767
14768@item @code{watts-up-pro?} (default: @code{#f})
14769Enable the Watts Up Pro device.
14770
14771@item @code{poll-batteries?} (default: @code{#t})
14772Enable polling the kernel for battery level changes.
14773
14774@item @code{ignore-lid?} (default: @code{#f})
14775Ignore the lid state, this can be useful if it's incorrect on a device.
14776
14777@item @code{use-percentage-for-policy?} (default: @code{#f})
14778Whether battery percentage based policy should be used. The default is to
14779use the time left, change to @code{#t} to use the percentage.
14780
14781@item @code{percentage-low} (default: @code{10})
14782When @code{use-percentage-for-policy?} is @code{#t}, this sets the
14783percentage at which the battery is considered low.
14784
14785@item @code{percentage-critical} (default: @code{3})
14786When @code{use-percentage-for-policy?} is @code{#t}, this sets the
14787percentage at which the battery is considered critical.
14788
14789@item @code{percentage-action} (default: @code{2})
14790When @code{use-percentage-for-policy?} is @code{#t}, this sets the
14791percentage at which action will be taken.
14792
14793@item @code{time-low} (default: @code{1200})
14794When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
14795in seconds at which the battery is considered low.
14796
14797@item @code{time-critical} (default: @code{300})
14798When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
14799in seconds at which the battery is considered critical.
14800
14801@item @code{time-action} (default: @code{120})
14802When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
14803in seconds at which action will be taken.
14804
14805@item @code{critical-power-action} (default: @code{'hybrid-sleep})
14806The action taken when @code{percentage-action} or @code{time-action} is
14807reached (depending on the configuration of
14808@code{use-percentage-for-policy?}).
14809
14810Possible values are:
14811
14812@itemize @bullet
14813@item
14814@code{'power-off}
14815
14816@item
14817@code{'hibernate}
14818
14819@item
14820@code{'hybrid-sleep}.
14821@end itemize
14822
14823@end table
14824@end deftp
bf5c74e7 14825
1d8d69c8
JL
14826@deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
14827Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
14828UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
14829et la capacité de monter et démonter des disques à des interfaces
14830utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
14831commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
bf5c74e7
JL
14832@end deffn
14833
1d8d69c8
JL
14834@deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
14835Renvoie un service qui lance @command{colord}, un service système avec une
14836interface D-Bus pour gérer les profils de couleur des périphériques
14837d'entrées et de sorties comme les écrans et les scanners. Il est notamment
14838utilisé par l'outil graphique GNOME Color Manager. Voir
14839@uref{http://www.freedesktop.org/software/colord/, le site web de colord}
14840pour plus d'informations.
bf5c74e7
JL
14841@end deffn
14842
1d8d69c8
JL
14843@deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
14844Renvoie une configuration qui permet d'accéder aux données de localisation
14845de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
14846@code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
14847d'accéder aux informations de localisation par défaut. Le booléen
14848@var{system?} indique si une application est un composant système ou non.
14849Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
14850application a le droit d'accéder aux informations de géolocalisation. Une
14851liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
bf5c74e7
JL
14852@end deffn
14853
1d8d69c8
JL
14854@defvr {Variable Scheme} %standard-geoclue-applications
14855la liste standard de configuration des application GeoClue connues, qui
14856permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
14857actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
14858Epiphany de demander les informations de localisation. IceCat et Epiphany
14859demandent tous deux à l'utilisateur avant de permettre à une page web de
14860connaître l'emplacement de l'utilisateur.
bf5c74e7
JL
14861@end defvr
14862
1d8d69c8
JL
14863@deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
14864 [#:whitelist '()] @
14865[#:wifi-geolocation-url
bf5c74e7
JL
14866"https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
14867[#:submit-data? #f] [#:wifi-submission-url
14868"https://location.services.mozilla.com/v1/submit?key=geoclue"] @
1d8d69c8
JL
14869[#:submission-nick "geoclue"] @
14870[#:applications %standard-geoclue-applications]
14871Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
14872service fournit une interface D-Bus pour permettre aux applications de
14873demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
14874des informations à des bases de données de géolocalisation en ligne. Voir
14875@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
14876GeoClue} pour plus d'informations.
bf5c74e7
JL
14877@end deffn
14878
1d8d69c8
JL
14879@deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
14880 [@w{#:auto-enable? #f}]
14881Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
14882appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
14883Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
14884automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
14885utilisez un clavier ou une souris bluetooth.
bf5c74e7 14886
1d8d69c8
JL
14887Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
14888service D-Bus.
bf5c74e7
JL
14889@end deffn
14890
2cf2c778 14891@node Services de son
15f1bff4 14892@subsection Services de son
3cacfa9e 14893
1d8d69c8 14894@cindex support du son
3cacfa9e 14895@cindex ALSA
1d8d69c8 14896@cindex PulseAudio, support du son
3cacfa9e 14897
adfb167f
JL
14898Le module @code{(gnu services sound)} fournit un service pour configurer le
14899système ALSA (architecture son linux avancée), qui fait de PulseAudio le
14900pilote de sortie préféré d'ALSA.
3cacfa9e 14901
2cf2c778 14902@deffn {Variable Scheme} alsa-service-type
adfb167f
JL
14903C'est le type pour le système @uref{https://alsa-project.org/, Advanced
14904Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
15f1bff4 14905@file{/etc/asound.conf}. La valeur de ce type est un enregistrement
adfb167f 14906@command{alsa-configuration} comme dans cet exemple :
3cacfa9e
LC
14907
14908@example
14909(service alsa-service-type)
14910@end example
14911
1d8d69c8 14912Voir plus bas pour des détails sur @code{alsa-configuration}.
3cacfa9e
LC
14913@end deffn
14914
1d8d69c8
JL
14915@deftp {Type de données} alsa-configuration
14916Type de données représentant la configuration pour @code{alsa-service}.
3cacfa9e
LC
14917
14918@table @asis
adfb167f
JL
14919@item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
14920Le paquet @code{alsa-plugins} à utiliser.
524756d1 14921
1d8d69c8
JL
14922@item @code{pulseaudio?} (par défaut : @var{#t})
14923Indique si les applications ALSA devraient utiliser le serveur de son
14924@uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
14925elles.
3cacfa9e 14926
1d8d69c8
JL
14927Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
14928produisent du son en même temps et de les contrôler individuellement via
14929@command{pavucontrol} entre autres choses.
3cacfa9e 14930
1d8d69c8 14931@item @code{extra-options} (par défaut : @var{""})
adfb167f 14932Chaîne à ajouter au fichier @file{/etc/asound.conf}.
3cacfa9e
LC
14933
14934@end table
14935@end deftp
14936
adfb167f
JL
14937Les utilisateurs individuels qui veulent modifier la configuration système
14938d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
524756d1
JL
14939
14940@example
adfb167f 14941# Dans guix, il faut spécifier le chemin absolu des greffons.
524756d1
JL
14942pcm_type.jack @{
14943 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
14944@}
14945
adfb167f 14946# Faire passer ALSA par Jack :
524756d1
JL
14947# <http://jackaudio.org/faq/routing_alsa.html>.
14948pcm.rawjack @{
14949 type jack
14950 playback_ports @{
14951 0 system:playback_1
14952 1 system:playback_2
14953 @}
14954
14955 capture_ports @{
14956 0 system:capture_1
14957 1 system:capture_2
14958 @}
14959@}
14960
14961pcm.!default @{
14962 type plug
14963 slave @{
14964 pcm "rawjack"
14965 @}
14966@}
14967@end example
14968
adfb167f
JL
14969Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
14970détails.
524756d1
JL
14971
14972
3cacfa9e 14973@node Services de bases de données
15f1bff4 14974@subsection Services de bases de données
bf5c74e7
JL
14975
14976@cindex database
14977@cindex SQL
1d8d69c8
JL
14978Le module @code{(gnu services databases)} fournit les services suivants.
14979
14980@deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
15f1bff4
JL
14981 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @ [#:port
149825432] [#:locale ``en_US.utf8''] [#:extension-packages '()] Return a service
14983that runs @var{postgresql}, the PostgreSQL database server.
1d8d69c8
JL
14984
14985Le démon PostgreSQL charge sa configuration à l'exécution depuis
14986@var{config-file}, crée une grappe de bases de données avec @var{locale}
14987comme paramètre de régionalisation par défaut, stockée dans
14988@var{data-directory}. Il écoute ensuite sur @var{port}.
15f1bff4
JL
14989
14990@cindex postgresql extension-packages
14991Additional extensions are loaded from packages listed in
14992@var{extension-packages}. Extensions are available at runtime. For
14993instance, to create a geographic database using the @code{postgis}
14994extension, a user can configure the postgresql-service as in this example:
14995
14996@cindex postgis
14997@example
14998(use-package-modules databases geo)
14999
15000(operating-system
15001 ...
15002 ;; postgresql is required to run `psql' but postgis is not required for
15003 ;; proper operation.
15004 (packages (cons* postgresql %base-packages))
15005 (services
15006 (cons*
15007 (postgresql-service #:extension-packages (list postgis))
15008 %base-services)))
15009@end example
15010
15011Then the extension becomes visible and you can initialise an empty
15012geographic database in this way:
15013
15014@example
15015psql -U postgres
15016> create database postgistest;
15017> \connect postgistest;
15018> create extension postgis;
15019> create extension postgis_topology;
15020@end example
15021
15022There is no need to add this field for contrib extensions such as hstore or
15023dblink as they are already loadable by postgresql. This field is only
15024required to add extensions provided by other packages.
bf5c74e7
JL
15025@end deffn
15026
1d8d69c8
JL
15027@deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
15028Renvoie un service qui lance @command{mysqld}, le service de bases de
15029données MySQL ou MariaDB.
bf5c74e7 15030
1d8d69c8
JL
15031L'argument @var{config} facultatif spécifie la configuration de
15032@command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
bf5c74e7
JL
15033@end deffn
15034
1d8d69c8
JL
15035@deftp {Type de données} mysql-configuration
15036Type de données représentant la configuration de @var{mysql-service}.
bf5c74e7
JL
15037
15038@table @asis
1d8d69c8
JL
15039@item @code{mysql} (par défaut : @var{mariadb})
15040Objet paquet du serveur de base de données MySQL, qui peut être soit
15041@var{mariadb}, soit @var{mysql}.
bf5c74e7 15042
1d8d69c8
JL
15043Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
15044Pour MariaDB, le mot de passe root est vide.
bf5c74e7 15045
1d8d69c8
JL
15046@item @code{port} (par défaut : @code{3306})
15047Port TCP sur lequel le serveur de base de données écoute les connexions
15048entrantes.
bf5c74e7
JL
15049@end table
15050@end deftp
15051
1d8d69c8
JL
15052@defvr {Variable Scheme} memcached-service-type
15053C'est le type de service pour le service @uref{https://memcached.org/,
15054Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
15055type de service est un objet @code{memcached-configuration}.
bf5c74e7
JL
15056@end defvr
15057
15058@example
15059(service memcached-service-type)
15060@end example
15061
1d8d69c8
JL
15062@deftp {Type de données} memcached-configuration
15063Type de données représentant la configuration de memcached.
bf5c74e7
JL
15064
15065@table @asis
1d8d69c8
JL
15066@item @code{memcached} (par défaut : @code{memcached})
15067Le paquet Memcached à utiliser.
bf5c74e7 15068
1d8d69c8
JL
15069@item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
15070Les interfaces réseaux sur lesquelles écouter.
bf5c74e7 15071
1d8d69c8
JL
15072@item @code{tcp-port} (par défaut : @code{11211})
15073Port sur lequel accepter les connexions.
bf5c74e7 15074
1d8d69c8
JL
15075@item @code{udp-port} (par défaut : @code{11211})
15076Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
15077l'écoute en UDP.
bf5c74e7 15078
1d8d69c8
JL
15079@item @code{additional-options} (par défaut : @code{'()})
15080Options de la ligne de commande supplémentaires à passer à @code{memcached}.
bf5c74e7
JL
15081@end table
15082@end deftp
15083
1d8d69c8
JL
15084@defvr {Variable Scheme} mongodb-service-type
15085C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
15086valeur de ce service est un objet @code{mongodb-configuration}.
bf5c74e7
JL
15087@end defvr
15088
15089@example
15090(service mongodb-service-type)
15091@end example
15092
1d8d69c8
JL
15093@deftp {Type de données} mongodb-configuration
15094Type de données représentant la configuration de mongodb.
bf5c74e7
JL
15095
15096@table @asis
1d8d69c8
JL
15097@item @code{mongodb} (par défaut : @code{mongodb})
15098Le paquet MongoDB à utiliser.
bf5c74e7 15099
1d8d69c8
JL
15100@item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
15101Le fichier de configuration pour MongoDB.
bf5c74e7 15102
1d8d69c8
JL
15103@item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
15104Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
15105appartienne à l'utilisateur mongodb. Il devrait correspondre au
15106data-directory que MongoDB est configuré pour utiliser dans son fichier de
15107configuration.
bf5c74e7
JL
15108@end table
15109@end deftp
15110
1d8d69c8
JL
15111@defvr {Variable Scheme} redis-service-type
15112C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
15113Redis} dont la valeur est un objet @code{redis-configuration}.
bf5c74e7
JL
15114@end defvr
15115
1d8d69c8
JL
15116@deftp {Type de données} redis-configuration
15117Type de données représentant la configuration de redis.
bf5c74e7
JL
15118
15119@table @asis
1d8d69c8
JL
15120@item @code{redis} (par défaut : @code{redis})
15121Le paquet Redis à utiliser.
bf5c74e7 15122
1d8d69c8
JL
15123@item @code{bind} (par défaut : @code{"127.0.0.1"})
15124Interface réseau sur laquelle écouter.
bf5c74e7 15125
1d8d69c8
JL
15126@item @code{port} (par défaut : @code{6379})
15127Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
15128sur un socket TCP.
bf5c74e7 15129
1d8d69c8
JL
15130@item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
15131Répertoire dans lequel stocker la base de données et les fichiers liés.
bf5c74e7
JL
15132@end table
15133@end deftp
15134
3cacfa9e 15135@node Services de courriels
15f1bff4 15136@subsection Services de courriels
bf5c74e7 15137
1d8d69c8 15138@cindex courriel
bf5c74e7 15139@cindex email
1d8d69c8
JL
15140Le module @code{(gnu services mail)} fournit des définitions de services
15141Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
15142que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
15143détaillés dans les sous-sections ci-dessous.
bf5c74e7 15144
1d8d69c8 15145@subsubheading Service Dovecot
bf5c74e7 15146
1d8d69c8
JL
15147@deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
15148Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
bf5c74e7
JL
15149@end deffn
15150
1d8d69c8
JL
15151Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
15152configuration par défaut créé par @code{(dovecot-configuration)} suffira si
15153votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
15154sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
15155ports non chiffrés par défaut. Il y a quelques options cependant, que les
15156administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
15157d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
15158paramètres via une interface Scheme unifiée.
bf5c74e7 15159
1d8d69c8
JL
15160Par exemple, pour spécifier que les courriels se trouvent dans
15161@code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
bf5c74e7
JL
15162
15163@example
15164(dovecot-service #:config
15165 (dovecot-configuration
15166 (mail-location "maildir:~/.mail")))
15167@end example
15168
1d8d69c8
JL
15169Les paramètres de configuration disponibles sont les suivants. Chaque
15170définition des paramètres est précédé par son type ; par exemple,
15171@samp{string-list foo} indique que le paramètre @code{foo} devrait être
15172spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
15173de spécifier la configuration comme une chaîne de caractères, si vous avez
15174un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
15175système ; voir la fin pour plus de détails.
bf5c74e7
JL
15176
15177@c The following documentation was initially generated by
15178@c (generate-documentation) in (gnu services mail). Manually maintained
15179@c documentation is better, so we shouldn't hesitate to edit below as
15180@c needed. However if the change you want to make to this documentation
15181@c can be done in an automated way, it's probably easier to change
15182@c (generate-documentation) than to make it below and have to deal with
15183@c the churn as dovecot updates.
15184
1d8d69c8 15185Les champs de @code{dovecot-configuration} disponibles sont :
bf5c74e7 15186
1d8d69c8
JL
15187@deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
15188Le paquet dovecot
bf5c74e7
JL
15189@end deftypevr
15190
1d8d69c8
JL
15191@deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
15192Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
15193sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
15194IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
15195ou quelque chose de plus complexe, complétez les champs d'adresse et de port
15196de @samp{inet-listener} des services spécifiques qui vous intéressent.
bf5c74e7
JL
15197@end deftypevr
15198
1d8d69c8
JL
15199@deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
15200Liste des protocoles que vous voulez servir. Les protocoles disponibles
15201comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
bf5c74e7 15202
1d8d69c8 15203Les champs @code{protocol-configuration} disponibles sont :
bf5c74e7 15204
1d8d69c8
JL
15205@deftypevr {paramètre de @code{protocol-configuration}} string name
15206Le nom du protocole.
bf5c74e7
JL
15207@end deftypevr
15208
1d8d69c8
JL
15209@deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
15210Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
15211trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
15212partagés) et lda. Sa valeur par défaut est
bf5c74e7
JL
15213@samp{"/var/run/dovecot/auth-userdb"}.
15214@end deftypevr
15215
1d8d69c8
JL
15216@deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
15217Liste de greffons à charger séparés par des espaces.
bf5c74e7
JL
15218@end deftypevr
15219
1d8d69c8
JL
15220@deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
15221Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
15222adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
15223la casse. Par défaut @samp{10}.
bf5c74e7
JL
15224@end deftypevr
15225
15226@end deftypevr
15227
1d8d69c8
JL
15228@deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
15229Liste des services à activer. Les services disponibles comprennent
15230@samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
15231et @samp{lmtp}.
bf5c74e7 15232
1d8d69c8 15233Les champs de @code{service-configuration} disponibles sont :
bf5c74e7 15234
1d8d69c8
JL
15235@deftypevr {paramètre de @code{service-configuration}} string kind
15236Le type de service. Les valeurs valides comprennent @code{director},
15237@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
15238@code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
15239@code{quota-warning} ou n'importe quoi d'autre.
bf5c74e7
JL
15240@end deftypevr
15241
1d8d69c8
JL
15242@deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
15243Les auditeurs du service. Un auditeur est soit un
15244@code{unix-listener-configuration}, soit un
15245@code{fifo-listener-configuration}, soit un
15246@code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
bf5c74e7 15247
1d8d69c8 15248Les champs de @code{unix-listener-configuration} disponibles sont :
bf5c74e7 15249
1d8d69c8
JL
15250@deftypevr {paramètre de @code{unix-listener-configuration}} string path
15251Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
15252utilisé comme nom de section.
bf5c74e7
JL
15253@end deftypevr
15254
1d8d69c8
JL
15255@deftypevr {paramètre de @code{unix-listener-configuration}} string mode
15256Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
bf5c74e7
JL
15257@end deftypevr
15258
1d8d69c8
JL
15259@deftypevr {paramètre de @code{unix-listener-configuration}} string user
15260L'utilisateur à qui appartient le socket. La valeur par défaut est
15261@samp{""}
bf5c74e7
JL
15262@end deftypevr
15263
1d8d69c8
JL
15264@deftypevr {paramètre de @code{unix-listener-configuration}} string group
15265Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15266@end deftypevr
15267
15268
1d8d69c8 15269Les champs de @code{fifo-listener-configuration} disponibles sont :
bf5c74e7 15270
1d8d69c8
JL
15271@deftypevr {paramètre de @code{fifo-listener-configuration}} string path
15272Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
15273utilisé comme nom de section.
bf5c74e7
JL
15274@end deftypevr
15275
1d8d69c8
JL
15276@deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
15277Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
bf5c74e7
JL
15278@end deftypevr
15279
1d8d69c8
JL
15280@deftypevr {paramètre de @code{fifo-listener-configuration}} string user
15281L'utilisateur à qui appartient le socket. La valeur par défaut est
15282@samp{""}
bf5c74e7
JL
15283@end deftypevr
15284
1d8d69c8
JL
15285@deftypevr {paramètre de @code{fifo-listener-configuration}} string group
15286Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15287@end deftypevr
15288
15289
1d8d69c8 15290Les champs de @code{inet-listener-configuration} disponibles sont :
bf5c74e7 15291
1d8d69c8
JL
15292@deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
15293Le protocole à écouter.
bf5c74e7
JL
15294@end deftypevr
15295
1d8d69c8
JL
15296@deftypevr {paramètre de @code{inet-listener-configuration}} string address
15297L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
15298La valeur par défaut est @samp{""}.
bf5c74e7
JL
15299@end deftypevr
15300
1d8d69c8
JL
15301@deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
15302Le port sur lequel écouter.
bf5c74e7
JL
15303@end deftypevr
15304
1d8d69c8
JL
15305@deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
15306S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
15307@samp{required}. La valeur par défaut est @samp{#t}.
bf5c74e7
JL
15308@end deftypevr
15309
15310@end deftypevr
15311
adfb167f
JL
15312@deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
15313Connexions de clients simultanées maximum par processus. Une fois ce nombre
15314de connections atteint, la connexion suivante fera en sorte que Dovecot
15315démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
15316est utilisé à la place.
15317
15318La valeur par défaut est @samp{0}.
15319
15320@end deftypevr
15321
1d8d69c8
JL
15322@deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
15323Nombre de connexions à gérer avant de démarrer un nouveau processus.
15324Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
15325mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
15326est @samp{1}.
adfb167f
JL
15327
15328@end deftypevr
15329
15330@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
15331Nombre de processus maximum qui peut exister pour ce service. Si la valeur
15332est 0, @code{default-process-limit} est utilisé à la place.
15333
15334La valeur par défaut est @samp{0}.
15335
bf5c74e7
JL
15336@end deftypevr
15337
1d8d69c8
JL
15338@deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
15339Nombre de processus à toujours garder en attente de connexions. La valeur
15340par défaut est @samp{0}.
bf5c74e7
JL
15341@end deftypevr
15342
1d8d69c8
JL
15343@deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
15344Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
15345d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
bf5c74e7
JL
15346@end deftypevr
15347
15348@end deftypevr
15349
1d8d69c8
JL
15350@deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
15351Configuration du dictionnaire, créé par le constructeur
15352@code{dict-configuration}.
bf5c74e7 15353
1d8d69c8 15354Les champs de @code{dict-configuration} disponibles sont :
bf5c74e7 15355
1d8d69c8
JL
15356@deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
15357Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
15358valeur par défaut est @samp{()}.
bf5c74e7
JL
15359@end deftypevr
15360
15361@end deftypevr
15362
1d8d69c8
JL
15363@deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
15364Une liste de configurations passdb, chacune créée par le constructeur
15365@code{passdb-configuration}.
bf5c74e7 15366
1d8d69c8 15367Les champs de @code{passdb-configuration} disponibles sont :
bf5c74e7 15368
1d8d69c8
JL
15369@deftypevr {paramètre de @code{passdb-configuration}} string driver
15370Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
15371@samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
15372par défaut est @samp{"pam"}.
bf5c74e7
JL
15373@end deftypevr
15374
1d8d69c8
JL
15375@deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
15376Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
15377par défaut est @samp{""}.
bf5c74e7
JL
15378@end deftypevr
15379
15380@end deftypevr
15381
1d8d69c8
JL
15382@deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
15383Liste des configurations userdb, chacune créée par le constructeur
15384@code{userdb-configuration}.
bf5c74e7 15385
1d8d69c8 15386Les champs de @code{userdb-configuration} disponibles sont :
bf5c74e7 15387
1d8d69c8
JL
15388@deftypevr {paramètre de @code{userdb-configuration}} string driver
15389Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
15390@samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
bf5c74e7
JL
15391@end deftypevr
15392
1d8d69c8
JL
15393@deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
15394Liste des arguments du pilote userdb séparés par des espaces. La valeur par
15395défaut est @samp{""}.
bf5c74e7
JL
15396@end deftypevr
15397
1d8d69c8
JL
15398@deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
15399Remplace des champs de passwd. La valeur par défaut est @samp{()}.
bf5c74e7
JL
15400@end deftypevr
15401
15402@end deftypevr
15403
1d8d69c8
JL
15404@deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
15405Configuration du greffon, créé par le constructeur
15406@code{plugin-configuration}.
bf5c74e7
JL
15407@end deftypevr
15408
1d8d69c8
JL
15409@deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
15410Liste d'espaces de noms. Chaque élément de la liste est créé par le
15411constructeur @code{namespace-configuration}.
bf5c74e7 15412
1d8d69c8 15413Les champs de @code{namespace-configuration} disponibles sont :
bf5c74e7 15414
1d8d69c8
JL
15415@deftypevr {paramètre de @code{namespace-configuration}} string name
15416Nom de cet espace de nom.
bf5c74e7
JL
15417@end deftypevr
15418
1d8d69c8
JL
15419@deftypevr {paramètre de @code{namespace-configuration}} string type
15420Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
15421valeur par défaut est @samp{"private"}.
bf5c74e7
JL
15422@end deftypevr
15423
1d8d69c8
JL
15424@deftypevr {paramètre de @code{namespace-configuration}} string separator
15425Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
15426séparateur pour tous les espaces de noms ou certains clients seront confus.
15427@samp{/} est généralement une bonne valeur. La valeur par défaut dépend
15428cependant du format de stockage sous-jacent. La valeur par défaut est
15429@samp{""}.
bf5c74e7
JL
15430@end deftypevr
15431
1d8d69c8
JL
15432@deftypevr {paramètre de @code{namespace-configuration}} string prefix
15433Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
15434différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
15435valeur par défaut est @samp{""}.
bf5c74e7
JL
15436@end deftypevr
15437
1d8d69c8
JL
15438@deftypevr {paramètre de @code{namespace-configuration}} string location
15439Emplacement physique de la boîte aux lettres. C'est le même format que
15440mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
15441@samp{""}.
bf5c74e7
JL
15442@end deftypevr
15443
1d8d69c8
JL
15444@deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
15445Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
15446le possède. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15447@end deftypevr
15448
1d8d69c8
JL
15449@deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
15450Si l'espace de nom est caché, il n'est pas publié auprès des clients par
15451l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
15452#f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
15453des espaces de noms différents que vous voulez rendre obsolètes sans les
15454casser. Par exemple vous pouvez cacher les espaces de noms avec les
15455préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
15456défaut est @samp{#f}.
bf5c74e7
JL
15457@end deftypevr
15458
1d8d69c8
JL
15459@deftypevr {paramètre de @code{namespace-configuration}} boolean list?
15460Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
15461Cela rend l'espace de nom visible pour les clients qui ne supportent pas
15462l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
15463aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
15464défaut est @samp{#t}.
bf5c74e7
JL
15465@end deftypevr
15466
1d8d69c8
JL
15467@deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
15468Les espaces de noms gèrent leur propre souscription. Si la valeur est
15469@code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
15470toujours avoir cette valeur à @code{#t}. La valeur par défaut est
15471@samp{#t}.
bf5c74e7
JL
15472@end deftypevr
15473
1d8d69c8
JL
15474@deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
15475Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
15476par défaut est @samp{()}.
bf5c74e7 15477
1d8d69c8 15478Les champs de @code{mailbox-configuration} disponibles sont :
bf5c74e7 15479
1d8d69c8
JL
15480@deftypevr {paramètre de @code{mailbox-configuration}} string name
15481Nom de cette boîte aux lettres.
bf5c74e7
JL
15482@end deftypevr
15483
1d8d69c8
JL
15484@deftypevr {paramètre de @code{mailbox-configuration}} string auto
15485@samp{create} créera automatiquement cette boîte aux lettres.
15486@samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
15487défaut est @samp{"no"}.
bf5c74e7
JL
15488@end deftypevr
15489
1d8d69c8
JL
15490@deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
15491Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
15492valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
15493@code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
15494défaut est @samp{()}.
bf5c74e7
JL
15495@end deftypevr
15496
15497@end deftypevr
15498
15499@end deftypevr
15500
1d8d69c8
JL
15501@deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
15502Répertoire de base où stocker les données d'exécution. La valeur par défaut
15503est @samp{"/var/run/dovecot/"}.
bf5c74e7
JL
15504@end deftypevr
15505
1d8d69c8
JL
15506@deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
15507Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
15508ready."}.
bf5c74e7
JL
15509@end deftypevr
15510
1d8d69c8
JL
15511@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
15512Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
15513sont autorisées à modifier leurs adresses IP et leurs ports (pour la
15514connexion et la vérification d'authentification).
15515@samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
15516Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
15517défaut est @samp{()}.
bf5c74e7
JL
15518@end deftypevr
15519
1d8d69c8 15520@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
adfb167f 15521List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
bf5c74e7
JL
15522@end deftypevr
15523
1d8d69c8 15524@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
adfb167f
JL
15525Show more verbose process titles (in ps). Currently shows user name and IP
15526address. Useful for seeing who is actually using the IMAP processes (e.g.@:
15527shared mailboxes or if the same uid is used for multiple accounts).
15528Defaults to @samp{#f}.
bf5c74e7
JL
15529@end deftypevr
15530
1d8d69c8 15531@deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
adfb167f
JL
15532Should all processes be killed when Dovecot master process shuts down.
15533Setting this to @code{#f} means that Dovecot can be upgraded without forcing
15534existing client connections to close (although that could also be a problem
15535if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
bf5c74e7
JL
15536@end deftypevr
15537
1d8d69c8
JL
15538@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
15539Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
15540de connexions au serveur doveadm au lieu de les lancer dans le même
15541processus. La valeur par défaut est @samp{0}.
bf5c74e7
JL
15542@end deftypevr
15543
1d8d69c8
JL
15544@deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
15545Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
15546valeur par défaut est @samp{"doveadm-server"}.
bf5c74e7
JL
15547@end deftypevr
15548
1d8d69c8
JL
15549@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
15550Liste des variables d'environnement qui sont préservées au démarrage de
15551Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
15552paires clef=valeur pour toujours spécifier ce paramètre.
bf5c74e7
JL
15553@end deftypevr
15554
1d8d69c8 15555@deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
adfb167f
JL
15556Disable LOGIN command and all other plaintext authentications unless SSL/TLS
15557is used (LOGINDISABLED capability). Note that if the remote IP matches the
15558local IP (i.e.@: you're connecting from the same computer), the connection
15559is considered secure and plaintext authentication is allowed. See also
15560ssl=required setting. Defaults to @samp{#t}.
bf5c74e7
JL
15561@end deftypevr
15562
1d8d69c8 15563@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
adfb167f
JL
15564Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
15565Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
15566caching to be used. Defaults to @samp{0}.
bf5c74e7
JL
15567@end deftypevr
15568
1d8d69c8
JL
15569@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
15570Durée de vie des données en cache. Après l'expiration du TTL
15571l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
15572de données principale revoie une erreur interne. Nous essayons aussi de
15573gérer les changements de mot de passe automatiquement : si
15574l'authentification précédente de l'utilisateur était réussie mais pas
15575celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
15576l'authentification en texte clair uniquement. La valeur par défaut est
15577@samp{"1 hour"}.
bf5c74e7
JL
15578@end deftypevr
15579
1d8d69c8
JL
15580@deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
15581TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
15582passe ne correspond pas). 0 désactive la mise en cache complètement. La
15583valeur par défaut est @samp{"1 hour"}.
bf5c74e7
JL
15584@end deftypevr
15585
1d8d69c8
JL
15586@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
15587Liste des domaines pour les mécanismes d'authentification SASL qui en ont
15588besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
15589utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
15590domaine listé ici, donc gardez celui par défaut en premier. La valeur par
15591défaut est @samp{()}
bf5c74e7
JL
15592@end deftypevr
15593
1d8d69c8
JL
15594@deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
15595Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
15596les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
15597authentification en texte clair. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15598@end deftypevr
15599
1d8d69c8
JL
15600@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
15601Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
15602d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
15603listé ici, la connexion échoue automatiquement. C'est juste une
15604vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
15605exploiter des vulnérabilités potentielles d'échappement de guillemets avec
15606les bases de données SQL/LDAP. Si vous voulez autoriser tous les
15607caractères, indiquez la liste vide.
bf5c74e7
JL
15608@end deftypevr
15609
1d8d69c8
JL
15610@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
15611Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
15612cherchés en base. La valeur contient une série de caractère de -> à. Par
15613exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
15614@samp{@@}. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15615@end deftypevr
15616
1d8d69c8 15617@deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
adfb167f
JL
15618Username formatting before it's looked up from databases. You can use the
15619standard variables here, e.g.@: %Lu would lowercase the username, %n would
15620drop away the domain if it was given, or @samp{%n-AT-%d} would change the
15621@samp{@@} into @samp{-AT-}. This translation is done after
15622@samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
bf5c74e7
JL
15623@end deftypevr
15624
1d8d69c8 15625@deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
adfb167f
JL
15626If you want to allow master users to log in by specifying the master
15627username within the normal username string (i.e.@: not using SASL
15628mechanism's support for it), you can specify the separator character here.
15629The format is then <username><separator><master username>. UW-IMAP uses
15630@samp{*} as the separator, so that could be a good choice. Defaults to
15631@samp{""}.
bf5c74e7
JL
15632@end deftypevr
15633
1d8d69c8
JL
15634@deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
15635Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
15636mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
bf5c74e7
JL
15637@end deftypevr
15638
1d8d69c8 15639@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
adfb167f
JL
15640Maximum number of dovecot-auth worker processes. They're used to execute
15641blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
15642automatically created and destroyed as needed. Defaults to @samp{30}.
bf5c74e7
JL
15643@end deftypevr
15644
1d8d69c8
JL
15645@deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
15646Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
15647est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
15648des guillemets) pour permettre toutes les entrées keytab. La valeur par
15649défaut est @samp{""}.
bf5c74e7
JL
15650@end deftypevr
15651
1d8d69c8
JL
15652@deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
15653Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
15654par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
15655spécifié. Vous pourriez avoir besoin de faire en sorte que le service
15656d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
15657par défaut est @samp{""}.
bf5c74e7
JL
15658@end deftypevr
15659
1d8d69c8
JL
15660@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
15661Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
15662Samba et l'utilitaire @samp{ntlm-auth}.
15663<doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
15664@samp{#f}.
bf5c74e7
JL
15665@end deftypevr
15666
1d8d69c8
JL
15667@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
15668Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
bf5c74e7
JL
15669@samp{"/usr/bin/ntlm_auth"}.
15670@end deftypevr
15671
1d8d69c8
JL
15672@deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
15673Durée d'attente avant de répondre à des authentifications échouées. La
15674valeur par défaut est @samp{"2 secs"}.
bf5c74e7
JL
15675@end deftypevr
15676
1d8d69c8
JL
15677@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
15678Requiert un certification client SSL valide ou l'authentification échoue.
15679La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15680@end deftypevr
15681
1d8d69c8
JL
15682@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
15683Prend le nom d'utilisateur du certificat SSL client, avec
15684@code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
15685sujet. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15686@end deftypevr
15687
1d8d69c8
JL
15688@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
15689Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
15690sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
15691@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
15692@samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
15693paramètre @samp{disable-plaintext-auth}.
bf5c74e7
JL
15694@end deftypevr
15695
1d8d69c8
JL
15696@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
15697Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
15698Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
15699même que le @samp{inet-listener} du service directeur. La valeur par défaut
15700est @samp{()}.
bf5c74e7
JL
15701@end deftypevr
15702
1d8d69c8
JL
15703@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
15704Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
15705grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
15706valeur par défaut est @samp{()}.
bf5c74e7
JL
15707@end deftypevr
15708
1d8d69c8
JL
15709@deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
15710Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
15711après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
15712min"}.
bf5c74e7
JL
15713@end deftypevr
15714
1d8d69c8
JL
15715@deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
15716La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
15717utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
15718@@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
15719valeur par défaut est @samp{"%Lu"}.
bf5c74e7
JL
15720@end deftypevr
15721
1d8d69c8
JL
15722@deftypevr {paramètre de @code{dovecot-configuration}} string log-path
15723Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
15724journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
15725valeur par défaut est @samp{"syslog"}.
bf5c74e7
JL
15726@end deftypevr
15727
1d8d69c8
JL
15728@deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
15729Fichier de journal à utiliser pour les messages d'information. La valeur
15730par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15731@end deftypevr
15732
1d8d69c8
JL
15733@deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
15734Fichier de journal à utiliser pour les messages de débogage. La valeur par
15735défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15736@end deftypevr
15737
1d8d69c8
JL
15738@deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
15739Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
15740si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
15741local0..local7. D'autres dispositifs standard sont supportés. La valeur
15742par défaut est @samp{"mail"}.
bf5c74e7
JL
15743@end deftypevr
15744
1d8d69c8 15745@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
adfb167f
JL
15746Indique s'il faut enregistrer les tentatives de connexion échouées et la
15747raison de leur échec. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15748@end deftypevr
15749
1d8d69c8 15750@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
bf5c74e7
JL
15751In case of password mismatches, log the attempted password. Valid values
15752are no, plain and sha1. sha1 can be useful for detecting brute force
15753password attempts vs. user simply trying the same password over and over
adfb167f
JL
15754again. You can also truncate the value to n chars by appending ":n" (e.g.@:
15755sha1:6). Defaults to @samp{#f}.
bf5c74e7
JL
15756@end deftypevr
15757
1d8d69c8 15758@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
adfb167f
JL
15759Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
15760requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15761@end deftypevr
15762
1d8d69c8 15763@deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
adfb167f
JL
15764Dans le cas où le mot de passe était incorrect, indique s'il faut
15765enregistrer les mots de passe et les schémas utilisés pour que le problème
15766puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
15767La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15768@end deftypevr
15769
1d8d69c8 15770@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
adfb167f
JL
15771Indique s'il faut activer le débogage du traitement des courriels. Cela
15772peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
15773La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15774@end deftypevr
15775
1d8d69c8 15776@deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
adfb167f
JL
15777Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
15778est @samp{#f}.
bf5c74e7
JL
15779@end deftypevr
15780
1d8d69c8 15781@deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
adfb167f
JL
15782Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
15783codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
15784%H:%M:%S \""}.
bf5c74e7
JL
15785@end deftypevr
15786
1d8d69c8 15787@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
adfb167f
JL
15788Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
15789variable non vide sont agrégés pour former une chaîne de mots séparés par
15790des virgules.
bf5c74e7
JL
15791@end deftypevr
15792
1d8d69c8 15793@deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
adfb167f
JL
15794Format du journal de connexion. %s contient la chaîne
15795@samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
15796valeur par défaut est @samp{"%$: %s"}.
bf5c74e7
JL
15797@end deftypevr
15798
1d8d69c8 15799@deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
adfb167f
JL
15800Préfixe à utiliser devant chaque ligne du fichier de journal pour les
15801processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
15802la liste des variables que vous pouvez utiliser. La valeur par défaut est
bf5c74e7
JL
15803@samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
15804@end deftypevr
15805
1d8d69c8 15806@deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
adfb167f
JL
15807Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
15808utiliser ces variables :
bf5c74e7
JL
15809@table @code
15810@item %$
adfb167f 15811Delivery status message (e.g.@: @samp{saved to INBOX})
bf5c74e7
JL
15812@item %m
15813Message-ID
15814@item %s
adfb167f 15815Objet
bf5c74e7 15816@item %f
adfb167f 15817Adresse « de »
bf5c74e7 15818@item %p
adfb167f 15819Taille physique
bf5c74e7 15820@item %w
adfb167f 15821Taille virtuelle.
bf5c74e7 15822@end table
1d8d69c8 15823La valeur par défaut est @samp{"msgid=%m: %$"}.
bf5c74e7
JL
15824@end deftypevr
15825
1d8d69c8 15826@deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
adfb167f
JL
15827Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
15828vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
15829automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
15830courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
15831Dovecot.
bf5c74e7 15832
adfb167f 15833If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
bf5c74e7
JL
15834isn't enough. You'll also need to tell Dovecot where the other mailboxes
15835are kept. This is called the "root mail directory", and it must be the
15836first path given in the @samp{mail-location} setting.
15837
adfb167f 15838Il y a quelques variables spéciales que vous pouvez utiliser :
bf5c74e7
JL
15839
15840@table @samp
15841@item %u
adfb167f 15842nom d'utilisateur
bf5c74e7 15843@item %n
adfb167f
JL
15844la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
15845pas de domaine.
bf5c74e7 15846@item %d
adfb167f
JL
15847la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
15848domaine
bf5c74e7 15849@item %h
adfb167f 15850répertoire personnel
bf5c74e7
JL
15851@end table
15852
adfb167f 15853Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
bf5c74e7
JL
15854@table @samp
15855@item maildir:~/Maildir
15856@item mbox:~/mail:INBOX=/var/mail/%u
15857@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
15858@end table
1d8d69c8 15859La valeur par défaut est @samp{""}.
bf5c74e7
JL
15860@end deftypevr
15861
1d8d69c8 15862@deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
adfb167f
JL
15863Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
15864utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
15865uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
15866<doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15867@end deftypevr
15868
1d8d69c8 15869@deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
bf5c74e7 15870
1d8d69c8 15871La valeur par défaut est @samp{""}.
bf5c74e7
JL
15872@end deftypevr
15873
1d8d69c8 15874@deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
adfb167f
JL
15875Groupe à activer temporairement pour les opérations privilégiées.
15876Actuellement cela est utilisé uniquement avec INBOX lors de sa création
15877initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
15878« mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
bf5c74e7
JL
15879@end deftypevr
15880
1d8d69c8 15881@deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
bf5c74e7
JL
15882Grant access to these supplementary groups for mail processes. Typically
15883these are used to set up access to shared mailboxes. Note that it may be
adfb167f
JL
15884dangerous to set these if users can create symlinks (e.g.@: if "mail" group
15885is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
bf5c74e7
JL
15886mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
15887it). Defaults to @samp{""}.
15888@end deftypevr
15889
1d8d69c8 15890@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
bf5c74e7
JL
15891Allow full file system access to clients. There's no access checks other
15892than what the operating system does for the active UID/GID. It works with
adfb167f
JL
15893both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
15894/path/ or ~user/. Defaults to @samp{#f}.
bf5c74e7
JL
15895@end deftypevr
15896
1d8d69c8 15897@deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
adfb167f
JL
15898Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
15899dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
15900défaut est @samp{#f}.
bf5c74e7
JL
15901@end deftypevr
15902
1d8d69c8 15903@deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
adfb167f
JL
15904S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
15905verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
15906option est sûre de nos jours. La valeur par défaut est @samp{#t}.
bf5c74e7
JL
15907@end deftypevr
15908
1d8d69c8 15909@deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
adfb167f 15910Quand utiliser les appels à fsync() ou fdatasync() :
bf5c74e7
JL
15911@table @code
15912@item optimized
adfb167f 15913Lorsque cela est nécessaire pour éviter de perdre des données importantes
bf5c74e7 15914@item always
adfb167f 15915Useful with e.g.@: NFS when write()s are delayed
bf5c74e7 15916@item never
adfb167f
JL
15917Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
15918perdre toutes les données).
bf5c74e7 15919@end table
1d8d69c8 15920La valeur par défaut est @samp{"optimized"}.
bf5c74e7
JL
15921@end deftypevr
15922
1d8d69c8 15923@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
adfb167f
JL
15924Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
15925Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
15926seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
15927par défaut est @samp{#f}.
bf5c74e7
JL
15928@end deftypevr
15929
1d8d69c8 15930@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
adfb167f
JL
15931Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
15932utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
15933@samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
15934@end deftypevr
15935
1d8d69c8 15936@deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
adfb167f
JL
15937Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
15938flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
15939qui peuvent créer plus d'utilisation du disque que les autres méthodes de
15940verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
15941rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
15942@samp{"fcntl"}.
bf5c74e7
JL
15943@end deftypevr
15944
1d8d69c8 15945@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
adfb167f
JL
15946Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
15947plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
bf5c74e7
JL
15948@end deftypevr
15949
1d8d69c8 15950@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
adfb167f
JL
15951L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
15952utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
15953tant que démon ou qu'un autre utilisateur système. Remarquez que la
15954connexion en root est interdite en dur dans le binaire de dovecot et qu'on
15955ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
15956par défaut est @samp{500}.
bf5c74e7
JL
15957@end deftypevr
15958
1d8d69c8 15959@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
bf5c74e7 15960
1d8d69c8 15961La valeur par défaut est @samp{0}.
bf5c74e7
JL
15962@end deftypevr
15963
1d8d69c8 15964@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
adfb167f
JL
15965Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
15966un GID non-valide comme numéro de groupe primaire ne peuvent pas se
15967connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
15968ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
bf5c74e7
JL
15969@end deftypevr
15970
1d8d69c8 15971@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
bf5c74e7 15972
1d8d69c8 15973La valeur par défaut est @samp{0}.
bf5c74e7
JL
15974@end deftypevr
15975
1d8d69c8 15976@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
adfb167f
JL
15977Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
15978lors de la création de nouveaux mots-clefs. La valeur par défaut est
15979@samp{50}.
bf5c74e7
JL
15980@end deftypevr
15981
1d8d69c8 15982@deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
bf5c74e7 15983List of directories under which chrooting is allowed for mail processes
adfb167f 15984(i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
bf5c74e7
JL
15985setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
15986settings. If this setting is empty, "/./" in home dirs are ignored.
15987WARNING: Never add directories here which local users can modify, that may
15988lead to root exploit. Usually this should be done only if you don't allow
15989shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
15990@end deftypevr
15991
1d8d69c8 15992@deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
bf5c74e7
JL
15993Default chroot directory for mail processes. This can be overridden for
15994specific users in user database by giving /./ in user's home directory
adfb167f
JL
15995(e.g.@: /home/./user chroots into /home). Note that usually there is no
15996real need to do chrooting, Dovecot doesn't allow users to access files
15997outside their mail directory anyway. If your home directories are prefixed
15998with the chroot directory, append "/."@: to @samp{mail-chroot}.
bf5c74e7
JL
15999<doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
16000@end deftypevr
16001
1d8d69c8 16002@deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
adfb167f
JL
16003Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
16004les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
16005et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
bf5c74e7
JL
16006@end deftypevr
16007
1d8d69c8 16008@deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
adfb167f 16009Répertoire où trouver les greffons. La valeur par défaut est
bf5c74e7
JL
16010@samp{"/usr/lib/dovecot"}.
16011@end deftypevr
16012
1d8d69c8 16013@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
bf5c74e7 16014List of plugins to load for all services. Plugins specific to IMAP, LDA,
adfb167f 16015etc.@: are added to this list in their own .conf files. Defaults to
bf5c74e7
JL
16016@samp{()}.
16017@end deftypevr
16018
1d8d69c8 16019@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
adfb167f
JL
16020Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
16021jour le fichier de cache. Cela permet d'optimiser le comportement de
16022Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
16023disque. La valeur par défaut est @samp{0}.
bf5c74e7
JL
16024@end deftypevr
16025
1d8d69c8 16026@deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
adfb167f
JL
16027Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
16028temps en temps pour voir s'il y a de nouveaux messages ou d'autres
16029changements. Ce paramètre défini le temps d'attente minimum entre deux
16030vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
16031trouver immédiatement les changements. La valeur par défaut est @samp{"30
16032secs"}.
bf5c74e7
JL
16033@end deftypevr
16034
1d8d69c8 16035@deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
adfb167f
JL
16036Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
16037de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
16038système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
16039d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
16040si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
16041leur traitement de ces CR supplémentaires et causer des problèmes. La
16042valeur par défaut est @samp{#f}.
bf5c74e7
JL
16043@end deftypevr
16044
1d8d69c8 16045@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
adfb167f
JL
16046Par défaut la commande LIST renvoie toutes les entrées du maildir qui
16047commencent par un point. Activer cette option permet à Dovecot de renvoyer
16048uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
16049sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
16050setting struct @samp{dirent->d_type} this check is free and it's done always
16051regardless of this setting). La valeur par défaut est @samp{#f}.
bf5c74e7
JL
16052@end deftypevr
16053
1d8d69c8 16054@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
adfb167f
JL
16055Lors de la copie d'un message, le faire avec des liens en dur si possible.
16056Cela améliore un peu la performance et n'a que peu de chance d'avoir des
16057effets secondaires.
bf5c74e7
JL
16058@end deftypevr
16059
1d8d69c8 16060@deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
adfb167f
JL
16061Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
16062répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
16063lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
16064est @samp{#f}.
bf5c74e7
JL
16065@end deftypevr
16066
1d8d69c8 16067@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
adfb167f
JL
16068La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
16069mbox. Il y en a quatre :
bf5c74e7
JL
16070
16071@table @code
16072@item dotlock
adfb167f
JL
16073Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
16074plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
16075auront besoin de l'accès en écriture à ce répertoire.
bf5c74e7 16076@item dotlock-try
adfb167f
JL
16077Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
16078ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
bf5c74e7 16079@item fcntl
adfb167f
JL
16080Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
16081utilisez lockd.
bf5c74e7 16082@item flock
adfb167f 16083Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
bf5c74e7 16084@item lockf
adfb167f 16085Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
bf5c74e7
JL
16086@end table
16087
adfb167f
JL
16088Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
16089l'ordre dans lequel elles sont déclarées est important pour éviter des
16090interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
16091Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
16092méthodes en même temps.
bf5c74e7
JL
16093@end deftypevr
16094
1d8d69c8 16095@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
bf5c74e7
JL
16096
16097@end deftypevr
16098
1d8d69c8 16099@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
adfb167f
JL
16100Temps d'attente maximal pour un verrou (tous les verrous) avant
16101d'abandonner. La valeur par défaut est @samp{"5 mins"}.
bf5c74e7
JL
16102@end deftypevr
16103
1d8d69c8 16104@deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
adfb167f
JL
16105Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
16106modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
16107valeur par défaut est @samp{"2 mins"}.
bf5c74e7
JL
16108@end deftypevr
16109
1d8d69c8 16110@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
adfb167f
JL
16111Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
16112savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
16113beaucoup de temps. Comme le changement est habituellement un simple
16114courriel supplémentaire, il serait plus rapide de lire le nouveaux
16115courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
16116toujours à relire le fichier mbox complet si le fichier n'est pas comme
16117attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
16118changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
16119immédiatement compte. Remarquez qu'une synchronisation complète est
16120effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
16121par défaut est @samp{#t}.
bf5c74e7
JL
16122@end deftypevr
16123
1d8d69c8 16124@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
adfb167f
JL
16125Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
16126avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
15f1bff4 16127activée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
adfb167f 16128@samp{#f}.
bf5c74e7
JL
16129@end deftypevr
16130
1d8d69c8 16131@deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
adfb167f
JL
16132Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
16133synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
16134ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
16135suppriment souvent tous les courriels. L'inconvénient c'est que vos
16136changements ne sont pas immédiatement visibles pour les autres MUA. La
16137valeur par défaut est @samp{#t}.
bf5c74e7
JL
16138@end deftypevr
16139
1d8d69c8 16140@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
adfb167f
JL
16141If mbox size is smaller than this (e.g.@: 100k), don't write index files.
16142If an index file already exists it's still read, just not updated. Defaults
16143to @samp{0}.
bf5c74e7
JL
16144@end deftypevr
16145
1d8d69c8 16146@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
adfb167f
JL
16147Taille du fichier dbox maximale avant rotation. La valeur par défaut est
16148@samp{10000000}.
bf5c74e7
JL
16149@end deftypevr
16150
1d8d69c8 16151@deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
adfb167f
JL
16152Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
16153jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
161540 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
bf5c74e7
JL
16155@end deftypevr
16156
1d8d69c8 16157@deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
adfb167f
JL
16158Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
16159à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
16160dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
16161défaut est @samp{#f}.
bf5c74e7
JL
16162@end deftypevr
16163
1d8d69c8 16164@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
adfb167f
JL
16165Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
16166des fichiers externes, ce qui permet de les stocker une seule fois. Les
16167autres moteurs ne le supportent pas pour le moment.
bf5c74e7 16168
adfb167f
JL
16169ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
16170vos risques et périls.
bf5c74e7 16171
adfb167f
JL
16172Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
16173valeur par défaut est @samp{""}.
bf5c74e7
JL
16174@end deftypevr
16175
1d8d69c8 16176@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
adfb167f
JL
16177Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
16178Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
16179externe de certaines pièces-jointes spécifiques. La valeur par défaut est
16180@samp{128000}.
bf5c74e7
JL
16181@end deftypevr
16182
1d8d69c8 16183@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
adfb167f
JL
16184Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
16185:
bf5c74e7
JL
16186@table @code
16187@item posix
adfb167f
JL
16188Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
16189déduplication du système de fichier)
bf5c74e7 16190@item sis posix
adfb167f 16191SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
bf5c74e7 16192@item sis-queue posix
adfb167f 16193SiS avec déduplication et comparaison différées
bf5c74e7 16194@end table
1d8d69c8 16195La valeur par défaut est @samp{"sis posix"}.
bf5c74e7
JL
16196@end deftypevr
16197
1d8d69c8 16198@deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
bf5c74e7
JL
16199Hash format to use in attachment filenames. You can add any text and
16200variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
16201@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
adfb167f
JL
16202truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
16203Defaults to @samp{"%@{sha1@}"}.
bf5c74e7
JL
16204@end deftypevr
16205
1d8d69c8 16206@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
bf5c74e7 16207
1d8d69c8 16208La valeur par défaut est @samp{100}.
bf5c74e7
JL
16209@end deftypevr
16210
1d8d69c8 16211@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
bf5c74e7 16212
1d8d69c8 16213La valeur par défaut est @samp{1000}.
bf5c74e7
JL
16214@end deftypevr
16215
1d8d69c8 16216@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
adfb167f
JL
16217Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
16218service. C'est surtout pour attraper et tuer les processus qui font fuiter
16219la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
16220@samp{256000000}.
bf5c74e7
JL
16221@end deftypevr
16222
1d8d69c8 16223@deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
adfb167f
JL
16224Utilisateur de connexion utilisé en interne par les processus de connexion.
16225C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
16226avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
bf5c74e7
JL
16227@end deftypevr
16228
1d8d69c8 16229@deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
adfb167f
JL
16230Utilisateur utilisé en interne par les processus non privilégiés. Il
16231devrait être différent de l'utilisateur de connexion, pour que les processus
16232de connexion ne puissent pas perturber les autres processus. La valeur par
16233défaut est @samp{"dovecot"}.
bf5c74e7
JL
16234@end deftypevr
16235
1d8d69c8 16236@deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
adfb167f
JL
16237Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
16238défaut est @samp{"required"}.
bf5c74e7
JL
16239@end deftypevr
16240
1d8d69c8 16241@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
adfb167f
JL
16242Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
16243défaut est @samp{"</etc/dovecot/default.pem"}.
bf5c74e7
JL
16244@end deftypevr
16245
1d8d69c8 16246@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
adfb167f
JL
16247Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
16248privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
16249valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
bf5c74e7
JL
16250@end deftypevr
16251
1d8d69c8 16252@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
adfb167f
JL
16253Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
16254Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
16255fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
16256ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
bf5c74e7
JL
16257@end deftypevr
16258
1d8d69c8 16259@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
bf5c74e7
JL
16260PEM encoded trusted certificate authority. Set this only if you intend to
16261use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
adfb167f 16262certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
bf5c74e7
JL
16263</etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
16264@end deftypevr
16265
1d8d69c8 16266@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
adfb167f
JL
16267Indique si les certificats clients doivent réussir la vérification du CRL.
16268La valeur par défaut est @samp{#t}.
bf5c74e7
JL
16269@end deftypevr
16270
1d8d69c8 16271@deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
adfb167f
JL
16272Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
16273requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
16274auth. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
16275@end deftypevr
16276
1d8d69c8 16277@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
adfb167f
JL
16278Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
16279habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
16280indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
16281@samp{"commonName"}.
bf5c74e7
JL
16282@end deftypevr
16283
1d8d69c8 16284@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
adfb167f
JL
16285Version minimale de SSL à accepter. La valeur par défaut est
16286@samp{"TLSv1"}.
bf5c74e7
JL
16287@end deftypevr
16288
1d8d69c8 16289@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
adfb167f 16290Méthodes de chiffrement à utiliser. La valeur par défaut est
bf5c74e7
JL
16291@samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
16292@end deftypevr
16293
1d8d69c8 16294@deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
adfb167f
JL
16295Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
16296openssl engine ». La valeur par défaut est @samp{""}.
bf5c74e7
JL
16297@end deftypevr
16298
1d8d69c8 16299@deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
adfb167f
JL
16300Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
16301domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
bf5c74e7
JL
16302@end deftypevr
16303
1d8d69c8 16304@deftypevr {paramètre de @code{dovecot-configuration}} string hostname
adfb167f
JL
16305Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
16306in LMTP replies. Default is the system's real hostname@@domain. Defaults
16307to @samp{""}.
bf5c74e7
JL
16308@end deftypevr
16309
1d8d69c8 16310@deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
adfb167f
JL
16311Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
16312rejeter le courriel. La valeur par défaut est @samp{#f}.
bf5c74e7
JL
16313@end deftypevr
16314
1d8d69c8 16315@deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
adfb167f
JL
16316Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
16317@samp{"/usr/sbin/sendmail"}.
bf5c74e7
JL
16318@end deftypevr
16319
1d8d69c8 16320@deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
adfb167f
JL
16321Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
16322hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
bf5c74e7
JL
16323@end deftypevr
16324
1d8d69c8 16325@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
adfb167f
JL
16326En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
16327utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
16328La valeur par défaut est @samp{"Rejected: %s"}.
bf5c74e7
JL
16329@end deftypevr
16330
1d8d69c8 16331@deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
adfb167f
JL
16332Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
16333utiliser ces variables :
bf5c74e7
JL
16334
16335@table @code
16336@item %n
16337CRLF
16338@item %r
adfb167f 16339raison
bf5c74e7 16340@item %s
adfb167f 16341objet du courriel de départ
bf5c74e7 16342@item %t
adfb167f 16343destinataire
bf5c74e7 16344@end table
1d8d69c8
JL
16345La valeur par défaut est @samp{"Your message to <%t> was automatically
16346rejected:%n%r"}.
bf5c74e7
JL
16347@end deftypevr
16348
1d8d69c8 16349@deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
adfb167f
JL
16350Caractère de délimitation entre la partie locale et le détail des adresses
16351de courriel. La valeur par défaut est @samp{"+"}.
bf5c74e7
JL
16352@end deftypevr
16353
1d8d69c8 16354@deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
adfb167f
JL
16355En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
16356est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
16357dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
16358X-Original-To. La valeur par défaut est @samp{""}.
bf5c74e7
JL
16359@end deftypevr
16360
1d8d69c8 16361@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
adfb167f
JL
16362Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
16363? La valeur par défaut est @samp{#f}.
bf5c74e7
JL
16364@end deftypevr
16365
1d8d69c8 16366@deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
adfb167f
JL
16367Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
16368La valeur par défaut est @samp{#f}.
bf5c74e7
JL
16369@end deftypevr
16370
1d8d69c8 16371@deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
adfb167f
JL
16372Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
16373des lignes de commandes très longues avec des boîtes aux lettres énormes,
16374donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
16375erreurs « Too long argument » ou « IMAP command line too large ». La valeur
16376par défaut est @samp{64000}.
bf5c74e7
JL
16377@end deftypevr
16378
1d8d69c8 16379@deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
adfb167f 16380Format de la chaîne de déconnexion IMAP :
bf5c74e7
JL
16381@table @code
16382@item %i
adfb167f 16383nombre d'octets lus par le client
bf5c74e7 16384@item %o
adfb167f 16385nombre total d'octets envoyés au client.
bf5c74e7 16386@end table
adfb167f
JL
16387Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
16388utilisables. La valeur par défaut est @samp{"in=%i out=%o
16389deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
16390hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
16391body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
bf5c74e7
JL
16392@end deftypevr
16393
1d8d69c8 16394@deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
bf5c74e7 16395Override the IMAP CAPABILITY response. If the value begins with '+', add
adfb167f 16396the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
bf5c74e7
JL
16397to @samp{""}.
16398@end deftypevr
16399
1d8d69c8 16400@deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
adfb167f
JL
16401Temps d'attente entre les notifications « OK Still here » lorsque le client
16402est en IDLE. La valeur par défaut est @samp{"2 mins"}.
bf5c74e7
JL
16403@end deftypevr
16404
1d8d69c8 16405@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
adfb167f
JL
16406Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
16407la valeur par défaut. Les champs suivants ont actuellement des valeurs par
16408défaut : name, version, os, os-version, support-url, support-email. La
16409valeur par défaut est @samp{""}.
bf5c74e7
JL
16410@end deftypevr
16411
1d8d69c8 16412@deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
adfb167f
JL
16413Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
16414valeur par défaut est @samp{""}.
bf5c74e7
JL
16415@end deftypevr
16416
1d8d69c8 16417@deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
adfb167f 16418Contournements pour divers bogues de certains client :
bf5c74e7
JL
16419
16420@table @code
16421@item delay-newmail
15f1bff4 16422Envoi des notifications de nouveau message EXISTS/RECENT seulement en
adfb167f
JL
16423réponse aux commandes NOOP et CHECK. Certains clients les ignorent
16424autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
16425cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
16426sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
16427contournement si la synchronisation est à « En-têtes seulement ».
bf5c74e7
JL
16428
16429@item tb-extra-mailbox-sep
adfb167f
JL
16430Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
16431un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
16432Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
16433le traiter comme un nom de boîte aux lettres invalide.
bf5c74e7
JL
16434
16435@item tb-lsub-flags
adfb167f 16436Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
bf5c74e7
JL
16437makes Thunderbird realize they aren't selectable and show them greyed out,
16438instead of only later giving "not selectable" popup error.
16439@end table
1d8d69c8 16440La valeur par défaut est @samp{()}.
bf5c74e7
JL
16441@end deftypevr
16442
1d8d69c8 16443@deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
adfb167f
JL
16444Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
16445autorise tous. La valeur par défaut est @samp{""}.
bf5c74e7
JL
16446@end deftypevr
16447
16448
15f1bff4
JL
16449Whew! Lots of configuration options. The nice thing about it though is that
16450Guix has a complete interface to Dovecot's configuration language. This
16451allows not only a nice way to declare configurations, but also offers
16452reflective capabilities as well: users can write code to inspect and
16453transform configurations from within Scheme.
bf5c74e7 16454
adfb167f
JL
16455Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
16456prêt. Dans ce cas, vous pouvez passer un objet
16457@code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
16458@code{dovecot-service}. Comme son nom l'indique, une configuration opaque
16459n'a pas les capacités de réflexions.
bf5c74e7 16460
1d8d69c8 16461Les champs de @code{opaque-dovecot-configuration} disponibles sont :
bf5c74e7 16462
1d8d69c8
JL
16463@deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
16464Le paquet dovecot
bf5c74e7
JL
16465@end deftypevr
16466
1d8d69c8 16467@deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
adfb167f 16468Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
bf5c74e7
JL
16469@end deftypevr
16470
adfb167f
JL
16471Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
16472vous pouvez instancier un service dovecot comme cela :
bf5c74e7
JL
16473
16474@example
16475(dovecot-service #:config
16476 (opaque-dovecot-configuration
16477 (string "")))
16478@end example
16479
adfb167f 16480@subsubheading Service OpenSMTPD
bf5c74e7 16481
1d8d69c8 16482@deffn {Variable Scheme} opensmtpd-service-type
adfb167f
JL
16483C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
16484dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
16485dans cet exemple :
bf5c74e7
JL
16486
16487@example
16488(service opensmtpd-service-type
16489 (opensmtpd-configuration
16490 (config-file (local-file "./my-smtpd.conf"))))
16491@end example
16492@end deffn
16493
1d8d69c8 16494@deftp {Type de données} opensmtpd-configuration
adfb167f 16495Type de données représentant la configuration de opensmtpd.
bf5c74e7
JL
16496
16497@table @asis
1d8d69c8 16498@item @code{package} (par défaut : @var{opensmtpd})
adfb167f 16499Objet de paquet du serveur SMTP OpenSMTPD.
bf5c74e7 16500
1d8d69c8 16501@item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
adfb167f
JL
16502Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
16503Par défaut il écoute sur l'interface de boucle locale et accepte les
16504courriels des utilisateurs et des démons de la machine locale, et autorise
15f1bff4 16505l'envoi de courriels à des serveurs distants. Lancez @command{man
adfb167f 16506smtpd.conf} pour plus d'information.
bf5c74e7
JL
16507
16508@end table
16509@end deftp
16510
adfb167f 16511@subsubheading Service Exim
bf5c74e7 16512
adfb167f
JL
16513@cindex agent de transfert de courriel (MTA)
16514@cindex MTA (agent de transfert de courriel)
bf5c74e7
JL
16515@cindex SMTP
16516
1d8d69c8 16517@deffn {Variable Scheme} exim-service-type
adfb167f
JL
16518C'est le type de l'agent de transfert de courriel (MTA)
16519@uref{https://exim.org, Exim}, dont la valeur devrait être un objet
16520@code{exim-configuration} comme dans cet exemple :
bf5c74e7
JL
16521
16522@example
16523(service exim-service-type
16524 (exim-configuration
16525 (config-file (local-file "./my-exim.conf"))))
16526@end example
16527@end deffn
16528
adfb167f
JL
16529Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
16530service @code{mail-aliases-service-type} dans votre @code{operating-system}
16531(même sans alias).
bf5c74e7 16532
1d8d69c8 16533@deftp {Type de données} exim-configuration
adfb167f 16534Type de données représentant la configuration d'exim.
bf5c74e7
JL
16535
16536@table @asis
1d8d69c8 16537@item @code{package} (par défaut : @var{exim})
adfb167f 16538Objet de paquet du serveur Exim.
bf5c74e7 16539
1d8d69c8 16540@item @code{config-file} (par défaut : @code{#f})
adfb167f
JL
16541Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
16542valeur est @code{#f} alors le service utilisera la configuration par défaut
16543du paquet fournit dans @code{package}. Le fichier de configuration qui en
16544résulte est chargé après avoir mis en place les variables de configuration
16545@code{exim_user} et @code{exim_group}.
bf5c74e7
JL
16546
16547@end table
16548@end deftp
16549
adfb167f 16550@subsubheading Service d'alias de courriel
bf5c74e7 16551
adfb167f
JL
16552@cindex alias de courriel
16553@cindex alias, pour les adresses de courriel
bf5c74e7 16554
1d8d69c8 16555@deffn {Variable Scheme} mail-aliases-service-type
adfb167f
JL
16556C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
16557comment délivrer les courriels aux utilisateurs du système.
bf5c74e7
JL
16558
16559@example
16560(service mail-aliases-service-type
16561 '(("postmaster" "bob")
16562 ("bob" "bob@@example.com" "bob@@example2.com")))
16563@end example
16564@end deffn
16565
adfb167f
JL
16566La configuration pour un service @code{mail-aliases-service-type} est une
16567liste associative qui dénote comment délivrer les courriels qui arrivent au
16568système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
16569@code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
16570délivrer les courriels de cet utilisateur.
bf5c74e7 16571
adfb167f
JL
16572Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
16573système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
16574@code{postmaster} dans la liste @code{user-accounts} du
16575@code{operating-system} pour délivrer les courriels à destination de
16576@code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
16577@code{bob@@example.com} et @code{bob@@example2.com}).
bf5c74e7 16578
3cacfa9e 16579@node Services de messagerie
15f1bff4 16580@subsection Services de messagerie
bf5c74e7 16581
15f1bff4 16582@cindex messagerie instantanée
bf5c74e7
JL
16583@cindex jabber
16584@cindex XMPP
adfb167f
JL
16585Le module @code{(gnu services messaging)} fournit des définitions de
16586services Guix pour les services de messageries instantanées : actuellement
16587seul Prosody est supporté.
bf5c74e7 16588
adfb167f 16589@subsubheading Service Prosody
bf5c74e7 16590
1d8d69c8 16591@deffn {Variable Scheme} prosody-service-type
adfb167f
JL
16592C'est le type pour le @uref{https://prosody.im, le serveur de communication
16593XMPP Prosody}. Sa valeur doit être un enregistrement
16594@code{prosody-configuration} comme dans cet exemple :
bf5c74e7
JL
16595
16596@example
16597(service prosody-service-type
16598 (prosody-configuration
16599 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
16600 (int-components
16601 (list
16602 (int-component-configuration
16603 (hostname "conference.example.net")
16604 (plugin "muc")
16605 (mod-muc (mod-muc-configuration)))))
16606 (virtualhosts
16607 (list
16608 (virtualhost-configuration
16609 (domain "example.net"))))))
16610@end example
16611
adfb167f 16612Voir plus bas pour des détails sur @code{prosody-configuration}.
bf5c74e7
JL
16613
16614@end deffn
16615
adfb167f
JL
16616Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
16617champ @code{virtualhosts} est requis : il spécifie le domaine que vous
16618voulez voir Prosody servir.
bf5c74e7 16619
adfb167f
JL
16620Vous pouvez effectuer plusieurs vérifications de la configuration générée
16621avec la commande @code{prosodyctl check}.
bf5c74e7 16622
adfb167f
JL
16623Prosodyctl vous aidera aussi à importer des certificats du répertoire
16624@code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
16625Voir @url{https://prosody.im/doc/letsencrypt}.
bf5c74e7
JL
16626
16627@example
16628prosodyctl --root cert import /etc/letsencrypt/live
16629@end example
16630
1d8d69c8
JL
16631Les paramètres de configuration disponibles sont les suivants. Chaque
16632définition des paramètres est précédé par son type ; par exemple,
16633@samp{string-list foo} indique que le paramètre @code{foo} devrait être
16634spécifié comme une liste de chaînes de caractères. Les types précédés de
16635@code{maybe-} signifient que le paramètre n'apparaîtra pas dans
16636@code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
bf5c74e7 16637
adfb167f
JL
16638Il y a aussi une manière de spécifier la configuration en tant que chaîne de
16639caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
16640voulez porter depuis un autre système ; voir la fin pour plus de détails.
bf5c74e7 16641
adfb167f
JL
16642Le type @code{file-object} désigne soit un objet simili-fichier
16643(@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
bf5c74e7
JL
16644
16645@c The following documentation was initially generated by
16646@c (generate-documentation) in (gnu services messaging). Manually maintained
16647@c documentation is better, so we shouldn't hesitate to edit below as
16648@c needed. However if the change you want to make to this documentation
16649@c can be done in an automated way, it's probably easier to change
16650@c (generate-documentation) than to make it below and have to deal with
16651@c the churn as Prosody updates.
16652
1d8d69c8 16653Les champs de @code{prosody-configuration} disponibles sont :
bf5c74e7 16654
1d8d69c8 16655@deftypevr {paramètre de @code{prosody-configuration}} package prosody
adfb167f 16656Le paquet Prosody.
bf5c74e7
JL
16657@end deftypevr
16658
1d8d69c8 16659@deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
adfb167f
JL
16660Emplacement du répertoire de stockage des données de Prosody. Voir
16661@url{https://prosody.im/doc/configure}. La valeur par défaut est
bf5c74e7
JL
16662@samp{"/var/lib/prosody"}.
16663@end deftypevr
16664
1d8d69c8 16665@deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
adfb167f
JL
16666Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
16667spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
16668par défaut est @samp{()}.
bf5c74e7
JL
16669@end deftypevr
16670
1d8d69c8 16671@deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
adfb167f
JL
16672Chaque hôte virtuel et composant a besoin d'un certificat pour que les
16673clients et les serveurs puissent vérifier son identité. Prosody chargera
16674automatiquement les clefs et les certificats dans le répertoire spécifié
16675ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
bf5c74e7
JL
16676@end deftypevr
16677
1d8d69c8 16678@deftypevr {paramètre de @code{prosody-configuration}} string-list admins
adfb167f
JL
16679C'est une liste des comptes administrateurs de ce serveur. Remarquez que
16680vous devez créer les comptes séparément. Voir
16681@url{https://prosody.im/doc/admins} et
16682@url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
16683'("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
16684@samp{()}.
bf5c74e7
JL
16685@end deftypevr
16686
1d8d69c8 16687@deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
adfb167f
JL
16688Active l'utilisation de libevent pour de meilleures performances sous une
16689forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
16690défaut est @samp{#f}.
bf5c74e7
JL
16691@end deftypevr
16692
1d8d69c8 16693@deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
adfb167f
JL
16694C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
16695@code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
16696qu'il existe aussi. La documentation des modules se trouve sur
16697@url{https://prosody.im/doc/modules}. La valeur par défaut est
16698@samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
16699"blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
16700"admin_adhoc")}.
bf5c74e7
JL
16701@end deftypevr
16702
1d8d69c8 16703@deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
adfb167f
JL
16704@samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
16705mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
16706par défaut est @samp{()}.
bf5c74e7
JL
16707@end deftypevr
16708
1d8d69c8 16709@deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
adfb167f
JL
16710Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
16711chemin est vide alors @samp{mod_groups} ne fait rien. Voir
16712@url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
bf5c74e7
JL
16713@samp{"/var/lib/prosody/sharedgroups.txt"}.
16714@end deftypevr
16715
1d8d69c8 16716@deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
adfb167f
JL
16717Désactive la création de compte par défaut, pour la sécurité. Voir
16718@url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
16719@samp{#f}.
bf5c74e7
JL
16720@end deftypevr
16721
1d8d69c8 16722@deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
adfb167f
JL
16723Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
16724pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
16725pas complètement ces options, ne les ajoutez pas à votre configuration, il
16726est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
16727@url{https://prosody.im/doc/advanced_ssl_config}.
bf5c74e7 16728
1d8d69c8 16729Les champs de @code{ssl-configuration} disponibles sont :
bf5c74e7 16730
1d8d69c8 16731@deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
adfb167f 16732Cela détermine la poignée de main à utiliser.
bf5c74e7
JL
16733@end deftypevr
16734
1d8d69c8 16735@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
adfb167f 16736Chemin vers votre fichier de clef privée.
bf5c74e7
JL
16737@end deftypevr
16738
1d8d69c8 16739@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
adfb167f 16740Chemin vers votre fichier de certificat.
bf5c74e7
JL
16741@end deftypevr
16742
1d8d69c8 16743@deftypevr {paramètre de @code{ssl-configuration}} file-object capath
adfb167f
JL
16744Chemin vers le répertoire contenant les certificats racines que vous voulez
16745voir Prosody utiliser lors de la vérification des certificats des serveurs
16746distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
bf5c74e7
JL
16747@end deftypevr
16748
1d8d69c8 16749@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
adfb167f
JL
16750Chemin vers un fichier contenant les certificats racines auxquels Prosody
16751devra faire confiance. Comme @code{capath} mais avec les certificats
16752concaténés ensemble.
bf5c74e7
JL
16753@end deftypevr
16754
1d8d69c8 16755@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
adfb167f
JL
16756Une liste d'options de vérification (qui correspondent globalement aux
16757drapeaux @code{set_verify()} d'OpenSSL).
bf5c74e7
JL
16758@end deftypevr
16759
1d8d69c8 16760@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
adfb167f
JL
16761Une liste d'options générales liées à SSL/TLS. Elles correspondent
16762globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
16763options disponibles dans LuaSec, voir les sources de LuaSec.
bf5c74e7
JL
16764@end deftypevr
16765
1d8d69c8 16766@deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
adfb167f
JL
16767Longueur maximale d'une chaîne d'autorités de certifications avant la
16768racine.
bf5c74e7
JL
16769@end deftypevr
16770
1d8d69c8 16771@deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
adfb167f
JL
16772Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
16773chiffrement que Prosody offrira aux clients, et dans quel ordre de
16774préférence.
bf5c74e7
JL
16775@end deftypevr
16776
1d8d69c8 16777@deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
adfb167f
JL
16778Un chemin vers un fichier contenant les paramètres pour l'échange de clef
16779Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
16780dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
bf5c74e7
JL
16781@end deftypevr
16782
1d8d69c8 16783@deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
adfb167f
JL
16784Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
16785Prosody est @samp{"secp384r1"}.
bf5c74e7
JL
16786@end deftypevr
16787
1d8d69c8 16788@deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
adfb167f 16789Une liste d'options de vérification « supplémentaires ».
bf5c74e7
JL
16790@end deftypevr
16791
1d8d69c8 16792@deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
adfb167f 16793Mot de passe pour les clefs privées chiffrées.
bf5c74e7
JL
16794@end deftypevr
16795
16796@end deftypevr
16797
1d8d69c8 16798@deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
adfb167f
JL
16799S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
16800non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
16801défaut est @samp{#f}.
bf5c74e7
JL
16802@end deftypevr
16803
1d8d69c8 16804@deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
adfb167f
JL
16805Ensemble de mécanismes qui ne seront jamais offerts. Voir
16806@url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
bf5c74e7
JL
16807@samp{("DIGEST-MD5")}.
16808@end deftypevr
16809
1d8d69c8 16810@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
adfb167f
JL
16811S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
16812non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
16813défaut est @samp{#f}.
bf5c74e7
JL
16814@end deftypevr
16815
1d8d69c8 16816@deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
adfb167f
JL
16817S'il faut requérir le chiffrement et l'authentification du certificat. Cela
16818fournit une sécurité idéale, mais demande que les serveurs avec lesquels
16819vous communiquez supportent le chiffrement ET présentent un certificat
16820valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
16821valeur par défaut est @samp{#f}.
bf5c74e7
JL
16822@end deftypevr
16823
1d8d69c8 16824@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
adfb167f
JL
16825Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
16826invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
16827besoin de s'authentifier avec des certificats. Ils seront authentifiés par
16828DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
16829est @samp{()}.
bf5c74e7
JL
16830@end deftypevr
16831
1d8d69c8 16832@deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
adfb167f
JL
16833Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
16834demander un certificat valide pour certains domaine en spécifiant la liste
16835ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
16836est @samp{()}.
bf5c74e7
JL
16837@end deftypevr
16838
1d8d69c8 16839@deftypevr {paramètre de @code{prosody-configuration}} string authentication
adfb167f
JL
16840Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
16841les mots de passes en texte clair et utilise la configuration de stockage
16842des données de Prosody pour stocker les données authentifiées. Si vous
16843n'avez pas confiance dans le serveur, lisez
16844@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
16845d'information sur l'utilisation du moteur hashed. Voir aussi
16846@url{https://prosody.im/doc/authentication}. La valeur par défaut est
bf5c74e7
JL
16847@samp{"internal_plain"}.
16848@end deftypevr
16849
1d8d69c8 16850@deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
15f1bff4
JL
16851Set logging options. Advanced logging configuration is not yet supported by
16852the Guix Prosody Service. See @url{https://prosody.im/doc/logging}.
16853Defaults to @samp{"*syslog"}.
bf5c74e7
JL
16854@end deftypevr
16855
1d8d69c8 16856@deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
adfb167f
JL
16857Fichier où écrire le PID. Voir
16858@url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
16859@samp{"/var/run/prosody/prosody.pid"}.
bf5c74e7
JL
16860@end deftypevr
16861
1d8d69c8 16862@deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
adfb167f 16863Taille maximum autorisée pour le corps HTTP (en octets).
bf5c74e7
JL
16864@end deftypevr
16865
1d8d69c8 16866@deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
adfb167f
JL
16867Certains modules exposent leur propre URL de diverses manières. Cette URL
16868est construite à partir du protocole, de l'hôte et du port utilisé. Si
16869Prosody se trouve derrière un proxy, l'URL publique sera
16870@code{http-external-url} à la place. Voir
bf5c74e7
JL
16871@url{https://prosody.im/doc/http#external_url}.
16872@end deftypevr
16873
1d8d69c8 16874@deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
adfb167f
JL
16875Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
16876créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
16877comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
16878@samp{"example.com"}. Toutes les options de cette liste seront appliquées
16879uniquement à cet hôte.
bf5c74e7 16880
adfb167f
JL
16881Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
16882éviter de le confondre avec le nom d'hôte physique réel de la machine qui
16883héberge Prosody. Une seule instance de Prosody peut servir plusieurs
16884domaines, chacun défini comme une entrée VirtualHost dans la configuration
16885de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
16886qu'une entrée VirtualHost.
bf5c74e7 16887
adfb167f 16888Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
bf5c74e7 16889
1d8d69c8 16890Les champs de @code{virtualhost-configuration} disponibles sont :
bf5c74e7 16891
adfb167f 16892tous ces champs de @code{prosody-configuration} : @code{admins},
bf5c74e7
JL
16893@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16894@code{groups-file}, @code{allow-registration?}, @code{ssl},
16895@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16896@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16897@code{s2s-insecure-domains}, @code{s2s-secure-domains},
16898@code{authentication}, @code{log}, @code{http-max-content-size},
adfb167f 16899@code{http-external-url}, @code{raw-content}, plus :
1d8d69c8 16900@deftypevr {paramètre de @code{virtualhost-configuration}} string domain
adfb167f 16901Domaine que vous souhaitez que Prosody serve.
bf5c74e7
JL
16902@end deftypevr
16903
16904@end deftypevr
16905
1d8d69c8 16906@deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
adfb167f
JL
16907Les composant sont des services supplémentaires qui sont disponibles pour
16908les clients, habituellement sur un sous-domaine du serveur principal (comme
16909@samp{"mycomponent.example.com"}). Des exemples de composants sont des
16910serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
16911d'autres protocoles.
16912
16913Les composants internes sont implémentés dans des greffons spécifiques à
16914Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
16915champ de nom d'hôte et le greffon que vous voulez utiliser pour le
16916composant.
16917
16918Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
16919@samp{()}.
bf5c74e7 16920
1d8d69c8 16921Les champs de @code{int-component-configuration} disponibles sont :
bf5c74e7 16922
adfb167f 16923tous ces champs de @code{prosody-configuration} : @code{admins},
bf5c74e7
JL
16924@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16925@code{groups-file}, @code{allow-registration?}, @code{ssl},
16926@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16927@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16928@code{s2s-insecure-domains}, @code{s2s-secure-domains},
16929@code{authentication}, @code{log}, @code{http-max-content-size},
adfb167f 16930@code{http-external-url}, @code{raw-content}, plus :
1d8d69c8 16931@deftypevr {paramètre de @code{int-component-configuration}} string hostname
adfb167f 16932Nom d'hôte du composant.
bf5c74e7
JL
16933@end deftypevr
16934
1d8d69c8 16935@deftypevr {paramètre de @code{int-component-configuration}} string plugin
adfb167f 16936Greffon que vous voulez utiliser pour ce composant.
bf5c74e7
JL
16937@end deftypevr
16938
1d8d69c8 16939@deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
adfb167f
JL
16940Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
16941créer des chatrooms/conférences pour les utilisateurs XMPP.
bf5c74e7 16942
adfb167f
JL
16943Des informations générales sur la configuration des chatrooms
16944multi-utilisateurs se trouvent dans la documentation sur les chatrooms
16945(@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
16946découvrez.
bf5c74e7 16947
adfb167f 16948Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
bf5c74e7 16949
1d8d69c8 16950Les champs de @code{mod-muc-configuration} disponibles sont :
bf5c74e7 16951
1d8d69c8 16952@deftypevr {paramètre de @code{mod-muc-configuration}} string name
adfb167f
JL
16953Le nom à renvoyer dans les réponses de découverte de services. La valeur
16954par défaut est @samp{"Prosody Chatrooms"}.
bf5c74e7
JL
16955@end deftypevr
16956
1d8d69c8 16957@deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
bf5c74e7
JL
16958If @samp{#t}, this will only allow admins to create new chatrooms.
16959Otherwise anyone can create a room. The value @samp{"local"} restricts room
adfb167f
JL
16960creation to users on the service's parent domain. E.g.@:
16961@samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
16962value @samp{"admin"} restricts to service administrators only. Defaults to
16963@samp{#f}.
bf5c74e7
JL
16964@end deftypevr
16965
1d8d69c8 16966@deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
adfb167f
JL
16967Nombre maximum de messages d'historique qui seront envoyés aux membres qui
16968viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
bf5c74e7
JL
16969@end deftypevr
16970
16971@end deftypevr
16972
16973@end deftypevr
16974
1d8d69c8 16975@deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
adfb167f
JL
16976Les composants externes utilisent XEP-0114, que la plupart des composants
16977supportent. Pour ajouter un composant externe, vous remplissez simplement
16978le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
16979valeur par défaut est @samp{()}.
bf5c74e7 16980
1d8d69c8 16981Les champs de @code{ext-component-configuration} disponibles sont :
bf5c74e7 16982
adfb167f 16983tous ces champs de @code{prosody-configuration} : @code{admins},
bf5c74e7
JL
16984@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
16985@code{groups-file}, @code{allow-registration?}, @code{ssl},
16986@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
16987@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
16988@code{s2s-insecure-domains}, @code{s2s-secure-domains},
16989@code{authentication}, @code{log}, @code{http-max-content-size},
adfb167f 16990@code{http-external-url}, @code{raw-content}, plus :
1d8d69c8 16991@deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
adfb167f 16992Mot de passe que le composant utilisera pour s'authentifier.
bf5c74e7
JL
16993@end deftypevr
16994
1d8d69c8 16995@deftypevr {paramètre de @code{ext-component-configuration}} string hostname
adfb167f 16996Nom d'hôte du composant.
bf5c74e7
JL
16997@end deftypevr
16998
16999@end deftypevr
17000
1d8d69c8 17001@deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
adfb167f
JL
17002Ports sur lesquels Prosody écoutera les connexions des composants. La
17003valeur par défaut est @samp{(5347)}.
bf5c74e7
JL
17004@end deftypevr
17005
1d8d69c8 17006@deftypevr {paramètre de @code{prosody-configuration}} string component-interface
adfb167f
JL
17007Interface sur laquelle Prosody écoutera les connexions des composants. La
17008valeur par défaut est @samp{"127.0.0.1"}.
bf5c74e7
JL
17009@end deftypevr
17010
1d8d69c8 17011@deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
adfb167f 17012Contenu brut qui sera ajouté au fichier de configuration.
bf5c74e7
JL
17013@end deftypevr
17014
adfb167f
JL
17015Il se peut que vous ayez juste envie de lancer un fichier
17016@code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
17017enregistrement @code{opaque-prosody-configuration} comme valeur à
17018@code{prosody-service-type}. Comme son nom l'indique, une configuration
17019opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
17020@code{opaque-prosody-configuration} sont :
bf5c74e7 17021
1d8d69c8 17022@deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
adfb167f 17023Le paquet prosody.
bf5c74e7
JL
17024@end deftypevr
17025
1d8d69c8 17026@deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
adfb167f 17027Le contenu de @code{prosody.cfg.lua} à utiliser.
bf5c74e7
JL
17028@end deftypevr
17029
adfb167f
JL
17030Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
17031pouvez instancier un service prosody comme ceci :
bf5c74e7
JL
17032
17033@example
17034(service prosody-service-type
17035 (opaque-prosody-configuration
17036 (prosody.cfg.lua "")))
17037@end example
17038
17039@c end of Prosody auto-generated documentation
17040
adfb167f 17041@subsubheading Service BitlBee
bf5c74e7
JL
17042
17043@cindex IRC (Internet Relay Chat)
adfb167f
JL
17044@cindex passerelle IRC
17045@url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
17046interface IRC vers une variété de protocoles de messagerie instantanée comme
17047XMPP.
bf5c74e7 17048
1d8d69c8 17049@defvr {Variable Scheme} bitlbee-service-type
adfb167f
JL
17050C'est le type de service pour le démon de passerelle IRC
17051@url{http://bitlbee.org,BitlBee}. Sa valeur est un
17052@code{bitlbee-configuration} (voir plus bas).
bf5c74e7 17053
15f1bff4 17054Pour que BitlBee écoute sur le port 6667 sur localhost, ajoutez cette ligne
adfb167f 17055à vos services :
bf5c74e7
JL
17056
17057@example
17058(service bitlbee-service-type)
17059@end example
17060@end defvr
17061
1d8d69c8 17062@deftp {Type de données} bitlbee-configuration
adfb167f 17063C'est la configuration de BitlBee, avec les champs suivants :
bf5c74e7
JL
17064
17065@table @asis
1d8d69c8
JL
17066@item @code{interface} (par défaut : @code{"127.0.0.1"})
17067@itemx @code{port} (par défaut : @code{6667})
adfb167f
JL
17068Écoute sur l'interface réseau correspondant à l'adresse IP dans
17069@var{interface}, sur @var{port}.
bf5c74e7 17070
adfb167f
JL
17071Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
17072peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
17073peuvent venir de n'importe quelle interface réseau.
bf5c74e7 17074
1d8d69c8
JL
17075@item @code{package} (par défaut : @code{bitlbee})
17076Le paquet BitlBee à utiliser.
bf5c74e7 17077
2cf2c778 17078@item @code{plugins} (par défaut : @code{'()})
adfb167f
JL
17079Liste des paquets de greffons à utiliser — p.@: ex.@:
17080@code{bitlbee-discord}.
3cacfa9e 17081
1d8d69c8 17082@item @code{extra-settings} (par défaut : @code{""})
adfb167f
JL
17083Partie de configuration ajoutée telle-quelle au fichier de configuration de
17084BitlBee.
bf5c74e7
JL
17085@end table
17086@end deftp
17087
15f1bff4
JL
17088@subsubheading Quassel Service
17089
17090@cindex IRC (Internet Relay Chat)
17091@url{https://quassel-irc.org/,Quassel} is a distributed IRC client, meaning
17092that one or more clients can attach to and detach from the central core.
17093
17094@defvr {Scheme Variable} quassel-service-type
17095This is the service type for the @url{https://quassel-irc.org/,Quassel} IRC
17096backend daemon. Its value is a @code{quassel-configuration} (see below).
17097@end defvr
17098
17099@deftp {Data Type} quassel-configuration
17100This is the configuration for Quassel, with the following fields:
17101
17102@table @asis
17103@item @code{quassel} (default: @code{quassel})
17104The Quassel package to use.
17105
17106@item @code{interface} (default: @code{"::,0.0.0.0"})
17107@item @code{port} (default: @code{4242})
17108Listen on the network interface(s) corresponding to the IPv4 or IPv6
17109interfaces specified in the comma delimited @var{interface}, on @var{port}.
17110
17111@item @code{loglevel} (default: @code{"Info"})
17112The level of logging desired. Accepted values are Debug, Info, Warning and
17113Error.
17114@end table
17115@end deftp
17116
3cacfa9e 17117@node Services de téléphonie
15f1bff4 17118@subsection Services de téléphonie
bf5c74e7 17119
adfb167f
JL
17120@cindex Murmur (serveur VoIP)
17121@cindex serveur VoIP
17122Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
17123est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
17124Mumble}.
bf5c74e7 17125
1d8d69c8 17126@deftp {Type de données} murmur-configuration
adfb167f
JL
17127Le type de service pour le serveur Murmur. Voici un exemple de
17128configuration :
bf5c74e7
JL
17129
17130@example
17131(service murmur-service-type
17132 (murmur-configuration
17133 (welcome-text
15f1bff4 17134 "Welcome to this Mumble server running on Guix!")
bf5c74e7
JL
17135 (cert-required? #t) ;disallow text password logins
17136 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
17137 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
17138@end example
17139
adfb167f 17140Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
15f1bff4 17141mot de passe @code{SuperUser} de murmur avec la commande qui s'affiche
adfb167f 17142pendant la phase d'activation.
bf5c74e7 17143
adfb167f
JL
17144Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
17145lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
17146@code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
17147vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
17148avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
17149que vous avez indiqué précédemment et accordez les droits administrateur ou
17150modérateur à vous utilisateur mumble nouvellement enregistré et créez
17151quelques salons.
bf5c74e7 17152
1d8d69c8 17153Les champs de @code{murmur-configuration} disponibles sont :
bf5c74e7
JL
17154
17155@table @asis
1d8d69c8 17156@item @code{package} (par défaut : @code{mumble})
adfb167f 17157Paquet qui contient @code{bin/murmurd}.
bf5c74e7 17158
1d8d69c8 17159@item @code{user} (par défaut : @code{"murmur"})
adfb167f 17160Utilisateur qui lancera le serveur Murmur.
bf5c74e7 17161
1d8d69c8 17162@item @code{group} (par défaut : @code{"murmur"})
adfb167f 17163Groupe de l'utilisateur qui lancera le serveur Murmur.
bf5c74e7 17164
1d8d69c8 17165@item @code{port} (par défaut : @code{64738})
adfb167f 17166Port sur lequel le serveur écoutera.
bf5c74e7 17167
1d8d69c8 17168@item @code{welcome-text} (par défaut : @code{""})
adfb167f 17169Texte de bienvenue envoyé aux clients lors de leur connexion.
bf5c74e7 17170
1d8d69c8 17171@item @code{server-password} (par défaut : @code{""})
adfb167f 17172Mot de passe que les clients devront entrer pour se connecter.
bf5c74e7 17173
1d8d69c8 17174@item @code{max-users} (par défaut : @code{100})
adfb167f
JL
17175Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
17176temps.
bf5c74e7 17177
1d8d69c8 17178@item @code{max-user-bandwidth} (par défaut : @code{#f})
adfb167f 17179Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
bf5c74e7 17180
1d8d69c8 17181@item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
adfb167f
JL
17182Nom de fichier de la base de données sqlite. L'utilisateur du service
17183deviendra propriétaire du répertoire.
bf5c74e7 17184
1d8d69c8 17185@item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
adfb167f
JL
17186Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
17187du répertoire.
bf5c74e7 17188
1d8d69c8 17189@item @code{autoban-attempts} (par défaut : @code{10})
adfb167f
JL
17190Nombre maximum de connexions qu'un utilisateur peut faire pendant
17191@code{autoban-timeframe} sans être banni automatiquement pour
17192@code{autoban-time}.
bf5c74e7 17193
1d8d69c8 17194@item @code{autoban-timeframe} (par défaut : @code{120})
adfb167f 17195Durée du temps pendant lequel le nombre de connexions est compté.
bf5c74e7 17196
1d8d69c8 17197@item @code{autoban-time} (par défaut : @code{300})
adfb167f 17198Durée du bannissement automatique en secondes.
bf5c74e7 17199
1d8d69c8 17200@item @code{opus-threshold} (par défaut : @code{100})
adfb167f
JL
17201Pourcentage des clients qui doivent supporter opus avant de passer sur le
17202codec audio opus.
bf5c74e7 17203
1d8d69c8 17204@item @code{channel-nesting-limit} (par défaut : @code{10})
adfb167f 17205Profondeur maximum des canaux.
bf5c74e7 17206
1d8d69c8 17207@item @code{channelname-regex} (par défaut : @code{#f})
adfb167f
JL
17208Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
17209doivent respecter.
bf5c74e7 17210
1d8d69c8 17211@item @code{username-regex} (par défaut : @code{#f})
adfb167f
JL
17212Une chaîne de la forme d'une expression régulière Qt que les noms
17213d'utilisateurs doivent respecter.
bf5c74e7 17214
1d8d69c8 17215@item @code{text-message-length} (par défaut : @code{5000})
adfb167f
JL
17216Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
17217textuel.
bf5c74e7 17218
1d8d69c8 17219@item @code{image-message-length} (par défaut : @code{(* 128 1024)})
adfb167f 17220Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
bf5c74e7 17221
1d8d69c8 17222@item @code{cert-required?} (par défaut : @code{#f})
adfb167f
JL
17223Si la valeur est @code{#t} les clients utilisant une authentification par
17224mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
17225compléter l'assistant de configuration des certificats pour rejoindre le
17226serveur.
bf5c74e7 17227
adfb167f
JL
17228@item @code{remember-channel?} (paramètre de : @code{#f})
17229Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
17230les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
17231se reconnectent.
bf5c74e7 17232
1d8d69c8 17233@item @code{allow-html?} (par défaut : @code{#f})
adfb167f
JL
17234Indique si le html est autorisé dans les messages textuels, les commentaires
17235utilisateurs et les descriptions des canaux.
bf5c74e7 17236
1d8d69c8 17237@item @code{allow-ping?} (par défaut : @code{#f})
adfb167f
JL
17238Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
17239maximum et la bande passante maximale du serveur par client aux utilisateurs
17240non connectés. Dans le client Mumble, cette information est affichée dans
17241la boîte de dialogue de connexion.
bf5c74e7 17242
adfb167f 17243Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
bf5c74e7 17244
1d8d69c8 17245@item @code{bonjour?} (par défaut : @code{#f})
adfb167f
JL
17246Indique si le serveur se présente sur le réseau local à travers le protocole
17247bonjour.
bf5c74e7 17248
1d8d69c8 17249@item @code{send-version?} (par défaut : @code{#f})
adfb167f
JL
17250Indique si la version du serveur murmur doit être exposée dans les requêtes
17251ping.
bf5c74e7 17252
1d8d69c8 17253@item @code{log-days} (par défaut : @code{31})
adfb167f
JL
17254Murmur stocke aussi les journaux en base de données, qui sont accessible via
17255RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
17256les garder pour toujours ou à -1 pour désactiver la journalisation dans la
17257base de données.
bf5c74e7 17258
1d8d69c8 17259@item @code{obfuscate-ips?} (par défaut : @code{#t})
adfb167f
JL
17260Indique si les IP enregistrées doivent être cachées pour protéger la vie
17261privée des utilisateurs.
bf5c74e7 17262
1d8d69c8 17263@item @code{ssl-cert} (par défaut : @code{#f})
adfb167f 17264Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
bf5c74e7
JL
17265
17266@example
17267(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
17268@end example
1d8d69c8 17269@item @code{ssl-key} (par défaut : @code{#f})
adfb167f 17270Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
bf5c74e7
JL
17271@example
17272(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
17273@end example
17274
1d8d69c8 17275@item @code{ssl-dh-params} (par défaut : @code{#f})
adfb167f
JL
17276Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
17277pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
17278@code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
17279@code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
17280inclus de la RFC 7919.
bf5c74e7 17281
1d8d69c8 17282@item @code{ssl-ciphers} (par défaut : @code{#f})
adfb167f
JL
17283L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
17284disponibles pour SSL/TLS.
bf5c74e7 17285
adfb167f
JL
17286Cette option est spécifiée en utilisant
17287l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
17288OpenSSL cipher list notation}
bf5c74e7 17289
adfb167f
JL
17290Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
17291« openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
17292des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
17293nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
17294que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
bf5c74e7 17295
adfb167f
JL
17296Remarque : modifier cette option peut impacter la rétrocompatibilité de
17297votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
17298connectent.
bf5c74e7 17299
1d8d69c8 17300@item @code{public-registration} (par défaut : @code{#f})
adfb167f
JL
17301Doit être un enregistrement
17302@code{<murmur-public-registration-configuration>} ou @code{#f}.
bf5c74e7 17303
adfb167f
JL
17304Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
17305publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
17306pas enregistrer votre serveur si vous avez un @code{server-password} ou
17307@code{allow-ping} à @code{#f}.
bf5c74e7 17308
adfb167f 17309Cela peut prendre quelques heures avant d'arriver sur la liste publique.
bf5c74e7 17310
1d8d69c8 17311@item @code{file} (par défaut : @code{#f})
adfb167f
JL
17312Version alternative de cette configuration : si vous indiquez quelque chose,
17313le reste est ignoré.
bf5c74e7
JL
17314@end table
17315@end deftp
17316
1d8d69c8 17317@deftp {Type de données} murmur-public-registration-configuration
adfb167f 17318Configuration pour l'enregistrement public du service murmur.
bf5c74e7
JL
17319
17320@table @asis
17321@item @code{name}
adfb167f
JL
17322C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
17323d'hôte.
bf5c74e7
JL
17324
17325@item @code{password}
adfb167f
JL
17326Un mot de passe pour identifier votre enregistrement. Les mises à jours
17327suivantes devront utiliser le même mot de passe. Ne le perdez pas.
bf5c74e7
JL
17328
17329@item @code{url}
adfb167f
JL
17330Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
17331web.
bf5c74e7 17332
1d8d69c8 17333@item @code{hostname} (par défaut : @code{#f})
adfb167f
JL
17334Par défaut votre serveur sera listé par son adresse IP. Si cette option est
17335indiquée votre serveur sera listé par son nom d'hôte.
bf5c74e7
JL
17336@end table
17337@end deftp
17338
17339
17340
3cacfa9e 17341@node Services de surveillance
15f1bff4 17342@subsection Services de surveillance
bf5c74e7 17343
adfb167f 17344@subsubheading Service Tailon
bf5c74e7 17345
adfb167f
JL
17346@uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
17347visualiser et chercher des fichiers de journaux.
bf5c74e7 17348
adfb167f
JL
17349L'exemple suivant configurera le service avec les valeurs par défaut. Par
17350défaut, on peut accéder à Tailon sur le pour 8080
17351(@code{http://localhost:8080}).
bf5c74e7
JL
17352
17353@example
17354(service tailon-service-type)
17355@end example
17356
adfb167f
JL
17357L'exemple suivant personnalise un peu plus la configuration de Tailon, en
17358ajoutant @command{sed} à la liste des commandes autorisées.
bf5c74e7
JL
17359
17360@example
17361(service tailon-service-type
17362 (tailon-configuration
17363 (config-file
17364 (tailon-configuration-file
17365 (allowed-commands '("tail" "grep" "awk" "sed"))))))
17366@end example
17367
17368
1d8d69c8 17369@deftp {Type de données} tailon-configuration
adfb167f
JL
17370Type de données représentant la configuration de Tailon. Ce type a les
17371paramètres suivants :
bf5c74e7
JL
17372
17373@table @asis
1d8d69c8 17374@item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
adfb167f
JL
17375Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
17376un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
bf5c74e7
JL
17377(@pxref{G-Expressions}).
17378
adfb167f
JL
17379Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
17380fonction @code{local-file} :
bf5c74e7
JL
17381
17382@example
17383(service tailon-service-type
17384 (tailon-configuration
17385 (config-file (local-file "./my-tailon.conf"))))
17386@end example
17387
1d8d69c8
JL
17388@item @code{package} (par défaut : @code{tailon})
17389Le paquet tailon à utiliser.
bf5c74e7
JL
17390
17391@end table
17392@end deftp
17393
1d8d69c8 17394@deftp {Type de données} tailon-configuration-file
adfb167f
JL
17395Type de données représentant les options de configuration de Tailon. Ce
17396type a les paramètres suivants :
bf5c74e7
JL
17397
17398@table @asis
1d8d69c8 17399@item @code{files} (par défaut : @code{(list "/var/log")})
adfb167f
JL
17400Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
17401fichiers simple ou des répertoires, ou une liste, où le premier élément est
17402le nom d'un sous-section et le reste des fichiers ou des répertoires de
17403cette sous-section.
bf5c74e7 17404
1d8d69c8 17405@item @code{bind} (par défaut : @code{"localhost:8080"})
adfb167f 17406Adresse et port sur lesquels Tailon écoute.
bf5c74e7 17407
1d8d69c8 17408@item @code{relative-root} (par défaut : @code{#f})
adfb167f
JL
17409Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
17410chemin.
bf5c74e7 17411
1d8d69c8 17412@item @code{allow-transfers?} (par défaut : @code{#t})
adfb167f 17413Permet de télécharger les journaux dans l'interface web.
bf5c74e7 17414
1d8d69c8 17415@item @code{follow-names?} (par défaut : @code{#t})
adfb167f 17416Permet de surveiller des fichiers qui n'existent pas encore.
bf5c74e7 17417
1d8d69c8 17418@item @code{tail-lines} (par défaut : @code{200})
adfb167f 17419Nombre de lignes à lire initialement dans chaque fichier.
bf5c74e7 17420
1d8d69c8 17421@item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
adfb167f 17422Commandes autorisées. Par défaut, @code{sed} est désactivé.
bf5c74e7 17423
1d8d69c8 17424@item @code{debug?} (par défaut : @code{#f})
adfb167f 17425Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
bf5c74e7 17426
1d8d69c8 17427@item @code{wrap-lines} (par défaut : @code{#t})
adfb167f
JL
17428État initial du retour à la ligne dans l'interface web. Configurez l'option
17429à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
17430pas retourner à la ligne au début.
bf5c74e7 17431
15f1bff4
JL
17432@item @code{http-auth} (par défaut : @code{#f})
17433Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
17434l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
17435et @code{"basic"}.
17436
17437@item @code{users} (par défaut : @code{#f})
17438Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
17439restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
17440utilisez une liste de paires, où le premier élément de la paire est le nom
17441d'utilisateur et le second élément est le mot de passe.
17442
17443@example
17444(tailon-configuration-file
17445 (http-auth "basic")
17446 (users '(("user1" . "password1")
17447 ("user2" . "password2"))))
17448@end example
17449
17450@end table
17451@end deftp
17452
17453
17454@subsubheading Service Darkstat
17455@cindex darkstat
17456Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
17457calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
17458
17459@defvar {Variable Scheme} darkstat-service-type
17460C'est le type de service pour le service
17461@uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
17462enregistrement @code{darkstat-configuration} comme dans cet exemple :
17463
17464@example
17465(service darkstat-service-type
17466 (darkstat-configuration
17467 (interface "eno1")))
17468@end example
17469@end defvar
17470
17471@deftp {Type de données} darkstat-configuration
17472Type de données représentant la configuration de @command{darkstat}.
17473
17474@table @asis
17475@item @code{package} (par défaut : @code{darkstat})
17476Le paquet darkstat à utiliser.
17477
17478@item @code{interface}
17479Capture le trafic sur l'interface réseau spécifiée.
17480
17481@item @code{port} (par défaut : @code{"667"})
17482Lie l'interface web sur le port spécifié.
17483
17484@item @code{bind-address} (par défaut : @code{"127.0.0.1"})
17485Lie l'interface web sur l'adresse spécifiée.
17486
17487@item @code{base} (par défaut : @code{"/"})
17488Spécifie le chemin de base des URL. C'est utile si on accède à
17489@command{darkstat} à travers un proxy inverse.
17490
17491@end table
17492@end deftp
17493
17494@subsubheading Service d'export de nœud de Prometheus
17495
17496@cindex prometheus-node-exporter
17497L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
17498matériel et le système d'exploitation fournies par le noyau Linux pour le
17499système de surveillance Prometheus. Ce service devrait être déployé sur
17500tous les nœuds physiques et les machines virtuelles, où vous voulez
17501surveiller ces statistiques.
17502
17503@defvar {Variable Scheme} prometheus-node-exporter-service-type
17504C'est le type de service pour le service
17505@uref{https://github.com/prometheus/node_exporter/,
17506prometheus-node-exporter}, sa valeur doit être un enregistrement
17507@code{prometheus-node-exporter-configuration} comme dans cet exemple :
17508
17509@example
17510(service prometheus-node-exporter-service-type
17511 (prometheus-node-exporter-configuration
17512 (web-listen-address ":9100")))
17513@end example
17514@end defvar
17515
17516@deftp {Type de données} prometheus-node-exporter-configuration
17517Type de données représentant la configuration de @command{node_exporter}
17518
17519@table @asis
17520@item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
17521Le paquet prometheus-node-exporter à utiliser.
17522
17523@item @code{web-listen-address} (par défaut : @code{":9100"})
17524Lie l'interface web sur l'adresse spécifiée.
17525
17526@end table
17527@end deftp
17528
17529@subsubheading Zabbix server
17530@cindex zabbix zabbix-server
17531Zabbix provides monitoring metrics, among others network utilization, CPU
17532load and disk space consumption:
17533
17534@itemize
17535@item High performance, high capacity (able to monitor hundreds of thousands of devices).
17536@item Auto-discovery of servers and network devices and interfaces.
17537@item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
17538@item Distributed monitoring with centralized web administration.
17539@item Native high performance agents.
17540@item SLA, and ITIL KPI metrics on reporting.
17541@item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
17542@item Remote command execution through Zabbix proxies.
17543@end itemize
17544
17545@c %start of fragment
17546
17547Available @code{zabbix-server-configuration} fields are:
17548
17549@deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
17550The zabbix-server package.
17551
17552@end deftypevr
17553
17554@deftypevr {@code{zabbix-server-configuration} parameter} string user
17555User who will run the Zabbix server.
17556
17557Defaults to @samp{"zabbix"}.
17558
17559@end deftypevr
17560
17561@deftypevr {@code{zabbix-server-configuration} parameter} group group
17562Group who will run the Zabbix server.
17563
17564Defaults to @samp{"zabbix"}.
17565
17566@end deftypevr
17567
17568@deftypevr {@code{zabbix-server-configuration} parameter} string db-host
17569Database host name.
17570
17571Defaults to @samp{"127.0.0.1"}.
17572
17573@end deftypevr
17574
17575@deftypevr {@code{zabbix-server-configuration} parameter} string db-name
17576Database name.
17577
17578Defaults to @samp{"zabbix"}.
17579
17580@end deftypevr
17581
17582@deftypevr {@code{zabbix-server-configuration} parameter} string db-user
17583Database user.
17584
17585Defaults to @samp{"zabbix"}.
17586
17587@end deftypevr
17588
17589@deftypevr {@code{zabbix-server-configuration} parameter} string db-password
17590Database password. Please, use @code{include-files} with
17591@code{DBPassword=SECRET} inside a specified file instead.
17592
17593La valeur par défaut est @samp{""}.
17594
17595@end deftypevr
17596
17597@deftypevr {@code{zabbix-server-configuration} parameter} number db-port
17598Database port.
17599
17600Defaults to @samp{5432}.
17601
17602@end deftypevr
17603
17604@deftypevr {@code{zabbix-server-configuration} parameter} string log-type
17605Specifies where log messages are written to:
17606
17607@itemize @bullet
17608@item
17609@code{system} - syslog.
17610
17611@item
17612@code{file} - file specified with @code{log-file} parameter.
17613
17614@item
17615@code{console} - standard output.
17616
17617@end itemize
17618
17619La valeur par défaut est @samp{""}.
17620
17621@end deftypevr
17622
17623@deftypevr {@code{zabbix-server-configuration} parameter} string log-file
17624Log file name for @code{log-type} @code{file} parameter.
17625
17626Defaults to @samp{"/var/log/zabbix/server.log"}.
17627
17628@end deftypevr
17629
17630@deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
17631Name of PID file.
17632
17633Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
17634
17635@end deftypevr
17636
17637@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
17638The location of certificate authority (CA) files for SSL server certificate
17639verification.
17640
17641Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
17642
17643@end deftypevr
17644
17645@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
17646Location of SSL client certificates.
17647
17648Defaults to @samp{"/etc/ssl/certs"}.
17649
17650@end deftypevr
17651
17652@deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
17653Extra options will be appended to Zabbix server configuration file.
17654
17655La valeur par défaut est @samp{""}.
17656
17657@end deftypevr
17658
17659@deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
17660You may include individual files or all files in a directory in the
17661configuration file.
17662
17663La valeur par défaut est @samp{()}.
17664
17665@end deftypevr
17666
17667@c %end of fragment
17668
17669@subsubheading Zabbix agent
17670@cindex zabbix zabbix-agent
17671
17672Zabbix agent gathers information for Zabbix server.
17673
17674@c %start of fragment
17675
17676Available @code{zabbix-agent-configuration} fields are:
17677
17678@deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
17679The zabbix-agent package.
17680
17681@end deftypevr
17682
17683@deftypevr {@code{zabbix-agent-configuration} parameter} string user
17684User who will run the Zabbix agent.
17685
17686Defaults to @samp{"zabbix"}.
17687
17688@end deftypevr
17689
17690@deftypevr {@code{zabbix-agent-configuration} parameter} group group
17691Group who will run the Zabbix agent.
17692
17693Defaults to @samp{"zabbix"}.
17694
17695@end deftypevr
17696
17697@deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
17698Unique, case sensitive hostname which is required for active checks and must
17699match hostname as configured on the server.
17700
17701Defaults to @samp{"Zabbix server"}.
17702
17703@end deftypevr
17704
17705@deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
17706Specifies where log messages are written to:
17707
17708@itemize @bullet
17709@item
17710@code{system} - syslog.
17711
17712@item
17713@code{file} - file specified with @code{log-file} parameter.
17714
17715@item
17716@code{console} - standard output.
17717
17718@end itemize
17719
17720La valeur par défaut est @samp{""}.
17721
17722@end deftypevr
17723
17724@deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
17725Log file name for @code{log-type} @code{file} parameter.
17726
17727Defaults to @samp{"/var/log/zabbix/agent.log"}.
17728
17729@end deftypevr
17730
17731@deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
17732Name of PID file.
17733
17734Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
17735
17736@end deftypevr
17737
17738@deftypevr {@code{zabbix-agent-configuration} parameter} list server
17739List of IP addresses, optionally in CIDR notation, or hostnames of Zabbix
17740servers and Zabbix proxies. Incoming connections will be accepted only from
17741the hosts listed here.
17742
17743Defaults to @samp{("127.0.0.1")}.
17744
17745@end deftypevr
17746
17747@deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
17748List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
17749proxies for active checks. If port is not specified, default port is used.
17750If this parameter is not specified, active checks are disabled.
17751
17752Defaults to @samp{("127.0.0.1")}.
17753
17754@end deftypevr
17755
17756@deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
17757Extra options will be appended to Zabbix server configuration file.
17758
17759La valeur par défaut est @samp{""}.
17760
17761@end deftypevr
17762
17763@deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
17764You may include individual files or all files in a directory in the
17765configuration file.
17766
17767La valeur par défaut est @samp{()}.
17768
17769@end deftypevr
17770
17771@c %end of fragment
17772
17773@subsubheading Zabbix front-end
17774@cindex zabbix zabbix-front-end
17775
17776This service provides a WEB interface to Zabbix server.
17777
17778@c %start of fragment
17779
17780Available @code{zabbix-front-end-configuration} fields are:
17781
17782@deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
17783Configuration Nginx.
17784
17785@end deftypevr
17786
17787@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
17788Database host name.
17789
17790La valeur par défaut est @samp{"localhost"}.
17791
17792@end deftypevr
17793
17794@deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
17795Database port.
bf5c74e7 17796
15f1bff4 17797Defaults to @samp{5432}.
bf5c74e7 17798
15f1bff4 17799@end deftypevr
bf5c74e7 17800
15f1bff4
JL
17801@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
17802Database name.
bf5c74e7 17803
15f1bff4 17804Defaults to @samp{"zabbix"}.
bf5c74e7 17805
15f1bff4 17806@end deftypevr
bf5c74e7 17807
15f1bff4
JL
17808@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
17809Database user.
bf5c74e7 17810
15f1bff4 17811Defaults to @samp{"zabbix"}.
bf5c74e7 17812
15f1bff4 17813@end deftypevr
bf5c74e7 17814
15f1bff4
JL
17815@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
17816Database password. Please, use @code{db-secret-file} instead.
bf5c74e7 17817
15f1bff4 17818La valeur par défaut est @samp{""}.
bf5c74e7 17819
15f1bff4 17820@end deftypevr
bf5c74e7 17821
15f1bff4
JL
17822@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
17823Secret file which will be appended to @file{zabbix.conf.php} file. This
17824file contains credentials for use by Zabbix front-end. You are expected to
17825create it manually.
bf5c74e7 17826
15f1bff4 17827La valeur par défaut est @samp{""}.
bf5c74e7 17828
15f1bff4 17829@end deftypevr
bf5c74e7 17830
15f1bff4
JL
17831@deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
17832Zabbix server hostname.
524756d1 17833
15f1bff4 17834La valeur par défaut est @samp{"localhost"}.
524756d1 17835
15f1bff4 17836@end deftypevr
524756d1 17837
15f1bff4
JL
17838@deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
17839Zabbix server port.
524756d1 17840
15f1bff4 17841Defaults to @samp{10051}.
524756d1 17842
15f1bff4 17843@end deftypevr
524756d1 17844
524756d1 17845
15f1bff4 17846@c %end of fragment
bf5c74e7 17847
3cacfa9e 17848@node Services Kerberos
15f1bff4 17849@subsection Services Kerberos
bf5c74e7
JL
17850@cindex Kerberos
17851
adfb167f
JL
17852Le module @code{(gnu services kerberos)} fournit des services liés au
17853protocole d'authentification @dfn{Kerberos}.
bf5c74e7 17854
adfb167f 17855@subsubheading Service Krb5
bf5c74e7 17856
adfb167f
JL
17857Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
17858trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
17859génère un tel fichier à partir d'une définition fournie par la déclaration
17860de système d'exploitation. Il ne démarre aucun démon.
bf5c74e7 17861
adfb167f
JL
17862Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
17863explicitement. Ce service est connu pour fonctionner avec la bibliothèque
17864cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
17865testées.
bf5c74e7 17866
1d8d69c8 17867@defvr {Variable Scheme} krb5-service-type
adfb167f 17868Un type de service pour les clients Kerberos 5.
bf5c74e7
JL
17869@end defvr
17870
17871@noindent
adfb167f 17872Voici un exemple d'utilisation :
bf5c74e7
JL
17873@lisp
17874(service krb5-service-type
17875 (krb5-configuration
17876 (default-realm "EXAMPLE.COM")
17877 (allow-weak-crypto? #t)
17878 (realms (list
17879 (krb5-realm
17880 (name "EXAMPLE.COM")
17881 (admin-server "groucho.example.com")
17882 (kdc "karl.example.com"))
17883 (krb5-realm
17884 (name "ARGRX.EDU")
17885 (admin-server "kerb-admin.argrx.edu")
17886 (kdc "keys.argrx.edu"))))))
17887@end lisp
17888
17889@noindent
adfb167f 17890Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
bf5c74e7 17891@itemize
adfb167f
JL
17892@item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
17893aillant des serveurs d'administration et des centres de distribution de
17894clefs distincts ;
17895@item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
17896explicitement par les clients ;
17897@item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
bf5c74e7
JL
17898@end itemize
17899
adfb167f
JL
17900Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
17901champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
17902et plus de détails sur chacun d'entre eux, voir la documentation de MIT
17903@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
bf5c74e7
JL
17904
17905
1d8d69c8 17906@deftp {Type de données} krb5-realm
adfb167f 17907@cindex domaine, kerberos
bf5c74e7
JL
17908@table @asis
17909@item @code{name}
adfb167f
JL
17910Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
17911courante est d'utiliser le nom pleinement qualifié de votre organisation,
17912converti en majuscule.
bf5c74e7
JL
17913
17914@item @code{admin-server}
adfb167f
JL
17915Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
17916tourne.
bf5c74e7
JL
17917
17918@item @code{kdc}
adfb167f
JL
17919Ce champ est une chaîne identifiant le centre de distribution de clefs pour
17920ce domaine.
bf5c74e7
JL
17921@end table
17922@end deftp
17923
1d8d69c8 17924@deftp {Type de données} krb5-configuration
bf5c74e7
JL
17925
17926@table @asis
1d8d69c8 17927@item @code{allow-weak-crypto?} (par défaut : @code{#f})
adfb167f
JL
17928Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
17929de chiffrement faibles seront acceptés.
bf5c74e7 17930
1d8d69c8 17931@item @code{default-realm} (par défaut : @code{#f})
adfb167f
JL
17932Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
17933pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
17934ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
17935pour chaque principal Kerberos à l'invocation des programmes comme
17936@command{kinit}.
bf5c74e7
JL
17937
17938@item @code{realms}
adfb167f
JL
17939Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
17940clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
17941@code{name} qui correspond au champ @code{default-realm}.
bf5c74e7
JL
17942@end table
17943@end deftp
17944
17945
adfb167f 17946@subsubheading Service PAM krb5
bf5c74e7
JL
17947@cindex pam-krb5
17948
adfb167f
JL
17949Le service @code{pam-krb5} permet la connexion et la gestion des mots de
17950passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
17951applications qui utilisent PAM puissent authentifier automatiquement les
17952utilisateurs avec Kerberos.
bf5c74e7 17953
1d8d69c8 17954@defvr {Variable Scheme} pam-krb5-service-type
adfb167f 17955Un type de service pour le module PAM Kerberos 5.
bf5c74e7
JL
17956@end defvr
17957
1d8d69c8 17958@deftp {Type de données} pam-krb5-configuration
adfb167f
JL
17959Type de données représentant la configuration du module PAM Kerberos 5. Ce
17960type a les paramètres suivants :
bf5c74e7 17961@table @asis
1d8d69c8
JL
17962@item @code{pam-krb5} (par défaut : @code{pam-krb5})
17963Le paquet pam-krb5 à utiliser.
bf5c74e7 17964
1d8d69c8 17965@item @code{minimum-uid} (par défaut : @code{1000})
adfb167f
JL
17966Le plus petite ID utilisateur pour lequel les authentifications Kerberos
17967devraient être tentées. Les comptes locaux avec une valeur plus petite
17968échoueront silencieusement leur authentification Kerberos.
bf5c74e7
JL
17969@end table
17970@end deftp
17971
17972
3cacfa9e 17973@node Services web
15f1bff4 17974@subsection Services web
bf5c74e7
JL
17975
17976@cindex web
17977@cindex www
17978@cindex HTTP
adfb167f
JL
17979Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
17980serveur web nginx et aussi un démon fastcgi.
bf5c74e7 17981
adfb167f 17982@subsubheading Serveur Apache HTTP
bf5c74e7 17983
1d8d69c8 17984@deffn {Variable Scheme} httpd-service-type
adfb167f
JL
17985Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
17986(@dfn{httpd}). La valeur de ce type de service est un enregistrement
17987@code{httpd-configuration}.
bf5c74e7 17988
adfb167f 17989Un exemple de configuration simple est donné ci-dessous.
bf5c74e7
JL
17990
17991@example
17992(service httpd-service-type
17993 (httpd-configuration
17994 (config
17995 (httpd-config-file
17996 (server-name "www.example.com")
17997 (document-root "/srv/http/www.example.com")))))
17998@end example
17999
adfb167f
JL
18000D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
18001ajouté à la configuration.
bf5c74e7
JL
18002
18003@example
18004(simple-service 'my-extra-server httpd-service-type
18005 (list
18006 (httpd-virtualhost
18007 "*:80"
18008 (list (string-append
18009 "ServerName "www.example.com
18010 DocumentRoot \"/srv/http/www.example.com\"")))))
18011@end example
18012@end deffn
18013
adfb167f
JL
18014Les détails des types d'enregistrement @code{httpd-configuration},
18015@code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
18016sont donnés plus bas.
bf5c74e7 18017
1d8d69c8 18018@deffn {Type de données} httpd-configuration
adfb167f 18019Ce type de données représente la configuration du service httpd.
bf5c74e7
JL
18020
18021@table @asis
1d8d69c8
JL
18022@item @code{package} (par défaut : @code{httpd})
18023Le paquet httpd à utiliser.
bf5c74e7 18024
1d8d69c8 18025@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
adfb167f 18026Le fichier de pid utilisé par le service shepherd.
bf5c74e7 18027
1d8d69c8 18028@item @code{config} (par défaut : @code{(httpd-config-file)})
adfb167f
JL
18029Le fichier de configuration à utiliser avec le service httpd. La valeur par
18030défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
18031être un G-expression qui génère un fichier, par exemple un
18032@code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
18033avec une chaîne de caractères.
bf5c74e7
JL
18034
18035@end table
18036@end deffn
18037
1d8d69c8 18038@deffn {Type de données} httpd-module
adfb167f 18039Ce type de données représente un module pour le service httpd.
bf5c74e7
JL
18040
18041@table @asis
18042@item @code{name}
adfb167f 18043Le nom du module.
bf5c74e7
JL
18044
18045@item @code{file}
adfb167f
JL
18046Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
18047l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
18048le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
bf5c74e7
JL
18049
18050@end table
18051@end deffn
18052
adfb167f
JL
18053@defvr {Variable Scheme} %default-httpd-modules
18054Une liste par défaut des objets @code{httpd-module}.
18055@end defvr
18056
1d8d69c8 18057@deffn {Type de données} httpd-config-file
adfb167f
JL
18058Ce type de données représente un fichier de configuration pour le service
18059httpd.
bf5c74e7
JL
18060
18061@table @asis
1d8d69c8 18062@item @code{modules} (par défaut : @code{%default-httpd-modules})
adfb167f
JL
18063Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
18064ou chargés par des configuration supplémentaires.
18065
18066Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
18067utiliser le module @code{mod_proxy_fcgi} d'Apache avec
18068@code{php-fpm-service-type} :
18069
18070@example
18071(service httpd-service-type
18072 (httpd-configuration
18073 (config
18074 (httpd-config-file
18075 (modules (cons*
18076 (httpd-module
18077 (name "proxy_module")
18078 (file "modules/mod_proxy.so"))
18079 (httpd-module
18080 (name "proxy_fcgi_module")
18081 (file "modules/mod_proxy_fcgi.so"))
18082 %default-httpd-modules))
18083 (extra-config (list "\
18084<FilesMatch \\.php$>
18085 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
18086</FilesMatch>"))))))
18087(service php-fpm-service-type
18088 (php-fpm-configuration
18089 (socket "/var/run/php-fpm.sock")
18090 (socket-group "httpd")))
18091@end example
bf5c74e7 18092
1d8d69c8 18093@item @code{server-root} (par défaut : @code{httpd})
adfb167f
JL
18094Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
18095httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
18096relativement à la racine du serveur.
bf5c74e7 18097
1d8d69c8 18098@item @code{server-name} (par défaut : @code{#f})
adfb167f
JL
18099Le @code{ServerName} dans le fichier de configuration, utilisé pour
18100spécifier le schéma de requête, le nom d'hôte et le port que le serveur
18101utilise pour s'identifier.
bf5c74e7 18102
adfb167f
JL
18103Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
18104spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
18105ne pas spécifier de @code{ServerName}.
bf5c74e7 18106
1d8d69c8 18107@item @code{document-root} (par défaut : @code{"/srv/http"})
adfb167f 18108Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
bf5c74e7 18109
1d8d69c8 18110@item @code{listen} (par défaut : @code{'("80")})
adfb167f
JL
18111La liste des valeurs pour les directives @code{Listen} dans le fichier de
18112configuration. La valeur devrait être une liste de chaînes, où chacune
18113spécifie le port sur lequel écouter et éventuellement une adresse IP et un
18114protocole à utiliser.
bf5c74e7 18115
1d8d69c8 18116@item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
adfb167f
JL
18117Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
18118indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
18119correctement configuré.
bf5c74e7 18120
1d8d69c8 18121@item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
adfb167f 18122Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
bf5c74e7 18123
1d8d69c8 18124@item @code{user} (par défaut : @code{"httpd"})
adfb167f 18125Le @code{User} en tant que lequel le serveur répondra aux requêtes.
bf5c74e7 18126
1d8d69c8 18127@item @code{group} (par défaut : @code{"httpd"})
adfb167f 18128Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
bf5c74e7 18129
1d8d69c8 18130@item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
adfb167f
JL
18131Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
18132du fichier de configuration.
bf5c74e7 18133
adfb167f
JL
18134N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
18135cette liste.
bf5c74e7
JL
18136
18137@end table
18138@end deffn
18139
1d8d69c8 18140@deffn {Type de données} httpd-virtualhost
adfb167f
JL
18141Ce type de données représente la configuration d'un hôte virtuel pour le
18142service httpd.
bf5c74e7 18143
adfb167f 18144Ils devraient être ajoutés à extra-config dans httpd-service.
bf5c74e7
JL
18145
18146@example
18147(simple-service 'my-extra-server httpd-service-type
18148 (list
18149 (httpd-virtualhost
18150 "*:80"
18151 (list (string-append
18152 "ServerName "www.example.com
18153 DocumentRoot \"/srv/http/www.example.com\"")))))
18154@end example
18155
18156@table @asis
18157@item @code{addresses-and-ports}
adfb167f 18158L'adresse et le port pour la directive @code{VirtualHost}.
bf5c74e7
JL
18159
18160@item @code{contents}
adfb167f
JL
18161Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
18162de chaîne et de G-expressions.
bf5c74e7
JL
18163
18164@end table
18165@end deffn
18166
18167@subsubheading NGINX
18168
1d8d69c8 18169@deffn {Variable Scheme} nginx-service-type
adfb167f
JL
18170Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
18171valeur de ce service est un enregistrement @code{<nginx-configuration>}.
bf5c74e7 18172
adfb167f 18173Un exemple de configuration simple est donné ci-dessous.
bf5c74e7
JL
18174
18175@example
18176(service nginx-service-type
18177 (nginx-configuration
18178 (server-blocks
18179 (list (nginx-server-configuration
18180 (server-name '("www.example.com"))
18181 (root "/srv/http/www.example.com"))))))
18182@end example
18183
adfb167f
JL
18184En plus d'ajouter des blocs de serveurs dans la configuration du service
18185directement, ce service peut être étendu par d'autres services pour ajouter
18186des blocs de serveurs, comme dans cet exemple :
bf5c74e7
JL
18187
18188@example
18189(simple-service 'my-extra-server nginx-service-type
18190 (list (nginx-server-configuration
18191 (root "/srv/http/extra-website")
18192 (try-files (list "$uri" "$uri/index.html")))))
18193@end example
18194@end deffn
18195
adfb167f
JL
18196Au démarrage, @command{nginx} n'a pas encore lu son fichier de
18197configuration, donc il utilise les fichiers par défaut pour les messages
18198d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
18199seront enregistrés. Après la lecture du fichier de configuration, le
18200fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
15f1bff4 18201notre cas, les messages d'erreur au démarrage se trouvent dans
adfb167f
JL
18202@file{/var/run/nginx/logs/error.log} et après la configuration dans
18203@file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
18204avec l'option de configuration @var{log-directory}.
bf5c74e7 18205
1d8d69c8 18206@deffn {Type de données} nginx-configuration
adfb167f
JL
18207Ce type de données représente la configuration de NGinx. Certaines
18208configurations peuvent se faire ici et d'autres fournissent des types
18209d'enregistrement ou éventuellement, on peut fournir un fichier de
18210configuration.
bf5c74e7
JL
18211
18212@table @asis
1d8d69c8
JL
18213@item @code{nginx} (par défaut : @code{nginx})
18214Le paquet nginx à utiliser.
bf5c74e7 18215
1d8d69c8 18216@item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
adfb167f 18217Le répertoire dans lequel NGinx écrira ses fichiers journaux.
bf5c74e7 18218
1d8d69c8 18219@item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
adfb167f
JL
18220Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
18221fichiers temporaires.
bf5c74e7 18222
1d8d69c8 18223@item @code{server-blocks} (par défaut : @code{'()})
adfb167f
JL
18224Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
18225généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
bf5c74e7 18226
adfb167f
JL
18227L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
18228le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
bf5c74e7
JL
18229@example
18230(service nginx-service-type
18231 (nginx-configuration
18232 (server-blocks
18233 (list (nginx-server-configuration
18234 (server-name '("www.example.com"))
18235 (root "/srv/http/www.example.com"))))))
18236@end example
18237
1d8d69c8 18238@item @code{upstream-blocks} (par défaut : @code{'()})
adfb167f
JL
18239Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
18240généré, dont les éléments sont de type
18241@code{<nginx-upstream-configuration>}.
bf5c74e7 18242
adfb167f
JL
18243Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
18244utile en combinaison avec @code{locations} dans les enregistrements
18245@code{<nginx-server-configuration>}. L'exemple suivant crée une
18246configuration de serveur avec une configuration « location » qui sera
18247mandataire pour une configuration amont, qui gérera les requêtes avec deux
18248serveurs.
bf5c74e7
JL
18249
18250@example
18251(service
18252 nginx-service-type
18253 (nginx-configuration
18254 (server-blocks
18255 (list (nginx-server-configuration
18256 (server-name '("www.example.com"))
18257 (root "/srv/http/www.example.com")
18258 (locations
18259 (list
18260 (nginx-location-configuration
18261 (uri "/path1")
18262 (body '("proxy_pass http://server-proxy;"))))))))
18263 (upstream-blocks
18264 (list (nginx-upstream-configuration
18265 (name "server-proxy")
18266 (servers (list "server1.example.com"
18267 "server2.example.com")))))))
18268@end example
18269
1d8d69c8 18270@item @code{file} (par défaut : @code{#f})
adfb167f
JL
18271Si un fichier de configuration @var{file} est fourni, il sera utilisé au
18272lieu de générer un fichier de configuration à partir des
18273@code{log-directory}, @code{run-directory}, @code{server-blocks} et
18274@code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
18275devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
18276les répertoires sont créé lorsque le service est activé.
bf5c74e7 18277
adfb167f
JL
18278Cela peut être utile si vous avez déjà un fichier de configuration existant
18279ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
18280parties de l'enregistrement nginx-configuration.
bf5c74e7 18281
1d8d69c8 18282@item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
adfb167f
JL
18283Taille du seau pour les tables de hashage des noms de serveurs, par dauft
18284@code{#f} pour utilise la taille des lignes de cache du processeur.
bf5c74e7 18285
1d8d69c8 18286@item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
adfb167f 18287Taille maximum des seaux pour les tables de hashage des serveurs de noms.
bf5c74e7 18288
2cf2c778 18289@item @code{extra-content} (par défaut : @code{""})
adfb167f
JL
18290Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
18291un G-expression.
2cf2c778 18292
bf5c74e7
JL
18293@end table
18294@end deffn
18295
1d8d69c8 18296@deftp {Type de données} nginx-server-configuration
adfb167f
JL
18297Type de données représentant la configuration d'un bloc serveur de nginx.
18298Ce type a les paramètres suivants :
bf5c74e7
JL
18299
18300@table @asis
1d8d69c8 18301@item @code{listen} (par défaut : @code{'("80" "443 ssl")})
adfb167f
JL
18302Chaque directive @code{listen} indique l'adresse et le port pour le
18303protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
18304acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
18305l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
18306exemple :
bf5c74e7
JL
18307
18308@example
18309'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
18310@end example
18311
1d8d69c8 18312@item @code{server-name} (par défaut : @code{(list 'default)})
adfb167f
JL
18313Une liste de noms de serveurs que ce serveur représente. @code{'default}
18314représente le serveur par défaut pour les connexions qui ne correspondent à
18315aucun autre serveur.
bf5c74e7 18316
1d8d69c8 18317@item @code{root} (par défaut : @code{"/srv/http"})
adfb167f 18318Racine du site web que sert nginx.
bf5c74e7 18319
1d8d69c8 18320@item @code{locations} (par défaut : @code{'()})
adfb167f
JL
18321Une liste d'enregistrements @dfn{nginx-location-configuration} ou
18322@dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
bf5c74e7 18323
1d8d69c8 18324@item @code{index} (par défaut : @code{(list "index.html")})
adfb167f
JL
18325Fichiers d'index à chercher lorsque les clients demandent un répertoire.
18326S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
18327répertoire.
bf5c74e7 18328
1d8d69c8 18329@item @code{try-files} (par défaut : @code{'()})
adfb167f
JL
18330Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
18331spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
18332la requête.
bf5c74e7 18333
1d8d69c8 18334@item @code{ssl-certificate} (par défaut : @code{#f})
adfb167f
JL
18335Où trouver les certificats pour les connexions sécurisées. Indiquez
18336@code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
18337utiliser HTTPS.
bf5c74e7 18338
1d8d69c8 18339@item @code{ssl-certificate-key} (par défaut : @code{#f})
adfb167f
JL
18340Où trouver la clef privée pour les connexions sécurisées. Indiquez
18341@code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
18342HTTPS.
bf5c74e7 18343
1d8d69c8 18344@item @code{server-tokens?} (par défaut : @code{#f})
adfb167f 18345Indique si le serveur devrait ajouter sa configuration dans les réponses.
bf5c74e7 18346
1d8d69c8 18347@item @code{raw-content} (par défaut : @code{'()})
adfb167f 18348Une liste de lignes brutes à ajouter dans le bloc serveur.
bf5c74e7
JL
18349
18350@end table
18351@end deftp
18352
1d8d69c8 18353@deftp {Type de données} nginx-upstream-configuration
adfb167f
JL
18354Type de données représentant la configuration d'un bloc @code{upstream}
18355nginx. Ce type a les paramètres suivants :
bf5c74e7
JL
18356
18357@table @asis
18358@item @code{name}
adfb167f 18359Nome de ces groupe de serveurs.
bf5c74e7 18360
adfb167f 18361@item @code{serveurs}
bf5c74e7 18362Specify the addresses of the servers in the group. The address can be
adfb167f
JL
18363specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
18364@samp{backend1.example.com}) or a path to a UNIX socket using the prefix
18365@samp{unix:}. For addresses using an IP address or domain name, the default
18366port is 80, and a different port can be specified explicitly.
bf5c74e7
JL
18367
18368@end table
18369@end deftp
18370
1d8d69c8 18371@deftp {Type de données} nginx-location-configuration
adfb167f
JL
18372Type de données représentant la configuration d'un bloc @code{location}
18373nginx. Ce type a les paramètres suivants :
bf5c74e7
JL
18374
18375@table @asis
18376@item @code{uri}
adfb167f 18377URI qui correspond à ce bloc.
bf5c74e7
JL
18378
18379@anchor{nginx-location-configuration body}
18380@item @code{body}
adfb167f 18381Corps du block location, spécifié comme une liste de chaînes de caractères.
15f1bff4 18382Cela peut contenir de nombreuses directives de configuration. Par exemple,
adfb167f
JL
18383pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
18384@code{nginx-upstream-configuration}, la directive suivante peut être
18385spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
bf5c74e7
JL
18386
18387@end table
18388@end deftp
18389
1d8d69c8 18390@deftp {Type de données} nginx-named-location-configuration
adfb167f
JL
18391Type de données représentant la configuration d'un bloc location nginx
18392nommé. Les blocs location nommés sont utilisé les redirections de requêtes
18393et pas pour le traitement des requêtes normales. Ce type a les paramètres
18394suivants :
bf5c74e7
JL
18395
18396@table @asis
18397@item @code{name}
adfb167f 18398Nom pour identifier ce bloc location.
bf5c74e7
JL
18399
18400@item @code{body}
adfb167f
JL
18401@xref{nginx-location-configuration body}, comme le corps d'un bloc location
18402nommé peut être utilisé de la même manière que
18403@code{nginx-location-configuration body}. Une restriction est que le corps
18404d'un bloc location nommé ne peut pas contenir de bloc location.
bf5c74e7
JL
18405
18406@end table
18407@end deftp
18408
adfb167f
JL
18409@subsubheading Cache Varnish
18410@cindex Varnish
18411Varnish est un serveur de cache rapide qui se trouve entre les applications
18412web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
18413des clients et met les URL accédées en cache pour que plusieurs requêtes à
18414la même ressource ne crée qu'une requête au moteur.
18415
18416@defvr {Variable Scheme} varnish-service-type
18417Type de service pour le démon Varnish.
18418@end defvr
18419
18420@deftp {Type de données} varnish-configuration
18421Type de données représentant la configuration du service @code{varnish}. Ce
18422type a les paramètres suivants :
18423
18424@table @asis
18425@item @code{package} (par défaut : @code{varnish})
18426Le paquet Varnish à utiliser.
18427
18428@item @code{name} (par défaut : @code{"default"})
18429Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
18430@file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
18431endroit. Si le nom commence par une barre oblique, il est interprété comme
18432un nom de répertoire absolu.
18433
18434Pass the @code{-n} argument to other Varnish programs to connect to the
18435named instance, e.g.@: @command{varnishncsa -n default}.
18436
18437@item @code{backend} (par défaut : @code{"localhost:8080"})
18438Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
18439
18440@item @code{vcl} (par défaut : #f)
18441Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
18442valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
18443la configuration par défaut. Sinon, ce doit être un objet simili-fichier
18444avec une syntaxe VCL valide.
18445
18446@c Varnish does not support HTTPS, so keep this URL to avoid confusion.
18447Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
18448avec VCL vous pouvez faire quelque chose comme cela :
18449
18450@example
18451(define %gnu-mirror
18452 (plain-file
18453 "gnu.vcl"
18454 "vcl 4.1;
18455backend gnu @{ .host = "www.gnu.org"; @}"))
18456
18457(operating-system
18458 ...
18459 (services (cons (service varnish-service-type
18460 (varnish-configuration
18461 (listen '(":80"))
18462 (vcl %gnu-mirror)))
18463 %base-services)))
18464@end example
18465
18466On peut inspecter la configuration d'une instance Varnish actuellement
18467lancée en utilisant le programme @command{varnishadm}.
18468
18469Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
18470varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
18471pour une documentation complète sur Varnish et son langage de configuration.
18472
18473@item @code{listen} (par défaut : @code{'("localhost:80")})
18474Liste des adresses sur lesquelles écoute Varnish.
18475
18476@item @code{storage} (par défaut : @code{'("malloc,128m")})
18477Liste de moteurs de stockage qui seront disponibles en VCL.
18478
18479@item @code{parameters} (par défaut : @code{'()})
18480Liste des paramètres à l'exécution de la forme @code{'(("parameter"
18481. "value"))}.
18482
18483@item @code{extra-options} (par défaut : @code{'()})
18484Arguments supplémentaires à passer au processus @command{varnishd}.
18485
18486@end table
18487@end deftp
18488
18489@subsubheading FastCGI
bf5c74e7
JL
18490@cindex fastcgi
18491@cindex fcgiwrap
adfb167f 18492FastCGI est une interface entre le frontal et le moteur d'un service web.
15f1bff4 18493C'est un dispositif quelque peu désuet ; les nouveaux services devraient
adfb167f
JL
18494généralement juste parler HTTP entre le frontal et le moteur. Cependant il
18495y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
18496Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
18497Guix.
18498
18499Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
18500nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
18501écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
18502intermédiaire qui se trouve entre le processus du moteur et le serveur web.
18503Le frontal indique quel moteur lancer, en passant cette information au
18504processus @code{fcgiwrap}.
bf5c74e7 18505
1d8d69c8 18506@defvr {Variable Scheme} fcgiwrap-service-type
adfb167f 18507Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
bf5c74e7
JL
18508@end defvr
18509
1d8d69c8 18510@deftp {Type de données} fcgiwrap-configuration
15f1bff4
JL
18511Data type representing the configuration of the @code{fcgiwrap} service.
18512This type has the following parameters:
bf5c74e7 18513@table @asis
1d8d69c8
JL
18514@item @code{package} (par défaut : @code{fcgiwrap})
18515Le paquet fcgiwrap à utiliser.
bf5c74e7 18516
1d8d69c8 18517@item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
adfb167f
JL
18518Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
18519de caractères. Les valeurs valides de @var{socket} sont
18520@code{unix:@var{/path/to/unix/socket}},
18521@code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
bf5c74e7
JL
18522@code{tcp6:[@var{ipv6_addr}]:port}.
18523
1d8d69c8
JL
18524@item @code{user} (par défaut : @code{fcgiwrap})
18525@itemx @code{group} (par défaut : @code{fcgiwrap})
adfb167f
JL
18526Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
18527sous lesquels lancer le processus @code{fcgiwrap}. Le service
18528@code{fastcgi} s'assurera que si l'utilisateur demande les noms
18529d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
18530correspondant seront présents sur le système.
18531
18532Il est possible de configurer un service web soutenu par FastCGI pour passer
18533les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
18534et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
18535l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
18536moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
18537@code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
18538sur le frontal.
bf5c74e7
JL
18539@end table
18540@end deftp
18541
18542@cindex php-fpm
adfb167f
JL
18543PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
18544alternative avec quelques fonctionnalités supplémentaires utiles pour les
18545sites de toutes tailles.
bf5c74e7 18546
adfb167f 18547Ces fonctionnalités comprennent :
bf5c74e7 18548@itemize @bullet
adfb167f
JL
18549@item La création de processus adaptative
18550@item Des statistiques de base (comme le mod_status d'Apache)
18551@item La gestion des processus avancée avec arrêt et démarrage sans heurts
18552@item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
18553et différents php.ini (à la place de safe_mode)
18554@item L'enregistrement des journaux sur stdout et stderr
18555@item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
18556@item Le support des téléversements accélérés
18557@item Le support de « showlog »
18558@item Des améliorations à FastCGI, comme fastcgi_finish_request() -
18559une fonction spéciale pour terminer la requête et nettoyer toutes les
18560données tout en continuant à faire d'autres choses qui prennent du temps
18561(conversion vidéo, gestion des stats, etc…).
bf5c74e7 18562@end itemize
adfb167f 18563...@: and much more.
bf5c74e7 18564
1d8d69c8 18565@defvr {Variable Scheme} php-fpm-service-type
adfb167f 18566Un type de service pour @code{php-fpm}.
bf5c74e7
JL
18567@end defvr
18568
1d8d69c8 18569@deftp {Type de données} php-fpm-configuration
adfb167f 18570Type de données pour la configuration du service php-fpm.
bf5c74e7 18571@table @asis
1d8d69c8
JL
18572@item @code{php} (par défaut : @code{php})
18573Le paquet php à utiliser.
18574@item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
15f1bff4 18575L'adresse sur laquelle accepter les requêtes FastCGI. Les syntaxes valides
adfb167f 18576sont :
bf5c74e7
JL
18577@table @asis
18578@item @code{"ip.add.re.ss:port"}
adfb167f 18579Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
bf5c74e7 18580@item @code{"port"}
adfb167f 18581Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
bf5c74e7 18582@item @code{"/path/to/unix/socket"}
adfb167f 18583Écoute sur un socket unix.
bf5c74e7
JL
18584@end table
18585
1d8d69c8 18586@item @code{user} (par défaut : @code{php-fpm})
adfb167f 18587Utilisateur à qui appartiendra le processus de travail de php.
1d8d69c8 18588@item @code{group} (par défaut : @code{php-fpm})
adfb167f 18589Groupe du processus de travail.
1d8d69c8 18590@item @code{socket-user} (par défaut : @code{php-fpm})
adfb167f 18591Utilisateur qui peut parler au socket php-fpm.
1d8d69c8 18592@item @code{socket-group} (par défaut : @code{php-fpm})
adfb167f 18593Groupe qui peut parler au socket php-fpm.
1d8d69c8 18594@item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
adfb167f
JL
18595Le pid de php-fpm est écrit dans ce fichier une fois que le service a
18596démarré.
1d8d69c8 18597@item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
adfb167f 18598Fichier de journal pour le processus maître de php-fpm.
1d8d69c8 18599@item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
adfb167f
JL
18600Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
18601doit s'agir soit de :
bf5c74e7 18602@table @asis
adfb167f
JL
18603@item @code{<php-fpm-dynamic-process-manager-configuration>,}
18604@item @code{<php-fpm-static-process-manager-configuration> ou}
bf5c74e7
JL
18605@item @code{<php-fpm-on-demand-process-manager-configuration>}
18606@end table
1d8d69c8 18607@item @code{display-errors} (par défaut : @code{#f})
adfb167f
JL
18608Détermine si les erreurs et les avertissements php doivent être envoyés aux
18609clients et affichés dans leur navigateur. Cela est utile pour un
18610développement php local, mais un risque pour la sécurité pour les sites
18611publics, comme les messages d'erreur peuvent révéler des mots de passes et
18612des données personnelles.
15f1bff4
JL
18613@item @code{timezone} (default @code{#f})
18614Specifies @code{php_admin_value[date.timezone]} parameter.
1d8d69c8 18615@item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
adfb167f
JL
18616Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
18617php. On peut indiquer @code{#f} pour désactiver la journalisation.
1d8d69c8 18618@item @code{file} (par défaut : @code{#f})
adfb167f
JL
18619Une version alternative de la configuration complète. Vous pouvez utiliser
18620la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
bf5c74e7
JL
18621@end table
18622@end deftp
18623
adfb167f
JL
18624@deftp {Type de données} php-fpm-dynamic-process-manager-configuration
18625Type de données pour le gestionnaire de processus @code{dynamic} de
18626php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
18627travail de secours sont gardés en fonction des limites configurées.
bf5c74e7 18628@table @asis
1d8d69c8 18629@item @code{max-children} (par défaut : @code{5})
adfb167f 18630Nombre maximum de processus de travail.
1d8d69c8 18631@item @code{start-servers} (par défaut : @code{2})
adfb167f 18632Nombre de processus de travail au démarrage.
1d8d69c8 18633@item @code{min-spare-servers} (par défaut : @code{1})
adfb167f
JL
18634Nombre de processus de travail de secours minimum qui doivent rester à
18635disposition.
1d8d69c8 18636@item @code{max-spare-servers} (par défaut : @code{3})
adfb167f
JL
18637Nombre maximum de processus de travail de secours qui peuvent rester à
18638disposition.
bf5c74e7
JL
18639@end table
18640@end deftp
18641
adfb167f
JL
18642@deftp {Type de données} php-fpm-static-process-manager-configuration
18643Type de données pour le gestionnaire de processus @code{static} de php-fpm.
18644Avec le gestionnaire de processus @code{static}, un nombre constant de
18645processus de travail est créé.
bf5c74e7 18646@table @asis
1d8d69c8 18647@item @code{max-children} (par défaut : @code{5})
adfb167f 18648Nombre maximum de processus de travail.
bf5c74e7
JL
18649@end table
18650@end deftp
18651
adfb167f
JL
18652@deftp {Type de données} php-fpm-on-demand-process-manager-configuration
18653Type de données pour le gestionnaire de processus @code{on-demand} de
18654php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
18655de travail ne sont créés que lorsque les requêtes arrivent.
bf5c74e7 18656@table @asis
1d8d69c8 18657@item @code{max-children} (par défaut : @code{5})
adfb167f 18658Nombre maximum de processus de travail.
1d8d69c8 18659@item @code{process-idle-timeout} (par défaut : @code{10})
adfb167f 18660La durée en secondes après laquelle un processus sans requête sera tué.
bf5c74e7
JL
18661@end table
18662@end deftp
18663
18664
1d8d69c8 18665@deffn {Procédure Scheme} nginx-php-fpm-location @
adfb167f
JL
18666 [#:nginx-package nginx] @
18667[socket (string-append "/var/run/php" @
18668(version-major (package-version php)) @
18669"-fpm.sock")]
18670Une fonction d'aide pour ajouter rapidement php à un
18671@code{nginx-server-configuration}.
bf5c74e7
JL
18672@end deffn
18673
adfb167f 18674Une configuration simple de services pour php ressemble à ceci :
bf5c74e7 18675@example
adfb167f 18676(services (cons* (service dhcp-client-service-type)
bf5c74e7
JL
18677 (service php-fpm-service-type)
18678 (service nginx-service-type
18679 (nginx-server-configuration
18680 (server-name '("example.com"))
18681 (root "/srv/http/")
18682 (locations
18683 (list (nginx-php-location)))
15f1bff4 18684 (listen '("80"))
bf5c74e7
JL
18685 (ssl-certificate #f)
18686 (ssl-certificate-key #f)))
18687 %base-services))
18688@end example
18689
18690@cindex cat-avatar-generator
adfb167f
JL
18691Le générateur d'avatar de chat est un simple service pour démontrer
18692l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
18693avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
18694courriel d'un utilisateur.
bf5c74e7 18695
15f1bff4 18696@deffn {Scheme Procedure} cat-avatar-generator-service @
adfb167f
JL
18697 [#:cache-dir "/var/cache/cat-avatar-generator"] @
18698[#:package cat-avatar-generator] @
18699[#:configuration (nginx-server-configuration)]
18700Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
18701Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
18702@code{package}, une version de cat-avatar-generator. Pendant l'exécution,
18703cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
18704cache.
bf5c74e7
JL
18705@end deffn
18706
adfb167f 18707Une configuration simple de cat-avatar-generator ressemble à ceci :
bf5c74e7
JL
18708@example
18709(services (cons* (cat-avatar-generator-service
18710 #:configuration
18711 (nginx-server-configuration
18712 (server-name '("example.com"))))
18713 ...
18714 %base-services))
18715@end example
18716
3cacfa9e
LC
18717@subsubheading Hpcguix-web
18718
18719@cindex hpcguix-web
adfb167f
JL
18720Le programme @uref{hpcguix-web,
18721https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
18722personnalisable pour naviguer dans les paquets Guix, initialement conçue
18723pour les utilisateurs des grappes de calcul de haute performance (HPC).
3cacfa9e 18724
2cf2c778 18725@defvr {Variable Scheme} hpcguix-web-service-type
adfb167f 18726Le type de service pour @code{hpcguix-web}.
3cacfa9e
LC
18727@end defvr
18728
1d8d69c8 18729@deftp {Type de données} hpcguix-web-configuration
adfb167f 18730Type de données pour la configuration du service hpcguix-web.
3cacfa9e
LC
18731
18732@table @asis
18733@item @code{specs}
adfb167f
JL
18734Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
18735hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
3cacfa9e
LC
18736
18737@table @asis
2cf2c778
JL
18738@item @code{title-prefix} (par défaut : @code{"hpcguix | "})
18739Le préfixe du titre des pages.
3cacfa9e 18740
2cf2c778
JL
18741@item @code{guix-command} (par défaut : @code{"guix"})
18742La commande @command{guix}
3cacfa9e 18743
2cf2c778
JL
18744@item @code{package-filter-proc} (par défaut : @code{(const #t)})
18745Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
3cacfa9e 18746
1d8d69c8 18747@item @code{package-page-extension-proc} (par défaut : @code{(const '())})
adfb167f 18748Paquet d'extensions pour @code{hpcguix-web}.
3cacfa9e 18749
2cf2c778 18750@item @code{menu} (par défaut : @code{'()})
adfb167f
JL
18751Entrée supplémentaire dans la page @code{menu}.
18752
18753@item @code{channels} (par défaut : @code{%default-channels})
18754Liste des canaux depuis lesquels la liste des paquets est construite
18755(@pxref{Canaux}).
18756
18757@item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
18758Le temps d'expiration, en secondes, après lequel la liste des paquets est
18759reconstruite depuis les dernières instance des canaux donnés.
3cacfa9e
LC
18760@end table
18761
adfb167f 18762Voir le dépôt hpcguix-web pour un
3cacfa9e 18763@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
adfb167f 18764exemple complet}
3cacfa9e 18765
1d8d69c8 18766@item @code{package} (par défaut : @code{hpcguix-web})
2cf2c778 18767Le paquet hpcguix-web à utiliser.
3cacfa9e
LC
18768@end table
18769@end deftp
18770
adfb167f 18771Une déclaration de service hpcguix-web typique ressemble à cela :
3cacfa9e
LC
18772
18773@example
18774(service hpcguix-web-service-type
18775 (hpcguix-web-configuration
18776 (specs
18777 #~(define site-config
18778 (hpcweb-configuration
18779 (title-prefix "Guix-HPC - ")
18780 (menu '(("/about" "ABOUT"))))))))
18781@end example
18782
adfb167f
JL
18783@quotation Remarque
18784Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
18785publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
18786certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
18787communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
18788certificats.
18789
18790Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
18791certificats dans le champ @code{packages} de votre configuration.
18792@ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
18793@end quotation
18794
3cacfa9e 18795@node Services de certificats
15f1bff4 18796@subsection Services de certificats
bf5c74e7
JL
18797
18798@cindex Web
18799@cindex HTTP, HTTPS
18800@cindex Let's Encrypt
adfb167f
JL
18801@cindex certificats TLS
18802Le module @code{(gnu services certbot)} fournit un service qui récupère
18803automatiquement un certificat TLS valide de l'autorité de certification
18804Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
18805contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
18806en sachant que le client sera capable de vérifier l'authenticité du serveur.
18807
18808@url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
18809pour automatiser le processus de certification. Cet outil génère d'abord un
18810clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
18811de certification Let's Encrypt de signer la clef. La CA vérifie que la
18812requête provient de l'hôte en question en utilisant un protocole de
18813défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
18814Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
18815certificat. Ce certificat est valide pour une durée limitée et donc, pour
18816continuer à fournir des services en TLS, le serveur doit régulièrement
18817demander à la CA de renouveler sa signature.
bf5c74e7
JL
18818
18819The certbot service automates this process: the initial key generation, the
18820initial certification request to the Let's Encrypt service, the web server
18821challenge/response integration, writing the certificate to disk, the
18822automated periodic renewals, and the deployment tasks associated with the
adfb167f
JL
18823renewal (e.g.@: reloading services, copying keys with different
18824permissions).
bf5c74e7 18825
adfb167f
JL
18826Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
18827Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
18828révoqués, mais le lancer régulièrement permettra à vos services de rester en
18829ligne si Let's Encrypt décide de révoquer votre certificat.
bf5c74e7 18830
adfb167f
JL
18831En utilisant ce service, vous acceptez le document « ACME Subscriber
18832Agreement », qu'on peut trouver ici :
18833@url{https://acme-v01.api.letsencrypt.org/directory}.
bf5c74e7 18834
1d8d69c8 18835@defvr {Variable Scheme} certbot-service-type
adfb167f
JL
18836Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
18837doit être un enregistrement @code{certbot-configuration} comme dans cet
18838exemple :
bf5c74e7
JL
18839
18840@example
18841(define %nginx-deploy-hook
18842 (program-file
18843 "nginx-deploy-hook"
18844 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
18845 (kill pid SIGHUP))))
18846
18847(service certbot-service-type
18848 (certbot-configuration
18849 (email "foo@@example.net")
18850 (certificates
18851 (list
18852 (certificate-configuration
18853 (domains '("example.net" "www.example.net"))
18854 (deploy-hook %nginx-deploy-hook))
18855 (certificate-configuration
18856 (domains '("bar.example.net")))))))
18857@end example
18858
adfb167f 18859Voir plus bas pour des détails sur @code{certbot-configuration}.
bf5c74e7
JL
18860@end defvr
18861
1d8d69c8 18862@deftp {Type de données} certbot-configuration
adfb167f
JL
18863Type données représentant la configuration du service @code{certbot}. Ce
18864type a les paramètres suivants :
bf5c74e7
JL
18865
18866@table @asis
1d8d69c8
JL
18867@item @code{package} (par défaut : @code{certbot})
18868Le paquet certbot à utiliser.
bf5c74e7 18869
1d8d69c8 18870@item @code{webroot} (par défaut : @code{/var/www})
adfb167f
JL
18871Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
18872Encrypt.
bf5c74e7 18873
1d8d69c8 18874@item @code{certificates} (par défaut : @code{()})
adfb167f
JL
18875Une liste de @code{certificates-configuration} pour lesquels générer des
18876certificats et demander des signatures. Chaque certificat a un @code{name}
18877et plusieurs @code{domains}.
bf5c74e7
JL
18878
18879@item @code{email}
adfb167f
JL
18880Courriel obligatoire utilisé pour la création de compte, le contact en cas
18881de problème et des notifications importantes sur le compte.
bf5c74e7 18882
1d8d69c8 18883@item @code{rsa-key-size} (par défaut : @code{2048})
adfb167f 18884Taille de la clef RSA.
bf5c74e7 18885
adfb167f 18886@item @code{default-location} (par défaut : @i{voir plus bas})
15f1bff4
JL
18887Le @code{nginx-location-configuration} par défaut. Comme @code{certbot}
18888doit pouvoir servir les défis et les réponses, il doit être capable de
18889lancer un serveur web. Cela se fait en étendant le service web @code{nginx}
18890avec un @code{nginx-server-configuration} qui écoute sur les @var{domains}
18891sur le port 80 et qui a un @code{nginx-location-configuration} pour le
18892chemin @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web}
18893pour plus d'information sur les types de données de la configuration de
18894nginx.
bf5c74e7 18895
adfb167f
JL
18896Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
18897s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
bf5c74e7 18898
adfb167f
JL
18899Par défaut, le @code{default-location} sera une redirection de
18900@code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
18901laissant définir ce que vous voulez servir sur votre site en @code{https}.
bf5c74e7 18902
adfb167f 18903Passez @code{#f} pour ne pas utiliser de location par défaut.
bf5c74e7
JL
18904@end table
18905@end deftp
18906
1d8d69c8 18907@deftp {Type de données} certificate-configuration
adfb167f
JL
18908Type de données représentant la configuration d'un certificat. Ce type a
18909les paramètres suivants :
bf5c74e7
JL
18910
18911@table @asis
adfb167f
JL
18912@item @code{name} (par défaut : @i{voir plus bas})
18913Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
18914chemins de fichiers ; il n'affecte pas le contenu des certificats
18915eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
18916certificates}.
bf5c74e7 18917
adfb167f 18918Sa valeur par défaut est le premier domaine spécifié.
bf5c74e7 18919
1d8d69c8 18920@item @code{domains} (par défaut : @code{()})
adfb167f
JL
18921Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
18922domaines seront les noms alternatifs du sujet dans le certificat.
bf5c74e7 18923
1d8d69c8 18924@item @code{deploy-hook} (par défaut : @code{#f})
adfb167f
JL
18925Commande à lancer dans un shell une fois par certificat récupéré avec
18926succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
18927sur le sous-répertoire live (par exemple,
18928@samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
18929et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
18930domaines séparés par des espaces (par exemple @samp{"example.com
18931www.example.com"}).
bf5c74e7
JL
18932
18933@end table
18934@end deftp
18935
adfb167f
JL
18936Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
18937dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
18938sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
3cacfa9e 18939@node Services DNS
15f1bff4 18940@subsection Services DNS
bf5c74e7
JL
18941@cindex DNS (domain name system)
18942@cindex domain name system (DNS)
18943
adfb167f
JL
18944Le module @code{(gnu services dns)} fournit des services liés au
18945@dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
18946pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
18947en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
18948Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
18949LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
18950dnsmasq}.
3cacfa9e 18951
2cf2c778 18952@subsubheading Service Knot
bf5c74e7 18953
adfb167f
JL
18954Voici un exemple de configuration pour un serveur faisant autorité sur deux
18955zone, un maître et un esclave :
bf5c74e7
JL
18956
18957@lisp
18958(define-zone-entries example.org.zone
18959;; Name TTL Class Type Data
18960 ("@@" "" "IN" "A" "127.0.0.1")
18961 ("@@" "" "IN" "NS" "ns")
18962 ("ns" "" "IN" "A" "127.0.0.1"))
18963
18964(define master-zone
18965 (knot-zone-configuration
18966 (domain "example.org")
18967 (zone (zone-file
18968 (origin "example.org")
18969 (entries example.org.zone)))))
18970
18971(define slave-zone
18972 (knot-zone-configuration
18973 (domain "plop.org")
18974 (dnssec-policy "default")
18975 (master (list "plop-master"))))
18976
18977(define plop-master
18978 (knot-remote-configuration
18979 (id "plop-master")
18980 (address (list "208.76.58.171"))))
18981
18982(operating-system
18983 ;; ...
18984 (services (cons* (service knot-service-type
18985 (knot-configuration
18986 (remotes (list plop-master))
18987 (zones (list master-zone slave-zone))))
18988 ;; ...
18989 %base-services)))
18990@end lisp
18991
1d8d69c8 18992@deffn {Variable Scheme} knot-service-type
adfb167f
JL
18993C'est le type pour le serveur DNS Knot.
18994
18995Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
18996servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
18997un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
18998peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
18999serveur peut être configuré pour servir des zones comme un serveur maître ou
19000comme un serveur esclave, en fonction des zones. Les zones esclaves
19001récupèrent leurs données des maîtres, et seront servies comme faisant
19002autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
19003un maître et un esclave@footnote{NdT : Voir la conférence en Français de
19004Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
19005@url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
19006
19007Les types de données suivants sont utilisés pour configurer le serveur DNS
19008Knot :
bf5c74e7
JL
19009@end deffn
19010
1d8d69c8 19011@deftp {Type de données} knot-key-configuration
adfb167f 19012Type de données représentant une clef. Ce type a les paramètres suivants :
bf5c74e7
JL
19013
19014@table @asis
1d8d69c8 19015@item @code{id} (par défaut : @code{""})
adfb167f
JL
19016Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
19017clef. Les ID doivent être uniques et non vides.
bf5c74e7 19018
1d8d69c8 19019@item @code{algorithm} (par défaut : @code{#f})
adfb167f 19020L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
bf5c74e7 19021@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
adfb167f 19022@code{'hmac-sha384} et @code{'hmac-sha512}.
bf5c74e7 19023
1d8d69c8 19024@item @code{secret} (par défaut : @code{""})
adfb167f 19025La clef secrète elle-même.
bf5c74e7
JL
19026
19027@end table
19028@end deftp
19029
1d8d69c8 19030@deftp {Type de données} knot-acl-configuration
adfb167f
JL
19031Type de données représentant une configuration de liste de contrôle d'accès
19032(ACL). Ce type a les paramètres suivants :
bf5c74e7
JL
19033
19034@table @asis
1d8d69c8 19035@item @code{id} (par défaut : @code{""})
adfb167f
JL
19036Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
19037clef. Les ID doivent être uniques et non vides.
bf5c74e7 19038
1d8d69c8 19039@item @code{address} (par défaut : @code{'()})
adfb167f
JL
19040Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
19041réseaux représentés par des chaînes de caractères. La requête doit
19042correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
19043n'a pas besoin de correspondre.
bf5c74e7 19044
1d8d69c8 19045@item @code{key} (par défaut : @code{'()})
adfb167f
JL
19046Une liste ordonnées de références à des clefs représentés par des chaînes.
19047La chaîne doit correspondre à un ID définie dans un
19048@code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
19049nécessaire pour correspondre à l'ACL.
bf5c74e7 19050
1d8d69c8 19051@item @code{action} (par défaut : @code{'()})
adfb167f
JL
19052Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
19053valeurs possibles sont une liste de zéro ou plus d'éléments entre
19054@code{'transfer}, @code{'notify} et @code{'update}.
bf5c74e7 19055
1d8d69c8 19056@item @code{deny?} (par défaut : @code{#f})
adfb167f
JL
19057Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
19058listées sont interdites. Lorsque la valeur est fausse, les actions listées
19059sont autorisées.
bf5c74e7
JL
19060
19061@end table
19062@end deftp
19063
1d8d69c8 19064@deftp {Type de données} zone-entry
adfb167f
JL
19065Type de données représentant une entrée dans un fichier de zone. Ce type a
19066les paramètres suivants :
bf5c74e7
JL
19067
19068@table @asis
1d8d69c8 19069@item @code{name} (par défaut : @code{"@@"})
adfb167f
JL
19070Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
19071Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
19072@code{example.org}, @code{"ns.example.org"} se réfère en fait à
19073@code{ns.example.org.example.org}. Les noms qui finissent par un point sont
19074absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
19075@code{ns.example.org}.
bf5c74e7 19076
1d8d69c8 19077@item @code{ttl} (par défaut : @code{""})
adfb167f
JL
19078La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
19079par défaut est utilisé.
bf5c74e7 19080
1d8d69c8 19081@item @code{class} (par défaut : @code{"IN"})
adfb167f
JL
19082La classe de l'enregistrement. Knot ne supporte actuellement que
19083@code{"IN"} et partiellement @code{"CH"}.
bf5c74e7 19084
1d8d69c8 19085@item @code{type} (par défaut : @code{"A"})
adfb167f
JL
19086Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
19087(serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
19088définis.
bf5c74e7 19089
1d8d69c8 19090@item @code{data} (par défaut : @code{""})
adfb167f
JL
19091Les données contenues dans l'enregistrement. Par exemple une adresse IP
19092associée à un enregistrement A, ou un nom de domaine associé à un
19093enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
19094l'origine à moins qu'ils ne finissent par un point.
bf5c74e7
JL
19095
19096@end table
19097@end deftp
19098
1d8d69c8 19099@deftp {Type de données} zone-file
adfb167f
JL
19100Type données représentant le contenu d'un fichier de zone. Ce type a les
19101paramètres suivants :
bf5c74e7
JL
19102
19103@table @asis
1d8d69c8 19104@item @code{entries} (par défaut : @code{'()})
adfb167f
JL
19105La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
19106pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
19107contenir une entrée pour votre serveur DNS primaire faisant autorité. En
19108plus d'utiliser une liste des entrées directement, vous pouvez utiliser
19109@code{define-zone-entries} pour définir un objet contenant la liste des
19110entrées plus facilement, que vous pouvez ensuite passer au champ
19111@code{entries} de @code{zone-file}.
bf5c74e7 19112
1d8d69c8 19113@item @code{origin} (par défaut : @code{""})
adfb167f 19114Le nom de votre zone. Ce paramètre ne peut pas être vide.
bf5c74e7 19115
1d8d69c8 19116@item @code{ns} (par défaut : @code{"ns"})
adfb167f
JL
19117Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
19118relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
19119que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
19120et qu'il soit associé à une adresse IP dans la liste des entrées.
bf5c74e7 19121
1d8d69c8 19122@item @code{mail} (par défaut : @code{"hostmaster"})
adfb167f
JL
19123Une adresse de courriel pour vous contacter en tant que propriétaire de la
19124zone. Cela se transforme en @code{<mail>@@<origin>}.
bf5c74e7 19125
1d8d69c8 19126@item @code{serial} (par défaut : @code{1})
adfb167f
JL
19127Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
19128changements à la fois par les esclaves et par les résolveurs, il est
19129nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
19130vous faites un changement sur votre zone.
bf5c74e7 19131
1d8d69c8 19132@item @code{refresh} (par défaut : @code{(* 2 24 3600)})
adfb167f
JL
19133La fréquence à laquelle les esclaves demanderont un transfert de zone.
19134Cette valeur est un nombre de secondes. On peut le calculer avec des
19135multiplications ou avec @code{(string->duration)}.
bf5c74e7 19136
1d8d69c8 19137@item @code{retry} (par défaut : @code{(* 15 60)})
adfb167f
JL
19138La période après laquelle un esclave essaiera de contacter son maître
19139lorsqu'il échoue à le faire la première fois.
bf5c74e7 19140
1d8d69c8 19141@item @code{expiry} (par défaut : @code{(* 14 24 3600)})
adfb167f
JL
19142TTL par défaut des enregistrements. Les enregistrements existants sont
19143considérés corrects pour au moins cette durée. Après cette période, les
19144résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
19145toujours.
bf5c74e7 19146
1d8d69c8 19147@item @code{nx} (par défaut : @code{3600})
adfb167f
JL
19148TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
19149court parce que vous voulez que vous nouveaux domaines soient disponibles
19150pour tout le monde le plus rapidement possible.
bf5c74e7
JL
19151
19152@end table
19153@end deftp
19154
1d8d69c8 19155@deftp {Type de données} knot-remote-configuration
adfb167f
JL
19156Type de données représentant une configuration de serveurs distants. Ce
19157type a les paramètres suivants :
bf5c74e7
JL
19158
19159@table @asis
1d8d69c8 19160@item @code{id} (par défaut : @code{""})
adfb167f
JL
19161Un identifiant pour que les autres champs de configuration se réfèrent à ce
19162serveur distant. les ID doivent être uniques et non vides.
bf5c74e7 19163
1d8d69c8 19164@item @code{address} (par défaut : @code{'()})
adfb167f
JL
19165Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
19166en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
19167exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
1916853.
bf5c74e7 19169
1d8d69c8 19170@item @code{via} (par défaut : @code{'()})
adfb167f
JL
19171Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
19172IP source appropriée à Knot. Un port facultatif peut être donné avec le
19173séparateur @@. La valeur par défaut est de choisir aléatoirement.
bf5c74e7 19174
1d8d69c8 19175@item @code{key} (par défaut : @code{#f})
adfb167f
JL
19176Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
19177d'une clef définie dans un champ @code{knot-key-configuration}.
bf5c74e7
JL
19178
19179@end table
19180@end deftp
19181
1d8d69c8 19182@deftp {Type de données} knot-keystore-configuration
adfb167f
JL
19183Type de données représentant une base de clefs pour garder les clefs
19184dnssec. Ce type a les paramètres suivants :
bf5c74e7
JL
19185
19186@table @asis
1d8d69c8 19187@item @code{id} (par défaut : @code{""})
adfb167f 19188L'id de cette base de clefs. Il ne doit pas être vide.
bf5c74e7 19189
1d8d69c8 19190@item @code{backend} (par défaut : @code{'pem})
adfb167f
JL
19191Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
19192@code{'pkcs11}.
bf5c74e7 19193
1d8d69c8 19194@item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
adfb167f 19195La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
bf5c74e7 19196@code{"pkcs11:token=knot;pin-value=1234
adfb167f
JL
19197/gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
19198représente un chemin dans le système de fichiers.
bf5c74e7
JL
19199
19200@end table
19201@end deftp
19202
1d8d69c8 19203@deftp {Type de données} knot-policy-configuration
adfb167f
JL
19204Type de données représentant une politique dnssec. Knot DNS est capable de
19205signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
19206automatiquement ou utiliser des clefs que vous générez.
19207
19208Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
19209key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
19210est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
19211doit être présente dans la zone parente (normalement un domaine de haut
19212niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
19213hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
19214zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
19215fois que vous changerez votre KSK.
19216
19217La politique définie aussi la durée de vie des clefs. Habituellement, la
19218ZSK peut être changée facilement et utilise des fonctions cryptographiques
19219plus faibles (avec un paramètre plus faible) pour signer les enregistrements
19220rapidement, donc elles sont changées très régulièrement. La KSK en revanche
19221requiert une interaction manuelle avec le registrar, donc elle change moins
19222souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
19223seul enregistrement.
19224
19225Ce type a les paramètres suivants :
bf5c74e7
JL
19226
19227@table @asis
1d8d69c8 19228@item @code{id} (par défaut : @code{""})
adfb167f 19229L'id de la politique. Il ne doit pas être vide.
bf5c74e7 19230
1d8d69c8 19231@item @code{keystore} (par défaut : @code{"default"})
adfb167f
JL
19232Une référence à une base de clefs, c'est-à-dire une chaîne contenant
19233l'identifiant d'une base de clefs définie dans un champ
19234@code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
19235la base par défaut (une base de données kasp initialisée par ce service).
bf5c74e7 19236
1d8d69c8 19237@item @code{manual?} (par défaut : @code{#f})
adfb167f 19238Indique si la clef est gérée manuellement ou automatiquement.
bf5c74e7 19239
1d8d69c8 19240@item @code{single-type-signing?} (par défaut : @code{#f})
adfb167f 19241Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type
bf5c74e7 19242
1d8d69c8 19243@item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
adfb167f 19244Un algorithme de clef de signature et de signatures.
bf5c74e7 19245
1d8d69c8 19246@item @code{ksk-size} (par défaut : @code{256})
adfb167f
JL
19247La longueur de la KSK. Remarquez que cette valeur est correcte pour
19248l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
19249algorithmes.
bf5c74e7 19250
1d8d69c8 19251@item @code{zsk-size} (par défaut : @code{256})
adfb167f
JL
19252La longueur de la ZSK. Remarquez que cette valeur est correcte pour
19253l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
19254algorithmes.
bf5c74e7 19255
1d8d69c8 19256@item @code{dnskey-ttl} (par défaut : @code{'default})
adfb167f
JL
19257La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
19258zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
19259du SOA de la zone.
bf5c74e7 19260
1d8d69c8 19261@item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
adfb167f
JL
19262La période entre la publication d'une ZSK et l'initialisation d'un nouveau
19263changement.
bf5c74e7 19264
1d8d69c8 19265@item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
adfb167f
JL
19266Un délai supplémentaire pour chaque étape du changement. Cette valeur
19267devrait être assez grande pour couvrir le temps de propagation des données
19268entre le serveur primaire et tous les secondaires.
bf5c74e7 19269
1d8d69c8 19270@item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
adfb167f 19271Une période de validité des nouvelles signatures.
bf5c74e7 19272
1d8d69c8 19273@item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
adfb167f
JL
19274Une période qui indique combien de temps avant l'expiration d'une signature
19275elle sera rafraîchie.
bf5c74e7 19276
1d8d69c8 19277@item @code{nsec3?} (par défaut : @code{#f})
adfb167f 19278Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
bf5c74e7 19279
1d8d69c8 19280@item @code{nsec3-iterations} (par défaut : @code{5})
adfb167f 19281Le nombre de fois supplémentaires que le hash est effectué.
bf5c74e7 19282
1d8d69c8 19283@item @code{nsec3-salt-length} (par défaut : @code{8})
adfb167f
JL
19284La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
19285de hasher.
bf5c74e7 19286
1d8d69c8 19287@item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
adfb167f 19288La période de validité des nouveaux champs sel.
bf5c74e7
JL
19289
19290@end table
19291@end deftp
19292
1d8d69c8 19293@deftp {Type de données} knot-zone-configuration
adfb167f
JL
19294Type de données représentant la zone servie par Knot. ce type a les
19295paramètres suivants :
bf5c74e7
JL
19296
19297@table @asis
1d8d69c8 19298@item @code{domain} (par défaut : @code{""})
adfb167f 19299Le domaine servi par cette configuration. Il ne doit pas être vide.
bf5c74e7 19300
1d8d69c8 19301@item @code{file} (par défaut : @code{""})
adfb167f
JL
19302Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
19303zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
19304du nom de domaine.
bf5c74e7 19305
1d8d69c8 19306@item @code{zone} (par défaut : @code{(zone-file)})
adfb167f
JL
19307Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
19308esclaves. Il doit contenir un enregistrement zone-file.
bf5c74e7 19309
1d8d69c8 19310@item @code{master} (par défaut : @code{'()})
adfb167f
JL
19311Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
19312zone est un maître. Lorsque la valeur est indiquée, cette zone est un
19313esclave. C'est al liste des identifiants des serveurs distants.
bf5c74e7 19314
1d8d69c8 19315@item @code{ddns-master} (par défaut : @code{#f})
adfb167f
JL
19316Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
19317le premier maître de la liste des maîtres.
bf5c74e7 19318
1d8d69c8 19319@item @code{notify} (par défaut : @code{'()})
adfb167f 19320Une liste d'identifiants de groupe de serveurs esclaves.
bf5c74e7 19321
1d8d69c8 19322@item @code{acl} (par défaut : @code{'()})
adfb167f 19323Une liste d'identifiants d'ACL.
bf5c74e7 19324
1d8d69c8 19325@item @code{semantic-checks?} (par défaut : @code{#f})
adfb167f
JL
19326Lorsque la valeur est indiquée, cela ajoute plus de vérifications
19327sémantiques à la zone.
bf5c74e7 19328
1d8d69c8 19329@item @code{disable-any?} (par défaut : @code{#f})
adfb167f 19330Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
bf5c74e7 19331
1d8d69c8 19332@item @code{zonefile-sync} (par défaut : @code{0})
adfb167f
JL
19333Le délai entre une modification en mémoire et sur le disque. 0 signifie une
19334synchronisation immédiate.
bf5c74e7 19335
1d8d69c8 19336@item @code{serial-policy} (par défaut : @code{'increment})
adfb167f 19337Une politique entre @code{'increment} et @code{'unixtime}.
bf5c74e7
JL
19338
19339@end table
19340@end deftp
19341
1d8d69c8 19342@deftp {Type de données} knot-configuration
15f1bff4 19343Type de données représentant la configuration de Knot. Ce type a les
adfb167f 19344paramètres suivants :
bf5c74e7
JL
19345
19346@table @asis
1d8d69c8 19347@item @code{knot} (par défaut : @code{knot})
adfb167f 19348Le paquet Knot.
bf5c74e7 19349
1d8d69c8 19350@item @code{run-directory} (par défaut : @code{"/var/run/knot"})
adfb167f
JL
19351Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
19352les sockets.
bf5c74e7 19353
1d8d69c8 19354@item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
adfb167f 19355Une adresse IP sur laquelle écouter.
bf5c74e7 19356
1d8d69c8 19357@item @code{listen-v6} (par défaut : @code{"::"})
adfb167f 19358Une adresse IP sur laquelle écouter.
bf5c74e7 19359
1d8d69c8 19360@item @code{listen-port} (par défaut : @code{53})
adfb167f 19361Un port sur lequel écouter.
bf5c74e7 19362
1d8d69c8 19363@item @code{keys} (par défaut : @code{'()})
adfb167f 19364La liste des knot-key-configuration utilisés par cette configuration.
bf5c74e7 19365
1d8d69c8 19366@item @code{acls} (par défaut : @code{'()})
adfb167f 19367La liste des knot-acl-configuration utilisés par cette configuration.
bf5c74e7 19368
1d8d69c8 19369@item @code{remotes} (par défaut : @code{'()})
adfb167f 19370La liste des knot-remote-configuration utilisés par cette configuration.
bf5c74e7 19371
1d8d69c8 19372@item @code{zones} (par défaut : @code{'()})
adfb167f 19373La liste des knot-zone-configuration utilisés par cette configuration.
bf5c74e7
JL
19374
19375@end table
19376@end deftp
19377
2cf2c778 19378@subsubheading Services Dnsmasq
3cacfa9e 19379
2cf2c778 19380@deffn {Variable Scheme} dnsmasq-service-type
adfb167f
JL
19381C'est le type du service dnsmasq, dont la valeur devrait être un objet
19382@code{dnsmasq-configuration} comme dans cet exemple :
3cacfa9e
LC
19383
19384@example
19385(service dnsmasq-service-type
19386 (dnsmasq-configuration
19387 (no-resolv? #t)
19388 (servers '("192.168.1.1"))))
19389@end example
19390@end deffn
19391
1d8d69c8 19392@deftp {Type de données} dnsmasq-configuration
2cf2c778 19393Type de données qui représente la configuration de dnsmasq.
3cacfa9e
LC
19394
19395@table @asis
1d8d69c8 19396@item @code{package} (par défaut : @var{dnsmasq})
adfb167f 19397L'objet de paquet du serveur dnsmasq.
3cacfa9e 19398
2cf2c778 19399@item @code{no-hosts?} (par défaut : @code{#f})
adfb167f 19400Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
3cacfa9e 19401
2cf2c778 19402@item @code{port} (par défaut : @code{53})
adfb167f
JL
19403Le port sur lequel écouter. Le mettre à zéro désactive complètement les
19404réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
3cacfa9e 19405
2cf2c778 19406@item @code{local-service?} (par défaut : @code{#t})
adfb167f
JL
19407Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
19408sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
19409existe sur le serveur.
3cacfa9e 19410
2cf2c778 19411@item @code{listen-addresses} (par défaut : @code{'()})
adfb167f 19412Écoute sur le adresses IP données.
3cacfa9e 19413
2cf2c778 19414@item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
adfb167f 19415Le fichier où lire l'adresse IP des serveurs de noms en amont.
3cacfa9e 19416
2cf2c778 19417@item @code{no-resolv?} (par défaut : @code{#f})
adfb167f 19418Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
3cacfa9e 19419
1d8d69c8 19420@item @code{servers} (par défaut : @code{'()})
adfb167f 19421Spécifiez l'adresse IP des serveurs en amont directement.
3cacfa9e 19422
2cf2c778 19423@item @code{cache-size} (par défaut : @code{150})
adfb167f 19424Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
3cacfa9e 19425
2cf2c778 19426@item @code{negative-cache?} (par défaut : @code{#t})
adfb167f 19427Lorsque la valeur est fausse, désactive le cache des réponses négatives.
3cacfa9e
LC
19428
19429@end table
19430@end deftp
bf5c74e7 19431
adfb167f
JL
19432@subsubheading Service ddclient
19433
19434@cindex ddclient
15f1bff4 19435Le service ddclient décrit plus bas lance le démon ddclient, qui prend en
adfb167f
JL
19436charge la mise à jour automatique des entrées DNS pour les fournisseurs de
19437service comme @uref{https://dyn.com/dns/, Dyn}.
19438
19439L'exemple suivant montre comment instantier le service avec sa configuration
19440par défaut :
19441
19442@example
19443(service ddclient-service-type)
19444@end example
19445
19446Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
19447@dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
19448@code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
19449manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
19450fichier dans une partie de votre configuration, par exemple avec
19451@code{plain-file}, mais il serait lisible pour tout le monde via
19452@file{/gnu/store}). Vois les exemples dans le répertoire
19453@file{share/ddclient} du paquet @code{ddclient}.
19454
19455@c %start of fragment
19456
19457Les champs de @code{ddclient-configuration} disponibles sont :
19458
19459@deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
19460Le paquet ddclient.
19461
19462@end deftypevr
19463
19464@deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
19465La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
19466domaine.
19467
19468La valeur par défaut est @samp{300}.
19469
19470@end deftypevr
19471
19472@deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
19473Utiliser syslog pour la sortie.
19474
19475La valeur par défaut est @samp{#t}.
19476
19477@end deftypevr
19478
19479@deftypevr {paramètre de @code{ddclient-configuration}} string mail
19480Courriel de l'utilisateur.
19481
19482La valeur par défaut est @samp{"root"}.
19483
19484@end deftypevr
19485
19486@deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
19487Courriel de l'utilisateur pour les échecs.
19488
19489La valeur par défaut est @samp{"root"}.
19490
19491@end deftypevr
19492
19493@deftypevr {paramètre de @code{ddclient-configuration}} string pid
19494Le fichier de PID de ddclient.
19495
19496La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
19497
19498@end deftypevr
19499
19500@deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
19501Activer le support de SSL.
19502
19503La valeur par défaut est @samp{#t}.
19504
19505@end deftypevr
19506
19507@deftypevr {paramètre de @code{ddclient-configuration}} string user
19508Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
19509programme ddclient.
19510
19511La valeur par défaut est @samp{"ddclient"}.
19512
19513@end deftypevr
19514
19515@deftypevr {paramètre de @code{ddclient-configuration}} string group
19516Groupe de l'utilisateur qui lancera le programme ddclient.
19517
19518La valeur par défaut est @samp{"ddclient"}.
19519
19520@end deftypevr
19521
19522@deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
19523Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
19524fichier contient les paramètres d'authentification utilisés par ddclient.
19525On s'attend à ce que vous le créiez manuellement.
19526
19527La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
19528
19529@end deftypevr
19530
19531@deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
19532Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
19533
19534La valeur par défaut est @samp{()}.
19535
19536@end deftypevr
19537
19538
19539@c %end of fragment
19540
19541
3cacfa9e 19542@node Services VPN
15f1bff4 19543@subsection Services VPN
adfb167f
JL
19544@cindex VPN (réseau privé virtuel)
19545@cindex réseau privé virtuel (VPN)
bf5c74e7 19546
adfb167f
JL
19547Le module @code{(gnu services vpn)} fournit des services liés aux
19548@dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
19549pour que votre machine se connecte à un VPN et un service @emph{serveur}
19550pour que votre machine héberge un VPN. Les deux services utilisent
19551@uref{https://openvpn.net/, OpenVPN}.
bf5c74e7 19552
1d8d69c8 19553@deffn {Procédure Scheme} openvpn-client-service @
bf5c74e7
JL
19554 [#:config (openvpn-client-configuration)]
19555
adfb167f
JL
19556Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
19557client.
bf5c74e7
JL
19558@end deffn
19559
1d8d69c8 19560@deffn {Procédure Scheme} openvpn-server-service @
bf5c74e7
JL
19561 [#:config (openvpn-server-configuration)]
19562
adfb167f
JL
19563Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
19564serveur.
bf5c74e7 19565
adfb167f 19566Les deux services peuvent être lancés en même temps.
bf5c74e7
JL
19567@end deffn
19568
19569@c %automatically generated documentation
19570
1d8d69c8 19571Les champs de @code{openvpn-client-configuration} disponibles sont :
bf5c74e7 19572
1d8d69c8 19573@deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
adfb167f 19574Le paquet OpenVPN.
bf5c74e7
JL
19575
19576@end deftypevr
19577
1d8d69c8 19578@deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
adfb167f 19579Le fichier de PID d'OpenVPN.
bf5c74e7 19580
1d8d69c8 19581La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
bf5c74e7
JL
19582
19583@end deftypevr
19584
1d8d69c8 19585@deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
adfb167f
JL
19586Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
19587les serveurs.
bf5c74e7 19588
1d8d69c8 19589La valeur par défaut est @samp{udp}.
bf5c74e7
JL
19590
19591@end deftypevr
19592
1d8d69c8 19593@deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
adfb167f 19594Le périphérique utilisé pour représenter la connexion VPN.
bf5c74e7 19595
1d8d69c8 19596La valeur par défaut est @samp{tun}.
bf5c74e7
JL
19597
19598@end deftypevr
19599
1d8d69c8 19600@deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
adfb167f 19601L'autorité de certification qui sert à vérifier les connexions.
bf5c74e7 19602
1d8d69c8 19603La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
bf5c74e7
JL
19604
19605@end deftypevr
19606
1d8d69c8 19607@deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
adfb167f
JL
19608Le certificat de la machine sur laquelle tourne le démon. Il devrait être
19609signé par l'autorité indiquée dans @code{ca}.
bf5c74e7 19610
1d8d69c8 19611La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
bf5c74e7
JL
19612
19613@end deftypevr
19614
1d8d69c8 19615@deftypevr {paramètre de @code{openvpn-client-configuration}} string key
adfb167f
JL
19616La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
19617dont le certificat est donné dans @code{cert}.
bf5c74e7 19618
1d8d69c8 19619La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
bf5c74e7
JL
19620
19621@end deftypevr
19622
1d8d69c8 19623@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
adfb167f 19624Indique s'il faut utiliser l'algorithme de compression lzo.
bf5c74e7 19625
1d8d69c8 19626La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19627
19628@end deftypevr
19629
1d8d69c8 19630@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
adfb167f 19631Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
bf5c74e7 19632
1d8d69c8 19633La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19634
19635@end deftypevr
19636
1d8d69c8 19637@deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
adfb167f
JL
19638Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
19639démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
bf5c74e7 19640
1d8d69c8 19641La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19642
19643@end deftypevr
19644
1d8d69c8 19645@deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
adfb167f 19646Niveau de verbosité.
bf5c74e7 19647
1d8d69c8 19648La valeur par défaut est @samp{3}.
bf5c74e7
JL
19649
19650@end deftypevr
19651
1d8d69c8 19652@deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
adfb167f
JL
19653Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
19654de contrôle TLS pour se protéger contre les attaques DoS.
bf5c74e7 19655
1d8d69c8 19656La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19657
19658@end deftypevr
19659
1d8d69c8 19660@deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
adfb167f
JL
19661Indique s'il faut vérifier que le certificat du serveur a l'extension
19662d'utilisation.
bf5c74e7 19663
1d8d69c8 19664La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19665
19666@end deftypevr
19667
1d8d69c8 19668@deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
adfb167f 19669Se lier à un port spécifique.
bf5c74e7 19670
1d8d69c8 19671La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19672
19673@end deftypevr
19674
1d8d69c8 19675@deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
adfb167f 19676Réessayer de résoudre l'adresse du serveur.
bf5c74e7 19677
1d8d69c8 19678La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19679
19680@end deftypevr
19681
1d8d69c8 19682@deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
adfb167f 19683Une liste de serveurs distants sur lesquels se connecter.
bf5c74e7 19684
1d8d69c8 19685La valeur par défaut est @samp{()}.
bf5c74e7 19686
1d8d69c8 19687Les champs de @code{openvpn-remote-configuration} disponibles sont :
bf5c74e7 19688
1d8d69c8 19689@deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
adfb167f 19690Nom du serveur.
bf5c74e7 19691
1d8d69c8 19692La valeur par défaut est @samp{"my-server"}.
bf5c74e7
JL
19693
19694@end deftypevr
19695
1d8d69c8 19696@deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
adfb167f 19697Numéro de port sur lequel écoute le serveur.
bf5c74e7 19698
1d8d69c8 19699La valeur par défaut est @samp{1194}.
bf5c74e7
JL
19700
19701@end deftypevr
19702
19703@end deftypevr
19704@c %end of automatic openvpn-client documentation
19705
19706@c %automatically generated documentation
19707
1d8d69c8 19708Les champs de @code{openvpn-server-configuration} disponibles sont :
bf5c74e7 19709
1d8d69c8 19710@deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
adfb167f 19711Le paquet OpenVPN.
bf5c74e7
JL
19712
19713@end deftypevr
19714
1d8d69c8 19715@deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
adfb167f 19716Le fichier de PID d'OpenVPN.
bf5c74e7 19717
1d8d69c8 19718La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
bf5c74e7
JL
19719
19720@end deftypevr
19721
1d8d69c8 19722@deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
adfb167f
JL
19723Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
19724les serveurs.
bf5c74e7 19725
1d8d69c8 19726La valeur par défaut est @samp{udp}.
bf5c74e7
JL
19727
19728@end deftypevr
19729
1d8d69c8 19730@deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
adfb167f 19731Le périphérique utilisé pour représenter la connexion VPN.
bf5c74e7 19732
1d8d69c8 19733La valeur par défaut est @samp{tun}.
bf5c74e7
JL
19734
19735@end deftypevr
19736
1d8d69c8 19737@deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
adfb167f 19738L'autorité de certification qui sert à vérifier les connexions.
bf5c74e7 19739
1d8d69c8 19740La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
bf5c74e7
JL
19741
19742@end deftypevr
19743
1d8d69c8 19744@deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
adfb167f
JL
19745Le certificat de la machine sur laquelle tourne le démon. Il devrait être
19746signé par l'autorité indiquée dans @code{ca}.
bf5c74e7 19747
1d8d69c8 19748La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
bf5c74e7
JL
19749
19750@end deftypevr
19751
1d8d69c8 19752@deftypevr {paramètre de @code{openvpn-server-configuration}} string key
adfb167f
JL
19753La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
19754dont le certificat est donné dans @code{cert}.
bf5c74e7 19755
1d8d69c8 19756La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
bf5c74e7
JL
19757
19758@end deftypevr
19759
1d8d69c8 19760@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
adfb167f 19761Indique s'il faut utiliser l'algorithme de compression lzo.
bf5c74e7 19762
1d8d69c8 19763La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19764
19765@end deftypevr
19766
1d8d69c8 19767@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
adfb167f 19768Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
bf5c74e7 19769
1d8d69c8 19770La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19771
19772@end deftypevr
19773
1d8d69c8 19774@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
adfb167f
JL
19775Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
19776démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
bf5c74e7 19777
1d8d69c8 19778La valeur par défaut est @samp{#t}.
bf5c74e7
JL
19779
19780@end deftypevr
19781
1d8d69c8 19782@deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
adfb167f 19783Niveau de verbosité.
bf5c74e7 19784
1d8d69c8 19785La valeur par défaut est @samp{3}.
bf5c74e7
JL
19786
19787@end deftypevr
19788
1d8d69c8 19789@deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
adfb167f
JL
19790Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
19791de contrôle TLS pour se protéger contre les attaques DoS.
bf5c74e7 19792
1d8d69c8 19793La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19794
19795@end deftypevr
19796
1d8d69c8 19797@deftypevr {paramètre de @code{openvpn-server-configuration}} number port
adfb167f 19798Spécifie le numéro de port sur lequel les serveurs écoutent.
bf5c74e7 19799
1d8d69c8 19800La valeur par défaut est @samp{1194}.
bf5c74e7
JL
19801
19802@end deftypevr
19803
1d8d69c8 19804@deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
adfb167f
JL
19805Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
19806virtuel.
bf5c74e7 19807
1d8d69c8 19808La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
bf5c74e7
JL
19809
19810@end deftypevr
19811
1d8d69c8 19812@deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
adfb167f 19813Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
bf5c74e7 19814
1d8d69c8 19815La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19816
19817@end deftypevr
19818
1d8d69c8 19819@deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
adfb167f 19820Le fichier de paramètres Diffie-Hellman.
bf5c74e7 19821
1d8d69c8 19822La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
bf5c74e7
JL
19823
19824@end deftypevr
19825
1d8d69c8 19826@deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
adfb167f 19827Le fichier qui enregistre les IP des clients.
bf5c74e7 19828
1d8d69c8 19829La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
bf5c74e7
JL
19830
19831@end deftypevr
19832
1d8d69c8 19833@deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
adfb167f
JL
19834Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
19835clients.
bf5c74e7 19836
1d8d69c8 19837La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19838
19839@end deftypevr
19840
1d8d69c8 19841@deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
adfb167f
JL
19842Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
19843eux dans le VPN.
bf5c74e7 19844
1d8d69c8 19845La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19846
19847@end deftypevr
19848
1d8d69c8 19849@deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
adfb167f
JL
19850Fait que des messages de ping sont envoyés régulièrement dans les deux sens
19851pour que chaque côté sache quand l'autre n'est plus disponible.
19852@code{keepalive} a besoin d'une paire. Le premier élément est la période
15f1bff4 19853d'envoi du ping, et le second élément est le délai d'attente avant de
adfb167f 19854considéré que l'autre côté n'est plus disponible.
bf5c74e7
JL
19855
19856@end deftypevr
19857
1d8d69c8 19858@deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
adfb167f 19859Le nombre maximum de clients.
bf5c74e7 19860
1d8d69c8 19861La valeur par défaut est @samp{100}.
bf5c74e7
JL
19862
19863@end deftypevr
19864
1d8d69c8 19865@deftypevr {paramètre de @code{openvpn-server-configuration}} string status
adfb167f
JL
19866Le fichier de statut. Ce fichier montre un court rapport sur les connexions
19867actuelles. Il est tronqué et réécrit toutes les minutes.
bf5c74e7 19868
1d8d69c8 19869La valeur par défaut est @samp{"/var/run/openvpn/status"}.
bf5c74e7
JL
19870
19871@end deftypevr
19872
1d8d69c8 19873@deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
adfb167f 19874La liste des configuration pour certains clients.
bf5c74e7 19875
1d8d69c8 19876La valeur par défaut est @samp{()}.
bf5c74e7 19877
1d8d69c8 19878Les champs de @code{openvpn-ccd-configuration} disponibles sont :
bf5c74e7 19879
1d8d69c8 19880@deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
adfb167f 19881Nom du client.
bf5c74e7 19882
1d8d69c8 19883La valeur par défaut est @samp{"client"}.
bf5c74e7
JL
19884
19885@end deftypevr
19886
1d8d69c8 19887@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
adfb167f 19888Le réseau du client.
bf5c74e7 19889
1d8d69c8 19890La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19891
19892@end deftypevr
19893
1d8d69c8 19894@deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
adfb167f 19895IP du client sur le VPN.
bf5c74e7 19896
1d8d69c8 19897La valeur par défaut est @samp{#f}.
bf5c74e7
JL
19898
19899@end deftypevr
19900
19901@end deftypevr
19902
19903
19904@c %end of automatic openvpn-server documentation
19905
19906
3cacfa9e 19907@node Système de fichiers en réseau
15f1bff4 19908@subsection Système de fichiers en réseau
bf5c74e7
JL
19909@cindex NFS
19910
adfb167f
JL
19911Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
19912tous utilisés pour monter et exporter des arborescences de répertoires en
19913@dfn{network file systems} (NFS).
bf5c74e7 19914
adfb167f 19915@subsubheading Service RPC Bind
bf5c74e7
JL
19916@cindex rpcbind
19917
adfb167f
JL
19918Le service RPC Bind fournit un dispositif pour faire correspondre les
19919numéros de programmes à des adresses universelles. De nombreux services
19920liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
19921lorsqu'un service qui en dépend est démarré.
bf5c74e7 19922
1d8d69c8 19923@defvr {Variable Scheme} rpcbind-service-type
adfb167f 19924Un type de service pour le démon RPC portmapper.
bf5c74e7
JL
19925@end defvr
19926
19927
1d8d69c8 19928@deftp {Type de données} rpcbind-configuration
adfb167f
JL
19929Type données représentant la configuration du service RPC Bind. Ce type a
19930les paramètres suivants :
bf5c74e7 19931@table @asis
1d8d69c8
JL
19932@item @code{rpcbind} (par défaut : @code{rpcbind})
19933Le paquet rpcbind à utiliser.
bf5c74e7 19934
1d8d69c8 19935@item @code{warm-start?} (par défaut : @code{#t})
adfb167f
JL
19936Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
19937démarrage ce qui lui fait recharger les informations d'états sauvegardés par
19938une instance précédente.
bf5c74e7
JL
19939@end table
19940@end deftp
19941
19942
adfb167f 19943@subsubheading Pseudo-système de fichiers Pipefs
bf5c74e7
JL
19944@cindex pipefs
19945@cindex rpc_pipefs
19946
adfb167f
JL
19947Le système de fichiers pipefs est utilisé pour transférer des données liées
19948à NFS entre le noyau et les programmes en espace utilisateur.
bf5c74e7 19949
1d8d69c8 19950@defvr {Variable Scheme} pipefs-service-type
adfb167f 19951Un type de service pour le pseudo-système de fichiers pipefs.
bf5c74e7
JL
19952@end defvr
19953
1d8d69c8 19954@deftp {Type de données} pipefs-configuration
adfb167f
JL
19955Type de données représentant la configuration du service du pseudo-système
19956de fichiers pipefs. Ce type a les paramètres suivants :
bf5c74e7 19957@table @asis
1d8d69c8 19958@item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
adfb167f 19959Le répertoire dans lequel le système de fichiers est attaché.
bf5c74e7
JL
19960@end table
19961@end deftp
19962
19963
adfb167f 19964@subsubheading Service de démon GSS
bf5c74e7
JL
19965@cindex GSSD
19966@cindex GSS
adfb167f 19967@cindex système de sécurité global
bf5c74e7 19968
adfb167f
JL
19969Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
19970forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
19971RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
19972fait avec la commande Kerberos @command{kinit} ou automatiquement à la
19973connexion avec les services PAM (@pxref{Services Kerberos}).
bf5c74e7 19974
1d8d69c8 19975@defvr {Variable Scheme} gss-service-type
adfb167f 19976Un type de service pour le démon du système de sécurité global (GSS).
bf5c74e7
JL
19977@end defvr
19978
1d8d69c8 19979@deftp {Type de données} gss-configuration
adfb167f
JL
19980Type de données représentant la configuration du service du démon GSS. Ce
19981type a les paramètres suivants :
bf5c74e7 19982@table @asis
1d8d69c8 19983@item @code{nfs-utils} (par défaut : @code{nfs-utils})
adfb167f 19984Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
bf5c74e7 19985
1d8d69c8 19986@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
adfb167f 19987Le répertoire où le système de fichier pipefs doit être monté.
bf5c74e7
JL
19988
19989@end table
19990@end deftp
19991
19992
adfb167f 19993@subsubheading Service de démon IDMAP
bf5c74e7 19994@cindex idmapd
adfb167f 19995@cindex correspondance de nom
bf5c74e7 19996
adfb167f
JL
19997Le service du démon idmap fournit une correspondance entre les ID
19998utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
19999accéder aux systèmes de fichiers montés via NFSv4.
bf5c74e7 20000
1d8d69c8 20001@defvr {Variable Scheme} idmap-service-type
adfb167f 20002Un type de service pour le démon de correspondance d'identité (IDMAP).
bf5c74e7
JL
20003@end defvr
20004
1d8d69c8 20005@deftp {Type de données} idmap-configuration
adfb167f
JL
20006Type de données représentant la configuration du service du démon IDMAP. Ce
20007type a les paramètres suivants :
bf5c74e7 20008@table @asis
1d8d69c8 20009@item @code{nfs-utils} (par défaut : @code{nfs-utils})
adfb167f 20010Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
bf5c74e7 20011
1d8d69c8 20012@item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
adfb167f 20013Le répertoire où le système de fichier pipefs doit être monté.
bf5c74e7 20014
1d8d69c8 20015@item @code{domain} (par défaut : @code{#f})
adfb167f
JL
20016Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
20017ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
20018domaine pleinement qualifié de l'hôte.
bf5c74e7
JL
20019
20020@end table
20021@end deftp
20022
3cacfa9e 20023@node Intégration continue
15f1bff4 20024@subsection Intégration continue
bf5c74e7 20025
adfb167f
JL
20026@cindex intégration continue
20027@uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
20028un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
20029pour le développement que pour fournir des substituts à d'autres
20030(@pxref{Substituts}).
bf5c74e7 20031
adfb167f 20032Le module @code{(gnu services cuirass)} fournit le service suivant.
bf5c74e7 20033
1d8d69c8 20034@defvr {Procédure Scheme} cuirass-service-type
adfb167f
JL
20035Le type du service Cuirass. Sa valeur doit être un objet
20036@code{cuirass-configuration}, décrit ci-dessous.
bf5c74e7
JL
20037@end defvr
20038
adfb167f
JL
20039Pour ajouter des travaux de construction, vous devez indiquer le champ
20040@code{specifications} de la configuration. Voici un exemple de service qui
20041récupère le dépôt Guix et construit les paquets depuis un manifeste.
20042Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
20043qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
20044
20045@example
20046(define %cuirass-specs
20047 #~(list
20048 '((#:name . "my-manifest")
20049 (#:load-path-inputs . ("guix"))
20050 (#:package-path-inputs . ("custom-packages"))
20051 (#:proc-input . "guix")
20052 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
20053 (#:proc . cuirass-jobs)
20054 (#:proc-args . ((subset . "manifests")
20055 (systems . ("x86_64-linux"))
20056 (manifests . (("config" . "guix/manifest.scm")))))
20057 (#:inputs . (((#:name . "guix")
20058 (#:url . "git://git.savannah.gnu.org/guix.git")
20059 (#:load-path . ".")
20060 (#:branch . "master")
20061 (#:no-compile? . #t))
20062 ((#:name . "config")
20063 (#:url . "git://git.example.org/config.git")
20064 (#:load-path . ".")
20065 (#:branch . "master")
20066 (#:no-compile? . #t))
20067 ((#:name . "custom-packages")
20068 (#:url . "git://git.example.org/custom-packages.git")
20069 (#:load-path . ".")
20070 (#:branch . "master")
20071 (#:no-compile? . #t)))))))
20072
20073(service cuirass-service-type
20074 (cuirass-configuration
20075 (specifications %cuirass-specs)))
20076@end example
20077
20078Tandis que les informations liés aux travaux de construction sont
20079directement dans les spécifications, les paramètres globaux pour le
20080processus @command{cuirass} sont accessibles dans les autres champs de
20081@code{cuirass-configuration}.
bf5c74e7 20082
1d8d69c8 20083@deftp {Type de données} cuirass-configuration
adfb167f 20084Type de données représentant la configuration de Cuirass.
bf5c74e7
JL
20085
20086@table @asis
1d8d69c8 20087@item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
adfb167f 20088Emplacement du fichier de journal.
bf5c74e7 20089
1d8d69c8 20090@item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
adfb167f 20091Emplacement du cache du dépôt.
bf5c74e7 20092
1d8d69c8 20093@item @code{user} (par défaut : @code{"cuirass"})
adfb167f 20094Propriétaire du processus @code{cuirass}.
bf5c74e7 20095
1d8d69c8 20096@item @code{group} (par défaut : @code{"cuirass"})
adfb167f 20097Groupe du propriétaire du processus @code{cuirass}.
bf5c74e7 20098
1d8d69c8 20099@item @code{interval} (par défaut : @code{60})
adfb167f
JL
20100Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
20101Cuirass.
bf5c74e7 20102
adfb167f
JL
20103@item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
20104Emplacement de la base de données sqlite qui contient les résultats de
20105construction et les spécifications précédemment ajoutées.
20106
20107@item @code{ttl} (par défaut : @code{(* 30 24 3600)})
20108Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
20109sont enregistrés comme des résultats de construction. Cela signifie que les
20110résultats de construction ne seront pas glanés pendant au moins @var{ttl}
20111secondes.
bf5c74e7 20112
1d8d69c8 20113@item @code{port} (par défaut : @code{8081})
adfb167f 20114Numéro de port utilisé pour le serveur HTTP.
bf5c74e7 20115
524756d1 20116@item --listen=@var{hôte}
adfb167f
JL
20117Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
20118d'accepter les connexions depuis localhost.
bf5c74e7 20119
1d8d69c8 20120@item @code{specifications} (par défaut : @code{#~'()})
adfb167f
JL
20121Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
20122spécifications, où une spécification est une liste d'association
20123(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
20124clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
20125l'exemple plus haut.
bf5c74e7 20126
1d8d69c8 20127@item @code{use-substitutes?} (par défaut : @code{#f})
adfb167f
JL
20128Cela permet d'utiliser des substituts pour éviter de construire toutes les
20129dépendance d'un travail depuis les sources.
bf5c74e7 20130
1d8d69c8 20131@item @code{one-shot?} (par défaut : @code{#f})
adfb167f 20132N'évaluer les spécification et construire les dérivations qu'une seule fois.
bf5c74e7 20133
1d8d69c8 20134@item @code{fallback?} (par défaut : @code{#f})
adfb167f
JL
20135Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
20136construction locale du paquet.
bf5c74e7 20137
1d8d69c8
JL
20138@item @code{cuirass} (par défaut : @code{cuirass})
20139Le paquet Cuirass à utiliser.
bf5c74e7
JL
20140@end table
20141@end deftp
20142
adfb167f 20143@node Services de gestion de l'énergie
15f1bff4 20144@subsection Services de gestion de l'énergie
bf5c74e7 20145
524756d1 20146@cindex tlp
adfb167f
JL
20147@cindex gestion de l'énergie avec TLP
20148@subsubheading démon TLP
524756d1 20149
adfb167f
JL
20150Le module @code{(gnu services pm)} fournit une définition de service Guix
20151pour l'outil de gestion d'énergie Linux TLP.
bf5c74e7 20152
adfb167f
JL
20153TLP active plusieurs modes un espace utilisateur et dans le noyau.
20154Contrairement à @code{upower-service}, ce n'est pas un outil passif de
20155surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
20156qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
20157d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
20158d'accueil de TLP}.
bf5c74e7 20159
1d8d69c8 20160@deffn {Variable Scheme} tlp-service-type
adfb167f
JL
20161Le type de service pour l'outil TLP. Sa valeur devrait être une
20162configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
20163par défaut, écrivez simplement :
bf5c74e7
JL
20164@example
20165(service tlp-service-type)
20166@end example
20167@end deffn
20168
adfb167f
JL
20169Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
20170des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
bf5c74e7 20171
adfb167f
JL
20172Chaque définition de paramètre est précédée par son type ; par exemple,
20173@samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
20174comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
20175paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
20176valeur est @code{'disabled}.
bf5c74e7
JL
20177
20178@c The following documentation was initially generated by
20179@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
20180@c documentation is better, so we shouldn't hesitate to edit below as
20181@c needed. However if the change you want to make to this documentation
20182@c can be done in an automated way, it's probably easier to change
20183@c (generate-documentation) than to make it below and have to deal with
20184@c the churn as TLP updates.
20185
1d8d69c8 20186Les champs de @code{tlp-configuration} disponibles sont :
bf5c74e7 20187
1d8d69c8 20188@deftypevr {paramètre de @code{tlp-configuration}} package tlp
adfb167f 20189Le paquet TLP.
bf5c74e7
JL
20190
20191@end deftypevr
20192
1d8d69c8 20193@deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
adfb167f 20194Indiquez vrai si vous souhaitez activer TLP.
bf5c74e7 20195
1d8d69c8 20196La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20197
20198@end deftypevr
20199
1d8d69c8 20200@deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
adfb167f
JL
20201Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
20202possibilités sont AC et BAT.
bf5c74e7 20203
1d8d69c8 20204La valeur par défaut est @samp{"AC"}.
bf5c74e7
JL
20205
20206@end deftypevr
20207
1d8d69c8 20208@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
adfb167f
JL
20209Nombre de secondes que le noyau Linux doit attendre après que les disques
20210s'arrêtent pour se synchroniser quand il est sur secteur.
bf5c74e7 20211
1d8d69c8 20212La valeur par défaut est @samp{0}.
bf5c74e7
JL
20213
20214@end deftypevr
20215
1d8d69c8 20216@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
adfb167f 20217Comme @code{disk-idle-ac} mais en mode batterie.
bf5c74e7 20218
1d8d69c8 20219La valeur par défaut est @samp{2}.
bf5c74e7
JL
20220
20221@end deftypevr
20222
1d8d69c8 20223@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
adfb167f 20224Périodicité du nettoyage des pages invalidées, en secondes.
bf5c74e7 20225
1d8d69c8 20226La valeur par défaut est @samp{15}.
bf5c74e7
JL
20227
20228@end deftypevr
20229
1d8d69c8 20230@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
adfb167f 20231Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
bf5c74e7 20232
1d8d69c8 20233La valeur par défaut est @samp{60}.
bf5c74e7
JL
20234
20235@end deftypevr
20236
1d8d69c8 20237@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
adfb167f
JL
20238Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
20239les possibilités sont powersave et performance. Avec le pilote
20240acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
20241conservative.
bf5c74e7 20242
1d8d69c8 20243La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20244
20245@end deftypevr
20246
1d8d69c8 20247@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
adfb167f 20248Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
bf5c74e7 20249
1d8d69c8 20250La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20251
20252@end deftypevr
20253
1d8d69c8 20254@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
adfb167f 20255Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
bf5c74e7 20256
1d8d69c8 20257La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20258
20259@end deftypevr
20260
1d8d69c8 20261@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
adfb167f 20262Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
bf5c74e7 20263
1d8d69c8 20264La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20265
20266@end deftypevr
20267
1d8d69c8 20268@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
adfb167f 20269Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
bf5c74e7 20270
1d8d69c8 20271La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20272
20273@end deftypevr
20274
1d8d69c8 20275@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
adfb167f 20276Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
bf5c74e7 20277
1d8d69c8 20278La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20279
20280@end deftypevr
20281
1d8d69c8 20282@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
adfb167f
JL
20283Limite le P-état minimum pour contrôler la dissipation de puissance dans le
20284CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
20285performances disponibles.
bf5c74e7 20286
1d8d69c8 20287La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20288
20289@end deftypevr
20290
1d8d69c8 20291@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
adfb167f
JL
20292Limite le P-état maximum pour contrôler la dissipation de puissance dans le
20293CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
20294performances disponibles.
bf5c74e7 20295
1d8d69c8 20296La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20297
20298@end deftypevr
20299
1d8d69c8 20300@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
adfb167f 20301Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
bf5c74e7 20302
1d8d69c8 20303La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20304
20305@end deftypevr
20306
1d8d69c8 20307@deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
adfb167f 20308Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
bf5c74e7 20309
1d8d69c8 20310La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20311
20312@end deftypevr
20313
1d8d69c8 20314@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
adfb167f 20315Active la fonctionnalité turbo boost du CPU sur secteur.
bf5c74e7 20316
1d8d69c8 20317La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20318
20319@end deftypevr
20320
1d8d69c8 20321@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
adfb167f 20322Comme @code{cpu-boost-on-ac?} mais en mode batterie.
bf5c74e7 20323
1d8d69c8 20324La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20325
20326@end deftypevr
20327
1d8d69c8 20328@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
adfb167f
JL
20329Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
20330utilisés lorsque la charge est faible.
bf5c74e7 20331
1d8d69c8 20332La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20333
20334@end deftypevr
20335
1d8d69c8 20336@deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
adfb167f 20337Comme @code{sched-powersave-on-ac?} mais en mode batterie.
bf5c74e7 20338
1d8d69c8 20339La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20340
20341@end deftypevr
20342
1d8d69c8 20343@deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
adfb167f 20344Active le chien de garde NMI du noyau Linux.
bf5c74e7 20345
1d8d69c8 20346La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20347
20348@end deftypevr
20349
1d8d69c8 20350@deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
adfb167f
JL
20351Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
20352valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
bf5c74e7 20353
1d8d69c8 20354La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20355
20356@end deftypevr
20357
1d8d69c8 20358@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
adfb167f
JL
20359Indique le niveau de performance du CPU par rapport à la politique de
20360gestion de l'énergie sur secteur. Les possibilités sont performance, normal
20361et powersave.
bf5c74e7 20362
1d8d69c8 20363La valeur par défaut est @samp{"performance"}.
bf5c74e7
JL
20364
20365@end deftypevr
20366
1d8d69c8 20367@deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
adfb167f 20368Comme @code{energy-perf-policy-ac} mais en mode batterie.
bf5c74e7 20369
1d8d69c8 20370La valeur par défaut est @samp{"powersave"}.
bf5c74e7
JL
20371
20372@end deftypevr
20373
1d8d69c8 20374@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
adfb167f 20375Périphériques de disque dur.
bf5c74e7
JL
20376
20377@end deftypevr
20378
1d8d69c8 20379@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
adfb167f 20380Niveau de gestion de l'énergie avancé des disques durs.
bf5c74e7
JL
20381
20382@end deftypevr
20383
1d8d69c8 20384@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
adfb167f 20385Comme @code{disk-apm-bat} mais en mode batterie.
bf5c74e7
JL
20386
20387@end deftypevr
20388
1d8d69c8 20389@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
adfb167f
JL
20390Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
20391être spécifiée pour chaque disque dur déclaré.
bf5c74e7 20392
1d8d69c8 20393La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20394
20395@end deftypevr
20396
1d8d69c8 20397@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
adfb167f 20398Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
bf5c74e7 20399
1d8d69c8 20400La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20401
20402@end deftypevr
20403
1d8d69c8 20404@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
adfb167f
JL
20405Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
20406doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
20407exemple cfq, deadline et noop.
bf5c74e7 20408
1d8d69c8 20409La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20410
20411@end deftypevr
20412
1d8d69c8 20413@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
adfb167f
JL
20414Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
20415possibilités sont min_power, medium_power et max_performance.
bf5c74e7 20416
1d8d69c8 20417La valeur par défaut est @samp{"max_performance"}.
bf5c74e7
JL
20418
20419@end deftypevr
20420
1d8d69c8 20421@deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
adfb167f 20422Comme @code{sata-linkpwr-ac} mais en mode batterie.
bf5c74e7 20423
1d8d69c8 20424La valeur par défaut est @samp{"min_power"}.
bf5c74e7
JL
20425
20426@end deftypevr
20427
1d8d69c8 20428@deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
adfb167f 20429Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
bf5c74e7 20430
1d8d69c8 20431La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20432
20433@end deftypevr
20434
1d8d69c8 20435@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
adfb167f
JL
20436Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
20437les disques, sur secteur
bf5c74e7 20438
1d8d69c8 20439La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20440
20441@end deftypevr
20442
1d8d69c8 20443@deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
adfb167f 20444Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
bf5c74e7 20445
1d8d69c8 20446La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20447
20448@end deftypevr
20449
1d8d69c8 20450@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
adfb167f 20451Secondes d'inactivités avant de suspendre les disques.
bf5c74e7 20452
1d8d69c8 20453La valeur par défaut est @samp{15}.
bf5c74e7
JL
20454
20455@end deftypevr
20456
1d8d69c8 20457@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
adfb167f
JL
20458Niveau de gestion de l'énergie des états actifs de PCI Express. Les
20459possibilités sont default, performance et powersave.
bf5c74e7 20460
1d8d69c8 20461La valeur par défaut est @samp{"performance"}.
bf5c74e7
JL
20462
20463@end deftypevr
20464
1d8d69c8 20465@deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
adfb167f 20466Comme @code{pcie-aspm-ac} mais en mode batterie.
bf5c74e7 20467
1d8d69c8 20468La valeur par défaut est @samp{"powersave"}.
bf5c74e7
JL
20469
20470@end deftypevr
20471
1d8d69c8 20472@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
adfb167f
JL
20473Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
20474possibilités sont low, mid, high, auto et default.
bf5c74e7 20475
1d8d69c8 20476La valeur par défaut est @samp{"high"}.
bf5c74e7
JL
20477
20478@end deftypevr
20479
1d8d69c8 20480@deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
adfb167f 20481Comme @code{radeon-power-ac} mais en mode batterie.
bf5c74e7 20482
1d8d69c8 20483La valeur par défaut est @samp{"low"}.
bf5c74e7
JL
20484
20485@end deftypevr
20486
1d8d69c8 20487@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
adfb167f
JL
20488Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
20489sont battery et performance.
bf5c74e7 20490
1d8d69c8 20491La valeur par défaut est @samp{"performance"}.
bf5c74e7
JL
20492
20493@end deftypevr
20494
1d8d69c8 20495@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
adfb167f 20496Comme @code{radeon-dpm-state-ac} mais en mode batterie.
bf5c74e7 20497
1d8d69c8 20498La valeur par défaut est @samp{"battery"}.
bf5c74e7
JL
20499
20500@end deftypevr
20501
1d8d69c8 20502@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
adfb167f 20503Niveau de performance de DPM. Les possibilités sont auto, low et high.
bf5c74e7 20504
1d8d69c8 20505La valeur par défaut est @samp{"auto"}.
bf5c74e7
JL
20506
20507@end deftypevr
20508
1d8d69c8 20509@deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
adfb167f 20510Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
bf5c74e7 20511
1d8d69c8 20512La valeur par défaut est @samp{"auto"}.
bf5c74e7
JL
20513
20514@end deftypevr
20515
1d8d69c8 20516@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
adfb167f 20517Mode de gestion de l'énergie wifi.
bf5c74e7 20518
1d8d69c8 20519La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20520
20521@end deftypevr
20522
1d8d69c8 20523@deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
adfb167f 20524Comme @code{wifi-power-ac?} mais en mode batterie.
bf5c74e7 20525
1d8d69c8 20526La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20527
20528@end deftypevr
20529
1d8d69c8 20530@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
adfb167f 20531Désactive wake on LAN.
bf5c74e7 20532
1d8d69c8 20533La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20534
20535@end deftypevr
20536
1d8d69c8 20537@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
adfb167f
JL
20538Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
20539sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
20540de l'énergie.
bf5c74e7 20541
1d8d69c8 20542La valeur par défaut est @samp{0}.
bf5c74e7
JL
20543
20544@end deftypevr
20545
1d8d69c8 20546@deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
adfb167f 20547Comme @code{sound-powersave-ac} mais en mode batterie.
bf5c74e7 20548
1d8d69c8 20549La valeur par défaut est @samp{1}.
bf5c74e7
JL
20550
20551@end deftypevr
20552
1d8d69c8 20553@deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
adfb167f
JL
20554Désactive le contrôleur en mode de gestion de l'énergie sur les
20555périphériques Intel HDA.
bf5c74e7 20556
1d8d69c8 20557La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20558
20559@end deftypevr
20560
1d8d69c8 20561@deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
adfb167f
JL
20562Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
20563périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
20564levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
20565plus récents.
bf5c74e7 20566
1d8d69c8 20567La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20568
20569@end deftypevr
20570
1d8d69c8 20571@deftypevr {paramètre de @code{tlp-configuration}} string bay-device
adfb167f 20572Nom du périphérique optique à éteindre.
bf5c74e7 20573
1d8d69c8 20574La valeur par défaut est @samp{"sr0"}.
bf5c74e7
JL
20575
20576@end deftypevr
20577
1d8d69c8 20578@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
adfb167f
JL
20579Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
20580sont on et auto.
bf5c74e7 20581
1d8d69c8 20582La valeur par défaut est @samp{"on"}.
bf5c74e7
JL
20583
20584@end deftypevr
20585
1d8d69c8 20586@deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
adfb167f 20587Comme @code{runtime-pm-ac} mais en mode batterie.
bf5c74e7 20588
1d8d69c8 20589La valeur par défaut est @samp{"auto"}.
bf5c74e7
JL
20590
20591@end deftypevr
20592
1d8d69c8 20593@deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
adfb167f
JL
20594Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
20595liste noire.
bf5c74e7 20596
1d8d69c8 20597La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20598
20599@end deftypevr
20600
1d8d69c8 20601@deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
adfb167f
JL
20602Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
20603l'énergie à l'exécution.
bf5c74e7 20604
1d8d69c8 20605La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20606
20607@end deftypevr
20608
1d8d69c8 20609@deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
adfb167f
JL
20610Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
20611de l'énergie à l'exécution.
bf5c74e7
JL
20612
20613@end deftypevr
20614
1d8d69c8 20615@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
adfb167f 20616Active la fonctionnalité de mise en veille automatique de l'USB.
bf5c74e7 20617
1d8d69c8 20618La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20619
20620@end deftypevr
20621
1d8d69c8 20622@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
adfb167f
JL
20623Exclue les périphériques spécifiés de la mise en veille automatique de
20624l'USB.
bf5c74e7 20625
1d8d69c8 20626La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20627
20628@end deftypevr
20629
1d8d69c8 20630@deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
adfb167f 20631Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
bf5c74e7 20632
1d8d69c8 20633La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20634
20635@end deftypevr
20636
1d8d69c8 20637@deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
adfb167f
JL
20638Inclue les périphériques spécifiés dans la mise en veille automatique de
20639l'USB, même s'ils sont déjà exclus par le pilote ou via
20640@code{usb-blacklist-wwan?}.
bf5c74e7 20641
1d8d69c8 20642La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20643
20644@end deftypevr
20645
1d8d69c8 20646@deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
adfb167f 20647Active la mise en veille de l'USB avant l'arrêt.
bf5c74e7 20648
1d8d69c8 20649La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
20650
20651@end deftypevr
20652
1d8d69c8 20653@deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
adfb167f
JL
20654Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
20655arrêt au démarrage du système.
bf5c74e7 20656
1d8d69c8 20657La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20658
20659@end deftypevr
20660
524756d1 20661@cindex thermald
adfb167f
JL
20662@cindex gestion de la fréquence du CPU avec thermald
20663@subsubheading démon Thermald
bf5c74e7 20664
adfb167f
JL
20665Le module @code{(gnu services pm)} fournit une interface pour thermald, un
20666service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
bf5c74e7 20667
1d8d69c8 20668@defvr {Variable Scheme} thermald-service-type
adfb167f
JL
20669C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
20670thermald}, le démon de température de Linux, responsable du contrôle de
20671l'état thermique des processeurs et d'éviter la surchauffe.
bf5c74e7
JL
20672@end defvr
20673
1d8d69c8 20674@deftp {Type de données} thermald-configuration
adfb167f
JL
20675Type de données représentant la configuration de
20676@code{thermald-service-type}.
bf5c74e7
JL
20677
20678@table @asis
1d8d69c8 20679@item @code{ignore-cpuid-check?} (par défaut : @code{#f})
adfb167f 20680Ignore la vérification des modèles CPU supportés avec cpuid.
bf5c74e7 20681
1d8d69c8 20682@item @code{thermald} (par défaut : @var{thermald})
adfb167f 20683Objet du paquet de thermald.
bf5c74e7
JL
20684
20685@end table
20686@end deftp
20687
3cacfa9e 20688@node Services audio
15f1bff4 20689@subsection Services audio
bf5c74e7 20690
adfb167f
JL
20691Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
20692démon de lecture de musique).
bf5c74e7
JL
20693
20694@cindex mpd
20695@subsubheading Music Player Daemon
20696
adfb167f
JL
20697Le démon de lecture de musique (MPD) est un service qui joue de la musique
20698tout en étant contrôlé depuis la machine locale ou à travers le réseau par
20699divers clients.
bf5c74e7 20700
adfb167f
JL
20701L'exemple suivant montre comment on peut lancer @code{mpd} en tant
20702qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
20703pour la sortie audio.
bf5c74e7
JL
20704
20705@example
20706(service mpd-service-type
20707 (mpd-configuration
20708 (user "bob")
20709 (port "6666")))
20710@end example
20711
1d8d69c8 20712@defvr {Variable Scheme} mpd-service-type
adfb167f 20713Le type de service pour @command{mpd}.
bf5c74e7
JL
20714@end defvr
20715
1d8d69c8 20716@deftp {Type de données} mpd-configuration
adfb167f 20717Type de données représentant la configuration de @command{mpd}.
bf5c74e7
JL
20718
20719@table @asis
1d8d69c8 20720@item @code{user} (par défaut : @code{"mpd"})
adfb167f 20721L'utilisateur qui lance mpd.
bf5c74e7 20722
1d8d69c8 20723@item @code{music-dir} (par défaut : @code{"~/Music"})
adfb167f 20724Le répertoire à scanner pour trouver les fichiers de musique.
bf5c74e7 20725
1d8d69c8 20726@item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
adfb167f 20727Le répertoire où stocker les playlists.
bf5c74e7 20728
1d8d69c8 20729@item @code{port} (par défaut : @code{"6600"})
adfb167f 20730Le port sur lequel lancer mpd.
bf5c74e7 20731
1d8d69c8 20732@item @code{address} (par défaut : @code{"any"})
adfb167f
JL
20733L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
20734chemin absolu peut être spécifié ici.
bf5c74e7
JL
20735
20736@end table
20737@end deftp
20738
3cacfa9e 20739@node Services de virtualisation
15f1bff4 20740@subsection services de virtualisation
bf5c74e7 20741
adfb167f
JL
20742Le module @code{(gnu services virtualization)} fournit des services pour les
20743démons libvirt et virtlog, ainsi que d'autres services liés à la
20744virtualisation.
bf5c74e7 20745
adfb167f
JL
20746@subsubheading démon libvirt
20747@code{libvirtd} est le démon côté serveur du système de gestion de
20748virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
20749les taches de gestion requises pour les clients virtualisés.
bf5c74e7 20750
1d8d69c8 20751@deffn {Variable Scheme} libvirt-service-type
adfb167f
JL
20752C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
20753être un @code{libvirt-configuration}.
bf5c74e7
JL
20754
20755@example
20756(service libvirt-service-type
20757 (libvirt-configuration
20758 (unix-sock-group "libvirt")
20759 (tls-port "16555")))
20760@end example
20761@end deffn
20762
20763@c Auto-generated with (generate-libvirt-documentation)
1d8d69c8 20764Les champs de @code{libvirt-configuration} disponibles sont :
bf5c74e7 20765
1d8d69c8 20766@deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
adfb167f 20767Paquet libvirt.
bf5c74e7
JL
20768
20769@end deftypevr
20770
1d8d69c8 20771@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
adfb167f
JL
20772Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
20773public. Vous devez remplir le champ @code{listen} pour que cela ait un
20774effet.
bf5c74e7 20775
adfb167f
JL
20776Il est nécessaire de mettre en place une CA et de créer un certificat
20777serveur avant d'utiliser cette fonctionnalité.
bf5c74e7 20778
1d8d69c8 20779La valeur par défaut est @samp{#t}.
bf5c74e7
JL
20780
20781@end deftypevr
20782
1d8d69c8 20783@deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
adfb167f
JL
20784Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
20785remplir le champ @code{listen} pour que cela ait un effet.
bf5c74e7 20786
adfb167f
JL
20787L'utilisation des sockets TCP requiert une authentification SASL par
20788défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
20789sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
bf5c74e7 20790
1d8d69c8 20791La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20792
20793@end deftypevr
20794
1d8d69c8 20795@deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
adfb167f
JL
20796Pour pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
20797numéro de port ou d'un nom de service.
bf5c74e7 20798
1d8d69c8 20799La valeur par défaut est @samp{"16514"}.
bf5c74e7
JL
20800
20801@end deftypevr
20802
1d8d69c8 20803@deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
adfb167f
JL
20804Pour sur lequel accepter les connexions TCP non sécurisées. Cela peut être
20805un numéro de port ou un nom de service.
bf5c74e7 20806
1d8d69c8 20807La valeur par défaut est @samp{"16509"}.
bf5c74e7
JL
20808
20809@end deftypevr
20810
1d8d69c8 20811@deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
adfb167f 20812Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
bf5c74e7 20813
1d8d69c8 20814La valeur par défaut est @samp{"0.0.0.0"}.
bf5c74e7
JL
20815
20816@end deftypevr
20817
1d8d69c8 20818@deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
adfb167f 20819Indique s'il faut publier le service libvirt en mDNS.
bf5c74e7 20820
adfb167f
JL
20821Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
20822démon Avahi.
bf5c74e7 20823
1d8d69c8 20824La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20825
20826@end deftypevr
20827
1d8d69c8 20828@deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
adfb167f 20829Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
bf5c74e7 20830
1d8d69c8 20831La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
bf5c74e7
JL
20832
20833@end deftypevr
20834
1d8d69c8 20835@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
adfb167f
JL
20836Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
20837permettre à un ensemble d'utilisateurs « de confiance » de gérer les
20838fonctionnalités sans devenir root.
bf5c74e7 20839
1d8d69c8 20840La valeur par défaut est @samp{"root"}.
bf5c74e7
JL
20841
20842@end deftypevr
20843
1d8d69c8 20844@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
adfb167f
JL
20845Permission Unix pour le socket en lecture seule. Il est utilisé pour
20846surveiller le statut des VM uniquement.
bf5c74e7 20847
1d8d69c8 20848La valeur par défaut est @samp{"0777"}.
bf5c74e7
JL
20849
20850@end deftypevr
20851
1d8d69c8 20852@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
adfb167f
JL
20853Permission Unix pour le socket en lecture-écriture. La valeur par défaut
20854n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
20855défaut change et permet tout le monde (c.-à-d.@: 0777).
bf5c74e7 20856
1d8d69c8 20857La valeur par défaut est @samp{"0770"}.
bf5c74e7
JL
20858
20859@end deftypevr
20860
1d8d69c8 20861@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
adfb167f
JL
20862permissions Unix pour le socket d'administration. La valeur par défaut ne
20863permet que le propriétaire (root), ne la changez pas à moins que vous ne
20864soyez sûr de savoir à qui vous exposez cet accès.
bf5c74e7 20865
1d8d69c8 20866La valeur par défaut est @samp{"0777"}.
bf5c74e7
JL
20867
20868@end deftypevr
20869
1d8d69c8 20870@deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
adfb167f 20871Le répertoire dans lequel les sockets sont créés.
bf5c74e7 20872
1d8d69c8 20873La valeur par défaut est @samp{"/var/run/libvirt"}.
bf5c74e7
JL
20874
20875@end deftypevr
20876
1d8d69c8 20877@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
adfb167f
JL
20878Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
20879les permissions des socket permettent à n'importe qui de se connecter.
bf5c74e7 20880
1d8d69c8 20881La valeur par défaut est @samp{"polkit"}.
bf5c74e7
JL
20882
20883@end deftypevr
20884
1d8d69c8 20885@deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
adfb167f
JL
20886Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
20887défaut les permissions du socket ne permettent que root. Si le support de
20888PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
20889l'authentification « polkit ».
bf5c74e7 20890
1d8d69c8 20891La valeur par défaut est @samp{"polkit"}.
bf5c74e7
JL
20892
20893@end deftypevr
20894
1d8d69c8 20895@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
adfb167f
JL
20896Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
20897SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
20898scénario de développement ou de test.
bf5c74e7 20899
1d8d69c8 20900La valeur par défaut est @samp{"sasl"}.
bf5c74e7
JL
20901
20902@end deftypevr
20903
1d8d69c8 20904@deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
adfb167f
JL
20905Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
20906chiffrés par la couche TLS, et une authentification limitée est effectuée
20907avec les certificats.
bf5c74e7 20908
adfb167f
JL
20909Il est possible d'utiliser de n'importe quel mécanisme d'authentification
20910SASL en utilisant « sasl » pour cette option.
bf5c74e7 20911
1d8d69c8 20912La valeur par défaut est @samp{"none"}.
bf5c74e7
JL
20913
20914@end deftypevr
20915
1d8d69c8 20916@deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
adfb167f 20917Schéma de contrôle d'accès à l'API.
bf5c74e7 20918
adfb167f
JL
20919Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
20920pilotes d'accès peuvent placer des restrictions là-dessus.
bf5c74e7 20921
1d8d69c8 20922La valeur par défaut est @samp{()}.
bf5c74e7
JL
20923
20924@end deftypevr
20925
1d8d69c8 20926@deftypevr {paramètre de @code{libvirt-configuration}} string key-file
adfb167f
JL
20927Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
20928aucune clef privée n'est chargée.
bf5c74e7 20929
1d8d69c8 20930La valeur par défaut est @samp{""}.
bf5c74e7
JL
20931
20932@end deftypevr
20933
1d8d69c8 20934@deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
adfb167f
JL
20935Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
20936certificat n'est chargé.
bf5c74e7 20937
1d8d69c8 20938La valeur par défaut est @samp{""}.
bf5c74e7
JL
20939
20940@end deftypevr
20941
1d8d69c8 20942@deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
adfb167f
JL
20943Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
20944certificat de CA n'est chargé.
bf5c74e7 20945
1d8d69c8 20946La valeur par défaut est @samp{""}.
bf5c74e7
JL
20947
20948@end deftypevr
20949
1d8d69c8 20950@deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
adfb167f
JL
20951Chemin de la liste de révocation des certificats. Si la chaîne est vide,
20952aucun CRL n'est chargé.
bf5c74e7 20953
1d8d69c8 20954La valeur par défaut est @samp{""}.
bf5c74e7
JL
20955
20956@end deftypevr
20957
1d8d69c8 20958@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
adfb167f 20959Désactive la vérification de nos propres certificats serveurs.
bf5c74e7 20960
adfb167f
JL
20961Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
20962propres certificats.
bf5c74e7 20963
1d8d69c8 20964La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20965
20966@end deftypevr
20967
1d8d69c8 20968@deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
adfb167f 20969Désactive la vérification des certificats clients.
bf5c74e7 20970
adfb167f
JL
20971La vérification des certificats clients est le mécanisme d'authentification
20972principal. Tout client qui ne présent pas de certificat signé par la CA
20973sera rejeté.
bf5c74e7 20974
1d8d69c8 20975La valeur par défaut est @samp{#f}.
bf5c74e7
JL
20976
20977@end deftypevr
20978
1d8d69c8 20979@deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
adfb167f 20980Liste blanche des Distinguished Name x509 autorisés.
bf5c74e7 20981
1d8d69c8 20982La valeur par défaut est @samp{()}.
bf5c74e7
JL
20983
20984@end deftypevr
20985
1d8d69c8 20986@deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
adfb167f
JL
20987Liste blanche des noms d'utilisateur SASL permis. Le format des noms
20988d'utilisateurs dépend du mécanisme d'authentification SASL.
bf5c74e7 20989
1d8d69c8 20990La valeur par défaut est @samp{()}.
bf5c74e7
JL
20991
20992@end deftypevr
20993
1d8d69c8 20994@deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
adfb167f
JL
20995Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
20996valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
20997modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
20998agisse différemment des paramètres par défaut globaux.
bf5c74e7 20999
1d8d69c8 21000La valeur par défaut est @samp{"NORMAL"}.
bf5c74e7
JL
21001
21002@end deftypevr
21003
1d8d69c8 21004@deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
adfb167f 21005Nombre maximum de connexions clientes en même temps sur tous les sockets.
bf5c74e7 21006
1d8d69c8 21007La valeur par défaut est @samp{5000}.
bf5c74e7
JL
21008
21009@end deftypevr
21010
1d8d69c8 21011@deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
adfb167f
JL
21012Longueur maximum de la queue de connexions en attente d'acceptation du
21013démon. Remarquez que certains protocoles supportant la retransmission
21014peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
bf5c74e7 21015
1d8d69c8 21016La valeur par défaut est @samp{1000}.
bf5c74e7
JL
21017
21018@end deftypevr
21019
1d8d69c8 21020@deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
adfb167f
JL
21021Longueur maximum de la queue des clients acceptés mais pas authentifiés.
21022Indiquez zéro pour désactiver ce paramètre.
bf5c74e7 21023
1d8d69c8 21024La valeur par défaut est @samp{20}.
bf5c74e7
JL
21025
21026@end deftypevr
21027
1d8d69c8 21028@deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
adfb167f 21029Nombre de processus de travail démarrés initialement.
bf5c74e7 21030
1d8d69c8 21031La valeur par défaut est @samp{5}.
bf5c74e7
JL
21032
21033@end deftypevr
21034
1d8d69c8 21035@deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
adfb167f 21036Nombre maximum de threads de travail.
bf5c74e7 21037
adfb167f
JL
21038Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
21039seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
21040que max_workers soit égal au nombre maximum de clients permis.
bf5c74e7 21041
1d8d69c8 21042La valeur par défaut est @samp{20}.
bf5c74e7
JL
21043
21044@end deftypevr
21045
1d8d69c8 21046@deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
adfb167f
JL
21047Nombre de travailleurs prioritaires. Si tous les threads de travail du
21048groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
21049(notamment domainDestroy) peuvent être exécutés par ce groupe.
bf5c74e7 21050
1d8d69c8 21051La valeur par défaut est @samp{5}.
bf5c74e7
JL
21052
21053@end deftypevr
21054
1d8d69c8 21055@deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
adfb167f 21056Limite globale totale sur les appels RPC concurrents.
bf5c74e7 21057
1d8d69c8 21058La valeur par défaut est @samp{20}.
bf5c74e7
JL
21059
21060@end deftypevr
21061
1d8d69c8 21062@deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
15f1bff4
JL
21063Limite de requêtes concurrentes depuis une connexion cliente unique. Pour
21064éviter qu'un client ne monopolise le serveur, vous devriez indiquer une
21065petite partie des paramètres global max_requests et max_workers.
bf5c74e7 21066
1d8d69c8 21067La valeur par défaut est @samp{5}.
bf5c74e7
JL
21068
21069@end deftypevr
21070
1d8d69c8 21071@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
15f1bff4 21072Comme @code{min-workers} mais pour l'interface d'administration.
bf5c74e7 21073
1d8d69c8 21074La valeur par défaut est @samp{1}.
bf5c74e7
JL
21075
21076@end deftypevr
21077
1d8d69c8 21078@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
15f1bff4 21079Comme @code{max-workers} mais pour l'interface d'administration.
bf5c74e7 21080
1d8d69c8 21081La valeur par défaut est @samp{5}.
bf5c74e7
JL
21082
21083@end deftypevr
21084
1d8d69c8 21085@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
15f1bff4 21086Comme @code{max-clients} mais pour l'interface d'administration.
bf5c74e7 21087
1d8d69c8 21088La valeur par défaut est @samp{5}.
bf5c74e7
JL
21089
21090@end deftypevr
21091
1d8d69c8 21092@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
15f1bff4 21093Comme @code{max-queued-clients} mais pour l'interface d'administration.
bf5c74e7 21094
1d8d69c8 21095La valeur par défaut est @samp{5}.
bf5c74e7
JL
21096
21097@end deftypevr
21098
1d8d69c8 21099@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
15f1bff4 21100Comme @code{max-client-requests} mais pour l'interface d'administration.
bf5c74e7 21101
1d8d69c8 21102La valeur par défaut est @samp{5}.
bf5c74e7
JL
21103
21104@end deftypevr
21105
1d8d69c8 21106@deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
15f1bff4
JL
21107Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
211081 : débogage.
bf5c74e7 21109
1d8d69c8 21110La valeur par défaut est @samp{3}.
bf5c74e7
JL
21111
21112@end deftypevr
21113
1d8d69c8 21114@deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
15f1bff4 21115Filtres de journalisation.
bf5c74e7 21116
15f1bff4
JL
21117Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
21118pour une catégorie donnée. Le format d'un filtre est :
bf5c74e7
JL
21119
21120@itemize @bullet
21121@item
adfb167f 21122x:nom
bf5c74e7
JL
21123
21124@item
adfb167f 21125x:+nom
bf5c74e7
JL
21126
21127@end itemize
21128
15f1bff4
JL
21129où @code{nom} est une chaîne de caractères qui correspond à la catégorie
21130donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
21131libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
21132filtre peut être une sous-chaîne du nom complet de la catégorie, pour
21133pouvoir correspondre à plusieurs catégories similaires), le préfixe
21134facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
21135message qui correspond au nom, et @code{x} est le niveau minimal des
21136messages qui devraient être enregistrés :
bf5c74e7
JL
21137
21138@itemize @bullet
21139@item
15f1bff4 211401 : DEBUG
bf5c74e7
JL
21141
21142@item
15f1bff4 211432 : INFO
bf5c74e7
JL
21144
21145@item
15f1bff4 211463 : WARNING
bf5c74e7
JL
21147
21148@item
15f1bff4 211494 : ERROR
bf5c74e7
JL
21150
21151@end itemize
21152
15f1bff4
JL
21153On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
21154doivent juste être séparés par des espaces.
bf5c74e7 21155
1d8d69c8 21156La valeur par défaut est @samp{"3:remote 4:event"}.
bf5c74e7
JL
21157
21158@end deftypevr
21159
1d8d69c8 21160@deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
15f1bff4 21161Sorties de débogage.
bf5c74e7 21162
15f1bff4
JL
21163Une sortie est l'un des endroits où les journaux sont enregistrés. Le
21164format d'une sortie peut être :
bf5c74e7
JL
21165
21166@table @code
21167@item x:stderr
15f1bff4 21168la sortie va vers stderr
bf5c74e7 21169
15f1bff4
JL
21170@item x:syslog:nom
21171utilise syslog comme sortie et utilise le nom donné comme identifiant
bf5c74e7 21172
15f1bff4
JL
21173@item x:file:chemin_fichier
21174la sortie va vers un fichier, avec le chemin donné
bf5c74e7
JL
21175
21176@item x:journald
15f1bff4 21177la sortie va vers le système de journalisation journald
bf5c74e7
JL
21178
21179@end table
21180
15f1bff4
JL
21181Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
21182filtre
bf5c74e7
JL
21183
21184@itemize @bullet
21185@item
15f1bff4 211861 : DEBUG
bf5c74e7
JL
21187
21188@item
15f1bff4 211892 : INFO
bf5c74e7
JL
21190
21191@item
15f1bff4 211923 : WARNING
bf5c74e7
JL
21193
21194@item
15f1bff4 211954 : ERROR
bf5c74e7
JL
21196
21197@end itemize
21198
15f1bff4
JL
21199Plusieurs sorties peuvent être définies, elles doivent juste être séparées
21200par des espaces.
bf5c74e7 21201
1d8d69c8 21202La valeur par défaut est @samp{"3:stderr"}.
bf5c74e7
JL
21203
21204@end deftypevr
21205
1d8d69c8 21206@deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
15f1bff4 21207Permet de modifier l'utilisation du sous-système d'audit.
bf5c74e7
JL
21208
21209@itemize @bullet
21210@item
15f1bff4 212110 : désactive tout audit
bf5c74e7
JL
21212
21213@item
15f1bff4 212141 : active l'audit, seulement s'il est activé sur l'hôte
bf5c74e7
JL
21215
21216@item
15f1bff4 212172 : active l'audit, et quitte s'il est désactivé sur l'hôte.
bf5c74e7
JL
21218
21219@end itemize
21220
1d8d69c8 21221La valeur par défaut est @samp{1}.
bf5c74e7
JL
21222
21223@end deftypevr
21224
1d8d69c8 21225@deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
15f1bff4
JL
21226Envoie les messages d'audit via l'infrastructure de journalisation de
21227libvirt
bf5c74e7 21228
1d8d69c8 21229La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21230
21231@end deftypevr
21232
1d8d69c8 21233@deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
15f1bff4 21234UUID de l'hôte. L'UUID ne doit pas avoir tous ses nombres identiques.
bf5c74e7 21235
1d8d69c8 21236La valeur par défaut est @samp{""}.
bf5c74e7
JL
21237
21238@end deftypevr
21239
1d8d69c8 21240@deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
15f1bff4 21241Source où lire l'UUID de l'hôte.
bf5c74e7
JL
21242
21243@itemize @bullet
21244@item
15f1bff4 21245@code{smbios} : récupère l'UUID à partir de @code{dmidecode -s system-uuid}
bf5c74e7
JL
21246
21247@item
15f1bff4 21248@code{machine-id} : récupère l'UUID à partir de @code{/etc/machine-id}
bf5c74e7
JL
21249
21250@end itemize
21251
15f1bff4
JL
21252Si @code{dmidecode} ne fournit pas un UUID valide, un UUID temporaire sera
21253généré.
bf5c74e7 21254
1d8d69c8 21255La valeur par défaut est @samp{"smbios"}.
bf5c74e7
JL
21256
21257@end deftypevr
21258
1d8d69c8 21259@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
15f1bff4
JL
21260Un message keepalive est envoyé au client après @code{keepalive_interval}
21261secondes d'inactivité pour vérifier si le client répond toujours. Si la
21262valeur est -1, libvirtd n'enverra jamais de requête keepalive ; cependant
21263les clients peuvent toujours en envoyer et le démon y répondra.
bf5c74e7 21264
1d8d69c8 21265La valeur par défaut est @samp{5}.
bf5c74e7
JL
21266
21267@end deftypevr
21268
1d8d69c8 21269@deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
15f1bff4
JL
21270Nombre maximum de messages keepalive qui peuvent être envoyés au client sans
21271réponse avant que la connexion ne soit considérée comme cassée.
bf5c74e7 21272
15f1bff4
JL
21273En d'autres termes, la connexion est approximativement fermée après
21274@code{keepalive_interval * (keepalive_count + 1)} secondes après le dernier
21275message reçu de la part du client. Lorsque @code{keepalive-count} est à 0,
21276les connexions seront automatiquement fermées après
21277@code{keepalive-interval} secondes d'inactivité sans envoyer le moindre
21278message keepalive.
bf5c74e7 21279
1d8d69c8 21280La valeur par défaut est @samp{5}.
bf5c74e7
JL
21281
21282@end deftypevr
21283
1d8d69c8 21284@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
15f1bff4 21285Comme précédemment, mais pour l'interface d'administration.
bf5c74e7 21286
1d8d69c8 21287La valeur par défaut est @samp{5}.
bf5c74e7
JL
21288
21289@end deftypevr
21290
1d8d69c8 21291@deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
15f1bff4 21292Comme précédemment, mais pour l'interface d'administration.
bf5c74e7 21293
1d8d69c8 21294La valeur par défaut est @samp{5}.
bf5c74e7
JL
21295
21296@end deftypevr
21297
1d8d69c8 21298@deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
15f1bff4 21299Délai d'attente pour les appels Open vSwitch.
bf5c74e7 21300
15f1bff4
JL
21301L'utilitaire @code{ovs-vsctl} est utilisé pour la configuration et son
21302option de délai d'attente est à 5 secondes pour éviter qu'une attente
21303infinie ne bloque libvirt.
bf5c74e7 21304
1d8d69c8 21305La valeur par défaut est @samp{5}.
bf5c74e7
JL
21306
21307@end deftypevr
21308
21309@c %end of autogenerated docs
21310
adfb167f 21311@subsubheading démon Virrlog
15f1bff4
JL
21312Le service virtlogd est un démon côté serveur qui fait partie de libvirt,
21313utilisé pour gérer les journaux des consoles des machines virtuelles.
bf5c74e7 21314
15f1bff4
JL
21315Ce démon n'est pas utilisé directement par les clients libvirt, mais il est
21316appelé pour eux par @code{libvirtd}. En maintenant les journaux dans un
21317démon séparé, le démon @code{libvirtd} principal peut être redémarré sans
21318risque de perte de journaux. Le démon @code{virtlogd} a la possibilité de
21319ré-exécuter exec() sur lui-même quand il reçoit @code{SIGUSR1}, pour
21320permettre des mises à jour à chaux sans temps mort.
bf5c74e7 21321
1d8d69c8 21322@deffn {Variable Scheme} virtlog-service-type
15f1bff4 21323Le type de service pour le démon virtlogd. Sa valeur doit être un
bf5c74e7
JL
21324@code{virtlog-configuration}.
21325
21326@example
21327(service virtlog-service-type
21328 (virtlog-configuration
21329 (max-clients 1000)))
21330@end example
21331@end deffn
21332
1d8d69c8 21333@deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
15f1bff4
JL
21334Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information,
213351 : débogage.
bf5c74e7 21336
1d8d69c8 21337La valeur par défaut est @samp{3}.
bf5c74e7
JL
21338
21339@end deftypevr
21340
1d8d69c8 21341@deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
15f1bff4 21342Filtres de journalisation.
bf5c74e7 21343
15f1bff4
JL
21344Un filtre qui permet de sélectionner plusieurs niveaux de journalisation
21345pour une catégorie donnée. Le format d'un filtre est :
bf5c74e7
JL
21346
21347@itemize @bullet
21348@item
adfb167f 21349x:nom
bf5c74e7
JL
21350
21351@item
adfb167f 21352x:+nom
bf5c74e7
JL
21353
21354@end itemize
21355
15f1bff4
JL
21356où @code{nom} est une chaîne de caractères qui correspond à la catégorie
21357donnée dans @code{VIR_LOG_INIT()} au début de chaque fichier source de
21358libvirt, p.@: ex.@: « remote », « qemu » ou « util.json » (le nom dans le
21359filtre peut être une sous-chaîne du nom complet de la catégorie, pour
21360pouvoir correspondre à plusieurs catégories similaires), le préfixe
21361facultatif « + » dit à libvirt d'enregistrer les traces de piles pour chaque
21362message qui correspond au nom, et @code{x} est le niveau minimal des
21363messages qui devraient être enregistrés :
bf5c74e7
JL
21364
21365@itemize @bullet
21366@item
15f1bff4 213671 : DEBUG
bf5c74e7
JL
21368
21369@item
15f1bff4 213702 : INFO
bf5c74e7
JL
21371
21372@item
15f1bff4 213733 : WARNING
bf5c74e7
JL
21374
21375@item
15f1bff4 213764 : ERROR
bf5c74e7
JL
21377
21378@end itemize
21379
15f1bff4
JL
21380On peut définir plusieurs filtres dans une seule déclaration de filtres, ils
21381doivent juste être séparés par des espaces.
bf5c74e7 21382
1d8d69c8 21383La valeur par défaut est @samp{"3:remote 4:event"}.
bf5c74e7
JL
21384
21385@end deftypevr
21386
1d8d69c8 21387@deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
15f1bff4 21388Sorties de débogage.
bf5c74e7 21389
15f1bff4
JL
21390Une sortie est l'un des endroits où les journaux sont enregistrés. Le
21391format d'une sortie peut être :
bf5c74e7
JL
21392
21393@table @code
21394@item x:stderr
15f1bff4 21395la sortie va vers stderr
bf5c74e7 21396
15f1bff4
JL
21397@item x:syslog:nom
21398utilise syslog comme sortie et utilise le nom donné comme identifiant
bf5c74e7 21399
15f1bff4
JL
21400@item x:file:chemin_fichier
21401la sortie va vers un fichier, avec le chemin donné
bf5c74e7
JL
21402
21403@item x:journald
15f1bff4 21404la sortie va vers le système de journalisation journald
bf5c74e7
JL
21405
21406@end table
21407
15f1bff4
JL
21408Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un
21409filtre
bf5c74e7
JL
21410
21411@itemize @bullet
21412@item
15f1bff4 214131 : DEBUG
bf5c74e7
JL
21414
21415@item
15f1bff4 214162 : INFO
bf5c74e7
JL
21417
21418@item
15f1bff4 214193 : WARNING
bf5c74e7
JL
21420
21421@item
15f1bff4 214224 : ERROR
bf5c74e7
JL
21423
21424@end itemize
21425
15f1bff4
JL
21426Plusieurs sorties peuvent être définies, elles doivent juste être séparées
21427par des espaces.
bf5c74e7 21428
1d8d69c8 21429La valeur par défaut est @samp{"3:stderr"}.
bf5c74e7
JL
21430
21431@end deftypevr
21432
1d8d69c8 21433@deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
adfb167f 21434Nombre maximum de connexions clientes en même temps sur tous les sockets.
bf5c74e7 21435
1d8d69c8 21436La valeur par défaut est @samp{1024}.
bf5c74e7
JL
21437
21438@end deftypevr
21439
1d8d69c8 21440@deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
15f1bff4 21441Taille de fichier maximale avant roulement.
bf5c74e7 21442
adfb167f 21443La valeur par défaut est @samp{2MB}.
bf5c74e7
JL
21444
21445@end deftypevr
21446
1d8d69c8 21447@deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
15f1bff4 21448Nombre maximal de fichiers de sauvegardes à garder.
bf5c74e7 21449
adfb167f 21450La valeur par défaut est @samp{3}.
bf5c74e7
JL
21451
21452@end deftypevr
21453
adfb167f 21454@subsubheading Émulation transparente avec QEMU
bf5c74e7 21455
adfb167f 21456@cindex émulation
bf5c74e7 21457@cindex @code{binfmt_misc}
15f1bff4
JL
21458@code{qemu-binfmt-service-type} fournit le support de l'émulation
21459transparente de binaires construits pour des architectures différentes —
21460p.@: ex.@: il permet d'exécuter de manière transparente des programmes ARMv
21461sur une machine x86_64. Cela se fait en combinant l'émulateur
21462@uref{https://www.qemu.org, QEMU} et la fonctionnalité @code{binfmt_misc} du
21463noyau Linux.
bf5c74e7 21464
1d8d69c8 21465@defvr {Variable Scheme} qemu-binfmt-service-type
15f1bff4
JL
21466Le type du service QEMU/binfmt pour l'émulation transparente. Sa valeur
21467doit être un objet @code{qemu-binfmt-configuration}, qui spécifie le paquet
21468QEMU à utiliser ainsi que l'architecture que vous voulez émuler :
bf5c74e7
JL
21469
21470@example
21471(service qemu-binfmt-service-type
21472 (qemu-binfmt-configuration
21473 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
21474@end example
21475
15f1bff4
JL
21476Dans cet exemple, on active l'émulation transparente pour les plateformes
21477ARM et aarch64. Lancer @code{herd stop qemu-binfmt} l'éteint et lancer
21478@code{herd start qemu-binfmt} le rallume (@pxref{Invoking herd, the
bf5c74e7
JL
21479@command{herd} command,, shepherd, The GNU Shepherd Manual}).
21480@end defvr
21481
1d8d69c8 21482@deftp {Type de données} qemu-binfmt-configuration
15f1bff4 21483La configuration du service @code{qemu-binfmt}.
bf5c74e7
JL
21484
21485@table @asis
1d8d69c8 21486@item @code{platforms} (par défaut : @code{'()})
15f1bff4
JL
21487La liste des plates-formes émulées par QEMU. Chaque élément doit être un
21488objet @dfn{platform object} tel que renvoyé par @code{lookup-qemu-platforms}
21489(voir plus bas).
bf5c74e7 21490
1d8d69c8 21491@item @code{guix-support?} (par défaut : @code{#f})
15f1bff4
JL
21492Lorsque la valeur est vraie, QEMU et toutes ses dépendances sont ajoutés à
21493l'environnement de construction de @command{guix-daemon} (@pxref{Invoquer guix-daemon, @code{--chroot-directory} option}). Cela permet d'utiliser les
21494gestionnaires @code{binfmt_misc} dans l'environnement de cosntruction, ce
21495qui signifie que vous pouvez construire des programmes pour d'autres
21496architectures de manière transparente.
bf5c74e7 21497
15f1bff4
JL
21498Par exemple, supposons que vous soyez sur une machine x86_64 et que vous
21499avez ce services :
bf5c74e7
JL
21500
21501@example
21502(service qemu-binfmt-service-type
21503 (qemu-binfmt-configuration
21504 (platforms (lookup-qemu-platforms "arm"))
21505 (guix-support? #t)))
21506@end example
21507
adfb167f 21508Vous pouvez lancer :
bf5c74e7
JL
21509
21510@example
21511guix build -s armhf-linux inkscape
21512@end example
21513
21514@noindent
15f1bff4
JL
21515et cela construira Inkscape pour ARMv7 @emph{comme s'il s'agissait d'une
21516construction native}, de manière transparente avec QEMU pour émuler un CPU
21517ARMv7. Plutôt pratique si vous voulez tester un paquet construit pour une
21518architecture à laquelle vous n'avez pas accès !
bf5c74e7 21519
1d8d69c8
JL
21520@item @code{qemu} (par défaut : @code{qemu})
21521Le paquet QEMU à utiliser.
bf5c74e7
JL
21522@end table
21523@end deftp
21524
1d8d69c8 21525@deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
15f1bff4
JL
21526Renvoie la liste des objets de plates-formes QEMU correspondant à
21527@var{platforms}@dots{}. @var{platforms} doit être une liste de chaînes de
21528caractères correspondant aux noms de plates-formes, comme @code{"arm"},
21529@code{"sparc"}, @code{"mips64el"} etc.
bf5c74e7
JL
21530@end deffn
21531
1d8d69c8 21532@deffn {Procédure Scheme} qemu-platform? @var{obj}
15f1bff4 21533Renvoie vrai s i@var{obj} est un objet de plate-forme.
bf5c74e7
JL
21534@end deffn
21535
1d8d69c8 21536@deffn {Procédure Scheme} qemu-platform-name @var{platform}
15f1bff4 21537Renvoie le nom de @var{platform} — une chaîne comme @code{"arm"}.
bf5c74e7
JL
21538@end deffn
21539
3cacfa9e 21540@node Services de contrôle de version
15f1bff4 21541@subsection Services de contrôle de version
bf5c74e7 21542
15f1bff4
JL
21543Le module @code{(gnu services version-control)} fournit un service pour
21544permettre l'accès à distance à des dépôts Git locaux. Il y a trois options
21545: en utilisant @code{git-daemon-service} qui fournit un accès aux dépôts via
21546le protocole non sécurisé @code{git://} basé sur TCP, en étendant le serveur
21547web @code{nginx} pour relayer les requêtes vers @code{git-http-backend} ou
21548en fournissant une interface web avec @code{cgit-service-type}.
bf5c74e7 21549
1d8d69c8 21550@deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
bf5c74e7 21551
15f1bff4
JL
21552Renvoie un service qui lance @command{git daemon}, un serveur TCP simple
21553pour exposer des dépôts sur le protocole Git pour des accès anonymes.
bf5c74e7 21554
15f1bff4
JL
21555L'argument facultatif @var{config} devrait être un objet
21556@code{<git-daemon-configuration>}, par défaut il permet l'accès en
21557lecture-seule aux dépôts exportés@footnote{En créant le fichier magique «
21558git-daemon-export-ok » dans le répertoire du dépôt.} dans @file{/srv/git}.
bf5c74e7
JL
21559
21560@end deffn
21561
1d8d69c8 21562@deftp {Type de données} git-daemon-configuration
15f1bff4 21563Type de données représentnt la configuration de @code{git-daemon-service}.
bf5c74e7
JL
21564
21565@table @asis
1d8d69c8 21566@item @code{package} (par défaut : @var{git})
15f1bff4 21567Objet de paquet du système de contrôle de version distribué Git.
bf5c74e7 21568
1d8d69c8 21569@item @code{export-all?} (par défaut : @var{#f})
15f1bff4
JL
21570Indique s'il faut permettre l'accès à tous les dépôts Git, même s'ils n'ont
21571pas le fichier @file{git-daemon-export-ok}.
bf5c74e7 21572
adfb167f 21573@item @code{base-path} (par défaut : @file{/srv/git})
15f1bff4
JL
21574Indique s'il faut traduire toutes les requêtes de chemins relativement au
21575chemin actuel. Si vous lancez le démon git avec @var{(base-path
21576"/srv/git")} sur example.com, si vous essayez ensuite de récupérer
21577@code{git://example.com/hello.git}, le démon git interprétera ce chemin
21578comme étant @code{/srv/git/hello.git}.
bf5c74e7 21579
1d8d69c8 21580@item @code{user-path} (par défaut : @var{#f})
15f1bff4
JL
21581Indique s'il faut permettre la notation @code{~user} dans les requêtes.
21582Lorsque spécifié avec une chaîne vide, les requêtes à
21583@code{git://host/~alice/foo} sont des requêtes d'accès au dépôt @code{foo}
21584dans le répertoire personnel de l'utilisateur @code{alice}. Si
21585@var{(user-path "chemin")} est spécifié, la même requête est interprétée
21586comme accédant au répertoire @code{chemin/foo} dans le répertoire personnel
21587de l'utilisateur @code{alice}.
bf5c74e7 21588
1d8d69c8 21589@item @code{listen} (par défaut : @var{'()})
15f1bff4
JL
21590Indique s'il faut écouter sur des adresses IP ou des noms d'hôtes
21591particuliers, par défaut tous.
bf5c74e7 21592
1d8d69c8 21593@item @code{port} (par défaut : @var{#f})
15f1bff4 21594Indique s'il faut écouter sur un port particulier, par défaut le 9418.
bf5c74e7 21595
1d8d69c8 21596@item @code{whitelist} (par défaut : @var{'()})
15f1bff4 21597Si la liste n'est pas vide, n'autoriser l'accès qu'aux dossiers spécifiés.
bf5c74e7 21598
1d8d69c8 21599@item @code{extra-options} (par défaut : @var{'()})
15f1bff4
JL
21600Options supplémentaires qui seront passées à @code{git daemon}, lancez
21601@command{man git-daemon} pour plus d'informations.
bf5c74e7
JL
21602
21603@end table
21604@end deftp
21605
15f1bff4
JL
21606Le protocole @code{git://} ne permet pas l'authentification. Lorsque vous
21607récupérez un dépôt via @code{git://}, vous ne pouvez pas savoir si les
21608données que vous recevez ont été modifiées ou si elles viennent bien de
21609l'hôte spécifié, et votre connexion pourrait être espionnée. Il est
21610préférable d'utiliser un protocole de transport authentifié et chiffré,
21611comme @code{https}. Bien que Git vous permette de servir des dépôts avec un
21612serveur web peu sophistiqué basé sur les fichiers, il y a un protocole plus
21613rapide implémenté par le programme @code{git-http-backend}. Ce programme
21614est le moteur des services web Git corrects. Il est conçu pour se trouver
21615derrière un mandataire FastCGI. @xref{Services web} pour plus
21616d'informations sur la manière de lancer le démon @code{fcgiwrap} nécessaire.
21617
21618Guix a un type de données de configuration séparé pour servir des dépôts Git
21619par HTTP.
bf5c74e7 21620
1d8d69c8 21621@deftp {Type de données} git-http-configuration
15f1bff4 21622Type de données représentant la configuration de @code{git-http-service}.
bf5c74e7
JL
21623
21624@table @asis
1d8d69c8 21625@item @code{package} (par défaut : @var{git})
15f1bff4 21626Objet de paquet du système de contrôle de version distribué Git.
bf5c74e7 21627
adfb167f 21628@item @code{git-root} (par défaut : @file{/srv/git})
15f1bff4 21629Répertoire contenant les dépôts Git à exposer au monde.
bf5c74e7 21630
1d8d69c8 21631@item @code{export-all?} (par défaut : @var{#f})
15f1bff4
JL
21632Indique s'il faut exposer l'accès de tous les dépôts Git dans
21633@var{git-root}, même s'ils n'ont pas le fichier @file{git-daemon-export-ok}.
bf5c74e7 21634
adfb167f 21635@item @code{uri-path} (par défaut : @file{/git/})
15f1bff4
JL
21636Préfixe du chemin pour l'accès Git. Avec le préfixe @code{/git/} par
21637défaut, cela traduira @code{http://@var{server}/git/@var{repo}.git} en
21638@code{/sr/git/@var{repo}.git}. Les requêtes dont les chemins d'URI ne
21639commencent pas par ce préfixe ne seront pas passées à cette instance de Git.
bf5c74e7 21640
1d8d69c8 21641@item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
15f1bff4 21642Le socket sur lequel le démon @code{fcgiwrap} écoute. @xref{Services web}.
bf5c74e7
JL
21643@end table
21644@end deftp
21645
15f1bff4
JL
21646Il n'y a pas de @code{git-http-service-type}, actuellement ; à la place vous
21647pouvez créer un @code{nginx-location-configuration} à partir d'un
21648@code{git-http-configuration} puis ajouter cela au serveur web.
bf5c74e7 21649
1d8d69c8 21650@deffn {Procédure Scheme} git-http-nginx-location-configuration @
15f1bff4
JL
21651 [config=(git-http-configuration)]
21652Calcule un @code{nginx-location-configuration} qui correspond à la
21653configuration http Git donnée. Voici un exemple de définition de service
21654nginx qui sert le répertoire @file{/srv/git} par défaut en HTTPS :
bf5c74e7
JL
21655
21656@example
21657(service nginx-service-type
21658 (nginx-configuration
21659 (server-blocks
21660 (list
21661 (nginx-server-configuration
21662 (listen '("443 ssl"))
21663 (server-name "git.my-host.org")
21664 (ssl-certificate
21665 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
21666 (ssl-certificate-key
21667 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
21668 (locations
21669 (list
21670 (git-http-nginx-location-configuration
21671 (git-http-configuration (uri-path "/"))))))))))
21672@end example
21673
15f1bff4
JL
21674Ce exemple suppose que vous utilisez Let's Encrypt pour récupérer votre
21675certificat TLS. @xref{Services de certificats}. Le service @code{certbot} par
21676défaut redirigera tout le trafic HTTP de @code{git.my-host.org} en HTTPS.
21677Vous devrez aussi ajouter un mandataire @code{fcgiwrap} à vos services
21678systèmes. @xref{Services web}.
bf5c74e7
JL
21679@end deffn
21680
adfb167f 21681@subsubheading Service Cgit
bf5c74e7 21682
adfb167f
JL
21683@cindex service cgit
21684@cindex git, interface web
21685@uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
21686dépôts Git écrite en C.
bf5c74e7 21687
15f1bff4
JL
21688L'exemple suivant configurera le service avec les valeurs par défaut. Par
21689défaut, on peut accéder à Cgit sur le port (@code{http://localhost:80}).
bf5c74e7
JL
21690
21691@example
21692(service cgit-service-type)
21693@end example
21694
15f1bff4
JL
21695Le type @code{file-object} désigne soit un objet simili-fichier
21696(@pxref{G-Expressions, file-like objects}), soit une chaîne.
bf5c74e7
JL
21697
21698@c %start of fragment
21699
1d8d69c8 21700Les champs de @code{cgit-configuration} disponibles sont :
bf5c74e7 21701
1d8d69c8 21702@deftypevr {paramètre de @code{cgit-configuration}} package package
adfb167f 21703Le paquet cgit.
bf5c74e7
JL
21704
21705@end deftypevr
21706
1d8d69c8 21707@deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
adfb167f 21708Configuration Nginx.
bf5c74e7
JL
21709
21710@end deftypevr
21711
1d8d69c8 21712@deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
15f1bff4
JL
21713Spécifie une commande qui doit être invoquée pour formater le contenu des
21714pages « à propos » (au plus haut niveau et pour chaque dépôt).
bf5c74e7 21715
1d8d69c8 21716La valeur par défaut est @samp{""}.
bf5c74e7
JL
21717
21718@end deftypevr
21719
1d8d69c8 21720@deftypevr {paramètre de @code{cgit-configuration}} string agefile
15f1bff4
JL
21721Spécifie un chemin, relativement à chaque dépôt, qui peut être utilisé pour
21722spécifier la date et l'heure du plus récent commit du dépôt.
bf5c74e7 21723
1d8d69c8 21724La valeur par défaut est @samp{""}.
bf5c74e7
JL
21725
21726@end deftypevr
21727
1d8d69c8 21728@deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
15f1bff4 21729Spécifie une commande qui sera invoquée pour authentifier l'accès au dépôt.
bf5c74e7 21730
1d8d69c8 21731La valeur par défaut est @samp{""}.
bf5c74e7
JL
21732
21733@end deftypevr
21734
1d8d69c8 21735@deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
15f1bff4
JL
21736Drapeau qui, lorsqu'il vaut @samp{age}, active le trie par date dans la
21737liste des branches, et le trie par nom lorsqu'il vaut @samp{name}.
bf5c74e7 21738
1d8d69c8 21739La valeur par défaut est @samp{"name"}.
bf5c74e7
JL
21740
21741@end deftypevr
21742
1d8d69c8 21743@deftypevr {paramètre de @code{cgit-configuration}} string cache-root
15f1bff4 21744Chemin utilisé pour stocker les entrées de cache de cgit.
bf5c74e7 21745
1d8d69c8 21746La valeur par défaut est @samp{"/var/cache/cgit"}.
bf5c74e7
JL
21747
21748@end deftypevr
21749
1d8d69c8 21750@deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
15f1bff4
JL
21751Nombre qui spécifie le temps de vie, en minute, des versions en cache des
21752pages du dépôt accédées par leur SHA-1.
bf5c74e7 21753
1d8d69c8 21754La valeur par défaut est @samp{-1}.
bf5c74e7
JL
21755
21756@end deftypevr
21757
1d8d69c8 21758@deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
15f1bff4
JL
21759Nombre qui spécifie le temps de vie, en minutes, des version en cache des
21760pages du dépôt accédées sans leur SHA1.
bf5c74e7 21761
1d8d69c8 21762La valeur par défaut est @samp{5}.
bf5c74e7
JL
21763
21764@end deftypevr
21765
1d8d69c8 21766@deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
15f1bff4
JL
21767Nombre qui spécifie le temps de vie, en minute, des version en cache de la
21768page de résumé du dépôt.
bf5c74e7 21769
1d8d69c8 21770La valeur par défaut est @samp{5}.
bf5c74e7
JL
21771
21772@end deftypevr
21773
1d8d69c8 21774@deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
15f1bff4
JL
21775Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
21776la page d'index du dépôt.
bf5c74e7 21777
1d8d69c8 21778La valeur par défaut est @samp{5}.
bf5c74e7
JL
21779
21780@end deftypevr
21781
1d8d69c8 21782@deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
15f1bff4
JL
21783Nombre qui spécifie le temps de vie, en minutes, de la version en cache du
21784résultat du scan d'un chemin dans le dépôt Git.
bf5c74e7 21785
1d8d69c8 21786La valeur par défaut est @samp{15}.
bf5c74e7
JL
21787
21788@end deftypevr
21789
1d8d69c8 21790@deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
15f1bff4
JL
21791Nombre qui spécifie le temps de vie, en minutes, de la version en cache de
21792la page « à propos » du dépôt.
bf5c74e7 21793
1d8d69c8 21794La valeur par défaut est @samp{15}.
bf5c74e7
JL
21795
21796@end deftypevr
21797
1d8d69c8 21798@deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
15f1bff4
JL
21799Nombre qui spécifie le temps de vie, en minutes, de la version en cache des
21800archives.
bf5c74e7 21801
1d8d69c8 21802La valeur par défaut est @samp{5}.
bf5c74e7
JL
21803
21804@end deftypevr
21805
1d8d69c8 21806@deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
15f1bff4
JL
21807Le nombre maximum d'entrées dans le cache de cgit. Lorsque la valeur est
21808@samp{0}, le cache est désactivé.
bf5c74e7 21809
1d8d69c8 21810La valeur par défaut est @samp{0}.
bf5c74e7
JL
21811
21812@end deftypevr
21813
1d8d69c8 21814@deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
15f1bff4 21815Indique si le tri des éléments est sensible à la casse.
bf5c74e7 21816
1d8d69c8 21817La valeur par défaut est @samp{#t}.
bf5c74e7
JL
21818
21819@end deftypevr
21820
1d8d69c8 21821@deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
15f1bff4
JL
21822Liste des préfixes communs qui, lorsqu'ils sont combinés à l'URL du dépôt,
21823génèrent des URL de clone valides pour le dépôt.
bf5c74e7 21824
1d8d69c8 21825La valeur par défaut est @samp{()}.
bf5c74e7
JL
21826
21827@end deftypevr
21828
1d8d69c8 21829@deftypevr {paramètre de @code{cgit-configuration}} list clone-url
15f1bff4 21830Liste des modèles @code{clone-url}
bf5c74e7 21831
1d8d69c8 21832La valeur par défaut est @samp{()}.
bf5c74e7
JL
21833
21834@end deftypevr
21835
1d8d69c8 21836@deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
15f1bff4 21837Commande qui sera invoquée pour formater les messages de commit.
bf5c74e7 21838
1d8d69c8 21839La valeur par défaut est @samp{""}.
bf5c74e7
JL
21840
21841@end deftypevr
21842
1d8d69c8 21843@deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
15f1bff4
JL
21844Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
21845messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
bf5c74e7 21846
1d8d69c8 21847La valeur par défaut est @samp{"git log"}.
bf5c74e7
JL
21848
21849@end deftypevr
21850
1d8d69c8 21851@deftypevr {paramètre de @code{cgit-configuration}} file-object css
15f1bff4 21852URL qui spécifie le document css à inclure dans les pages cgit.
bf5c74e7 21853
1d8d69c8 21854La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
bf5c74e7
JL
21855
21856@end deftypevr
21857
1d8d69c8 21858@deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
15f1bff4
JL
21859Spécifie une commande qui sera invoquée pour formater les noms et l'adresse
21860de courriel des commiteurs, des auteurs et des taggueurs, représentés à
21861plusieurs endroits dans l'interface cgit.
bf5c74e7 21862
1d8d69c8 21863La valeur par défaut est @samp{""}.
bf5c74e7
JL
21864
21865@end deftypevr
21866
1d8d69c8 21867@deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
15f1bff4
JL
21868Drapeau qui, s'il vaut @samp{#t}, fera générer un fragment HTML à cgit qu'il
21869sera possible d'inclure dans d'autres pages HTML.
bf5c74e7 21870
1d8d69c8 21871La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21872
21873@end deftypevr
21874
1d8d69c8 21875@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
15f1bff4
JL
21876Drapeau qui, lorsqu'il vaut @samp{#t}, fera afficher un historique en
21877ASCII-art à gauche des messages de commit dans la page de log du dépôt.
bf5c74e7 21878
1d8d69c8 21879La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21880
21881@end deftypevr
21882
1d8d69c8 21883@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
15f1bff4
JL
21884Drapeau qui, lorsqu'il vaut @samp{#t}, permet à tous les paramètres de
21885filtrage d'être modifiés dans des fichiers cgitrc spécifiques au dépôt.
bf5c74e7 21886
1d8d69c8 21887La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21888
21889@end deftypevr
21890
1d8d69c8 21891@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
15f1bff4
JL
21892Drapeau qui, s'il vaut @samp{#t}, permet aux utilisateurs de suivre un
21893fichier dans la vue « log ».
bf5c74e7 21894
1d8d69c8 21895La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21896
21897@end deftypevr
21898
1d8d69c8 21899@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
15f1bff4
JL
21900Si la valeur est @samp{#t}, cgit agira comme un point d'accès HTTP idiot
21901pour les clones Git.
bf5c74e7 21902
1d8d69c8 21903La valeur par défaut est @samp{#t}.
bf5c74e7
JL
21904
21905@end deftypevr
21906
1d8d69c8 21907@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
15f1bff4
JL
21908Drapeau qui, s'il vaut @samp{#t}, fera générer des liens « résumé », «
21909commit » et « arborescence » supplémentaires poru chaque dépôt dans l'index
21910des dépôts.
bf5c74e7 21911
1d8d69c8 21912La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21913
21914@end deftypevr
21915
1d8d69c8 21916@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
15f1bff4
JL
21917Drapeau qui, s'il vaut @samp{#t}, fera afficher le propriétaire de chaque
21918dépôt dans l'index des dépôts.
bf5c74e7 21919
1d8d69c8 21920La valeur par défaut est @samp{#t}.
bf5c74e7
JL
21921
21922@end deftypevr
21923
1d8d69c8 21924@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
15f1bff4
JL
21925Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de fichiers
21926modifiés pour chaque commit sur la page de log du dépôt.
bf5c74e7 21927
1d8d69c8 21928La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21929
21930@end deftypevr
21931
1d8d69c8 21932@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
15f1bff4
JL
21933Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit le nombre de lignes
21934ajoutées et enlevées pour chaque commit de la page de log du dépôt.
bf5c74e7 21935
1d8d69c8 21936La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21937
21938@end deftypevr
21939
1d8d69c8 21940@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
15f1bff4
JL
21941Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
21942les vues du résumé et des références.
bf5c74e7 21943
1d8d69c8 21944La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21945
21946@end deftypevr
21947
1d8d69c8 21948@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
15f1bff4
JL
21949Drapeau qui, s'il vaut @samp{1}, fera utiliser à cgit le sujet du commit
21950parent comme texte du lien lors de la génération des liens vers les commits
21951parents dans la vue des commits.
bf5c74e7 21952
1d8d69c8 21953La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21954
21955@end deftypevr
21956
1d8d69c8 21957@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
15f1bff4
JL
21958Drapeau qui, s'il vaut @samp{#t}, fera utiliser à cgit l esujet du commit
21959parent comme texte du lien lors de la génération des liens vers le commit
21960parent dans la vue des commits.
bf5c74e7 21961
1d8d69c8 21962La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21963
21964@end deftypevr
21965
1d8d69c8 21966@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
15f1bff4
JL
21967Drapeau qui, s'il vaut @samp{#t}, fera générer à cgit des liens vers le
21968numéro de ligne pour les blobs en texte brut affichés dans la vue de
21969l'arborescence.
bf5c74e7 21970
1d8d69c8 21971La valeur par défaut est @samp{#t}.
bf5c74e7
JL
21972
21973@end deftypevr
21974
1d8d69c8 21975@deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
15f1bff4
JL
21976Drapeau qui, s'il vaut @samp{#t}, permettra à cgit d'utiliser la
21977configuration Git pour spécifier des paramètres spécifiques au dépôt.
bf5c74e7 21978
1d8d69c8 21979La valeur par défaut est @samp{#f}.
bf5c74e7
JL
21980
21981@end deftypevr
21982
1d8d69c8 21983@deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
15f1bff4 21984URL utilisée comme lien vers un icône pour cgit.
bf5c74e7 21985
1d8d69c8 21986La valeur par défaut est @samp{"/favicon.ico"}.
bf5c74e7
JL
21987
21988@end deftypevr
21989
1d8d69c8 21990@deftypevr {paramètre de @code{cgit-configuration}} string footer
bf5c74e7 21991The content of the file specified with this option will be included verbatim
adfb167f
JL
21992at the bottom of all pages (i.e.@: it replaces the standard "generated
21993by..."@: message).
bf5c74e7 21994
1d8d69c8 21995La valeur par défaut est @samp{""}.
bf5c74e7
JL
21996
21997@end deftypevr
21998
1d8d69c8 21999@deftypevr {paramètre de @code{cgit-configuration}} string head-include
15f1bff4
JL
22000Le contenu du fichier spécifié dans cette option sera inclus directement
22001dans la section HEAD HTML de toutes les pages.
bf5c74e7 22002
1d8d69c8 22003La valeur par défaut est @samp{""}.
bf5c74e7
JL
22004
22005@end deftypevr
22006
1d8d69c8 22007@deftypevr {paramètre de @code{cgit-configuration}} string header
15f1bff4
JL
22008Le contenu du fichier spécifié avec cette option sera inclus directement au
22009début de toutes les pages.
bf5c74e7 22010
1d8d69c8 22011La valeur par défaut est @samp{""}.
bf5c74e7
JL
22012
22013@end deftypevr
22014
1d8d69c8 22015@deftypevr {paramètre de @code{cgit-configuration}} file-object include
15f1bff4
JL
22016Nom d'un fichier de configuration à inclure avant que le reste du fichier de
22017configuration actuel ne soit analysé.
bf5c74e7 22018
1d8d69c8 22019La valeur par défaut est @samp{""}.
bf5c74e7
JL
22020
22021@end deftypevr
22022
1d8d69c8 22023@deftypevr {paramètre de @code{cgit-configuration}} string index-header
15f1bff4
JL
22024Le contenu du fichier spécifié avec cette option sera inclus directement au
22025dessus de l'index des dépôts.
bf5c74e7 22026
1d8d69c8 22027La valeur par défaut est @samp{""}.
bf5c74e7
JL
22028
22029@end deftypevr
22030
1d8d69c8 22031@deftypevr {paramètre de @code{cgit-configuration}} string index-info
15f1bff4
JL
22032Le contenu du fichier spécifié avec cette option sera inclus directement en
22033dessous de l'en-tête sur la page d'index du dépôt.
bf5c74e7 22034
1d8d69c8 22035La valeur par défaut est @samp{""}.
bf5c74e7
JL
22036
22037@end deftypevr
22038
1d8d69c8 22039@deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
15f1bff4
JL
22040Drapeau qui, s'il vaut @samp{#t}, fera afficher à cgit l'heure et la date de
22041commit et de tag dans le fuseau horaire du serveur.
bf5c74e7 22042
1d8d69c8 22043La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22044
22045@end deftypevr
22046
1d8d69c8 22047@deftypevr {paramètre de @code{cgit-configuration}} file-object logo
15f1bff4
JL
22048URL qui spécifie la source d'une image utilisé comme logo sur toutes les
22049pages cgit.
bf5c74e7 22050
1d8d69c8 22051La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
bf5c74e7
JL
22052
22053@end deftypevr
22054
1d8d69c8 22055@deftypevr {paramètre de @code{cgit-configuration}} string logo-link
15f1bff4 22056URL chargée lors du clic sur l'image du logo de cgit.
bf5c74e7 22057
1d8d69c8 22058La valeur par défaut est @samp{""}.
bf5c74e7
JL
22059
22060@end deftypevr
22061
1d8d69c8 22062@deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
15f1bff4
JL
22063Commande qui sera invoquée pour formater la colonne propriétaire sur la page
22064principale.
bf5c74e7 22065
1d8d69c8 22066La valeur par défaut est @samp{""}.
bf5c74e7
JL
22067
22068@end deftypevr
22069
1d8d69c8 22070@deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
15f1bff4 22071Nombre d'éléments à afficher dans la vue des flux atom.
bf5c74e7 22072
1d8d69c8 22073La valeur par défaut est @samp{10}.
bf5c74e7
JL
22074
22075@end deftypevr
22076
1d8d69c8 22077@deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
15f1bff4 22078Nombre d'éléments à lister par page dans la vue « log ».
bf5c74e7 22079
1d8d69c8 22080La valeur par défaut est @samp{50}.
bf5c74e7
JL
22081
22082@end deftypevr
22083
1d8d69c8 22084@deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
15f1bff4 22085Nombre caractères de messages de commit à afficher dans la vue « log ».
bf5c74e7 22086
1d8d69c8 22087La valeur par défaut est @samp{80}.
bf5c74e7
JL
22088
22089@end deftypevr
22090
1d8d69c8 22091@deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
15f1bff4
JL
22092Spécifie le nombre d'éléments à lister par page sur la page de l'index des
22093dépôts.
bf5c74e7 22094
1d8d69c8 22095La valeur par défaut est @samp{50}.
bf5c74e7
JL
22096
22097@end deftypevr
22098
1d8d69c8 22099@deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
15f1bff4
JL
22100Spécifie le nombre maximum de caractères de description de dépôts à afficher
22101sur la page d'index des dépôts.
bf5c74e7 22102
1d8d69c8 22103La valeur par défaut est @samp{80}.
bf5c74e7
JL
22104
22105@end deftypevr
22106
1d8d69c8 22107@deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
15f1bff4
JL
22108Spécifie la taille maximale d'un blob pour lequel afficher du HTML en
22109kilo-octets.
bf5c74e7 22110
1d8d69c8 22111La valeur par défaut est @samp{0}.
bf5c74e7
JL
22112
22113@end deftypevr
22114
1d8d69c8 22115@deftypevr {paramètre de @code{cgit-configuration}} string max-stats
15f1bff4
JL
22116Période de statistiques maximale. Les valeurs valides sont @samp{week},
22117@samp{month}, @samp{quarter} et @samp{year}.
bf5c74e7 22118
1d8d69c8 22119La valeur par défaut est @samp{""}.
bf5c74e7
JL
22120
22121@end deftypevr
22122
1d8d69c8 22123@deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
15f1bff4 22124Type mime pour l'extension de fichier spécifiée.
bf5c74e7 22125
1d8d69c8
JL
22126La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
22127"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
22128(svg "image/svg+xml"))}.
bf5c74e7
JL
22129
22130@end deftypevr
22131
1d8d69c8 22132@deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
15f1bff4 22133Spécifie le fichier à utiliser pour la recherche automatique de type mime.
bf5c74e7 22134
1d8d69c8 22135La valeur par défaut est @samp{""}.
bf5c74e7
JL
22136
22137@end deftypevr
22138
1d8d69c8 22139@deftypevr {paramètre de @code{cgit-configuration}} string module-link
15f1bff4
JL
22140Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
22141lorsqu'un sous-module est affiché dans la liste du répertoire.
bf5c74e7 22142
1d8d69c8 22143La valeur par défaut est @samp{""}.
bf5c74e7
JL
22144
22145@end deftypevr
22146
1d8d69c8 22147@deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
15f1bff4 22148Si la valeur est @samp{#t}, le cache est désactivé.
bf5c74e7 22149
1d8d69c8 22150La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22151
22152@end deftypevr
22153
1d8d69c8 22154@deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
15f1bff4
JL
22155Si la valeur est @samp{#t}, l'affichage des adresse de courriel des auteurs
22156sera désactivé.
bf5c74e7 22157
1d8d69c8 22158La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22159
22160@end deftypevr
22161
1d8d69c8 22162@deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
15f1bff4
JL
22163Drapeau qui, s'il vaut @samp{#t}, fera omettre à cgit l'en-tête standard sur
22164toutes les pages.
bf5c74e7 22165
1d8d69c8 22166La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22167
22168@end deftypevr
22169
1d8d69c8 22170@deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
15f1bff4
JL
22171UNe liste de sous-répertoires dans @code{repository-directory}, relativement
22172à lui, qui devrait être chargé comme des dépôts Git. Une liste vide
22173signifie que tous les sous-répertoires seront chargés.
bf5c74e7 22174
1d8d69c8 22175La valeur par défaut est @samp{()}.
bf5c74e7
JL
22176
22177@end deftypevr
22178
1d8d69c8 22179@deftypevr {paramètre de @code{cgit-configuration}} file-object readme
15f1bff4 22180Texte utilisé comme valeur par défaut pour @code{cgit-repo-readme}.
bf5c74e7 22181
1d8d69c8 22182La valeur par défaut est @samp{""}.
bf5c74e7
JL
22183
22184@end deftypevr
22185
1d8d69c8 22186@deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
15f1bff4
JL
22187Si la valeur est @code{#t} et que @code{repository-directory} est activé, si
22188un dépôt avec un suffixe de @code{.git} est trouvé, ce suffixe sera supprimé
22189de l'URL et du nom.
bf5c74e7 22190
1d8d69c8 22191La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22192
22193@end deftypevr
22194
1d8d69c8 22195@deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
15f1bff4 22196Nombre maximum de fichiers à considérer lors de la détection des renommages.
bf5c74e7 22197
1d8d69c8 22198La valeur par défaut est @samp{-1}.
bf5c74e7
JL
22199
22200@end deftypevr
22201
1d8d69c8 22202@deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
15f1bff4 22203La manière dont les dépôt de chaque section sont rangés.
bf5c74e7 22204
1d8d69c8 22205La valeur par défaut est @samp{""}.
bf5c74e7
JL
22206
22207@end deftypevr
22208
1d8d69c8 22209@deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
15f1bff4 22210Texte utilisé comme contenu du méta-attribut @code{robots}.
bf5c74e7 22211
1d8d69c8 22212La valeur par défaut est @samp{("noindex" "nofollow")}.
bf5c74e7
JL
22213
22214@end deftypevr
22215
1d8d69c8 22216@deftypevr {paramètre de @code{cgit-configuration}} string root-desc
15f1bff4 22217Texte affiché en dessous de l'en-tête de la page d'index des dépôts.
bf5c74e7 22218
1d8d69c8 22219La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
bf5c74e7
JL
22220
22221@end deftypevr
22222
1d8d69c8 22223@deftypevr {paramètre de @code{cgit-configuration}} string root-readme
15f1bff4
JL
22224Le contenu du fichier spécifié avec cette option sera inclus directement en
22225dessous du lien « à propos » sur la page d'index du dépôt.
bf5c74e7 22226
1d8d69c8 22227La valeur par défaut est @samp{""}.
bf5c74e7
JL
22228
22229@end deftypevr
22230
1d8d69c8 22231@deftypevr {paramètre de @code{cgit-configuration}} string root-title
15f1bff4 22232Texte affiché sur la page d'index des dépôts.
bf5c74e7 22233
1d8d69c8 22234La valeur par défaut est @samp{""}.
bf5c74e7
JL
22235
22236@end deftypevr
22237
1d8d69c8 22238@deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
15f1bff4
JL
22239Si la valeur est @samp{#t} et que repository-directory est activé,
22240repository-directory recherchera de manière récursive dans les répertoires
22241dont le nom commence par un point. Sinon, repository-directory restera hors
22242de ces répertoires, considérés comme « cachés ». Remarquez que cela ne
22243s'applique pas au répertoire « .git » dans le dépôts.
bf5c74e7 22244
1d8d69c8 22245La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22246
22247@end deftypevr
22248
1d8d69c8 22249@deftypevr {paramètre de @code{cgit-configuration}} list snapshots
15f1bff4
JL
22250Texte qui spécifie l'ensemble des formats d'archives par défaut pour
22251lesquelles cgit générera un lien.
bf5c74e7 22252
1d8d69c8 22253La valeur par défaut est @samp{()}.
bf5c74e7
JL
22254
22255@end deftypevr
22256
1d8d69c8 22257@deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
15f1bff4 22258Nom du répertoire à scanner pour trouver les dépôts (représente
bf5c74e7
JL
22259@code{scan-path}).
22260
1d8d69c8 22261La valeur par défaut est @samp{"/srv/git"}.
bf5c74e7
JL
22262
22263@end deftypevr
22264
1d8d69c8 22265@deftypevr {paramètre de @code{cgit-configuration}} string section
15f1bff4
JL
22266Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
22267point hériterons du nom de section actuel.
bf5c74e7 22268
1d8d69c8 22269La valeur par défaut est @samp{""}.
bf5c74e7
JL
22270
22271@end deftypevr
22272
1d8d69c8 22273@deftypevr {paramètre de @code{cgit-configuration}} string section-sort
15f1bff4
JL
22274Drapeau qui, s'il vaut @samp{1}, triera les sections dans la liste des
22275dépôts par nom.
bf5c74e7 22276
1d8d69c8 22277La valeur par défaut est @samp{""}.
bf5c74e7
JL
22278
22279@end deftypevr
22280
1d8d69c8 22281@deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
15f1bff4
JL
22282Un nombre qui, s'il est défini avant repository-directory, spécifier combien
22283d'éléments de chemin de chaque chemin de dépôt utiliser comme nom de section
22284par défaut.
bf5c74e7 22285
1d8d69c8 22286La valeur par défaut est @samp{0}.
bf5c74e7
JL
22287
22288@end deftypevr
22289
1d8d69c8 22290@deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
15f1bff4
JL
22291Si la valeur est @samp{#t}, afficher des diffs côte à côte au lieu des
22292unidiffs par défaut.
bf5c74e7 22293
1d8d69c8 22294La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22295
22296@end deftypevr
22297
1d8d69c8 22298@deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
15f1bff4
JL
22299Spécifie une commande qui sera invoquée pour formater les blobs en texte
22300brut dans la vue de l'arborescence.
bf5c74e7 22301
1d8d69c8 22302La valeur par défaut est @samp{""}.
bf5c74e7
JL
22303
22304@end deftypevr
22305
1d8d69c8 22306@deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
15f1bff4 22307Spécifie le nombre de branches à afficher dans la vue de résumé du dépôt.
bf5c74e7 22308
1d8d69c8 22309La valeur par défaut est @samp{10}.
bf5c74e7
JL
22310
22311@end deftypevr
22312
1d8d69c8 22313@deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
15f1bff4
JL
22314Spécifie le nombre d'élément du journal à afficher dans la vue résumé du
22315dépôt.
bf5c74e7 22316
1d8d69c8 22317La valeur par défaut est @samp{10}.
bf5c74e7
JL
22318
22319@end deftypevr
22320
1d8d69c8 22321@deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
15f1bff4 22322Spécifie le nombre de tags à afficher dans la vue résumé du dépôt.
bf5c74e7 22323
1d8d69c8 22324La valeur par défaut est @samp{10}.
bf5c74e7
JL
22325
22326@end deftypevr
22327
1d8d69c8 22328@deftypevr {paramètre de @code{cgit-configuration}} string strict-export
15f1bff4
JL
22329Nom de fichier qui, s'il est spécifié, doit être présent dans le dépôt pour
22330que cgit accorde l'accès à ce dépôt.
bf5c74e7 22331
1d8d69c8 22332La valeur par défaut est @samp{""}.
bf5c74e7
JL
22333
22334@end deftypevr
22335
1d8d69c8 22336@deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
15f1bff4
JL
22337URL qui, si elle est spécifiée, sera utilisée comme racine pour tous les
22338liens cgit.
bf5c74e7 22339
1d8d69c8 22340La valeur par défaut est @samp{"/"}.
bf5c74e7
JL
22341
22342@end deftypevr
22343
1d8d69c8 22344@deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
15f1bff4 22345Une liste d'enregistrements @dfn{cgit-repo} à utiliser avec config.
bf5c74e7 22346
1d8d69c8 22347La valeur par défaut est @samp{()}.
bf5c74e7 22348
1d8d69c8 22349Les champs de @code{repository-cgit-configuration} disponibles sont :
bf5c74e7 22350
1d8d69c8 22351@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
15f1bff4
JL
22352Un masque de formats d'archives pour ce dépôt pour lesquelles cgit générera
22353un lien, restreint par le paramètre @code{snapshots} global.
bf5c74e7 22354
1d8d69c8 22355La valeur par défaut est @samp{()}.
bf5c74e7
JL
22356
22357@end deftypevr
22358
1d8d69c8 22359@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
15f1bff4 22360Modifie le @code{source-filter} par défaut.
bf5c74e7 22361
1d8d69c8 22362La valeur par défaut est @samp{""}.
bf5c74e7
JL
22363
22364@end deftypevr
22365
1d8d69c8 22366@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
15f1bff4 22367URL relative utilisée pour accéder au dépôt.
bf5c74e7 22368
1d8d69c8 22369La valeur par défaut est @samp{""}.
bf5c74e7
JL
22370
22371@end deftypevr
22372
1d8d69c8 22373@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
15f1bff4 22374Modifie le paramètre @code{about-filter} par défaut.
bf5c74e7 22375
1d8d69c8 22376La valeur par défaut est @samp{""}.
bf5c74e7
JL
22377
22378@end deftypevr
22379
1d8d69c8 22380@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
15f1bff4
JL
22381Drapeau qui, s'il vaut @samp{age}, active le tri par date dans la liste des
22382branches, et lorsqu'il vaut @samp{name}, le tri par nom.
bf5c74e7 22383
1d8d69c8 22384La valeur par défaut est @samp{""}.
bf5c74e7
JL
22385
22386@end deftypevr
22387
1d8d69c8 22388@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
15f1bff4 22389Un liste d'URL qui peuvent être utilisées pour cloner ce dépôt.
bf5c74e7 22390
1d8d69c8 22391La valeur par défaut est @samp{()}.
bf5c74e7
JL
22392
22393@end deftypevr
22394
1d8d69c8 22395@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
15f1bff4 22396Modifie le paramètre @code{commit-filter} par défaut.
bf5c74e7 22397
1d8d69c8 22398La valeur par défaut est @samp{""}.
bf5c74e7
JL
22399
22400@end deftypevr
22401
1d8d69c8 22402@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
15f1bff4
JL
22403Drapeau qui, s'il vaut @samp{date}, active le tri par date strict dans le
22404messages de commit, et le tri topologique strict lorsqu'il vaut @samp{topo}.
bf5c74e7 22405
1d8d69c8 22406La valeur par défaut est @samp{""}.
bf5c74e7
JL
22407
22408@end deftypevr
22409
1d8d69c8 22410@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
15f1bff4
JL
22411Le nom de la branche par défaut de ce dépôt. Si cette branche n'existe pas
22412dans le dépôt, le premier nom de branche (trié) sera utilisé par défaut.
22413Par défaut la branche pointée par HEAD, ou « master » s'il n'y a pas de HEAD
22414convenable.
bf5c74e7 22415
1d8d69c8 22416La valeur par défaut est @samp{""}.
bf5c74e7
JL
22417
22418@end deftypevr
22419
1d8d69c8 22420@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
15f1bff4 22421La valeur à afficher comme description du dépôt.
bf5c74e7 22422
1d8d69c8 22423La valeur par défaut est @samp{""}.
bf5c74e7
JL
22424
22425@end deftypevr
22426
1d8d69c8 22427@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
15f1bff4 22428La valeur à afficher comme page d'accueil du dépôt.
bf5c74e7 22429
1d8d69c8 22430La valeur par défaut est @samp{""}.
bf5c74e7
JL
22431
22432@end deftypevr
22433
1d8d69c8 22434@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
15f1bff4 22435Modifie le paramètre @code{email-filter} par défaut.
bf5c74e7 22436
1d8d69c8 22437La valeur par défaut est @samp{""}.
bf5c74e7
JL
22438
22439@end deftypevr
22440
adfb167f 22441@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
15f1bff4
JL
22442Un drapeau qui peut être utilisé pour désactiver le paramètre
22443@code{enable-commit-graph?} global.
bf5c74e7 22444
1d8d69c8 22445La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22446
22447@end deftypevr
22448
adfb167f 22449@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
15f1bff4
JL
22450Un drapeau qui peut être utilisé pour désactiver le paramètre
22451@code{enable-log-filecount?} global.
bf5c74e7 22452
1d8d69c8 22453La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22454
22455@end deftypevr
22456
adfb167f 22457@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
15f1bff4
JL
22458Un drapeau qui peut être utilisé pour désactiver le paramètre
22459@code{enable-log-linecount?} global.
bf5c74e7 22460
1d8d69c8 22461La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22462
22463@end deftypevr
22464
adfb167f 22465@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
15f1bff4
JL
22466Drapeau qui, s'il vaut @samp{#t}, fera afficher les branches distantes dans
22467les vues du résumé et des références.
bf5c74e7 22468
1d8d69c8 22469La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22470
22471@end deftypevr
22472
adfb167f 22473@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
15f1bff4
JL
22474Un drapeau qui peut être utilisé pour modifier le paramètre
22475@code{enable-subject-links?} global.
bf5c74e7 22476
1d8d69c8 22477La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22478
22479@end deftypevr
22480
adfb167f 22481@deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
15f1bff4
JL
22482Un drapeau qui peut être utilisé pour modifier le paramètre
22483@code{enable-html-serving?} global.
bf5c74e7 22484
1d8d69c8 22485La valeur par défaut est @samp{disabled}.
bf5c74e7
JL
22486
22487@end deftypevr
22488
1d8d69c8 22489@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
15f1bff4 22490Drapeau qui, s'il vaut @code{#t}, cache le dépôt de l'index des dépôts.
bf5c74e7 22491
1d8d69c8 22492La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22493
22494@end deftypevr
22495
1d8d69c8 22496@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
15f1bff4 22497Drapeau qui, s'il vaut @code{#t}, ignore le dépôt.
bf5c74e7 22498
1d8d69c8 22499La valeur par défaut est @samp{#f}.
bf5c74e7
JL
22500
22501@end deftypevr
22502
1d8d69c8 22503@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
15f1bff4
JL
22504URL qui spécifie la source d'une image qui sera utilisée comme logo sur les
22505pages de ce dépôt.
bf5c74e7 22506
1d8d69c8 22507La valeur par défaut est @samp{""}.
bf5c74e7
JL
22508
22509@end deftypevr
22510
1d8d69c8 22511@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
15f1bff4 22512URL chargée lors du clic sur l'image du logo de cgit.
bf5c74e7 22513
1d8d69c8 22514La valeur par défaut est @samp{""}.
bf5c74e7
JL
22515
22516@end deftypevr
22517
1d8d69c8 22518@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
15f1bff4 22519Modifie le paramètre @code{owner-filter} par défaut.
bf5c74e7 22520
1d8d69c8 22521La valeur par défaut est @samp{""}.
bf5c74e7
JL
22522
22523@end deftypevr
22524
1d8d69c8 22525@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
15f1bff4
JL
22526Texte qui sera utilisé comme chaîne de formatage pour un lien hypertexte
22527lorsqu'un sous-module est affiché dans une liste de fichiers. Les arguments
22528pour la chaîne de formatage sont le chemin et le SHA1 du commit du
22529sous-module.
bf5c74e7 22530
1d8d69c8 22531La valeur par défaut est @samp{""}.
bf5c74e7
JL
22532
22533@end deftypevr
22534
1d8d69c8 22535@deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
15f1bff4
JL
22536Texte qui sera utilisé comme chaîne de formatage lorsqu'un sous-module avec
22537un chemin spécifié sera affiché dans une liste de fichiers.
bf5c74e7 22538
1d8d69c8 22539La valeur par défaut est @samp{()}.
bf5c74e7
JL
22540
22541@end deftypevr
22542
1d8d69c8 22543@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
15f1bff4 22544Modifie la période de statistique maximale par défaut.
bf5c74e7 22545
1d8d69c8 22546La valeur par défaut est @samp{""}.
bf5c74e7
JL
22547
22548@end deftypevr
22549
1d8d69c8 22550@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
15f1bff4 22551La valeur à afficher comme nom de dépôt.
bf5c74e7 22552
1d8d69c8 22553La valeur par défaut est @samp{""}.
bf5c74e7
JL
22554
22555@end deftypevr
22556
1d8d69c8 22557@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
15f1bff4 22558Une valeur utilisée pour identifier le propriétaire du dépôt.
bf5c74e7 22559
1d8d69c8 22560La valeur par défaut est @samp{""}.
bf5c74e7
JL
22561
22562@end deftypevr
22563
1d8d69c8 22564@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
15f1bff4 22565Un chemin absolu vers le répertoire du dépôt.
bf5c74e7 22566
1d8d69c8 22567La valeur par défaut est @samp{""}.
bf5c74e7
JL
22568
22569@end deftypevr
22570
1d8d69c8 22571@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
15f1bff4
JL
22572Un chemin (relatif au dépôt) qui spécifie un fichier à inclure directement
22573comme page « À propos » pour ce dépôt.
bf5c74e7 22574
1d8d69c8 22575La valeur par défaut est @samp{""}.
bf5c74e7
JL
22576
22577@end deftypevr
22578
1d8d69c8 22579@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
15f1bff4
JL
22580Le nom de la section de dépôts actuelle — tous les dépôts définis après ce
22581point hériterons du nom de section actuel.
bf5c74e7 22582
1d8d69c8 22583La valeur par défaut est @samp{""}.
bf5c74e7
JL
22584
22585@end deftypevr
22586
1d8d69c8 22587@deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
15f1bff4 22588Options supplémentaires ajoutées à la fin du fichier cgitrc.
bf5c74e7 22589
1d8d69c8 22590La valeur par défaut est @samp{()}.
bf5c74e7
JL
22591
22592@end deftypevr
22593
22594@end deftypevr
22595
1d8d69c8 22596@deftypevr {paramètre de @code{cgit-configuration}} list extra-options
15f1bff4 22597Options supplémentaires ajoutées à la fin du fichier cgitrc.
bf5c74e7 22598
1d8d69c8 22599La valeur par défaut est @samp{()}.
bf5c74e7
JL
22600
22601@end deftypevr
22602
22603
22604@c %end of fragment
22605
15f1bff4
JL
22606Cependant, vous pourriez vouloir simplement récupérer un @code{cgitrc} et
22607l'utiliser. Dans ce cas, vous pouvez passer un
22608@code{opaque-cgit-configuration} comme enregistrement à
22609@code{cgit-service-type}. Comme son nom l'indique, une configuration opaque
22610n'a pas de capacité de réflexion facile.
bf5c74e7 22611
1d8d69c8 22612Les champs de @code{opaque-cgit-configuration} disponibles sont :
bf5c74e7 22613
1d8d69c8 22614@deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
15f1bff4 22615Le paquet cgit.
bf5c74e7
JL
22616@end deftypevr
22617
1d8d69c8 22618@deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
15f1bff4 22619Le contenu de @code{cgitrc}, en tant que chaîne de caractère.
bf5c74e7
JL
22620@end deftypevr
22621
15f1bff4
JL
22622Par exemple, si votre @code{cgitrc} est juste la chaîne vide, vous pouvez
22623instancier un service cgit ainsi :
bf5c74e7
JL
22624
22625@example
22626(service cgit-service-type
22627 (opaque-cgit-configuration
22628 (cgitrc "")))
22629@end example
22630
adfb167f
JL
22631@subsubheading Service Gitolite
22632
22633@cindex service Gitolite
22634@cindex Git, hébergement
15f1bff4
JL
22635@uref{http://gitolite.com/gitolite/, Gitolite} est un outil pour héberger
22636des dépôts Git sur un serveur central.
adfb167f 22637
15f1bff4
JL
22638Gitolite peut gérer plusieurs dépôts et utilisateurs et supporte une
22639configuration flexible des permissions pour les utilisateurs sur ces dépôts.
adfb167f 22640
15f1bff4
JL
22641L'exemple suivant configure Gitolite en utilisant l'utilisateur @code{git}
22642par défaut et la clef SSH fournie.
adfb167f
JL
22643
22644@example
22645(service gitolite-service-type
22646 (gitolite-configuration
22647 (admin-pubkey (plain-file
22648 "yourname.pub"
22649 "ssh-rsa AAAA... guix@@example.com"))))
22650@end example
22651
15f1bff4
JL
22652Gitolite est configuré via un dépôt d'administration spécial que vous pouvez
22653cloner. Par exemple, si vous hébergez Gitolite sur @code{example.com}, vous
22654pouvez lancer la commande suivante pour cloner le dépôt d'administration :
adfb167f
JL
22655
22656@example
22657git clone git@@example.com:gitolite-admin
22658@end example
22659
15f1bff4
JL
22660Lorsque le service Gitolite est activé, la clef @code{admin-pubkey} fournie
22661sera insérée dans le répertoire @file{keydir} du dépôt gitolite-admin. Si
22662cela change le dépôt, un commit sera effectué avec le message « gitolite
22663setup by GNU Guix ».
adfb167f
JL
22664
22665@deftp {Type de données} gitolite-configuration
22666Type de données représentant la configuration de
22667@code{gitolite-service-type}.
22668
22669@table @asis
22670@item @code{package} (par défaut : @var{gitolite})
22671Le paquet Gitolite à utiliser.
22672
22673@item @code{user} (par défaut : @var{git})
15f1bff4
JL
22674Utilisateur pour utiliser Gitolite. Cela sera l'utilisateur à utiliser pour
22675accéder à Gitolite par SSH.
adfb167f
JL
22676
22677@item @code{group} (par défaut : @var{git})
22678Groupe à utiliser pour Gitolite.
22679
22680@item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
22681Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
22682
22683@item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
22684Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
22685représentant la configuration de Gitolite.
22686
22687@item @code{admin-pubkey} (par défaut : @var{#f})
22688Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
22689utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
22690@file{keydir} dans le dépôt gitolite-admin.
22691
15f1bff4
JL
22692Pour spécifier la clef SSH comme chaîne de caractère, utilisez la fonction
22693@code{plain-file}.
adfb167f
JL
22694
22695@example
22696(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
22697@end example
22698
22699@end table
22700@end deftp
22701
22702@deftp {Type de données} gitolite-rc-file
22703Type de données représentant le fichier RC de Gitolite.
22704
22705@table @asis
22706@item @code{umask} (par défaut : @code{#o0077})
15f1bff4
JL
22707Cela contrôle les permissions que Gitolite propose sur les dépôts et leur
22708contenu.
adfb167f 22709
15f1bff4
JL
22710Une valeur comme @code{#o0027} donnera accès en lecture au groupe utilisé
22711par Gitolite (par défaut : @code{git}). Cel aest nécessaire lorsque vous
22712utilise Gitolite avec un logiciel comme cgit ou gitweb.
adfb167f
JL
22713
22714@item @code{git-config-keys} (par défaut : @code{""})
15f1bff4
JL
22715Gitolite vous permet de modifier les configurations git avec le mot-clef «
22716config ». Ce paramètre vous permet de contrôler les clefs de configuration
22717acceptables.
adfb167f
JL
22718
22719@item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
15f1bff4
JL
22720Indique les noms des rôles qui peuvent être utilisés par les utilisateurs
22721avec la commande perms.
adfb167f
JL
22722
22723@item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
15f1bff4
JL
22724Ce paramètre contrôle les commandes et les fonctionnalités à activer dans
22725Gitolite.
adfb167f
JL
22726
22727@end table
22728@end deftp
22729
bf5c74e7 22730
3cacfa9e 22731@node Services de jeu
15f1bff4 22732@subsection Services de jeu
bf5c74e7 22733
15f1bff4 22734@subsubheading Le service de la Bataille pour Wesnoth
bf5c74e7 22735@cindex wesnothd
15f1bff4
JL
22736@uref{https://wesnoth.org, La Bataille pour Wesnoth} est un jeu de stratégie
22737en tour par tour dans un univers fantastique, avec plusieurs campagnes solo
22738et des parties multijoueurs (en réseau et en local).
bf5c74e7 22739
1d8d69c8 22740@defvar {Variable Scheme} wesnothd-service-type
15f1bff4
JL
22741Type de service pour le service wesnothd. Sa valeur doit être un objet
22742@code{wesnothd-configuration}. Pour lancer wesnothd avec la configuration
22743par défaut, instanciez-le ainsi :
bf5c74e7
JL
22744
22745@example
22746(service wesnothd-service-type)
22747@end example
22748@end defvar
22749
1d8d69c8 22750@deftp {Type de données} wesnothd-configuration
15f1bff4 22751Type de donées représentant la configuration de @command{wesnothd}.
bf5c74e7
JL
22752
22753@table @asis
1d8d69c8 22754@item @code{package} (par défaut : @code{wesnoth-server})
15f1bff4 22755Le paquet de serveur de wesnoth à utiliser.
bf5c74e7 22756
1d8d69c8 22757@item @code{port} (par défaut : @code{15000})
15f1bff4 22758Le pour sur lequel lier le serveur.
bf5c74e7
JL
22759@end table
22760@end deftp
22761
3cacfa9e 22762@node Services divers
15f1bff4 22763@subsection Services divers
bf5c74e7 22764
15f1bff4 22765@cindex empreinte digitale
adfb167f 22766@subsubheading Service d'empreintes digitales
2cf2c778 22767
adfb167f
JL
22768Le module @code{(gnu services fingerprint)} fournit un service DBus pour
22769lire et identifier les empreintes digitales via un lecteur d'empreinte.
2cf2c778 22770
adfb167f 22771@defvr {Variable Scheme} fprintd-service-type
15f1bff4
JL
22772Le type de service pour @command{fprintd}, qui fournit des capacités de
22773lecture d'empreinte.
2cf2c778
JL
22774
22775@example
22776(service fprintd-service-type)
22777@end example
22778@end defvr
22779
bf5c74e7 22780@cindex sysctl
15f1bff4 22781@subsubheading Service de contrôle du système
bf5c74e7 22782
15f1bff4
JL
22783Le module @code{(gnu services sysctl)} fournit un service pour configurer
22784les paramètres du noyau au démarrage.
bf5c74e7 22785
1d8d69c8 22786@defvr {Variable Scheme} sysctl-service-type
15f1bff4
JL
22787Le type de service pour @command{sysctl}, qui modifie les paramètres du
22788noyau dans @file{/proc/sys/}. Pour activer le transfert d'IPv4, vous pouvez
22789l'instancier ainsi :
bf5c74e7
JL
22790
22791@example
22792(service sysctl-service-type
22793 (sysctl-configuration
22794 (settings '(("net.ipv4.ip_forward" . "1")))))
22795@end example
22796@end defvr
22797
1d8d69c8 22798@deftp {Type de données} sysctl-configuration
15f1bff4 22799Le type de données représentant la configuration de @command{sysctl}.
bf5c74e7
JL
22800
22801@table @asis
1d8d69c8 22802@item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
15f1bff4 22803L'exécutable @command{sysctl} à utiliser.
bf5c74e7 22804
1d8d69c8 22805@item @code{settings} (par défaut : @code{'()})
15f1bff4 22806Une liste d'association spécifiant les paramètres du noyau et leur valeur.
bf5c74e7
JL
22807@end table
22808@end deftp
22809
1d8d69c8 22810@cindex pcscd
15f1bff4 22811@subsubheading Service du démon PC/SC Smart Card
1d8d69c8 22812
15f1bff4
JL
22813Le module @code{(gnu services security-token)} fournit le service suivant
22814qui lance @command{pcscd}, le démon PC/SC Smart Card. @command{pcscd} est
22815le démon pour pcsc-lite et MuscleCard. C'est un gestionnaire de ressource
22816qui coordonne les communications avec les lecteurs de smart cards, les smart
22817cards et les jetons cryptographiques connectés au système.
1d8d69c8 22818
adfb167f
JL
22819@defvr {Variable Scheme} pcscd-service-type
22820Le type de service pour le service @command{pcscd}. Sa valeur doit être un
22821objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
22822par défaut, instantiez-le avec :
1d8d69c8
JL
22823
22824@example
22825(service pcscd-service-type)
22826@end example
22827@end defvr
22828
adfb167f
JL
22829@deftp {Type de données} pcscd-configuration
22830Type de données représentant la configuration de @command{pcscd}.
1d8d69c8
JL
22831
22832@table @asis
adfb167f
JL
22833@item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
22834Le paquet pcsc-lite qui fournit pcscd.
22835@item @code{usb-drivers} (par défaut : @code{(list ccid)})
15f1bff4
JL
22836Liste des paquets qui fournissent des pilotes USB à pcscd. Les pilotes
22837doivent être dans @file{pcsc/drivers} dans le répertoire du dépôt du paquet.
1d8d69c8
JL
22838@end table
22839@end deftp
22840
bf5c74e7 22841@cindex lirc
15f1bff4 22842@subsubheading Service Lirc
bf5c74e7 22843
15f1bff4 22844Le module @code{(gnu services lirc)} fournit le service suivant.
bf5c74e7 22845
1d8d69c8 22846@deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
15f1bff4
JL
22847 [#:device #f] [#:driver #f] [#:config-file #f] @
22848[#:extra-options '()]
22849Renvoie un service qui lance @url{http://www.lirc.org,LIRC}, un démon qui
22850décode les signaux infrarouges des télécommandes.
bf5c74e7 22851
15f1bff4
JL
22852Éventuellement, @var{device}, @var{driver} et @var{config-file} (le nom du
22853fichier de configuration) peuvent être spécifiés. Voir le manuel de
22854@command{lircd} pour plus de détails.
bf5c74e7 22855
15f1bff4
JL
22856Enfin, @var{extra-options} est une liste d'options de la ligne de commande
22857supplémentaires à passer à @command{lircd}.
bf5c74e7
JL
22858@end deffn
22859
22860@cindex spice
15f1bff4 22861@subsubheading Service Spice
bf5c74e7 22862
15f1bff4 22863Le module @code{(gnu services spice)} fournit le service suivant.
bf5c74e7 22864
1d8d69c8 22865@deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
15f1bff4
JL
22866Renvoie un service qui lance @url{http://www.spice-space.org,VDAGENT}, un
22867démon qui permet le partage du presse-papier avec une vm et de configurer la
22868résolution d'affichage du client lorsque la fenêtre de la console graphique
22869est redimensionnée.
bf5c74e7
JL
22870@end deffn
22871
15f1bff4
JL
22872@subsection Services de dictionnaires
22873@cindex dictionnaire
22874Le module @code{(gnu services dict)} fournit le service suivant :
bf5c74e7 22875
1d8d69c8 22876@deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
15f1bff4
JL
22877Renvoie un service qui lance le démon @command{dicod}, une implémentation du
22878serveur DICT (@pxref{Dicod,,, dico, GNU Dico Manual}).
bf5c74e7 22879
15f1bff4
JL
22880L'argument @var{config} facultatif spécifie la configuration pour
22881@command{dicod}, qui devrait être un objet @code{<dicod-configuration>}, par
22882défaut il sert le dictionnaire international collaboratif de GNU pour
22883l'anglais.
bf5c74e7 22884
15f1bff4
JL
22885Vous pouvez ajouter @command{open localhost} à votre fichier @file{~/.dico}
22886pour faire de @code{localhost} le serveur par défaut du client
22887@command{dico} (@pxref{Initialization File,,, dico, GNU Dico Manual}).
bf5c74e7
JL
22888@end deffn
22889
1d8d69c8 22890@deftp {Type de données} dicod-configuration
15f1bff4 22891Type de données représentant la configuration de dicod.
bf5c74e7
JL
22892
22893@table @asis
1d8d69c8 22894@item @code{dico} (par défaut : @var{dico})
15f1bff4 22895Objet de paquet du serveur de dictionnaire GNU Dico.
bf5c74e7 22896
1d8d69c8 22897@item @code{interfaces} (par défaut : @var{'("localhost")})
15f1bff4
JL
22898C'est la liste des adresses IP et des ports et éventuellement des noms de
22899fichiers de socket sur lesquels écouter (@pxref{Server Settings,
22900@code{listen} directive,, dico, GNU Dico Manual}).
bf5c74e7 22901
1d8d69c8 22902@item @code{handlers} (par défaut : @var{'()})
15f1bff4
JL
22903Liste des objets @code{<dicod-handler>} qui définissent des gestionnaires
22904(des instances de modules).
bf5c74e7 22905
1d8d69c8 22906@item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
15f1bff4
JL
22907Liste d'objets @code{<dicod-database>} qui définissent des dictionnaires à
22908servir.
bf5c74e7
JL
22909@end table
22910@end deftp
22911
1d8d69c8 22912@deftp {Type de données} dicod-handler
15f1bff4
JL
22913Type de données représentant un gestionnaire de dictionnaire (instance de
22914module).
bf5c74e7
JL
22915
22916@table @asis
22917@item @code{name}
15f1bff4 22918Nom du gestionnaire (instance de module).
bf5c74e7 22919
1d8d69c8 22920@item @code{module} (par défaut : @var{#f})
15f1bff4
JL
22921Nom du module dicod du gestionnaire (instance). Si la valeur est @code{#f},
22922le module a le même nom que le gestionnaire. (@pxref{Modules,,, dico, GNU
22923Dico Manual}).
bf5c74e7
JL
22924
22925@item @code{options}
15f1bff4
JL
22926Liste de chaînes ou de gexps représentant les arguments pour le gestionnaire
22927de module.
bf5c74e7
JL
22928@end table
22929@end deftp
22930
1d8d69c8 22931@deftp {Type de données} dicod-database
15f1bff4 22932Type de données représentant une base de données de dictionnaire.
bf5c74e7
JL
22933
22934@table @asis
22935@item @code{name}
15f1bff4 22936Nom de la base de données, qui sera utilisée dans les commande DICT.
bf5c74e7
JL
22937
22938@item @code{handler}
15f1bff4
JL
22939Nom du gestionnaire dicod (instance de module) utilisé par cette base de
22940données (@pxref{Handlers,,, dico, GNU Dico Manual}).
bf5c74e7 22941
1d8d69c8 22942@item @code{complex?} (par défaut : @var{#f})
15f1bff4
JL
22943Indique si la configuration est pour une base de données complexe. La
22944configuration complexe a besoin d'un objet @code{<dicod-handler>}
22945correspondant, sinon inutile.
bf5c74e7
JL
22946
22947@item @code{options}
15f1bff4
JL
22948Liste de chaînes ou de gexps représentant les arguments pour la base de
22949données (@pxref{Databases,,, dico, GNU Dico Manual}).
bf5c74e7
JL
22950@end table
22951@end deftp
22952
1d8d69c8 22953@defvr {Variable Scheme} %dicod-database:gcide
15f1bff4
JL
22954Un objet @code{<dicod-database>} servant le dictionnaire international
22955collaboratif en anglais via le paquet @code{gcide}.
bf5c74e7
JL
22956@end defvr
22957
15f1bff4 22958Voici un exemple de configuration de @code{dicod-service}.
bf5c74e7
JL
22959
22960@example
22961(dicod-service #:config
22962 (dicod-configuration
22963 (handlers (list (dicod-handler
22964 (name "wordnet")
22965 (module "dictorg")
22966 (options
22967 (list #~(string-append "dbdir=" #$wordnet))))))
22968 (databases (list (dicod-database
22969 (name "wordnet")
22970 (complex? #t)
22971 (handler "wordnet")
22972 (options '("database=wn")))
22973 %dicod-database:gcide))))
22974@end example
22975
15f1bff4
JL
22976@cindex Docker
22977@subsubheading Docker Service
22978
22979The @code{(gnu services docker)} module provides the following service.
22980
22981@defvr {Scheme Variable} docker-service-type
22982
22983This is the type of the service that runs
22984@url{http://www.docker.com,Docker}, a daemon that can execute application
22985bundles (sometimes referred to as ``containers'') in isolated environments.
22986
22987@end defvr
22988
22989@deftp {Data Type} docker-configuration
22990This is the data type representing the configuration of Docker and
22991Containerd.
22992
22993@table @asis
22994
22995@item @code{package} (default: @code{docker})
22996The Docker package to use.
22997
22998@item @code{containerd} (default: @var{containerd})
22999The Containerd package to use.
23000
23001@end table
23002@end deftp
23003
bf5c74e7 23004@node Programmes setuid
15f1bff4
JL
23005@section Programmes setuid
23006
23007@cindex programmes setuid
23008Certains programmes doivent être lancés avec les privilèges « root » même
23009lorsqu'ils sont lancés par un utilisateur non privilégié. Un exemple
23010notoire est le programme @command{passwd}, que les utilisateurs peuvent
23011appeler pour modifier leur mot de passe et qui doit accéder à
23012@file{/etc/passwd} et @file{/etc/shadow} — ce qui est normalement réservé à
23013root, pour des raisons de sécurité évidentes. Pour contourner cela, ces
23014exécutables sont @dfn{setuid-root}, ce qui signifie qu'ils seront toujours
23015lancés avec les privilèges root (@pxref{How Change Persona,,, libc, The GNU
23016C Library Reference Manual}, pour plus d'informations sur le mécanisme
23017setuid).
23018
23019Le dépôt lui-même ne @emph{peut pas} contenir de programmes setuid ; cela
23020serait un problème de sécurité puisque n'importe quel utilisateur du système
23021peut écrire une dérivation qui rempli le dépôt (@pxref{Le dépôt}). Donc,
23022un mécanisme différent est utilisé : au lieu de changer le bit setuid
23023directement sur les fichiers qui sont dans le dépôt, nous laissons à
23024l'administrateur système le soit de @emph{déclarer} les programmes qui
23025devraient être setuid root.
23026
23027Le champ @code{setuid-programs} d'une déclaration @code{operating-system}
23028contient une liste de G-expressions qui dénotent les noms des programmes à
23029rendre setuid-root (@pxref{Utiliser le système de configuration}). Par exemple,
23030le programme @command{passwd}, qui fait partie du paquet Shadow, peut être
23031désigné par cette G-expression (@pxref{G-Expressions}) :
bf5c74e7
JL
23032
23033@example
23034#~(string-append #$shadow "/bin/passwd")
23035@end example
23036
15f1bff4
JL
23037Un ensemble de programmes par défaut est défini par la variable
23038@code{%setuid-programs} du module @code{(gnu system)}.
bf5c74e7 23039
1d8d69c8 23040@defvr {Variable Scheme} %setuid-programs
15f1bff4
JL
23041Une liste de G-expressions qui dénotent les programmes communément
23042setuid-root.
bf5c74e7 23043
15f1bff4
JL
23044La liste inclus des commandes comme @command{passwd}, @command{ping},
23045@command{su} et @command{sudo}.
bf5c74e7
JL
23046@end defvr
23047
15f1bff4
JL
23048Sous le capot, les programmes setuid sont créés dans le répertoire
23049@file{/run/setuid-programs} au moment de l'activation du système. Les
23050fichiers dans ce répertoire se réfèrent aux « vrais » binaires, qui sont
23051dans le dépot.
bf5c74e7
JL
23052
23053@node Certificats X.509
15f1bff4 23054@section Certificats X.509
bf5c74e7 23055
15f1bff4
JL
23056@cindex HTTPS, certificats
23057@cindex certificats X.509
bf5c74e7 23058@cindex TLS
15f1bff4
JL
23059Les serveurs web disponibles par HTTPS (c'est-à-dire HTTP sur le mécanisme
23060de la couche de transport sécurisée, TLS) envoient aux clients un
23061@dfn{certificat X.509} que les clients peuvent utiliser pour
23062@emph{authentifier} le serveur. Pour cela, les clients vérifient que le
23063certificat du serveur est signé par une @dfn{autorité de certification} (AC
23064ou CA). Mais pour vérifier la signature de la CA, les clients doivent
23065d'abord avoir récupéré le certificat de la CA.
23066
23067Les navigateurs web comme GNU@tie{}IceCat incluent leur propre liste de
23068certificats, pour qu'ils puissent vérifier les signatures des CA
23069directement.
23070
23071Cependant, la plupart des autres programmes qui peuvent parler HTTPS —
23072@command{wget}, @command{git}, @command{w3m}, etc — doivent savoir où
23073trouver les certificats des CA.
bf5c74e7
JL
23074
23075@cindex @code{nss-certs}
15f1bff4
JL
23076In Guix, this is done by adding a package that provides certificates to the
23077@code{packages} field of the @code{operating-system} declaration
23078(@pxref{Référence de système d'exploitation}). Guix includes one such package,
bf5c74e7
JL
23079@code{nss-certs}, which is a set of CA certificates provided as part of
23080Mozilla's Network Security Services.
23081
15f1bff4
JL
23082Remarquez qu'il ne fait @emph{pas} partie de @var{%base-packages}, donc vous
23083devez explicitement l'ajouter. Le répertoire @file{/etc/ssl/certs}, là où
23084la plupart des applications et bibliothèques vont rechercher les certificats
23085par défaut, pointe vers les certificats installés globalement.
23086
23087Les utilisateurs non privilégiés, dont les utilisateurs de Guix sur une
23088distro externe, peuvent aussi installer leur propre paquet de certificats
23089dans leur profil. Un certain nombre de variables d'environnement doivent
23090être définies pour que les applications et les bibliothèques puissent les
23091trouver. En particulier, la bibliothèque OpenSSL honore les variables
23092@code{SSL_CERT_DIR} et @code{SSL_CERT_FILE}. Certaines applications
23093ajoutent leurs propres variables, par exemple le système de contrôle de
23094version Git honore le lot de certificats pointé par la variable
23095d'environnement @code{GIT_SSL_CAINFO}. Ainsi, vous lanceriez quelque chose
23096comme ceci :
bf5c74e7
JL
23097
23098@example
23099$ guix package -i nss-certs
23100$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
23101$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
23102$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
23103@end example
23104
15f1bff4
JL
23105Un autre exemple serait R, qui requière que la variable d'environnement
23106@code{CURL_CA_BUNDLE} pointe sur le lot de certificats, donc vous lanceriez
23107quelque chose comme ceci :
bf5c74e7
JL
23108
23109@example
23110$ guix package -i nss-certs
23111$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
23112@end example
23113
15f1bff4
JL
23114Pour d'autres applications vous pourriez avoir besoin de chercher la
23115variable d'environnement requise dans leur documentation.
bf5c74e7
JL
23116
23117
23118@node Name Service Switch
15f1bff4 23119@section Name Service Switch
bf5c74e7
JL
23120
23121@cindex name service switch
23122@cindex NSS
15f1bff4
JL
23123Le module @code{(gnu system nss)} fournit des liaisons pour le fichier de
23124configuration du @dfn{name service switch} ou @dfn{NSS} de la libc
23125(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
23126Manual}). En résumé, NSS est un mécanisme qui permet à la libc d'être
23127étendue avec de nouvelles méthodes de résolution de « noms » dans les bases
23128de données du système, comme les noms d'hôtes, les noms des services, les
23129comptes utilisateurs et bien plus (@pxref{Name Service Switch, System
bf5c74e7
JL
23130Databases and Name Service Switch,, libc, The GNU C Library Reference
23131Manual}).
23132
15f1bff4
JL
23133La configuration de NSS spécifie, pour chaque base de données du système,
23134quelle méthode de résolution utiliser, et comment les diverses méthodes sont
23135enchaînées — par exemple, sous certaines circonstances, NSS devrait essayer
23136la méthode suivante de la liste. La configuration de NSS est donnée dans le
23137champ @code{name-service-switch} de la déclaration @code{operating-system}
23138(@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
bf5c74e7
JL
23139
23140@cindex nss-mdns
15f1bff4
JL
23141@cindex .local, résolution de nom d'hôte
23142Par exemple, la déclation ci-dessous configure NSS pour utiliser le
23143@uref{http://0pointer.de/lennart/projects/nss-mdns/, moteur
23144@code{nss-mdns}}, qui supporte la résolution de nom d'hôte sur le DNS
23145multicast (mDNS) pour les noms d'hôtes terminant par @code{.local} :
bf5c74e7
JL
23146
23147@example
23148(name-service-switch
23149 (hosts (list %files ;first, check /etc/hosts
23150
15f1bff4
JL
23151 ;; Si ce qui précède n'a pas fonctionné, essayer
23152 ;; avec « mdns_minimal ».
bf5c74e7
JL
23153 (name-service
23154 (name "mdns_minimal")
23155
15f1bff4
JL
23156 ;; « mdns_minimal » fait autorité pour
23157 ;; « .local ». Lorsqu'il renvoie « pas trouvé »,
23158 ;; inutile d'essayer la méthode suivante.
bf5c74e7
JL
23159 (reaction (lookup-specification
23160 (not-found => return))))
23161
15f1bff4 23162 ;; Puis revenir sur DNS.
bf5c74e7
JL
23163 (name-service
23164 (name "dns"))
23165
15f1bff4 23166 ;; Enfin, essayer avec « mdns complet ».
bf5c74e7
JL
23167 (name-service
23168 (name "mdns")))))
23169@end example
23170
15f1bff4
JL
23171Ne vous inquiétez pas : la variable @code{%mdns-host-lookup-nss} (voir plus
23172bas) contient cette configuration, donc vous n'avez pas besoin de tout taper
23173si vous voulez simplement que la résolution de nom en @code{.local}
23174fonctionne.
bf5c74e7
JL
23175
23176Note that, in this case, in addition to setting the
23177@code{name-service-switch} of the @code{operating-system} declaration, you
15f1bff4
JL
23178also need to use @code{avahi-service-type} (@pxref{Services réseau,
23179@code{avahi-service-type}}), or @var{%desktop-services}, which includes it
3cacfa9e 23180(@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
bf5c74e7
JL
23181the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
23182
15f1bff4
JL
23183Pour votre confort, les variables suivantes contiennent des configurations
23184NSS typiques.
bf5c74e7 23185
1d8d69c8 23186@defvr {Variable Scheme} %default-nss
15f1bff4 23187C'est la configuration NSS par défaut, un objet @code{name-service-switch}.
bf5c74e7
JL
23188@end defvr
23189
1d8d69c8 23190@defvr {Variable Scheme} %mdns-host-lookup-nss
15f1bff4
JL
23191C'est la configuration NSS avec le support de la résolution de noms sur DNS
23192multicast (mDNS) pour les noms d'hôtes en @code{.local}.
bf5c74e7
JL
23193@end defvr
23194
15f1bff4
JL
23195La référence pour la configuration de NSS est donnée ci-dessous. C'est une
23196correspondance directe avec le format de fichier de la bibliothèque C, donc
23197référez-vous au manuel de la bibliothèque C pour plus d'informations
23198(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
23199Manual}). Comparé au format de fichier de configuration de NSS, cette
23200configuration a l'avantage non seulement d'ajouter ces bonnes vieilles
23201parenthèses, mais aussi des vérifications statiques ; vous saurez s'il y a
23202des erreurs de syntaxe et des coquilles dès que vous lancerez @command{guix
bf5c74e7
JL
23203system}.
23204
1d8d69c8 23205@deftp {Type de données} name-service-switch
bf5c74e7 23206
15f1bff4
JL
23207C'est le type de données représentant la configuration de NSS. Chaque champ
23208ci-dessous représente l'un des système de bases de données supportés.
bf5c74e7
JL
23209
23210@table @code
23211@item aliases
23212@itemx ethers
23213@itemx group
23214@itemx gshadow
23215@itemx hosts
23216@itemx initgroups
23217@itemx netgroup
23218@itemx networks
23219@itemx password
23220@itemx public-key
23221@itemx rpc
23222@itemx services
23223@itemx shadow
15f1bff4
JL
23224Les bases de données du système gérées par NSS. Chaque champ doit être une
23225liste d'objets @code{<name-service>} (voir plus bas).
bf5c74e7
JL
23226@end table
23227@end deftp
23228
1d8d69c8 23229@deftp {Type de données} name-service
bf5c74e7 23230
15f1bff4
JL
23231C'est le type de données représentant un service de noms et l'action de
23232résolution associée.
bf5c74e7
JL
23233
23234@table @code
23235@item name
15f1bff4 23236Une chaîne dénotant le service de nom (@pxref{Services in the NSS
bf5c74e7
JL
23237configuration,,, libc, The GNU C Library Reference Manual}).
23238
15f1bff4
JL
23239Remarquez que les services de dnoms listés ici doivent être visibles à
23240nscd. Cela se fait en passant la liste des paquets fournissant les services
23241de noms à l'argument @code{#:name-services} de @code{nscd-service}
bf5c74e7
JL
23242(@pxref{Services de base, @code{nscd-service}}).
23243
23244@item reaction
15f1bff4 23245Une action spécifiée par la macro @code{lookup-specification}
bf5c74e7 23246(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
15f1bff4 23247Reference Manual}). Par exemple :
bf5c74e7
JL
23248
23249@example
23250(lookup-specification (unavailable => continue)
23251 (success => return))
23252@end example
23253@end table
23254@end deftp
23255
23256@node Disque de RAM initial
15f1bff4 23257@section Disque de RAM initial
bf5c74e7
JL
23258
23259@cindex initrd
1d8d69c8 23260@cindex disque de RAM initial
15f1bff4
JL
23261Pour le démarrage, on passe au noyau Linux-Libre un @dfn{disque de RAM
23262initial} ou @dfn{initrd}. Un initrd contient un système de fichier racine
23263temporaire ainsi qu'un script d'initialisation. Ce dernier est responsable
23264du montage du vrai système de fichier racine et du chargement des modules du
23265noyau qui peuvent être nécessaires à cette tâche.
23266
23267Le champ @code{initrd-modules} d'une déclaration @code{operating-system}
23268vous permet de spécifier les modules du noyau Linux-Libre qui doivent être
23269disponibles dans l'initrd. En particulier, c'est là où vous devez lister
23270les modules requis pour effectivement piloter le disque dur où se trouve la
23271partition racine — bien que la valeur par défaut de @code{initrd-modules}
23272couvre la plupart des cas. Par exemple, en supposant que vous ayez besoin
23273du module @code{megaraid_sas} en plus des modules par défaut pour accéder à
23274votre système de fichiers racine, vous écririez :
bf5c74e7
JL
23275
23276@example
23277(operating-system
23278 ;; @dots{}
23279 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
23280@end example
23281
1d8d69c8 23282@defvr {Variable Scheme} %base-initrd-modules
15f1bff4 23283C'est la liste des modules du noyau inclus dans l'initrd par défaut.
bf5c74e7
JL
23284@end defvr
23285
15f1bff4
JL
23286En plus, si vous avez besoin de paramétrages plus bas niveau, le champ
23287@code{initrd} d'une déclaration @code{operating-system} vous permet de
23288spécifier quel initrd vous voudriez utiliser. Le module @code{(gnu system
23289linux-initrd)} fournit trois manières de construire un initrd : la procédure
23290@code{base-initrd} de haut niveau et les procédures @code{raw-initrd} et
23291@code{expression->initrd} de bas niveau.
bf5c74e7 23292
15f1bff4
JL
23293La procédure @code{base-initrd} est conçue pour couvrir la plupart des
23294usages courants. Par exemple, si vous voulez ajouter des modules du noyau à
23295charger au démarrage, vous pouvez définir le champ @code{initrd} de votre
23296déclaration de système d'exploitation ainsi :
bf5c74e7
JL
23297
23298@example
23299(initrd (lambda (file-systems . rest)
15f1bff4
JL
23300 ;; Crée un initrd standard mais paramètre le réseau
23301 ;; avec les paramètres que QEMU attend par défaut.
bf5c74e7
JL
23302 (apply base-initrd file-systems
23303 #:qemu-networking? #t
23304 rest)))
23305@end example
23306
15f1bff4
JL
23307La procédure @code{base-initrd} gère aussi les cas d'utilisation courants
23308qui concernent l'utilisation du système comme client QEMU, ou comme un
23309système « live » avec un système de fichier racine volatile.
bf5c74e7 23310
15f1bff4
JL
23311La procédure @code{base-initrd} est construite à partir de la procédure
23312@code{raw-initrd}. Contrairement à @code{base-initrd}, @code{raw-initrd} ne
23313fait rien à haut-niveau, comme essayer de deviner les modules du noyau et
23314les paquets qui devraient être inclus dans l'initrd. Un exemple
23315d'utilisation de @code{raw-initrd} serait si un utilisateur a une
23316configuration personnalisée du noyau Linux et que les modules du noyau
23317inclus par défaut par @code{base-initrd} ne sont pas disponibles.
bf5c74e7 23318
15f1bff4
JL
23319Le disque de RAM initial produit par @code{base-initrd} ou @code{raw-initrd}
23320honore plusieurs options passées par la ligne de commande du noyau Linux
23321(c'est-à-dire les arguments passés via la commande @code{linux} de GRUB ou
23322l'option @code{-append} de QEMU), notamment :
bf5c74e7
JL
23323
23324@table @code
23325@item --load=@var{boot}
15f1bff4
JL
23326Dit au disque de RAM initial de charger @var{boot}, un fichier contenant un
23327programme Scheme, une fois qu'il a monté le système de fichier racine.
bf5c74e7 23328
15f1bff4 23329Guix uses this option to yield control to a boot program that runs the
bf5c74e7
JL
23330service activation programs and then spawns the GNU@tie{}Shepherd, the
23331initialization system.
23332
23333@item --root=@var{root}
15f1bff4
JL
23334Monte @var{root} comme système de fichier racine. @var{root} peut être un
23335nom de périphérique comme @code{/dev/sda1}, une étiquette de système de
23336fichiers ou un UUID de système de fichiers.
bf5c74e7 23337
3cacfa9e 23338@item --system=@var{système}
15f1bff4
JL
23339S'assure que @file{/run/booted-system} et @file{/run/current-system}
23340pointent vers @var{system}.
bf5c74e7
JL
23341
23342@item modprobe.blacklist=@var{modules}@dots{}
15f1bff4
JL
23343@cindex module, black-list
23344@cindex black-list, des modules du noyau
23345Dit au disque de RAM initial ainsi qu'à la commande @command{modprobe} (du
23346paquet kmod) de refuser de charger @var{modules}. @var{modules} doit être
23347une liste de noms de modules séparés par des virgules — p.@: ex.@:
23348@code{usbkbd,9pnet}.
bf5c74e7
JL
23349
23350@item --repl
15f1bff4
JL
23351Démarre une boucle lecture-évaluation-affichage (REPL) depuis le disque de
23352RAM initial avant qu'il n'essaye de charger les modules du noyau et de
23353monter le système de fichiers racine. Notre équipe commerciale appelle cela
23354@dfn{boot-to-Guile}. Le Schemeur en vous va adorer. @xref{Using Guile
23355Interactively,,, guile, GNU Guile Reference Manual}, pour plus d'information
23356sur le REPL de Guile.
bf5c74e7
JL
23357
23358@end table
23359
15f1bff4
JL
23360Maintenant que vous connaissez toutes les fonctionnalités des disques de RAM
23361initiaux produits par @code{base-initrd} et @code{raw-initrd}, voici comment
23362l'utiliser le personnalisé plus avant.
bf5c74e7
JL
23363
23364@cindex initrd
1d8d69c8 23365@cindex disque de RAM initial
adfb167f 23366@deffn {Procédure Scheme} raw-initrd @var{file-systems} @
15f1bff4
JL
23367 [#:linux-modules '()] [#:mapped-devices '()] @
23368[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
23369Renvoie une dérivation qui construit un initrd. @var{file-systems} est une
23370liste de systèmes de fichiers à monter par l'initrd, éventuellement en plus
23371du système de fichier racine spécifié sur la ligne de commande du noyau via
23372@code{--root}. @var{linux-modules} est une liste de modules du noyau à
23373charger au démarrage. @var{mapped-devices} est une liste de correspondances
23374de périphériques à réaliser avant que les @var{file-systems} ne soient
23375montés (@pxref{Périphériques mappés}). @var{helper-packages} est une liste de
23376paquets à copier dans l'initrd. Elle peut inclure @code{e2fsck/static} ou
23377d'autres paquets requis par l'initrd pour vérifier le système de fichiers
23378racine.
23379
23380Lorsque @var{qemu-networking?} est vrai, paramètre le réseau avec les
23381paramètres QEMU standards. Lorsque @var{virtio?} est vrai, charge des
23382modules supplémentaires pour que l'initrd puisse être utilisé comme client
23383QEMU avec les pilotes I/O para-virtualisés.
23384
23385Lorsque @var{volatile-root?} est vrai, le système de fichier racine est
23386inscriptible mais tous les changements seront perdus.
bf5c74e7
JL
23387@end deffn
23388
adfb167f 23389@deffn {Procédure Scheme} base-initrd @var{file-systems} @
15f1bff4
JL
23390 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f] @
23391[#:linux-modules '()]
23392Renvoie un objet simili-fichier contenant un initrd générique, avec les
23393modules du noyau de @var{linux}. @var{file-systems} est une liste de
23394systèmes de fichiers à monter par l'initrd, éventuellement en plus du
23395système de fichiers racine spécifié sur la ligne de commande du noyau via
23396@code{--root}. @var{mapped-devices} est une liste de correspondances de
23397périphériques à réaliser avant de monter les @var{file-systems}.
23398
23399@var{qemu-networking?} et @var{volatile-root?} se comportent comme pour
bf5c74e7
JL
23400@code{raw-initrd}.
23401
15f1bff4
JL
23402L'initrd est automatiquement remplie avec tous les modules du noyau requis
23403pour @var{file-systems} et pour les options données. On peut lister des
23404modules supplémentaires dans @var{linux-modules}. Ils seront ajoutés à
23405l'initrd et chargés au démarrage dans l'ordre dans lequel ils apparaissent.
bf5c74e7
JL
23406@end deffn
23407
15f1bff4
JL
23408Inutile de le dire, les initrds que nous produisons et utilisons incluent
23409une version de Guile liée statiquement, et le programme d'initialisation est
23410un programme Guile. Cela donne beaucoup de flexibilité. La procédure
23411@code{expression->initrd} construit un tel initrd, étant donné le programme
23412à lancer dans cet initrd.
bf5c74e7 23413
adfb167f 23414@deffn {Procédure Scheme} expression->initrd @var{exp} @
15f1bff4
JL
23415 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
23416Renvoie un objet simili-fichier contenant un initrd Linux (une archive cpio
23417compressée avec gzip) contenant @var{guile} et qui évalue @var{exp}, une
23418G-expression, au démarrage. Toutes les dérivations référencées par
23419@var{exp} sont automatiquement copiées dans l'initrd.
bf5c74e7
JL
23420@end deffn
23421
23422@node Configuration du chargeur d'amorçage
15f1bff4 23423@section Configuration du chargeur d'amorçage
bf5c74e7
JL
23424
23425@cindex bootloader
15f1bff4 23426@cindex chargeur d'amorçage
bf5c74e7 23427
15f1bff4
JL
23428Le système d'exploitation supporte plusieurs chargeurs d'amorçage. La
23429configuration du chargeur d'amorçage se fait avec la déclaration
23430@code{bootloader-configuration}. Tous les champs de cette structure sont
23431indépendants du chargeur d'amorçage sauf un, @code{bootloader} qui indique
23432le chargeur d'amorçage à configurer et à installer.
bf5c74e7 23433
15f1bff4
JL
23434Certains chargeurs d'amorçage ne respectent pas tous les champs de
23435@code{bootloader-configuration}. Par exemple, le chargeur d'amorçage
23436extlinux ne supporte pas les thèmes et ignore donc le champ @code{theme}.
bf5c74e7 23437
1d8d69c8 23438@deftp {Type de données} bootloader-configuration
15f1bff4 23439Le type d'une déclaration de configuration de chargeur d'amorçage.
bf5c74e7
JL
23440
23441@table @asis
23442
23443@item @code{bootloader}
15f1bff4
JL
23444@cindex EFI, chargeur d'amorçage
23445@cindex UEFI, chargeur d'amorçage
23446@cindex BIOS, chargeur d'amorçage
23447Le chargeur d'amorçage à utiliser, comme objet @code{bootloader}. Pour
23448l'instant @code{grub-bootloader}, @code{grub-efi-bootloader},
23449@code{extlinux-bootloader} et @code{u-boot-bootloader} sont supportés.
524756d1
JL
23450
23451@vindex grub-efi-bootloader
15f1bff4
JL
23452@code{grub-efi-bootloader} permet de démarrer sur un système moderne qui
23453utilise l'UEFI (@dfn{Unified Extensible Firmware Interface}). C'est ce que
23454vous devriez utiliser si l'image d'installation contient un répertoire
23455@file{/sys/firmware/efi} lorsque vous démarrez dessus sur votre machine.
524756d1
JL
23456
23457@vindex grub-bootloader
15f1bff4
JL
23458@code{grub-bootloader} vous permet de démarrer en particulier sur des
23459machines Intel en mode BIOS « legacy ».
bf5c74e7 23460
adfb167f
JL
23461@cindex ARM, chargeurs d'amorçage
23462@cindex AArch64, chargeurs d'amorçage
15f1bff4
JL
23463Les chargeurs d'amorçage disponibles sont décrits dans les modules
23464@code{(gnu bootloader @dots{})}. En particulier, @code{(gnu bootloader
23465u-boot)} contient des définitions de chargeurs d'amorçage pour une large
23466gamme de systèmes ARM et AArch, à l'aide du
23467@uref{http://www.denx.de/wiki/U-Boot/, chargeur d'amorçage U-Boot}
bf5c74e7
JL
23468
23469@item @code{target}
15f1bff4
JL
23470C'est une chaîne qui dénote la cible sur laquelle installer le chargeur
23471d'amorçage.
524756d1 23472
15f1bff4
JL
23473L'interprétation dépend du chargeur d'amorçage en question. Pour
23474@code{grub-bootloader} par exemple, cela devrait être un nom de périphérique
23475compris par la commande @command{installer} du chargeur d'amorçage, comme
23476@code{/dev/sda} ou @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU
23477GRUB Manual}). Pour @code{grub-efi-bootloader}, cela devrait être le point
23478de montage du système de fichiers EFI, typiquement @file{/boot/efi}.
bf5c74e7 23479
1d8d69c8 23480@item @code{menu-entries} (par défaut : @code{()})
15f1bff4
JL
23481Une liste éventuellement vide d'objets @code{menu-entry} (voir plus bas),
23482dénotant les entrées qui doivent apparaître dans le menu du chargeur
23483d'amorçage, en plus de l'entrée pour le système actuel et l'entrée pointant
23484vers les générations précédentes.
bf5c74e7 23485
1d8d69c8 23486@item @code{default-entry} (par défaut : @code{0})
15f1bff4
JL
23487L'index de l'entrée du menu de démarrage par défaut. L'index 0 correspond
23488au système actuel.
bf5c74e7 23489
1d8d69c8 23490@item @code{timeout} (par défaut : @code{5})
15f1bff4
JL
23491Le nombre de secondes à attendre une entrée clavier avant de démarrer.
23492Indiquez 0 pour démarre immédiatement, et -1 pour attendre indéfiniment.
bf5c74e7 23493
1d8d69c8 23494@item @code{theme} (par défaut : @var{#f})
15f1bff4
JL
23495L'objet de thème du chargeur d'amorçage décrivant le thème utilisé. Si
23496aucun thème n'est fournit, certains chargeurs d'amorçage peuvent utiliser un
23497thème par défaut, c'est le cas de GRUB.
bf5c74e7 23498
1d8d69c8 23499@item @code{terminal-outputs} (par défaut : @code{'gfxterm})
15f1bff4
JL
23500Les terminaux de sortie utilisés par le menu de démarrage du chargeur
23501d'amorçage, en tant que liste de symboles. GRUB accepte les valeurs
23502@code{console}, @code{serial}, @code{serial_@{0-3@}}, @code{gfxterm},
23503@code{vga_text}, @code{mda_text}, @code{morse} et @code{pkmodem}. Ce champ
23504correspond à la variable GRUB @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
23505configuration,,, grub,GNU GRUB manual}).
bf5c74e7 23506
1d8d69c8 23507@item @code{terminal-inputs} (par défaut : @code{'()})
15f1bff4
JL
23508Les terminaux d'entrée utilisés par le menu de démarrage du chargeur
23509d'amorçage, en tant que liste de symboles. Pour GRUB, la valeur par défaut
23510est le terminal natif de la plate-forme déterminé à l'exécution. GRUB
23511accepte les valeurs @code{console}, @code{serial}, @code{serial_@{0-3@}},
23512@code{at_keyboard} et @code{usb_keyboard}. Ce champ correspond à la
23513variable GRUB @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,,
23514grub,GNU GRUB manual}).
bf5c74e7 23515
1d8d69c8 23516@item @code{serial-unit} (par défaut : @code{#f})
15f1bff4
JL
23517L'unitié série utilisée par le chargeur d'amorçage, en tant qu'entier entre
235180 et 3. Pour GRUB, il est choisi à l'exécution ; actuellement GRUB choisi
235190, ce qui correspond à COM1 (@pxref{Serial terminal,,, grub,GNU GRUB
23520manual}).
bf5c74e7 23521
1d8d69c8 23522@item @code{serial-speed} (par défaut : @code{#f})
15f1bff4
JL
23523La vitesse de l'interface série, en tant qu'entier. Pour GRUB, la valeur
23524par défaut est choisie à l'exécution ; actuellement GRUB choisi
235259600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
bf5c74e7
JL
23526@end table
23527
23528@end deftp
23529
23530@cindex dual boot
15f1bff4
JL
23531@cindex menu de démarrage
23532Si vous voulez lister des entrées du menu de démarrage supplémentaires via
23533le champ @code{menu-entries} ci-dessus, vous devrez les créer avec la forme
23534@code{menu-entry}. Par exemple, imaginons que vous souhaitiez pouvoir
23535démarrer sur une autre distro (c'est difficile à concevoir !), vous pourriez
23536alors définir une entrée du menu comme ceci :
bf5c74e7
JL
23537
23538@example
23539(menu-entry
15f1bff4 23540 (label "L'autre distro")
bf5c74e7
JL
23541 (linux "/boot/old/vmlinux-2.6.32")
23542 (linux-arguments '("root=/dev/sda2"))
23543 (initrd "/boot/old/initrd"))
23544@end example
23545
15f1bff4 23546Les détails suivent.
bf5c74e7 23547
1d8d69c8 23548@deftp {Type de données} menu-entry
15f1bff4 23549Le type d'une entrée dans le menu du chargeur d'amorçage.
bf5c74e7
JL
23550
23551@table @asis
23552
23553@item @code{label}
15f1bff4 23554L'étiquette à montrer dans le menu — p.@: ex.@: @code{"GNU"}.
bf5c74e7
JL
23555
23556@item @code{linux}
15f1bff4 23557L'image du noyau Linux à démarrer, par exemple :
bf5c74e7
JL
23558
23559@example
23560(file-append linux-libre "/bzImage")
23561@end example
23562
15f1bff4
JL
23563Pour GRUB, il est aussi possible de spécifier un périphérique explicitement
23564dans le chemin de fichier avec la convention de nommage de GRUB
23565(@pxref{Naming convention,,, grub, GNU GRUB manual}), par exemple :
bf5c74e7
JL
23566
23567@example
23568"(hd0,msdos1)/boot/vmlinuz"
23569@end example
23570
15f1bff4
JL
23571Si le périphérique est spécifié explicitement comme au-dessus, le champ
23572@code{device} est complètement ignoré.
bf5c74e7 23573
1d8d69c8 23574@item @code{linux-arguments} (par défaut : @code{()})
15f1bff4
JL
23575La liste des arguments de la ligne de commande du noyau supplémentaires —
23576p.@: ex.@: @code{("console=ttyS0")}.
bf5c74e7
JL
23577
23578@item @code{initrd}
15f1bff4
JL
23579Une G-expression ou une chaîne dénotant le nom de fichier du disque de RAM
23580initial à utiliser (@pxref{G-Expressions}).
1d8d69c8 23581@item @code{device} (par défaut : @code{#f})
15f1bff4
JL
23582Le périphérique où le noyau et l'initrd se trouvent — c.-à-d.@: pour GRUB,
23583l'option @dfn{root} de cette entrée de menu (@pxref{root,,, grub, GNU GRUB
23584manual}).
bf5c74e7 23585
15f1bff4
JL
23586Cela peut être une étiquette de système de fichiers (une chaîne), un UUID de
23587système de fichiers (un vecteur d'octets, @pxref{Systèmes de fichiers}) ou
23588@code{#f}, auquel cas le chargeur d'amorçage recherchera le périphérique
23589contenant le fichier spécifié par le champ @code{linux} (@pxref{search,,,
23590grub, GNU GRUB manual}). Cela ne doit @emph{pas} être un nom de
23591périphérique donné par l'OS comme @file{/dev/sda1}.
bf5c74e7
JL
23592
23593@end table
23594@end deftp
23595
23596@c FIXME: Write documentation once it's stable.
15f1bff4
JL
23597Pour l'instant seul GRUB supporte les thèmes. On crée un thème GRUB avec la
23598forme @code{grub-theme}, qui n'est pas encore documentée.
bf5c74e7 23599
1d8d69c8 23600@defvr {Variable Scheme} %default-theme
15f1bff4
JL
23601C'est le thème par défaut de GRUB utilisé par le système d'exploitation si
23602aucun champ @code{theme} n'est spécifié dans l'enregistrement
23603@code{bootloader-configuration}.
bf5c74e7 23604
15f1bff4 23605Il contient une image de fond sympathique avec les logos de GNU et de Guix.
bf5c74e7
JL
23606@end defvr
23607
23608
23609@node Invoquer guix system
15f1bff4 23610@section Invoquer @code{guix system}
bf5c74e7 23611
15f1bff4
JL
23612Une fois que vous avez écrit une déclaration de système d'exploitation comme
23613nous l'avons vu dans les sections précédentes, elle peut être instanciée
23614avec la commande @command{guix system}. Voici le résumé de la commande :
bf5c74e7
JL
23615
23616@example
23617guix system @var{options}@dots{} @var{action} @var{file}
23618@end example
23619
15f1bff4
JL
23620@var{file} doit être le nom d'un fichier contenant une déclaration
23621@code{operating-system}. @var{action} spécifie comme le système
23622d'exploitation est instancié. Actuellement les valeurs suivantes sont
23623supportées :
bf5c74e7
JL
23624
23625@table @code
23626@item search
15f1bff4
JL
23627Affiche les définitions des types de services disponibles qui correspondent
23628aux expressions régulières données, triées par pertinence.
bf5c74e7
JL
23629
23630@example
23631$ guix system search console font
23632name: console-fonts
15f1bff4 23633location: gnu/services/base.scm:773:2
bf5c74e7 23634extends: shepherd-root
15f1bff4
JL
23635description: 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
23636+ de tty/police comme ceci :
bf5c74e7
JL
23637+
23638+ '(("tty1" . "LatGrkCyr-8x16"))
15f1bff4 23639relevance: 16
bf5c74e7
JL
23640
23641name: mingetty
15f1bff4 23642location: gnu/services/base.scm:1144:2
bf5c74e7 23643extends: shepherd-root
15f1bff4
JL
23644description: Fournit la connexion en console avec le programme `mingetty'.
23645relevance: 4
bf5c74e7
JL
23646
23647name: login
15f1bff4 23648location: gnu/services/base.scm:819:2
bf5c74e7 23649extends: pam
15f1bff4
JL
23650description: Fournit un service de connexion en console tel que spécifié par sa valeur de configuration, un objet `login-configuration'.
23651relevance: 4
bf5c74e7
JL
23652
23653@dots{}
23654@end example
23655
15f1bff4
JL
23656Comme pour @command{guix package --search}, le résultat est écrit au format
23657@code{recutils}, ce qui rend facile le filtrage de la sortie (@pxref{Top,
23658GNU recutils databases,, recutils, GNU recutils manual}).
bf5c74e7
JL
23659
23660@item reconfigure
23661Build the operating system described in @var{file}, activate it, and switch
23662to it@footnote{This action (and the related actions @code{switch-generation}
15f1bff4
JL
23663and @code{roll-back}) are usable only on systems already running Guix
23664System.}.
bf5c74e7
JL
23665
23666This effects all the configuration specified in @var{file}: user accounts,
23667system services, global package list, setuid programs, etc. The command
23668starts system services specified in @var{file} that are not currently
adfb167f
JL
23669running; if a service is currently running this command will arrange for it
23670to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or
23671@code{herd restart X}).
bf5c74e7 23672
15f1bff4
JL
23673Cette commande crée une nouvelle génération dont le numéro est un de plus
23674que la génération actuelle (rapportée par @command{guix system
23675list-generations}). Si cette génération existe déjà, elle sera réécrite.
23676Ce comportement correspond à celui de @command{guix package}
23677(@pxref{Invoquer guix package}).
bf5c74e7 23678
15f1bff4
JL
23679Elle ajoute aussi une entrée de menu du chargeur d'amorçage pour la nouvelle
23680configuration, à moins que @option{--no-bootloader} ne soit passé. Pour
23681GRUB, elle déplace les entrées pour les anciennes configurations dans un
23682sous-menu, ce qui vous permet de choisir une ancienne génération au
23683démarrage si vous en avez besoin.
bf5c74e7 23684
3cacfa9e 23685@quotation Remarque
bf5c74e7
JL
23686@c The paragraph below refers to the problem discussed at
23687@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
15f1bff4
JL
23688Il est grandement recommandé de lancer @command{guix pull} une fois avant de
23689lancer @command{guix system reconfigure} pour la première fois
23690(@pxref{Invoquer guix pull}). Sans cela, vous verriez une version plus
23691ancienne de Guix une fois @command{reconfigure} terminé.
bf5c74e7
JL
23692@end quotation
23693
23694@item switch-generation
3cacfa9e 23695@cindex générations
15f1bff4
JL
23696Passe à une génération existante du système. Cette action change
23697automatiquement le profil système vers la génération spécifiée. Elle
23698réarrange aussi les entrées existantes du menu du chargeur d'amorçage du
23699système. Elle fait de l'entrée du menu pour la génération spécifiée
23700l'entrée par défaut et déplace les entrées pour les autres générations dans
23701un sous-menu, si cela est supporté par le chargeur d'amorçage utilisé. Lors
23702du prochain démarrage du système, la génération du système spécifiée sera
23703utilisée.
bf5c74e7 23704
15f1bff4
JL
23705Le chargeur d'amorçage lui-même n'est pas réinstallé avec cette commande.
23706Ainsi, le chargeur d'amorçage est utilisé avec un fichier de configuration
23707plus à jour.
bf5c74e7 23708
15f1bff4
JL
23709La génération cible peut être spécifiée explicitement par son numéro de
23710génération. Par exemple, l'invocation suivante passerait à la génération 7
23711du système :
bf5c74e7
JL
23712
23713@example
23714guix system switch-generation 7
23715@end example
23716
15f1bff4
JL
23717La génération cible peut aussi être spécifiée relativement à la génération
23718actuelle avec la forme @code{+N} ou @code{-N}, où @code{+3} signifie « trois
23719générations après la génération actuelle » et @code{-1} signifie « une
23720génération précédent la génération actuelle ». Lorsque vous spécifiez un
23721nombre négatif comme @code{-1}, il doit être précédé de @code{--} pour
23722éviter qu'il ne soit compris comme une option. Par exemple :
bf5c74e7
JL
23723
23724@example
23725guix system switch-generation -- -1
23726@end example
23727
15f1bff4
JL
23728Actuellement, l'effet de l'invocation de cette action est @emph{uniquement}
23729de passer au profil du système vers une autre génération existante et de
23730réarranger le menu du chargeur d'amorçage. Pour vraiment commencer à
23731utiliser la génération spécifiée, vous devez redémarrer après avoir lancé
23732cette action. Dans le futur, elle sera corrigée pour faire la même chose
23733que @command{reconfigure}, comme réactiver et désactiver les services.
bf5c74e7 23734
15f1bff4 23735Cette action échouera si la génération spécifiée n'existe pas.
bf5c74e7
JL
23736
23737@item roll-back
3cacfa9e 23738@cindex revenir en arrière
15f1bff4
JL
23739Passe à la génération précédente du système. Au prochain démarrage, la
23740génération précédente sera utilisée. C'est le contraire de
23741@command{reconfigure}, et c'est exactement comme invoquer
23742@command{switch-generation} avec pour argument @code{-1}.
23743
23744Actuellement, comme pour @command{switch-generation}, vous devez redémarrer
23745après avoir lancé cette action pour vraiment démarrer sur la génération
23746précédente du système.
23747
23748@item delete-generations
23749@cindex deleting system generations
23750@cindex saving space
23751Delete system generations, making them candidates for garbage collection
23752(@pxref{Invoquer guix gc}, for information on how to run the ``garbage
23753collector'').
23754
23755This works in the same way as @command{guix package --delete-generations}
23756(@pxref{Invoquer guix package, @code{--delete-generations}}). With no
23757arguments, all system generations but the current one are deleted:
23758
23759@example
23760guix system delete-generations
23761@end example
bf5c74e7 23762
15f1bff4
JL
23763You can also select the generations you want to delete. The example below
23764deletes all the system generations that are more than two month old:
23765
23766@example
23767guix system delete-generations 2m
23768@end example
23769
23770Running this command automatically reinstalls the bootloader with an updated
23771list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
23772longer lists the generations that have been deleted.
bf5c74e7
JL
23773
23774@item build
15f1bff4
JL
23775Construit la dérivation du système d'exploitation, ce qui comprend tous les
23776fichiers de configuration et les programmes requis pour démarrer et lancer
23777le système. Cette action n'installe rien.
bf5c74e7
JL
23778
23779@item init
23780Populate the given directory with all the files necessary to run the
23781operating system specified in @var{file}. This is useful for first-time
15f1bff4 23782installations of Guix System. For instance:
bf5c74e7
JL
23783
23784@example
23785guix system init my-os-config.scm /mnt
23786@end example
23787
15f1bff4
JL
23788copie tous les éléments du dépôt requis par la configuration spécifiée dans
23789@file{my-os-config.scm} dans @file{/mnt}. Cela comprend les fichiers de
23790configuration, les paquets, etc. Elle crée aussi d'autres fichiers
23791essentiels requis pour que le système fonctionne correctement — p.@: ex.@:
23792les répertoires @file{/etc}, @file{/var} et @file{/run} et le fichier
23793@file{/bin/sh}.
bf5c74e7 23794
15f1bff4
JL
23795Cette commande installe aussi le chargeur d'amorçage sur la cible spécifiée
23796dans @file{my-os-config}, à moins que l'option @option{--no-bootloader} ne
23797soit passée.
bf5c74e7
JL
23798
23799@item vm
15f1bff4 23800@cindex machine virtuelle
bf5c74e7
JL
23801@cindex VM
23802@anchor{guix system vm}
23803Build a virtual machine that contains the operating system declared in
15f1bff4
JL
23804@var{file}, and return a script to run that virtual machine (VM).
23805
23806@quotation Remarque
23807The @code{vm} action and others below can use KVM support in the Linux-libre
23808kernel. Specifically, if the machine has hardware virtualization support,
23809the corresponding KVM kernel module should be loaded, and the
23810@file{/dev/kvm} device node must exist and be readable and writable by the
23811user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
23812@end quotation
23813
23814Arguments given to the script are passed to QEMU as in the example below,
23815which enables networking and requests 1@tie{}GiB of RAM for the emulated
23816machine:
bf5c74e7
JL
23817
23818@example
23819$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
23820@end example
23821
15f1bff4 23822La VM partage sont dépôt avec le système hôte.
bf5c74e7 23823
15f1bff4
JL
23824Vous pouvez partager des fichiers supplémentaires entre l'hôte et la VM avec
23825les options en ligne de commande @code{--share} et @code{--expose} : la
23826première spécifie un répertoire à partager avec accès en écriture, tandis
23827que le deuxième fournit un accès en lecture-seule au répertoire partagé.
bf5c74e7 23828
15f1bff4
JL
23829L'exemple ci-dessous crée une VM dans laquelle le répertoire personnel de
23830l'utilisateur est accessible en lecture-seule, et où le répertoire
23831@file{/exchange} est une correspondance en lecture-écriture à
23832@file{$HOME/tmp} sur l'hôte :
bf5c74e7
JL
23833
23834@example
23835guix system vm my-config.scm \
23836 --expose=$HOME --share=$HOME/tmp=/exchange
23837@end example
23838
15f1bff4
JL
23839Sur GNU/Linux, le comportement par défaut consiste à démarrer directement
23840sur le noyau ; cela a l'avantage de n'avoir besoin que d'une toute petite
23841image disque puisque le dépôt de l'hôte peut ensuite être monté.
bf5c74e7 23842
15f1bff4
JL
23843L'option @code{--full-boot} force une séquence de démarrage complète, en
23844commençant par le chargeur d'amorçage. Cela requiert plus d'espace disque
23845puisqu'une image racine contenant au moins le noyau, l'initrd et les
23846fichiers de données du chargeur d'amorçage doit être créé. On peut utiliser
23847l'option @code{--image-size} pour spécifier la taille de l'image.
bf5c74e7 23848
15f1bff4
JL
23849@cindex Images système, création en divers formats
23850@cindex Créer des images systèmes sous différents formats
bf5c74e7
JL
23851@item vm-image
23852@itemx disk-image
23853@itemx docker-image
15f1bff4
JL
23854Renvoie une machine virtuelle, une image disque ou une image Docker du
23855système d'exploitation déclaré dans @var{file} qui se suffit à elle-même.
23856Par défaut, @command{guix system} estime la taille de l'image requise pour
23857stocker le système, mais vous pouvez utiliser l'option @option{--image-size}
23858pour spécifier une valeur. Les images Docker sont construites pour contenir
23859exactement ce dont elles ont besoin, donc l'option @option{--image-size} est
23860ignorée dans le cas de @code{docker-image}.
bf5c74e7 23861
15f1bff4
JL
23862Vous pouvez spécifier le type de système de fichiers racine avec l'option
23863@option{--file-system-type}. La valeur par défaut est @code{ext4}.
bf5c74e7
JL
23864
23865When using @code{vm-image}, the returned image is in qcow2 format, which the
15f1bff4 23866QEMU emulator can efficiently use. @xref{Running Guix in a VM}, for more
bf5c74e7
JL
23867information on how to run the image in a virtual machine.
23868
15f1bff4
JL
23869Lorsque vous utilisez @code{disk-image}, une image disque brute est produite
23870; elle peut être copiée telle quelle sur un périphérique USB. En supposant
23871que @code{/dev/sdc} est le périphérique correspondant à une clef USB, on
23872peut copier l'image dessus avec la commande suivante :
bf5c74e7
JL
23873
23874@example
23875# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
23876@end example
23877
15f1bff4
JL
23878En utilisant @code{docker-image}, on produit une image Docker. Guix
23879construit l'image de zéro, et non à partir d'une image Docker de base
23880pré-existante. En conséquence, elle contient @emph{exactly} ce que vous
23881avez défini dans le fichier de configuration du système. Vous pouvez
23882ensuite charger l'image et lancer un conteneur Docker avec des commande
23883comme :
bf5c74e7
JL
23884
23885@example
23886image_id="$(docker load < guixsd-docker-image.tar.gz)"
23887docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
23888 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
23889 $image_id /var/guix/profiles/system/boot
23890@end example
23891
23892This command starts a new Docker container from the specified image. It
15f1bff4
JL
23893will boot the Guix system in the usual manner, which means it will start any
23894services you have defined in the operating system configuration. Depending
23895on what you run in the Docker container, it may be necessary to give the
23896container additional permissions. For example, if you intend to build
23897software using Guix inside of the Docker container, you may need to pass the
23898@option{--privileged} option to @code{docker run}.
bf5c74e7 23899
524756d1 23900@item conteneur
15f1bff4
JL
23901Renvoie un script qui lance le système d'exploitation déclaré dans
23902@var{file} dans un conteneur. Les conteneurs sont un ensemble de mécanismes
23903d'isolation légers fournis par le noyau Linux-libre. Les conteneurs sont
23904substantiellement moins gourmands en ressources que les machines virtuelles
23905complètes car le noyau, les objets partagés et d'autres ressources peuvent
23906être partagés avec le système hôte ; cela signifie aussi une isolation moins
23907complète.
bf5c74e7 23908
15f1bff4
JL
23909Actuellement, le script doit être lancé en root pour pouvoir supporter plus
23910d'un utilisateur et d'un groupe. Le conteneur partage son dépôt avec le
23911système hôte.
bf5c74e7 23912
15f1bff4
JL
23913Comme avec l'action @code{vm} (@pxref{guix system vm}), des systèmes de
23914fichiers supplémentaires peuvent être partagés entre l'hôte et le conteneur
23915avec les options @option{--share} et @option{--expose} :
bf5c74e7
JL
23916
23917@example
23918guix system container my-config.scm \
23919 --expose=$HOME --share=$HOME/tmp=/exchange
23920@end example
23921
3cacfa9e 23922@quotation Remarque
15f1bff4 23923Cette option requiert Linux-libre ou supérieur.
bf5c74e7
JL
23924@end quotation
23925
23926@end table
23927
15f1bff4
JL
23928@var{options} peut contenir n'importe quelle option commune de construction
23929(@pxref{Options de construction communes}). En plus, @var{options} peut contenir l'une
23930de ces options :
bf5c74e7
JL
23931
23932@table @option
23933@item --expression=@var{expr}
23934@itemx -e @var{expr}
23935Consider the operating-system @var{expr} evaluates to. This is an
23936alternative to specifying a file which evaluates to an operating system.
15f1bff4 23937This is used to generate the Guix system installer @pxref{Construire l'image d'installation}).
bf5c74e7 23938
3cacfa9e
LC
23939@item --system=@var{système}
23940@itemx -s @var{système}
15f1bff4
JL
23941Essaye de construire pour @var{system} au lieu du type du système hôte.
23942Cela fonction comme pour @command{guix build} (@pxref{Invoquer guix build}).
bf5c74e7
JL
23943
23944@item --derivation
23945@itemx -d
15f1bff4
JL
23946Renvoie le nom du fichier de dérivation du système d'exploitation donné sans
23947rien construire.
bf5c74e7
JL
23948
23949@item --file-system-type=@var{type}
23950@itemx -t @var{type}
15f1bff4
JL
23951Pour l'action @code{disk-image}, crée un système de fichier du @var{type}
23952donné sur l'image.
bf5c74e7 23953
15f1bff4 23954Lorsque cette option est omise, @command{guix system} utilise @code{ext4}.
bf5c74e7 23955
15f1bff4
JL
23956@cindex format ISO-9660
23957@cindex format d'image de CD
23958@cindex format d'image de DVD
23959@code{--file-system-type=iso9660} produit une image ISO-9660, qu'il est
23960possible de graver sur un CD ou un DVD.
bf5c74e7
JL
23961
23962@item --image-size=@var{size}
15f1bff4
JL
23963Pour les actions @code{vm-image} et @code{disk-image}, crée une image de la
23964taille donnée @var{size}. @var{size} peut être un nombre d'octets ou
23965contenir un suffixe d'unité (@pxref{Block size, size specifications,,
bf5c74e7
JL
23966coreutils, GNU Coreutils}).
23967
15f1bff4
JL
23968Lorsque cette option est omise, @command{guix system} calcule une estimation
23969de la taille de l'image en fonction de la taille du système déclaré dans
bf5c74e7
JL
23970@var{file}.
23971
524756d1
JL
23972@item --root=@var{fichier}
23973@itemx -r @var{fichier}
23974Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
23975en tant que racine du ramasse-miettes.
bf5c74e7
JL
23976
23977@item --skip-checks
15f1bff4
JL
23978Passe les vérifications de sécurité avant l'installation.
23979
23980Par défaut, @command{guix system init} et @command{guix system reconfigure}
23981effectuent des vérifications de sécurité : ils s'assurent que les systèmes
23982de fichiers qui apparaissent dans la déclaration @code{operating-system}
23983existent vraiment (@pxref{Systèmes de fichiers}) et que les modules de noyau Linux
23984qui peuvent être requis au démarrage sont listés dans @code{initrd-modules}
23985(@pxref{Disque de RAM initial}). Passer cette option saute ces vérifications
23986complètement.
23987
23988@cindex on-error
23989@cindex on-error strategy
23990@cindex error strategy
bf5c74e7 23991@item --on-error=@var{strategy}
15f1bff4
JL
23992Applique @var{strategy} lorsqu'une erreur arrive lors de la lecture de
23993@var{file}. @var{strategy} peut être l'une des valeurs suivantes :
bf5c74e7
JL
23994
23995@table @code
23996@item nothing-special
15f1bff4
JL
23997Rapporte l'erreur de manière concise et quitte. C'est la stratégie par
23998défaut.
bf5c74e7
JL
23999
24000@item backtrace
15f1bff4 24001Pareil, mais affiche aussi une trace de débogage.
bf5c74e7
JL
24002
24003@item debug
15f1bff4
JL
24004Rapporte l'erreur et entre dans le débogueur Guile. À partir de là, vous
24005pouvez lancer des commandes comme @code{,bt} pour obtenir une trace de
24006débogage, @code{,locals} pour afficher les valeurs des variables locales et
24007plus généralement inspecter l'état du programme. @xref{Debug Commands,,,
24008guile, GNU Guile Reference Manual}, pour une liste de commandes de débogage
24009disponibles.
bf5c74e7
JL
24010@end table
24011@end table
24012
bf5c74e7 24013Once you have built, configured, re-configured, and re-re-configured your
15f1bff4 24014Guix installation, you may find it useful to list the operating system
bf5c74e7
JL
24015generations available on disk---and that you can choose from the bootloader
24016boot menu:
24017
24018@table @code
24019
24020@item list-generations
15f1bff4
JL
24021Affiche un résumé de chaque génération du système d'exploitation disponible
24022sur le disque, dans un format lisible pour un humain. C'est similaire à
24023l'option @option{--list-generations} de @command{guix package}
24024(@pxref{Invoquer guix package}).
bf5c74e7 24025
15f1bff4
JL
24026Éventuellement, on peut spécifier un motif, avec la même syntaxe utilisée
24027pour @command{guix package --list-generations}, pour restreindre la liste
24028des générations affichées. Par exemple, la commande suivante affiche les
24029générations de moins de 10 jours :
bf5c74e7
JL
24030
24031@example
24032$ guix system list-generations 10d
24033@end example
24034
24035@end table
24036
15f1bff4
JL
24037La commande @command{guix system} a même plus à proposer ! Les
24038sous-commandes suivantes vous permettent de visualiser comme vos services
24039systèmes sont liés les uns aux autres :
bf5c74e7
JL
24040
24041@anchor{system-extension-graph}
24042@table @code
24043
24044@item extension-graph
15f1bff4
JL
24045Affiche le @dfn{graphe d'extension des services} du système d'exploitation
24046défini dans @var{file} au format Dot/Graphviz sur la sortie standard
24047(@pxref{Composition de services}, pour plus d'informations sur l'extension des
24048services).
bf5c74e7 24049
15f1bff4 24050La commande :
bf5c74e7
JL
24051
24052@example
24053$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
24054@end example
24055
15f1bff4
JL
24056produit un fichier PDF montrant les relations d'extension entre les
24057services.
bf5c74e7
JL
24058
24059@anchor{system-shepherd-graph}
24060@item shepherd-graph
15f1bff4
JL
24061Affiche le @dfn{graphe de dépendance} des services shepherd du système
24062d'exploitation défini dans @var{file} au format Dot/Graphviz sur la sortie
24063standard. @xref{Services Shepherd}, pour plus d'informations et un exemple
24064de graphe.
bf5c74e7
JL
24065
24066@end table
24067
15f1bff4
JL
24068@node Running Guix in a VM
24069@section Running Guix in a Virtual Machine
bf5c74e7 24070
15f1bff4
JL
24071@cindex machine virtuelle
24072To run Guix in a virtual machine (VM), one can either use the pre-built Guix
24073VM image distributed at
524756d1 24074@indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
bf5c74e7
JL
24075, or build their own virtual machine image using @command{guix system
24076vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
24077format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
24078use.
24079
24080@cindex QEMU
15f1bff4
JL
24081Si vous construisez votre propre image, vous devez la copier en dehors du
24082dépôt (@pxref{Le dépôt}) et vous donner la permission d'écrire sur la copie
24083avant de pouvoir l'utiliser. Lorsque vous invoquez QEMU, vous devez choisir
24084un émulateur système correspondant à votre plate-forme matérielle. Voici
24085une invocation minimale de QEMU qui démarrera le résultat de @command{guix
24086system vm-image} sur un matériel x8_64.
bf5c74e7
JL
24087
24088@example
24089$ qemu-system-x86_64 \
24090 -net user -net nic,model=virtio \
24091 -enable-kvm -m 256 /tmp/qemu-image
24092@end example
24093
15f1bff4 24094Voici la signification de ces options :
bf5c74e7
JL
24095
24096@table @code
24097@item qemu-system-x86_64
15f1bff4
JL
24098Cela spécifie la plate-forme matérielle à émuler. Elle doit correspondre à
24099l'hôte.
bf5c74e7
JL
24100
24101@item -net user
15f1bff4
JL
24102Active la pile réseau non privilégiée en mode utilisateur. L'OS émulé peut
24103accéder à l'hôte mais pas l'inverse. C'est la manière la plus simple de
24104connecter le client.
bf5c74e7
JL
24105
24106@item -net nic,model=virtio
15f1bff4
JL
24107Vous devez créer une interface réseau d'un modèle donné. Si vous ne créez
24108pas de NIC, le démarrage échouera. En supposant que votre plate-forme est
24109x86_64, vous pouvez récupérer une liste des modèles de NIC disponibles en
24110lançant @command{qemu-system-x86_64 -net nic,model=help}.
bf5c74e7
JL
24111
24112@item -enable-kvm
15f1bff4
JL
24113Si votre système a des extensions de virtualisation matérielle, activer le
24114support des machines virtuelles de Linux (KVM) accélérera les choses.
bf5c74e7
JL
24115
24116@item -m 256
15f1bff4
JL
24117RAM disponible sur l'OS émulé, en mébioctets. La valeur par défaut est
24118128@tie{}Mo, ce qui peut ne pas suffire pour certaines opérations.
bf5c74e7
JL
24119
24120@item /tmp/qemu-image
15f1bff4 24121Le nom de fichier de l'image qcow2.
bf5c74e7
JL
24122@end table
24123
15f1bff4
JL
24124Le script @command{run-vm.sh} par défaut renvoyé par une invocation de
24125@command{guix system vm} n'ajoute pas le drapeau @command{-net user} par
24126défaut. Pour avoir accès au réseau dans la vm, ajoutez le
24127@code{(dhcp-client-service)} à votre définition et démarrez la VM avec
24128@command{`guix system vm config.scm` -net user}. Un problème important avec
24129@command{-net user} pour le réseau, est que @command{ping} ne fonctionnera
24130pas, car il utilise le protocole ICMP. Vous devrez utiliser une autre
24131commande pour vérifier la connectivité réseau, par exemple @command{guix
bf5c74e7
JL
24132download}.
24133
15f1bff4 24134@subsection Se connecter par SSH
bf5c74e7
JL
24135
24136@cindex SSH
1d8d69c8 24137@cindex serveur SSH
15f1bff4
JL
24138Pour activer SSH dans une VM vous devez ajouter un serveur SSH comme
24139@code{(dropbear-service)} ou @code{(lsh-service)} à votre VM. Le service
24140@code{(lsh-service)} ne peut actuellement pas démarrer sans supervision. Il
24141a besoin que vous tapiez quelques caractères pour initialiser le générateur
24142d'aléatoire. En plus vous devez transférer le port 22, par défaut, à
24143l'hôte. Vous pouvez faire cela avec :
bf5c74e7
JL
24144
24145@example
24146`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
24147@end example
24148
15f1bff4 24149Pour vous connecter à la VM vous pouvez lancer
bf5c74e7
JL
24150
24151@example
24152ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
24153@end example
24154
15f1bff4
JL
24155Le @command{-p} donne le port auquel vous voulez vous connecter à
24156@command{ssh}, @command{-o UserKnownHostsFile=/dev/null} évite que
24157@command{ssh} ne se plaigne à chaque fois que vous modifiez le fichier
24158@command{config.scm} et @command{-o StrictHostKeyChecking=no} évite que vous
24159n'ayez à autoriser une connexion à un hôte inconnu à chaque fois que vous
24160vous connectez.
bf5c74e7 24161
15f1bff4 24162@subsection Utiliser @command{virt-viewer} avec Spice
bf5c74e7 24163
15f1bff4
JL
24164Alternativement au client graphique @command{qemu} par défaut vous pouvez
24165utiliser @command{remote-viewer} du paquet @command{virt-viewer}. Pour vous
24166connecter, passez le drapeau @command{-spice port=5930,disable-ticketing} à
24167@command{qemu}. Voir les sections précédentes pour plus d'informations sur
24168comment faire cela.
bf5c74e7 24169
15f1bff4
JL
24170Spice a aussi de chouettes fonctionnalités comme le partage de votre
24171presse-papier avec la VM. Pour activer cela vous devrez aussi passer les
24172drapeaux suivants à @command{qemu} :
bf5c74e7
JL
24173
24174@example
24175-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
24176-chardev spicevmc,name=vdagent,id=vdagent
24177-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
24178name=com.redhat.spice.0
24179@end example
24180
15f1bff4 24181Vous devrez aussi ajouter le @pxref{Services divers, Spice service}.
bf5c74e7
JL
24182
24183@node Définir des services
15f1bff4 24184@section Définir des services
bf5c74e7 24185
15f1bff4
JL
24186Les sections précédentes montrent les services disponibles et comment on
24187peut les combiner dans une déclaration @code{operating-system}. Mais, déjà,
24188comment les définir ? Et qu'est-ce qu'un service au fait ?
bf5c74e7
JL
24189
24190@menu
24191* Composition de services:: Le modèle de composition des services.
24192* Types service et services:: Types et services.
3cacfa9e 24193* Référence de service:: Référence de l'API@.
bf5c74e7
JL
24194* Services Shepherd:: Un type de service particulier.
24195@end menu
24196
24197@node Composition de services
15f1bff4 24198@subsection Composition de services
bf5c74e7
JL
24199
24200@cindex services
15f1bff4
JL
24201@cindex démons
24202Ici nous définissons un @dfn{service} comme étant, assez largement, quelque
24203chose qui étend la fonctionnalité d'un système d'exploitation. Souvent un
24204service est un processus — un @dfn{démon} — démarré lorsque le système
24205démarre : un serveur ssh, un serveur web, le démon de construction de Guix,
24206etc. Parfois un service est un démon dont l'exécution peut être déclenchée
24207par un autre démon — p.@: ex.@: un serveur FTP démarré par @command{inetd}
24208ou un service D-Bus activé par @command{dbus-daemon}. Parfois, un service
24209ne correspond pas à un démon. Par exemple, le service « de comptes »
24210récupère la liste des comptes utilisateurs et s'assure qu'ils existent bien
24211lorsque le système est lancé ; le service « udev » récupère les règles de
24212gestion des périphériques et les rend disponible au démon eudev ; le service
24213@file{/etc} rempli le répertoire @file{/etc} du système.
24214
24215@cindex extensions de service
24216Guix system services are connected by @dfn{extensions}. For instance, the
24217secure shell service @emph{extends} the Shepherd---the initialization
bf5c74e7 24218system, running as PID@tie{}1---by giving it the command lines to start and
3cacfa9e 24219stop the secure shell daemon (@pxref{Services réseau,
15f1bff4
JL
24220@code{openssh-service-type}}); the UPower service extends the D-Bus service
24221by passing it its @file{.service} specification, and extends the udev
24222service by passing it device management rules (@pxref{Services de bureaux,
bf5c74e7
JL
24223@code{upower-service}}); the Guix daemon service extends the Shepherd by
24224passing it the command lines to start and stop the daemon, and extends the
24225account service by passing it a list of required build user accounts
24226(@pxref{Services de base}).
24227
15f1bff4
JL
24228En définitive, les services et leurs relation « d'extensions » forment un
24229graphe orienté acyclique (DAG). Si nous représentons les services comme des
24230boîtes et les extensions comme des flèches, un système typique pourrait
24231fournir quelque chose comme cela :
bf5c74e7 24232
15f1bff4 24233@image{images/service-graph,,5in,Graphe d'extension des services typique.}
bf5c74e7 24234
15f1bff4
JL
24235@cindex service système
24236En bas, on voit le @dfn{service système} qui produit le répertoire contenant
24237tout et lançant et démarrant le système, renvoyé par la commande
24238@command{guix system build}. @xref{Référence de service}, pour apprendre les
24239autres types de services montrés ici. @xref{system-extension-graph, the
24240@command{guix system extension-graph} command}, pour plus d'informations sur
24241la manière de générer cette représentation pour une définition de système
24242d'exploitation particulière.
bf5c74e7 24243
15f1bff4 24244@cindex types de services
bf5c74e7
JL
24245Technically, developers can define @dfn{service types} to express these
24246relations. There can be any number of services of a given type on the
24247system---for instance, a system running two instances of the GNU secure
15f1bff4 24248shell server (lsh) has two instances of @code{lsh-service-type}, with
bf5c74e7
JL
24249different parameters.
24250
15f1bff4
JL
24251La section suivante décrit l'interface de programmation des types de
24252services et des services.
bf5c74e7
JL
24253
24254@node Types service et services
15f1bff4 24255@subsection Types service et services
bf5c74e7 24256
15f1bff4
JL
24257Un @dfn{type de service} est un nœud dans le DAG décrit plus haut.
24258Commençons avec un exemple simple, le type de service pour le démon de
24259construction de Guix (@pxref{Invoquer guix-daemon}) :
bf5c74e7
JL
24260
24261@example
24262(define guix-service-type
24263 (service-type
24264 (name 'guix)
24265 (extensions
24266 (list (service-extension shepherd-root-service-type guix-shepherd-service)
24267 (service-extension account-service-type guix-accounts)
24268 (service-extension activation-service-type guix-activation)))
24269 (default-value (guix-configuration))))
24270@end example
24271
24272@noindent
15f1bff4 24273Il définit trois choses :
bf5c74e7
JL
24274
24275@enumerate
24276@item
15f1bff4 24277Un nom, dont le seul but de rendre l'inspection et le débogage plus faciles.
bf5c74e7
JL
24278
24279@item
15f1bff4
JL
24280Une liste d'@dfn{extensions de services}, où chaque extension désigne le
24281type de service cible et une procédure qui, étant donné les paramètres du
24282service, renvoie une liste d'objets pour étendre le service de ce type.
bf5c74e7 24283
15f1bff4
JL
24284Chaque type de service a au moins une extension de service. La seule
24285exception est le @dfn{type de service boot}, qui est le service ultime.
bf5c74e7
JL
24286
24287@item
15f1bff4 24288Éventuellement, une valeur par défaut pour les instances de ce type.
bf5c74e7
JL
24289@end enumerate
24290
15f1bff4 24291Dans cet exemple, @var{guix-service-type} étend trois services :
bf5c74e7
JL
24292
24293@table @var
24294@item shepherd-root-service-type
15f1bff4
JL
24295La procédure @var{guix-shepherd-service} définit comment le service du
24296Shepherd est étendu. En fait, elle renvoie un objet
24297@code{<shepherd-service>} qui définit comment @command{guix-daemon} est
24298démarré et stoppé (@pxref{Services Shepherd}).
bf5c74e7
JL
24299
24300@item account-service-type
15f1bff4
JL
24301Cette extension pour ce service est calculée par @var{guix-accounts}, qui
24302renvoie une liste d'objets @code{user-group} et @code{user-account}
24303représentant les comptes des utilisateurs de construction (@pxref{Invoquer guix-daemon}).
bf5c74e7
JL
24304
24305@item activation-service-type
15f1bff4
JL
24306Ici, @var{guix-activation} est une procédure qui renvoie une gexp, qui est
24307un bout de code qui s'exécute au moment de l'activation — p.@: ex.@: lorsque
24308le service est démarré.
bf5c74e7
JL
24309@end table
24310
15f1bff4 24311Un service de ce type est instancié de cette manière :
bf5c74e7
JL
24312
24313@example
24314(service guix-service-type
24315 (guix-configuration
24316 (build-accounts 5)
24317 (use-substitutes? #f)))
24318@end example
24319
15f1bff4
JL
24320Le deuxième argument de la forme @code{service} est une valeur représentant
24321les paramètres de cet instance spécifique du service.
24322@xref{guix-configuration-type, @code{guix-configuration}}, pour plus
24323d'informations sur le type de données @code{guix-configuration}. Lorsque la
24324valeur est omise, la valeur par défaut spécifiée par
24325@code{guix-service-type} est utilisée :
bf5c74e7
JL
24326
24327@example
24328(service guix-service-type)
24329@end example
24330
15f1bff4
JL
24331@var{guix-service-type} est très simple car il étend d'autres services mais
24332ne peut pas être étendu.
bf5c74e7
JL
24333
24334@c @subsubsubsection Extensible Service Types
24335
15f1bff4 24336Le type de service pour un service @emph{extensible} ressemble à ceci :
bf5c74e7
JL
24337
24338@example
24339(define udev-service-type
24340 (service-type (name 'udev)
24341 (extensions
24342 (list (service-extension shepherd-root-service-type
24343 udev-shepherd-service)))
24344
15f1bff4 24345 (compose concatenate) ; concatène la liste des règles
bf5c74e7
JL
24346 (extend (lambda (config rules)
24347 (match config
24348 (($ <udev-configuration> udev initial-rules)
24349 (udev-configuration
15f1bff4 24350 (udev udev) ; le paquet udev à utiliser
bf5c74e7
JL
24351 (rules (append initial-rules rules)))))))))
24352@end example
24353
15f1bff4
JL
24354C'est le type de service pour le
24355@uref{https://wiki.gentoo.org/wiki/Project:Eudev, le démon de gestion des
24356périphériques eudev}. Comparé à l'exemple précédent, en plus d'une
24357extension de @var{shepherd-root-service-type}, on trouve deux nouveaux
24358champs :
bf5c74e7
JL
24359
24360@table @code
24361@item compose
15f1bff4
JL
24362C'est la procédure pour @dfn{composer} la liste des extensions de services
24363de ce type.
bf5c74e7 24364
15f1bff4
JL
24365Les services peuvent étendre le service udev en lui passant des listes de
24366règles ; on compose ces extensions simplement en les concaténant.
bf5c74e7
JL
24367
24368@item extend
15f1bff4
JL
24369Cette procédure définie comme la valeur du service est @dfn{étendue} avec la
24370composition des extensions.
bf5c74e7 24371
15f1bff4
JL
24372Les extensions Udev sont composés en une liste de règles, mais la valeur du
24373service udev est elle-même un enregistrement @code{<udev-configuration>}.
24374Donc ici, nous étendons cet enregistrement en ajoutant la liste des règle
24375contribuées à la liste des règles qu'il contient déjà.
bf5c74e7
JL
24376
24377@item description
15f1bff4
JL
24378C'est une chaîne donnant un aperçu du type de service. Elle peut contenir
24379du balisage Texinfo (@pxref{Overview,,, texinfo, GNU Texinfo}). La commande
24380@command{guix system search} permet de rechercher dans ces chaînes et de les
24381afficher (@pxref{Invoquer guix system}).
bf5c74e7
JL
24382@end table
24383
15f1bff4
JL
24384Il ne peut y avoir qu'une instance d'un type de service extensible comme
24385@var{udev-service-type}. S'il y en avait plus, les spécification
24386@code{service-extension} seraient ambiguës.
bf5c74e7 24387
15f1bff4
JL
24388Toujours ici ? La section suivante fournit une référence de l'interface de
24389programmation des services.
bf5c74e7
JL
24390
24391@node Référence de service
15f1bff4 24392@subsection Référence de service
bf5c74e7 24393
15f1bff4
JL
24394Nous 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
24395les services et les types de services. Cette interface est fournie par le
24396module @code{(gnu services)}.
bf5c74e7 24397
1d8d69c8 24398@deffn {Procédure Scheme} service @var{type} [@var{value}]
15f1bff4
JL
24399Renvoie un nouveau service de type @var{type}, un objet
24400@code{<service-type>} (voir plus bas). @var{value}peut être n'importe quel
24401objet ; il représente les paramètres de cette instance particulière du
24402service.
bf5c74e7 24403
15f1bff4
JL
24404Lorsque @var{value} est omise, la valeur par défaut spécifiée par @var{type}
24405est utilisée ; si @var{type} ne spécifie pas de valeur par défaut, une
24406erreur est levée.
bf5c74e7 24407
15f1bff4 24408Par exemple ceci :
bf5c74e7
JL
24409
24410@example
24411(service openssh-service-type)
24412@end example
24413
24414@noindent
15f1bff4 24415est équivalent à ceci :
bf5c74e7
JL
24416
24417@example
24418(service openssh-service-type
24419 (openssh-configuration))
24420@end example
24421
15f1bff4
JL
24422Dans les deux cas le résultat est une instance de
24423@code{openssh-service-type} avec la configuration par défaut.
bf5c74e7
JL
24424@end deffn
24425
1d8d69c8 24426@deffn {Procédure Scheme} service? @var{obj}
15f1bff4 24427Renvoie vrai si @var{obj} est un service.
bf5c74e7
JL
24428@end deffn
24429
1d8d69c8 24430@deffn {Procédure Scheme} service-kind @var{service}
15f1bff4 24431Renvoie le type de @var{service} — c.-à-d.@: un objet @code{<service-type>}.
bf5c74e7
JL
24432@end deffn
24433
1d8d69c8 24434@deffn {Procédure Scheme} service-value @var{service}
15f1bff4 24435Renvoie la valeur associée à @var{service}. Elle représente ses paramètres.
bf5c74e7
JL
24436@end deffn
24437
15f1bff4 24438Voici un exemple de la manière dont un service est créé et manipulé :
bf5c74e7
JL
24439
24440@example
24441(define s
24442 (service nginx-service-type
24443 (nginx-configuration
24444 (nginx nginx)
24445 (log-directory log-directory)
24446 (run-directory run-directory)
24447 (file config-file))))
24448
24449(service? s)
24450@result{} #t
24451
24452(eq? (service-kind s) nginx-service-type)
24453@result{} #t
24454@end example
24455
15f1bff4
JL
24456La forme @code{modify-services} fournit une manière pratique de modifier les
24457paramètres de certains services d'une liste comme @var{%base-services}
24458(@pxref{Services de base, @code{%base-services}}). Elle s'évalue en une liste
24459de services. Bien sûr, vous pouvez toujours utiliser les combinateurs de
24460liste standards comme @code{map} et @code{fold} pour cela (@pxref{SRFI-1,
24461List Library,, guile, GNU Guile Reference Manual}) ; @code{modify-services}
24462fournit simplement une manière plus concise pour ce besoin commun.
bf5c74e7 24463
15f1bff4 24464@deffn {Syntaxe Scheme} modify-services @var{services} @
bf5c74e7
JL
24465 (@var{type} @var{variable} => @var{body}) @dots{}
24466
15f1bff4
JL
24467Modifie les services listés dans @var{services} en fonction des clauses
24468données. Chaque clause à la forme :
bf5c74e7
JL
24469
24470@example
24471(@var{type} @var{variable} => @var{body})
24472@end example
24473
15f1bff4
JL
24474où @var{type} est un type de service — p.@: ex.@: @code{guix-service-type} —
24475et @var{variable} est un identifiant lié dans @var{body} aux paramètres du
24476service — p.@: ex.@: une instance de @code{guix-configuration} — du service
24477original de ce @var{type}.
bf5c74e7 24478
15f1bff4
JL
24479La variable @var{body} devrait s'évaluer en de nouveaux paramètres de
24480service, qui seront utilisés pour configurer le nouveau service. Ce nouveau
24481service remplacera l'original dans la liste qui en résulte. Comme les
24482paramètres d'un service sont créés avec @code{define-record-type*}, vous
24483pouvez écrire un @var{body} court qui s'évalue en de nouveaux paramètres
24484pour le services en utilisant @code{inherit}, fourni par
24485@code{define-record-type*}.
bf5c74e7 24486
15f1bff4 24487@xref{Utiliser le système de configuration} pour des exemples d'utilisation.
bf5c74e7
JL
24488
24489@end deffn
24490
15f1bff4
JL
24491Suit l'interface de programmation des types de services. Vous devrez la
24492connaître pour écrire de nouvelles définitions de services, mais pas
24493forcément lorsque vous cherchez des manières simples de personnaliser votre
24494déclaration @code{operating-system}.
bf5c74e7 24495
1d8d69c8 24496@deftp {Type de données} service-type
adfb167f 24497@cindex type de service
15f1bff4 24498C'est la représentation d'un @dfn{type de service} (@pxref{Types service et services}).
bf5c74e7
JL
24499
24500@table @asis
24501@item @code{name}
15f1bff4
JL
24502C'est un symbole, utilisé seulement pour simplifier l'inspection et le
24503débogage.
bf5c74e7
JL
24504
24505@item @code{extensions}
15f1bff4 24506Une liste non-vide d'objets @code{<service-extension>} (voir plus bas).
bf5c74e7 24507
1d8d69c8 24508@item @code{compose} (par défaut : @code{#f})
15f1bff4
JL
24509S'il s'agit de @code{#f}, le type de service dénote des services qui ne
24510peuvent pas être étendus — c.-à-d.@: qui ne reçoivent pas de « valeurs »
24511d'autres services.
bf5c74e7 24512
15f1bff4
JL
24513Sinon, ce doit être une procédure à un argument. La procédure est appelée
24514par @code{fold-services} et on lui passe une liste de valeurs collectées par
24515les extensions. Elle peut renvoyer n'importe quelle valeur simple.
bf5c74e7 24516
1d8d69c8 24517@item @code{extend} (par défaut : @code{#f})
15f1bff4
JL
24518Si la valeur est @code{#f}, les services de ce type ne peuvent pas être
24519étendus.
24520
24521Sinon, il doit s'agir 'une procédure à deux arguments : @code{fold-services}
24522l'appelle et lui passe la valeur initiale du service comme premier argument
24523et le résultat de l'application de @code{compose} sur les valeurs
24524d'extension en second argument. Elle doit renvoyer une valeur qui est une
24525valeur de paramètre valide pour l'instance du service.
bf5c74e7
JL
24526@end table
24527
15f1bff4 24528@xref{Types service et services}, pour des exemples.
bf5c74e7
JL
24529@end deftp
24530
1d8d69c8 24531@deffn {Procédure Scheme} service-extension @var{target-type} @
15f1bff4
JL
24532 @var{compute}
24533Renvoie une nouvelle extension pour les services de type @var{target-type}.
24534@var{compute} doit être une procédure à un argument : @code{fold-services}
24535l'appelle et lui passe la valeur associée au service qui fournit cette
24536extension ; elle doit renvoyer une valeur valide pour le service cible.
bf5c74e7
JL
24537@end deffn
24538
1d8d69c8 24539@deffn {Procédure Scheme} service-extension? @var{obj}
15f1bff4 24540Renvoie vrai si @var{obj} est une extension de service.
bf5c74e7
JL
24541@end deffn
24542
15f1bff4
JL
24543Parfois, vous voudrez simplement étendre un service existant. Cela implique
24544de créer un nouveau type de service et de spécifier l'extension qui vous
24545intéresse, ce qui peut être assez verbeux ; la procédure
24546@code{simple-service} fournit un raccourci pour ce cas.
bf5c74e7 24547
1d8d69c8 24548@deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
15f1bff4
JL
24549Renvoie un service qui étend @var{target} avec @var{value}. Cela fonctionne
24550en créant un type de service singleton @var{name}, dont le service renvoyé
24551est une instance.
bf5c74e7 24552
15f1bff4
JL
24553Par exemple, cela étend mcron (@pxref{Exécution de tâches planifiées}) avec une
24554tâche supplémentaire :
bf5c74e7
JL
24555
24556@example
24557(simple-service 'my-mcron-job mcron-service-type
24558 #~(job '(next-hour (3)) "guix gc -F 2G"))
24559@end example
24560@end deffn
24561
15f1bff4
JL
24562Au cœur de l'abstraction des services se cache la procédure
24563@code{fold-services}, responsable de la « compilation » d'une liste de
24564services en un répertoire unique qui contient tout ce qui est nécessaire au
24565démarrage et à l'exécution du système — le répertoire indiqué par la
24566commande @command{guix system build} (@pxref{Invoquer guix system}). En
24567soit, elle propage les extensions des services le long du graphe des
24568services, en mettant à jour chaque paramètre des nœuds sur son chemin,
24569jusqu'à atteindre le nœud racine.
bf5c74e7 24570
1d8d69c8 24571@deffn {Procédure Scheme} fold-services @var{services} @
15f1bff4
JL
24572 [#:target-type @var{system-service-type}]
24573Replie @var{services} en propageant leurs extensions jusqu'à la racine de
24574type @var{target-type} ; renvoie le service racine ajusté de cette manière.
bf5c74e7
JL
24575@end deffn
24576
15f1bff4
JL
24577Enfin, le module @code{(gnu services)} définie aussi divers types de
24578services essentiels, dont certains sont listés ci-dessous.
bf5c74e7 24579
1d8d69c8 24580@defvr {Variable Scheme} system-service-type
15f1bff4
JL
24581C'est la racine du graphe des services. Il produit le répertoire du système
24582renvoyé par la commande @command{guix system build}.
bf5c74e7
JL
24583@end defvr
24584
1d8d69c8 24585@defvr {Variable Scheme} boot-service-type
15f1bff4
JL
24586Le type du service « boot », qui produit le @dfn{script de démarrage}. Le
24587script de démarrage est ce que le disque de RAM initial lance au démarrage.
bf5c74e7
JL
24588@end defvr
24589
1d8d69c8 24590@defvr {Variable Scheme} etc-service-type
15f1bff4
JL
24591Le type du service @file{/etc}. Ce service est utilisé pour créer des
24592fichiers dans @file{/etc} et peut être étendu en lui passant des tuples
24593nom/fichier comme ceci :
bf5c74e7
JL
24594
24595@example
15f1bff4 24596(list `("issue" ,(plain-file "issue" "Bienvenue !\n")))
bf5c74e7
JL
24597@end example
24598
15f1bff4
JL
24599Dans cet exemple, l'effet serait d'ajouter un fichier @file{/etc/issue}
24600pointant vers le fichier donné.
bf5c74e7
JL
24601@end defvr
24602
1d8d69c8 24603@defvr {Variable Scheme} setuid-program-service-type
15f1bff4
JL
24604Le type du « service setuid ». Ce service récupère des listes de noms de
24605fichiers exécutables, passés en tant que gexps, et les ajoute à l'ensemble
24606des programmes setuid root sur le système (@pxref{Programmes setuid}).
bf5c74e7
JL
24607@end defvr
24608
1d8d69c8 24609@defvr {Variable Scheme} profile-service-type
15f1bff4
JL
24610De type du service qui rempli le @dfn{profil du système} — c.-à-d.@: les
24611programmes dans @file{/run/current-system/profile}. Les autres services
24612peuvent l'étendre en lui passant des listes de paquets à ajouter au profil
24613du système.
bf5c74e7
JL
24614@end defvr
24615
24616
24617@node Services Shepherd
15f1bff4 24618@subsection Services Shepherd
bf5c74e7 24619
adfb167f 24620@cindex services shepherd
bf5c74e7 24621@cindex PID 1
15f1bff4 24622@cindex système d'init
bf5c74e7 24623The @code{(gnu services shepherd)} module provides a way to define services
15f1bff4
JL
24624managed by the GNU@tie{}Shepherd, which is the initialization system---the
24625first process that is started when the system boots, also known as
24626PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
bf5c74e7 24627
15f1bff4
JL
24628Les services dans le Shepherd peuvent dépendre les uns des autres. Par
24629exemple, le démon SSH peut avoir besoin d'être démarré après le démon
24630syslog, qui à son tour doit être démarré après le montage des systèmes de
24631fichiers. Le système d'exploitation simple déclaré précédemment
24632(@pxref{Utiliser le système de configuration}) crée un graphe de service comme
24633ceci :
bf5c74e7 24634
15f1bff4 24635@image{images/shepherd-graph,,5in,Graphe de service typique du shepherd.}
bf5c74e7 24636
15f1bff4
JL
24637Vous pouvez générer un tel graphe pour n'importe quelle définition de
24638système d'exploitation avec la commande @command{guix system shepherd-graph}
bf5c74e7
JL
24639(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
24640
15f1bff4
JL
24641La variable @var{%shepherd-root-service} est un objet de service
24642représentant le PID@tie{}1, de type @var{shepherd-root-service-type} ; il
24643peut être étendu en lui passant des listes d'objets
24644@code{<shepherd-service>}.
bf5c74e7 24645
1d8d69c8 24646@deftp {Type de données} shepherd-service
15f1bff4 24647Le type de données représentant un service géré par le Shepherd.
bf5c74e7
JL
24648
24649@table @asis
24650@item @code{provision}
15f1bff4 24651C'est une liste de symboles dénotant ce que le service fournit.
bf5c74e7 24652
15f1bff4
JL
24653Ce sont les noms qui peuvent être passés à @command{herd start},
24654@command{herd status} et les commandes similaires (@pxref{Invoking herd,,,
bf5c74e7 24655shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
15f1bff4
JL
24656@code{provides} slot,, shepherd, The GNU Shepherd Manual}, pour plus de
24657détails.
bf5c74e7 24658
1d8d69c8 24659@item @code{requirements} (par défaut : @code{'()})
15f1bff4 24660Liste de symboles dénotant les services du Shepherd dont celui-ci dépend.
bf5c74e7 24661
1d8d69c8 24662@item @code{respawn?} (par défaut : @code{#t})
15f1bff4
JL
24663Indique s'il faut redémarrer le service lorsqu'il s'arrête, par exemple si
24664le processus sous-jacent meurt.
bf5c74e7
JL
24665
24666@item @code{start}
1d8d69c8 24667@itemx @code{stop} (par défaut : @code{#~(const #f)})
15f1bff4
JL
24668Les champs @code{start} et @code{stop} se réfèrent à la capacité du Shepherd
24669de démarrer et d'arrêter des processus (@pxref{Service De- and
24670Constructors,,, shepherd, The GNU Shepherd Manual}). Ils sont donnés comme
24671des G-expressions qui sont étendues dans le fichier de configuration du
24672Shepherd (@pxref{G-Expressions}).
bf5c74e7 24673
adfb167f
JL
24674@item @code{actions} (par défaut : @code{'()})
24675@cindex action, des services Shepherd
15f1bff4
JL
24676C'est une liste d'objets @code{shepherd-action} (voir plus bas) définissant
24677des @dfn{actions} supportées par le service, en plus des actions
24678@code{start} et @code{stop} standards. Les actions listées ici sont
24679disponibles en tant que sous-commande de @command{herd}.
524756d1
JL
24680
24681@example
24682herd @var{action} @var{service} [@var{arguments}@dots{}]
24683@end example
24684
bf5c74e7 24685@item @code{documentation}
15f1bff4 24686Une chaîne de documentation, montrée lorsqu'on lance :
bf5c74e7
JL
24687
24688@example
24689herd doc @var{service-name}
24690@end example
24691
15f1bff4 24692où @var{service-name} est l'un des symboles dans @var{provision}
bf5c74e7
JL
24693(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
24694
1d8d69c8 24695@item @code{modules} (par défaut : @var{%default-modules})
15f1bff4
JL
24696C'est la liste des modules qui doivent être dans le contexte lorsque
24697@code{start} et @code{stop} sont évalués.
bf5c74e7
JL
24698
24699@end table
24700@end deftp
24701
adfb167f 24702@deftp {Type de données} shepherd-action
15f1bff4
JL
24703C'est le type de données qui définie des actions supplémentaires
24704implémentées par un service Shepherd (voir au-dessus).
524756d1
JL
24705
24706@table @code
24707@item name
adfb167f 24708Symbole nommant l'action
524756d1
JL
24709
24710@item documentation
15f1bff4
JL
24711C'est une chaîne de documentation pour l'action. Elle peut être consultée
24712avec :
524756d1
JL
24713
24714@example
24715herd doc @var{service} action @var{action}
24716@end example
24717
24718@item procedure
15f1bff4
JL
24719Cela devrait être une gexp qui s'évalue en une procédure à au moins un
24720argument, la « valeur de lancement » du service (@pxref{Slots of services,,,
24721shepherd, The GNU Shepherd Manual}).
524756d1
JL
24722@end table
24723
15f1bff4
JL
24724L'exemple suivant définie une action nommée @code{dire-bonjour} qui salue
24725amicalement l'utilisateur :
524756d1
JL
24726
24727@example
24728(shepherd-action
15f1bff4
JL
24729 (name 'dire-bonjour)
24730 (documentation "Dit salut !")
524756d1 24731 (procedure #~(lambda (running . args)
15f1bff4 24732 (format #t "Salut, l'ami ! arguments : ~s\n"
524756d1
JL
24733 args)
24734 #t)))
24735@end example
24736
15f1bff4
JL
24737En supposant que cette action est ajoutée dans le service @code{example},
24738vous pouvez écrire :
524756d1
JL
24739
24740@example
15f1bff4
JL
24741# herd dire-bonjour example
24742Salut, l'ami ! arguments : ()
24743# herd dire-bonjour example a b c
24744Salut, l'ami ! arguments : ("a" "b" "c")
524756d1
JL
24745@end example
24746
15f1bff4
JL
24747Comme vous pouvez le voir, c'est une manière assez sophistiquée de dire
24748bonjour. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual},
24749pour plus d'informations sur les actions.
524756d1
JL
24750@end deftp
24751
1d8d69c8 24752@defvr {Variable Scheme} shepherd-root-service-type
15f1bff4
JL
24753Le type de service pour le « service racine » du Shepherd — c.-à-d.@: le
24754PID@tie{}1.
bf5c74e7 24755
15f1bff4
JL
24756C'est le type de service que les extensions ciblent lorqu'elles veulent
24757créer un service shepherd (@pxref{Types service et services}, pour un
24758exemple). Chaque extension doit passer une liste de
24759@code{<shepherd-service>}.
bf5c74e7
JL
24760@end defvr
24761
1d8d69c8 24762@defvr {Variable Scheme} %shepherd-root-service
15f1bff4 24763Ce service représente le PID@tie{}1.
bf5c74e7
JL
24764@end defvr
24765
24766
24767@node Documentation
15f1bff4
JL
24768@chapter Documentation
24769
24770@cindex documentation, recherche
24771@cindex chercher de la documentation
24772@cindex Info, format de documentation
24773@cindex man, pages de manuel
24774@cindex pages de manuel
24775Dans la plupart des cas les paquets installés avec Guix ont une
24776documentation. Il y a deux formats de documentation principaux : « Info »,
24777un format hypertexte navigable utilisé par les logiciels GNU et les « pages
24778de manuel » (ou « pages de man »), le format de documentation linéaire
24779traditionnel chez Unix. Les manuels Info sont disponibles via la commande
24780@command{info} ou avec Emacs, et les pages de man sont accessibles via la
24781commande @command{man}.
24782
24783Vous pouvez chercher de la documentation pour les logiciels installés sur
24784votre système par mot-clef. Par exemple, la commande suivante recherche des
24785informations sur « TLS » dans les manuels Info :
bf5c74e7
JL
24786
24787@example
24788$ info -k TLS
24789"(emacs)Network Security" -- STARTTLS
24790"(emacs)Network Security" -- TLS
24791"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
24792"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
24793@dots{}
24794@end example
24795
24796@noindent
15f1bff4 24797La commande suivante recherche le même mot-clef dans les pages de man :
bf5c74e7
JL
24798
24799@example
24800$ man -k TLS
24801SSL (7) - OpenSSL SSL/TLS library
24802certtool (1) - GnuTLS certificate tool
24803@dots {}
24804@end example
24805
15f1bff4
JL
24806Ces recherches sont purement locales à votre ordinateur donc vous savez que
24807la documentation trouvée correspond à ce qui est effectivement installé,
24808vous pouvez y accéder hors ligne et votre vie privée est préservée.
bf5c74e7 24809
15f1bff4
JL
24810Une fois que vous avez ces résultats, vous pouvez visualiser la
24811documentation appropriée avec, disons :
bf5c74e7
JL
24812
24813@example
24814$ info "(gnutls)Core TLS API"
24815@end example
24816
24817@noindent
15f1bff4 24818ou :
bf5c74e7
JL
24819
24820@example
24821$ man certtool
24822@end example
24823
15f1bff4
JL
24824Les manuels Info contiennent des sections et des indexs ainsi que des
24825hyperliens comme ce qu'on trouve sur les pages Web. Le lecteur
24826@command{info} (@pxref{Top, Info reader,, info-stnd, Stand-alone GNU Info})
24827et sa contre-partie dans Emacs (@pxref{Misc Help,,, emacs, The GNU Emacs
24828Manual}) fournissent des raccourcis claviers intuitifs pour naviguer dans
24829les manuels @xref{Getting Started,,, info, Info: An Introduction} pour
24830trouver une introduction sur la navigation dans info.
bf5c74e7
JL
24831
24832@node Installer les fichiers de débogage
15f1bff4 24833@chapter Installer les fichiers de débogage
bf5c74e7 24834
15f1bff4
JL
24835@cindex fichiers de débogage
24836Les binaires des programmes, produits par les compilateurs GCC par exemple,
24837sont typiquement écrits au format ELF, avec une section contenant des
24838@dfn{informations de débogage}. Les informations de débogage sont ce qui
24839permet au débogueur, GDB, de relier le code binaire et le code source ;
24840elles sont requises pour déboguer un programme compilé dans de bonnes
24841conditions.
bf5c74e7
JL
24842
24843Le problème avec les informations de débogage est qu'elles prennent pas mal
24844de place sur le disque. Par exemple, les informations de débogage de la
24845bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
24846garder toutes les informations de débogage de tous les programmes installés
24847n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
24848pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
24849faciliter pour ses utilisateurs l'exercice de leurs libertés
24850(@pxref{Distribution GNU}).
24851
15f1bff4
JL
24852Heureusement, les utilitaires binaires de GNU (Binutils) et GDB fournissent
24853un mécanisme qui permet aux utilisateurs d'avoir le meilleur des deux mondes
24854: les informations de débogage peuvent être nettoyées des binaires et
24855stockées dans des fichiers séparés. GDB peut ensuite charger les
24856informations de débogage depuis ces fichiers, lorsqu'elles sont disponibles
bf5c74e7
JL
24857(@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
24858
15f1bff4
JL
24859La distribution GNU se sert de cela pour stocker les informations de
24860débogage dans le sous-répertoire @code{lib/debug} d'une sortie séparée du
24861paquet appelée sans grande imagination @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Les utilisateurs peuvent choisir d'installer la sortie
24862@code{debug} d'un paquet lorsqu'ils en ont besoin. Par exemple, la commande
24863suivante installe les informations de débogage pour la bibliothèque C de GNU
24864et pour GNU Guile.
bf5c74e7
JL
24865
24866@example
24867guix package -i glibc:debug guile:debug
24868@end example
24869
15f1bff4
JL
24870On doit ensuite dire à GDB de chercher les fichiers de débogage dans le
24871profil de l'utilisateur, en remplissant la variable
24872@code{debug-file-directory} (vous pourriez aussi l'instancier depuis le
24873fichier @file{~/.gdbinit}, @pxref{Startup,,, gdb, Debugging with GDB}) :
bf5c74e7
JL
24874
24875@example
24876(gdb) set debug-file-directory ~/.guix-profile/lib/debug
24877@end example
24878
15f1bff4
JL
24879À partir de maintenant, GDB récupérera les informations de débogage dans les
24880fichiers @code{.debug} de @file{~/.guix-profile/lib/debug}.
bf5c74e7 24881
15f1bff4
JL
24882EN plus, vous voudrez sans doute que GDB puisse montrer le code source
24883débogué. Pour cela, vous devrez désarchiver le code source du paquet qui
24884vous intéresse (obtenu via @code{guix build --source}, @pxref{Invoquer guix build}) et pointer GDB vers ce répertoire des sources avec la commande
24885@code{directory} (@pxref{Source Path, @code{directory},, gdb, Debugging with
24886GDB}).
bf5c74e7
JL
24887
24888@c XXX: keep me up-to-date
15f1bff4
JL
24889Le mécanisme de la sortie @code{debug} dans Guix est implémenté par le
24890@code{gnu-build-system} (@pxref{Systèmes de construction}). Actuellement, ce n'est pas
24891obligatoire — les informations de débogage sont disponibles uniquement si
24892les définitions déclarent explicitement une sortie @code{debug}. Cela
24893pourrait être modifié tout en permettant aux paquets de s'en passer dans le
24894futur si nos serveurs de construction peuvent tenir la charge. Pour
24895vérifier si un paquet a une sortie @code{debug}, utilisez @command{guix
24896package --list-available} (@pxref{Invoquer guix package}).
bf5c74e7
JL
24897
24898
24899@node Mises à jour de sécurité
15f1bff4 24900@chapter Mises à jour de sécurité
bf5c74e7 24901
15f1bff4 24902@cindex mises à jour de sécurité
524756d1 24903@cindex vulnérabilités
15f1bff4
JL
24904Parfois, des vulnérabilités importantes sont découvertes dans les paquets
24905logiciels et doivent être corrigées. Les développeurs de Guix essayent de
24906suivre les vulnérabilités connues et d'appliquer des correctifs aussi vite
24907que possible dans la branche @code{master} de Guix (nous n'avons pas encore
24908de branche « stable » contenant seulement des mises à jour de sécurité).
24909L'outil @command{guix lint} aide les développeurs à trouver les versions
24910vulnérables des paquets logiciels dans la distribution.
bf5c74e7
JL
24911
24912@smallexample
24913$ guix lint -c cve
15f1bff4
JL
24914gnu/packages/base.scm:652:2: glibc@@2.21: probablement vulnérable à CVE-2015-1781, CVE-2015-7547
24915gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probablement vulnérable à CVE-2015-5276
24916gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probablement vulnérable à CVE-2016-1923, CVE-2016-1924
bf5c74e7
JL
24917@dots{}
24918@end smallexample
24919
15f1bff4 24920@xref{Invoquer guix lint}, pour plus d'informations.
bf5c74e7 24921
3cacfa9e 24922@quotation Remarque
15f1bff4
JL
24923À la version @value{VERSION}, la fonctionnalité ci-dessous est considérée
24924comme « bêta ».
bf5c74e7
JL
24925@end quotation
24926
24927Guix suit une discipline de gestion de paquets fonctionnelle
24928(@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
24929@emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
24930peut grandement ralentir le déploiement de corrections dans les paquets du
24931cœur comme libc ou bash comme presque toute la distribution aurait besoin
24932d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
24933(@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
24934temps de souhaité.
24935
1d8d69c8 24936@cindex greffes
15f1bff4
JL
24937Pour corriger cela, Guix implémente les @dfn{greffes}, un mécanisme qui
24938permet un déploiement rapide des mises à jour de sécurité critiques sans le
24939coût associé à une reconstruction complète de la distribution. L'idée est
24940de reconstruire uniquement le paquet qui doit être corrigé puis de le «
24941greffer » sur les paquets qui sont explicitement installés par l'utilisateur
24942et qui se référaient avant au paquet d'origine. Le coût d'une greffe est
24943typiquement très bas, et plusieurs ordres de grandeurs moins élevé que de
24944reconstruire tout la chaîne de dépendance.
24945
24946@cindex remplacement de paquet, pour les greffes
24947Par exemple, supposons qu'une mise à jour de sécurité doive être appliquée à
24948Bash. Les développeurs de Guix fourniront une définition de paquet pour le
24949Bash « corrigé », disons @var{bash-fixed}, de la manière habituelle
24950(@pxref{Définition des paquets}). Ensuite, la définition originale du paquet est
24951augmentée avec un champ @code{replacement} qui pointe vers le paquet
24952contenant le correctif de sécurité :
bf5c74e7
JL
24953
24954@example
24955(define bash
24956 (package
24957 (name "bash")
24958 ;; @dots{}
24959 (replacement bash-fixed)))
24960@end example
24961
15f1bff4
JL
24962À partir de maintenant, tout paquet dépendant directement ou indirectement
24963de Bash — rapporté par @command{guix gc --requisites} (@pxref{Invoquer guix gc}) — installé est automatiquement « réécrit » pour se référer à
24964@var{bash-fixed} au lieu de @var{bash}. Ce processus de greffe prend du
24965temps en proportion de la taille du paquet, typiquement moins d'une minute
24966pour un paquet de taille « moyenne » sur une machine récente. La greffe est
24967récursive : lorsqu'une dépendance indirecte a besoin d'être greffée, la
24968greffe se « propage » jusqu'au paquet que l'utilisateur installe.
bf5c74e7 24969
15f1bff4
JL
24970Actuellement la longueur du nom et la version de la greffe et du paquet
24971qu'il remplace (@var{bash-fixed} et @var{bash} dans l'exemple ci-dessus)
24972doivent être identiques. Cette restriction vient surtout du fait que la
24973greffe fonctionne en corrigeant les fichiers, dont des fichiers binaires,
24974directement. D'autres restrictions peuvent apparaître : par exemple, si
24975vous ajoutez une greffe à un paquet fournissant une bibliothèque partagée,
24976la bibliothèque partagée originale et son remplacement doivent avoir le même
24977@code{SONAME} et être compatibles au niveau binaire.
bf5c74e7 24978
15f1bff4
JL
24979L'option en ligne de commande @option{--no-grafts} vous permet d'éviter les
24980greffes (@pxref{Options de construction communes, @option{--no-grafts}}). Donc la
24981commande :
bf5c74e7
JL
24982
24983@example
24984guix build bash --no-grafts
24985@end example
24986
24987@noindent
15f1bff4 24988renvoie le nom de fichier dans les dépôt du Bash original, alors que :
bf5c74e7
JL
24989
24990@example
24991guix build bash
24992@end example
24993
24994@noindent
15f1bff4
JL
24995renvoie le nom de fichier du Bash « corrigé » de remplacement. Cela vous
24996permet de distinguer les deux variantes de Bash.
bf5c74e7 24997
15f1bff4
JL
24998Pour vérifier à quel Bash votre profil se réfère, vous pouvez lancer
24999(@pxref{Invoquer guix gc}) :
bf5c74e7
JL
25000
25001@example
25002guix gc -R `readlink -f ~/.guix-profile` | grep bash
25003@end example
25004
25005@noindent
25006@dots{} and compare the store file names that you get with those above.
15f1bff4 25007Likewise for a complete Guix system generation:
bf5c74e7
JL
25008
25009@example
25010guix gc -R `guix system build my-config.scm` | grep bash
25011@end example
25012
15f1bff4
JL
25013Enfin, pour vérifier quelles processus Bash lancés vous utilisez, vous
25014pouvez utiliser la commande @command{lsof} :
bf5c74e7
JL
25015
25016@example
25017lsof | grep /gnu/store/.*bash
25018@end example
25019
25020
bf5c74e7 25021@node Bootstrapping
15f1bff4 25022@chapter Bootstrapping
bf5c74e7
JL
25023
25024@c Adapted from the ELS 2013 paper.
25025
15f1bff4
JL
25026@cindex bootstrap
25027
25028Dans notre contexte, le bootstrap se réfère à la manière dont la
25029distribution est construite « à partir de rien ». Rappelez-vous que
25030l'environnement de construction d'une dérivation ne contient rien d'autre
25031que les entrées déclarées (@pxref{Introduction}). Donc il y a un problème
25032évident de poule et d'œuf : comment le premier paquet est-il construit ?
25033Comment le premier compilateur est-il construit ? Remarquez que c'est une
25034question qui intéressera uniquement le hacker curieux, pas l'utilisateur
25035normal, donc vous pouvez sauter cette section sans avoir honte si vous vous
25036considérez comme un « utilisateur normal ».
25037
25038@cindex binaires de bootstrap
25039Le système GNU est surtout fait de code C, avec la libc en son cœur. Le
25040système de construction GNU lui-même suppose la disponibilité d'un shell
25041Bourne et d'outils en ligne de commande fournis par GNU Coreutils, Awk,
25042Findutils, sed et grep. En plus, les programmes de construction — les
25043programmes qui exécutent @code{./configure}, @code{make} etc — sont écrits
25044en Guile Scheme (@pxref{Dérivations}). En conséquence, pour pouvoir
25045construire quoi que ce soit, de zéro, Guix a besoin de binaire
25046pré-construits de Guile, GCC, Binutils, la libc et des autres paquets
25047mentionnés plus haut — les @dfn{binaires de bootstrap}.
25048
25049Ces binaires de bootstrap sont pris comme des acquis, bien qu'on puisse les
25050recréer (ça arrive plus tard).
25051
25052@unnumberedsec Se préparer à utiliser les binaires de bootstrap
bf5c74e7
JL
25053
25054@c As of Emacs 24.3, Info-mode displays the image, but since it's a
25055@c large image, it's hard to scroll. Oh well.
15f1bff4
JL
25056@image{images/bootstrap-graph,6in,,Graphe de dépendance des premières
25057dérivations de bootstrap}
bf5c74e7 25058
15f1bff4
JL
25059La figure ci-dessus montre le tout début du graphe de dépendances de la
25060distribution, correspondant aux définitions des paquets du module @code{(gnu
25061packages bootstrap)}. Une figure similaire peut être générée avec
25062@command{guix graph} (@pxref{Invoquer guix graph}), de cette manière :
bf5c74e7
JL
25063
25064@example
25065guix graph -t derivation \
25066 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
25067 | dot -Tps > t.ps
25068@end example
25069
15f1bff4
JL
25070À ce niveau de détails, les choses sont légèrement complexes. Tout d'abord,
25071Guile lui-même consiste en an exécutable ELF, avec plusieurs fichiers Scheme
25072sources et compilés qui sont chargés dynamiquement quand il est exécuté.
25073Cela est stocké dans l'archive @file{guile-2.0.7.tar.xz} montrée dans ce
25074graphe. Cette archive fait parti de la distribution « source » de Guix, et
25075est insérée dans le dépôt avec @code{add-to-store} (@pxref{Le dépôt}).
25076
25077Mais comment écrire une dérivation qui décompresse cette archive et l'ajoute
25078au dépôt ? Pour résoudre ce problème, la dérivation
25079@code{guile-bootstrap-2.0.drv} — la première qui est construite — utilise
25080@code{bash} comme constructeur, qui lance @code{build-bootstrap-guile.sh},
25081qui à son tour appelle @code{tar} pour décompresser l'archive. Ainsi,
25082@file{bash}, @file{tar}, @file{xz} et @file{mkdir} sont des binaires liés
25083statiquement, qui font aussi partie de la distribution source de Guix, dont
25084le seul but est de permettre à l'archive de Guile d'être décompressée.
25085
25086Une fois que @code{guile-bootstrap-2.0.drv} est construit, nous avons un
25087Guile fonctionnel qui peut être utilisé pour exécuter les programmes de
25088construction suivants. Sa première tâche consiste à télécharger les
25089archives contenant les autres binaires pré-construits — c'est ce que la
25090dérivation @code{.tar.xz.drv} fait. Les modules Guix comme
25091@code{ftp-client.scm} sont utilisés pour cela. Les dérivations
25092@code{module-import.drv} importent ces modules dans un répertoire dans le
25093dépôt, en utilisant la disposition d'origine. Les dérivations
25094@code{module-import-compiled.drv} compilent ces modules, et les écrivent
25095dans un répertoire de sortie avec le bon agencement. Cela correspond à
25096l'argument @code{#:modules} de @code{build-expression->derivation}
25097(@pxref{Dérivations}).
25098
25099Enfin, les diverses archives sont décompressées par les dérivations
25100@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc, à partir de
25101quoi nous avons une chaîne de compilation C fonctionnelle.
25102
25103
25104@unnumberedsec Construire les outils de construction
25105
25106Le bootstrap est complet lorsque nous avons une chaîne d'outils complète qui
25107ne dépend pas des outils de bootstrap pré-construits dont on vient de
25108parler. Ce pré-requis d'indépendance est vérifié en s'assurant que les
25109fichiers de la chaîne d'outil finale ne contiennent pas de référence vers
25110les répertoires @file{/gnu/store} des entrées de bootstrap. Le processus
25111qui mène à cette chaîne d'outils « finale » est décrit par les définitions
25112de paquets qui se trouvent dans le module @code{(gnu packages
25113commencement)}.
25114
25115La commande @command{guix graph} nous permet de « dézoomer » comparé au
25116graphe précédent, en regardant au niveau des objets de paquets plutôt que
25117des dérivations individuelles — rappelez-vous qu'un paquet peut se traduire
25118en plusieurs dérivations, typiquement une dérivation pour télécharger ses
25119sources, une pour les modules Guile dont il a besoin et une pour
25120effectivement compiler le paquet depuis les sources. La commande :
bf5c74e7
JL
25121
25122@example
25123guix graph -t bag \
25124 -e '(@@@@ (gnu packages commencement)
25125 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
25126@end example
25127
25128@noindent
15f1bff4
JL
25129produit le graphe de dépendances qui mène à la bibliothèque C « finale
25130»@footnote{Vous remarquerez qu'elle s'appelle @code{glibc-intermediate}, ce
25131qui suggère qu'elle n'est pas @emph{tout à fait} finale, mais c'est une
25132bonne approximation tout de même.}, que voici :
bf5c74e7 25133
1d8d69c8
JL
25134@image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
25135paquets}
bf5c74e7
JL
25136
25137@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
15f1bff4
JL
25138Le premier outil construit avec les binaires de bootstrap est GNU@tie{}Make
25139— appelé @code{make-boot0} ci-dessus — qui est un prérequis de tous les
25140paquets suivants . Ensuite, Findutils et Diffutils sont construits.
bf5c74e7 25141
15f1bff4
JL
25142Ensuite vient la première passe de Binutils et GCC, construits comme des
25143pseudo outils croisés — c.-à-d.@: dont @code{--target} égal à
25144@code{--host}. Ils sont utilisés pour construire la libc. Grâce à cette
25145astuce de compilation croisée, la libc est garantie de ne contenir aucune
25146référence à la chaîne d'outils initiale.
bf5c74e7 25147
15f1bff4
JL
25148À partir de là, les Bintulis et GCC finaux (pas visibles ci-dessus) sont
25149construits. GCC utilise @code{ld} du Binutils final et lie les programme
25150avec la libc qui vient d'être construite. Cette chaîne d'outils est
25151utilisée pour construire les autres paquets utilisés par Guix et par le
25152système de construction de GNU : Guile, Bash, Coreutils, etc.
bf5c74e7 25153
15f1bff4
JL
25154Et voilà ! À partir de là nous avons l'ensemble complet des outils auxquels
25155s'attend le système de construction GNU. Ils sont dans la variable
25156@code{%final-inputs} du module @code{(gnu packages commencement)} et sont
25157implicitement utilisés par tous les paquets qui utilisent le
25158@code{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
bf5c74e7
JL
25159
25160
15f1bff4 25161@unnumberedsec Construire les binaires de bootstrap
bf5c74e7 25162
15f1bff4
JL
25163@cindex binaires de bootstrap
25164Comme la chaîne d'outils finale ne dépend pas des binaires de bootstrap, ils
25165ont rarement besoin d'être mis à jour. Cependant, il est utile d'avoir une
25166manière de faire cela automatiquement, dans le cas d'une mise à jour et
25167c'est ce que le module @code{(gnu packages make-bootstrap)} fournit.
bf5c74e7 25168
15f1bff4
JL
25169La commande suivante construit les archives contenant les binaires de
25170bootstrap (Guile, Binutils, GCC, la libc et une archive contenant un mélange
25171de Coreutils et d'autres outils en ligne de commande de base) :
bf5c74e7
JL
25172
25173@example
25174guix build bootstrap-tarballs
25175@end example
25176
15f1bff4
JL
25177Les archives générées sont celles qui devraient être référencées dans le
25178module @code{(gnu packages bootstrap)} au début de cette section.
bf5c74e7 25179
15f1bff4
JL
25180Vous êtes toujours là ? Alors peut-être que maintenant vous vous demandez,
25181quand est-ce qu'on atteint un point fixe ? C'est une question intéressante
25182! La réponse est inconnue, mais si vous voulez enquêter plus profondément
25183(et que vous avez les ressources en puissance de calcul et en capacité de
25184stockage pour cela), dites-le nous.
bf5c74e7 25185
15f1bff4 25186@unnumberedsec Réduire l'ensemble des binaires de bootstrap
bf5c74e7 25187
15f1bff4
JL
25188Nous binaires de bootstrap incluent actuellement GCC, Guile, etc. C'est
25189beaucoup de code binaire ! Pourquoi est-ce un problème ? C'est un problème
25190parce que ces gros morceaux de code binaire sont en pratique impossibles à
25191auditer, ce qui fait qu'il est difficile d'établir quel code source les a
25192produit. Chaque binaire non auditable nous rend aussi vulnérable à des
25193portes dérobées dans les compilateurs comme le décrit Ken Thompson dans le
25194papier de 1984 @emph{Reflections on Trusting Trust}.
bf5c74e7 25195
15f1bff4
JL
25196Cela est rendu moins inquiétant par le fait que les binaires de bootstrap
25197ont été générés par une révision antérieure de Guix. Cependant, il leur
25198manque le niveau de transparence que l'on obtient avec le reste des paquets
25199du graphe de dépendance, où Guix nous donne toujours une correspondance
25200source-binaire. Ainsi, notre but est de réduire l'ensemble des binaires de
25201bootstrap au minimum.
bf5c74e7 25202
15f1bff4
JL
25203Le @uref{http://bootstrappable.org, site web Bootstrappable.org} liste les
25204projets en cours à ce sujet. L'un d'entre eux parle de remplacer le GCC de
25205bootstrap par une série d'assembleurs, d'interpréteurs et de compilateurs
25206d'une complexité croissante, qui pourraient être construits à partir des
25207sources à partir d'un assembleur simple et auditable. Votre aide est la
25208bienvenue !
bf5c74e7
JL
25209
25210
25211@node Porter
15f1bff4 25212@chapter Porter vers une nouvelle plateforme
bf5c74e7 25213
15f1bff4
JL
25214Comme nous en avons discuté plus haut, la distribution GNU est
25215auto-contenue, et cela est possible en se basant sur des « binaires de
25216bootstrap » pré-construits (@pxref{Bootstrapping}). Ces binaires sont
25217spécifiques au noyau de système d'exploitation, à l'architecture CPU et à
25218l'interface applicative binaire (ABI). Ainsi, pour porter la distribution
25219sur une plateforme qui n'est pas encore supportée, on doit construire ces
25220binaires de bootstrap et mettre à jour le module @code{(gnu packages
25221bootstrap)} pour les utiliser sur cette plateforme.
bf5c74e7 25222
15f1bff4
JL
25223Heureusement, Guix peut effectuer une @emph{compilation croisée} de ces
25224binaires de bootstrap. Lorsque tout va bien, et en supposant que la chaîne
25225d'outils GNU supporte la plateforme cible, cela peut être aussi simple que
25226de lancer une commande comme ceci :
bf5c74e7
JL
25227
25228@example
25229guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
25230@end example
25231
15f1bff4
JL
25232Pour que cela fonctione, la procédure @code{glibc-dynamic-linker} dans
25233@code{(gnu packages bootstrap)} doit être augmentée pour renvoyer le bon nom
25234de fichier pour l'éditeur de lien dynamique de la libc sur cette plateforme
25235; de même, il faut indiquer cette nouvelle platefore à
25236@code{system->linux-architecture} dans @code{(gnu packages linux)}.
25237
25238Une fois qu'ils sont construits, le module @code{(gnu packages bootstrap)}
25239doit être mis à jour pour se référer à ces binaires sur la plateforme
25240cible. C'est à dire que les hashs et les URL des archives de bootstrap pour
25241la nouvelle plateforme doivent être ajoutés avec ceux des plateformes
25242actuellement supportées. L'archive de bootstrap de Guile est traitée
25243séparément : elle doit être disponible localement, et @file{gnu/local.mk} a
25244une règle pour la télécharger pour les architectures supportées ; vous devez
25245également ajouter une règle pour la nouvelle plateforme.
25246
25247En pratique, il peut y avoir des complications. Déjà, il se peut que le
25248triplet GNU étendu qui spécifie l'ABI (comme le suffixe @code{eabi}
25249ci-dessus) ne soit pas reconnu par tous les outils GNU. Typiquement, la
25250glibc en reconnais certains, alors que GCC utilise un drapeau de configure
25251@code{--with-abi} supplémentaire (voir @code{gcc.scm} pour trouver des
25252exemples où ce cas est géré). Ensuite, certains des paquets requis
25253pourraient échouer à se construire pour cette plateforme. Enfin, les
25254binaires générés pourraient être cassé pour une raison ou une autre.
bf5c74e7
JL
25255
25256@c *********************************************************************
25257@include contributing.fr.texi
25258
25259@c *********************************************************************
25260@node Remerciements
25261@chapter Remerciements
25262
3cacfa9e 25263Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
15f1bff4 25264Nix} conçu et implémenté par Eelco Dolstra, avec des contributions d'autres
3cacfa9e
LC
25265personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
25266gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
25267comme les mises à jour de paquets transactionnelles et les retours en
25268arrière, les profils par utilisateurs et les processus de constructions
25269transparents pour les références. Sans ce travail, Guix n'existerait pas.
25270
25271Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
25272été une inspiration pour Guix.
25273
25274GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
25275grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
25276plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
25277liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
25278de l'infrastructure, en fournissant des images et des thèmes, en faisant des
25279suggestions et bien plus. Merci !
bf5c74e7
JL
25280
25281
25282@c *********************************************************************
25283@node La licence GNU Free Documentation
25284@appendix La licence GNU Free Documentation
25285@cindex license, GNU Free Documentation License
25286@include fdl-1.3.texi
25287
25288@c *********************************************************************
25289@node Index des concepts
25290@unnumbered Index des concepts
25291@printindex cp
25292
25293@node Index de programmation
25294@unnumbered Index de programmation
25295@syncodeindex tp fn
25296@syncodeindex vr fn
25297@printindex fn
25298
25299@bye
25300
25301@c Local Variables:
25302@c ispell-local-dictionary: "american";
25303@c End: